$7.49 .com domain with free InstantPage Website Builder$1.99 Web Hosting   捷飞网络官方淘宝店   Godaddy 优惠码
返回列表 发帖
分享到:




[共享] 分享Linux(Redhat/centos)下配置sendmail 和 smtp

一: 本文目的
# \- T. Q3 i  @$ A利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,以允许外面的用户以用户名和密码认证来relay邮件。
3 F$ |  h3 s: n: V7 Z! |0 W二: 网络系统
: g0 e$ k/ [0 U4 \" L* Q
5 Z* b" ^* @' T- R, N公司域名 : domain.com
' y' I; F8 O' i6 R用来认证的SMTP服务器全称域名: smtp.domain.com; g+ ^+ o$ a0 z- n/ S
三: 为什么要这样用?
: G1 {& k* p4 p7 E5 S( Q$ _假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构,公司有统一的域名domain.com,4 a4 h; I/ p- L1 L6 ^) g
所有员工的邮件地址类似如staffname@domain.com。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。$ s2 b" \- G; X' y, b
还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,则也同样需要一种认证方案去允许正确的用户relay邮件。
6 ]) R/ J# i4 n- t2 T0 y2 }现在我们考虑做公司自己内部的邮件relay系统。
- b  @* c5 }0 e# @6 ]就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统’方式安装所有需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay自己公司的员工的邮件。1 n+ M- y3 J( Q% I
四: 配置Sendmail
% C; |( Q$ @) y2 v1. 选择‘服务器系统’安装Redhat 7.1: W; e! s1 y- D3 C* o9 y* t
2. 进入目录 /usr/share/sendmail-cf/cf 。# @& S/ d6 S: f2 S1 Z7 [
如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。5 e# A* P% B' I( G+ b8 F
3. 修改文件redhat.mc如下& t4 l5 X+ j% u+ |0 t
divert(-1); n6 D1 U' `- B$ m# L* f6 i; ^
dnl This is the sendmail macro config file. If you make changes to this file,
' `6 U/ ]! [0 e( I9 ddnl you need the sendmail-cf rpm installed and then have to generate a
: P9 S& y3 t7 r1 G8 m5 cdnl new /etc/sendmail.cf by running the following command:9 J& Z+ `5 F+ x% I9 E
dnl; S0 [& C. v) N
dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
. N) b# s2 G) w3 @0 {$ l) r8 Fdnl8 W7 R% R' x! y1 g9 ], o; I9 c" t1 G
include(`../m4/cf.m4')
- J5 P  S+ O* ?5 S7 QVERSIONID(`linux setup for Red Hat Linux')dnl1 V9 \! G) s% F7 k6 w& r  B% @
OSTYPE(`linux')7 \5 R+ X- A4 b
define(`confDEF_USER_ID',``8:12'')dnl: F; M( c2 l, u2 C, a. w+ ]
undefine(`UUCP_RELAY')dnl
6 w. T" T$ H4 D: N; l4 Y1 T0 Oundefine(`BITNET_RELAY')dnl
+ A1 }& s4 V6 U" f2 j7 a4 l6 ^/ gdefine(`confAUTO_REBUILD')dnl" G4 }+ q: n8 A: K4 J
define(`confTO_CONNECT', `1m')dnl, I0 Z2 R+ @" E9 ?
define(`confTRY_NULL_MX_LIST',true)dnl; f& r$ J4 K+ m1 {& K* e  _" [; M
define(`confDONT_PROBE_INTERFACES',true)dnl: |" M- M9 I* j( ^& i* {
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
) p5 g( ]% C# M' O* I/ j$ `- {$ u1 ldefine(`ALIAS_FILE', `/etc/aliases')dnl( J9 F7 v. V  i
define(`STATUS_FILE', `/var/log/sendmail.st')dnl
2 v# c* X$ z% E: U3 |define(`UUCP_MAILER_MAX', `2000000')dnl  d, m  M0 I: P3 w! b
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
* [" N6 d8 f# D5 C5 |, Odefine(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
/ Z" c* s, u/ _6 Ldefine(`confAUTH_OPTIONS', `A')dnl: N7 ?- \2 \+ N$ s+ M
define(QUEUE_DIR,`/var/spool/mqueue/q*'), C: M/ U9 P/ s  |; _: s6 J1 j
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl- b" K5 w; q0 p+ n4 ]6 N
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
- N8 {7 S/ E8 K4 D8 C' Y3 {DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
' l% g* |! v8 @  fDAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
7 ^8 e, S5 o% U/ K2 ~( v9 B  adnl define(`confTO_QUEUEWARN', `4h')dnl
7 H6 O. `; r( i' ]5 Ndnl define(`confTO_QUEUERETURN', `5d')dnl
4 A  Q) U& C7 e" T. f$ i3 ?dnl define(`confQUEUE_LA', `12')dnl
! C  s$ Z; F% v: odnl define(`confREFUSE_LA', `18')dnl
( H% k/ v( N0 P2 Adnl FEATURE(delay_checks)dnl9 X: \  K+ ~* c7 h( [2 ^' u) f. j
FEATURE(`no_default_msa',`dnl')dnl
, {' B) \# D7 ]+ |7 ]9 e4 U& HFEATURE(`smrsh',`/usr/sbin/smrsh')dnl6 r8 B8 @0 z& s5 ?
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl- Z: b# |3 ^; G
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
  M7 i; n, x! Z6 M3 SFEATURE(redirect)dnl5 A4 [  k! C$ v
FEATURE(always_add_domain)dnl0 z! T8 R% O" p2 ]' `
FEATURE(use_cw_file)dnl
+ y2 S, \7 u8 r$ v9 pFEATURE(use_ct_file)dnl  Z5 M. z6 p, W
FEATURE(local_procmail)dnl
2 W  j) L1 h/ W% vFEATURE(`access_db')dnl- M- }! ?1 R3 k3 g' ]
FEATURE(`blacklist_recipients')dnl
; a) ?3 B. }# J5 Z8 u1 Z" ]EXPOSED_USER(`root')dnl
; U% Y( n& s* G4 Wdnl This changes sendmail to only listen on the loopback device 127.0.0.1- ?8 G7 A; a' W' x$ a
dnl and not on any other network devices. Comment this out if you want
# {, r0 k" W. }* c1 Q# adnl to accept email over the network.. L& N) R8 W! q( o6 B/ A
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
& S2 M3 H$ Y+ ?/ s0 Zdnl We strongly recommend to comment this one out if you want to protect
  U% U4 |" a% ~7 W1 b4 @dnl yourself from spam. However, the laptop and users on computers that do  @- M5 N( b& W
dnl not have 24x7 DNS do need this.
# x8 s7 X. Z- k" [dnl FEATURE(`accept_unresolvable_domains')dnl
; m3 k. M3 u, a" ]" ydnl FEATURE(`relay_based_on_MX')dnl
! t! ]' ?/ g4 m; X4 z8 DMAILER(smtp)dnl
' P- v4 F! T2 i1 j+ `MAILER(procmail)dnl, B1 r  P. W7 K& p" k
其中,我加了下面的行:
4 {, \& I/ H( v  h1. define(QUEUE_DIR,`/var/spool/mqueue/q*')
" z9 W/ y, w+ b6 T# R7 d, M2 \2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
7 E  P4 E) u, t$ ?. ^' i3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl" K" w0 U) x2 |8 O
4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
1 o; v' O8 J6 U5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
& g6 {2 g5 p! @/ M注:
6 w" ^, o) A: i! Z6 ~第1行我启动了多个邮件队列,希望得到更好的队列处理和性能改进。& f" S9 o  F1 ^3 n. E$ ?
第2,3行 移走前面的注释,打开相应的各种认证机制。
; N: @' X6 i3 ~9 Y- J第4,5行 设置相应的MTA和MSA所在的端口号。! T* m! D- Q0 |: N
且注释出了1 n, G7 _4 @/ E8 k
1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
2 ]: j/ `6 ~+ c0 ]8 A" q7 l2. dnl FEATURE(`accept_unresolvable_domains')dnl
1 m( {* S0 f5 v, _) c, f4 y第1行 允许通过网络连接Sendmail。
8 N' r& r; h( g第2行 禁止不可解析的域名relay邮件
' ^7 I6 h2 f; q0 f/ ?5 N: A5 s最后运行6 R, Z! k$ q: x" D% p
#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf; |8 O, i9 A! b$ h: X
写到/etc/sendmail.cf文件中
; X7 U7 E* K4 Y" T. s既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如
: W& Z$ @2 _" z1 e#cd /var/spool/mqueue. {* C/ ]" y# ]& A
#mkdir q1 q2 q3 q4 q5 q6  H. Q( `% s; u& Z5 u
这样Sendmail将会使用这六个目录做为队列目录,增加了性能。6 l3 G9 N6 u! L: n" y; S+ P
五: 设置SASL认证方案
9 Q; D4 l6 R# H1. 运行下面的命令,确保SASL被编译进Sendmail.( f' }0 e. R0 P+ h
#/usr/sbin/sendmail -d0.1 -bv root |grep SASL
9 [# b1 T; m  ^' v7 O. }5 Q$ P4 X输出应该类似如下面:
% S- E% b' Y$ e# g/ hNETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG5 r9 z' E6 c& {. y4 E6 ^5 I8 s
确保你能看见上面的文本中的 SASL
; n8 K1 E% G3 e% j8 u# \+ O& c- X5 x2. 测试端口25,确保输出AUTH提示行。
  k( @  N- C3 t) i' ?) [7 R6 H#telnet localhost 25
- w$ F6 m8 z" h) ?1 OTrying 127.0.0.1...& Z+ W# s: y/ b
Connected to smtp.domain.com.* M1 q7 g0 A1 A5 @2 [' g: L
Escape character is '^]'.
/ z6 |, P$ T9 _! c0 }0 ]220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -0800% g* L" e8 z! T. R/ S+ l
EHLO localhost
  T8 @" c! U' J6 ^6 C250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you8 h* U, d$ A. E! M
250-ENHANCEDSTATUSCODES
$ @, U" _" o% }) S+ C5 }! C8 \% |250-EXPN+ ~4 n' ^. |9 `. \* g! C* P
250-VERB7 R! x/ x- S  z$ J1 @' s
250-8BITMIME
5 s  z' s9 e$ j- o1 C( W* r250-SIZE
3 j. q$ ]  r7 u3 S" l2 x+ Q250-DSN* q& O, U! o0 c  P
250-ONEX5 C! ^3 z4 H% j0 G  o0 p
250-ETRN
3 H5 c4 x% M$ C' R250-XUSR
; M+ w3 J$ `8 {  K0 d2 j0 U' N$ |250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5+ w/ J7 D/ y( r0 e6 N' z
250 HELP
$ D2 K$ F1 M6 G2 R6 Y( e) Bquit. r: I6 L6 p  R( h9 ^; v; e, M
221 2.0.0 smtp.domain.com closing connection
) i% [& p, _) i/ G8 w; k. K: C- PConnection closed by foreign host.  _7 m0 f( U# f- O
你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。0 t4 ^7 d$ A6 K$ i
3. 增加SASL用户且更改密码' i3 \3 |) F. l; V' X
#/usr/sbin/saslpasswd jephe
3 E4 L8 c, n- d6 x% e9 EPassword: *******
- X& a% d2 D, M9 i/ \8 K) t) gAgain (for verification): *******; m1 Y$ e1 r$ }. p
#/usr/sbin/sasldblistusers
6 r6 B0 `/ `5 M9 N2 S4 Z' Cuser: jephe realm: smtp.domain.com mech: DIGEST-MD5
3 x5 i3 b2 z. O# a; Xuser: jephe realm: smtp.domain.com mech: PLAIN8 O1 u% L+ V1 g9 G! |' B
user: jephe realm: smtp.domain.com mech: CRAM-MD5  a6 c! H' W+ x
用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。
' V" u3 s% _" Q特别注意: 在下面的windows的Outlook Express中设置用户名和密码时并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,在这里是 jephe@smtp.domain.com作为用户名。: _+ _: B8 o5 ^
#chmod 400 /etc/sasldb9 g3 @2 N! `/ n& j, `
可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。
6 J' V7 x: g7 B3 n4. 更改默认的Redhat 7.1密码认证方法2 l. E8 ^6 o- B0 J8 q
默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了3 _- e( ^5 Y" ~! d
增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。2 u7 }- g6 I' f, P, V
#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面
1 Y& o+ M5 s/ P1 ?9 f1 [pwcheck_method:sasldb4 T% P. r% E+ Z3 A& n( H1 o
5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。+ q! G; Z2 h( |
六: 设置Windows的Outlook Express。
2 d/ {2 e% Z0 O. B8 G3 y) N1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中的AUTH行) r$ W; `6 b! s: E, f; N
输出PLAIN LOGIN即可。
: G8 r" d' j9 M4 E( h8 I1 [+ {2 v. |2. 在‘工具’-‘帐号’-‘属性’-‘服务器‘-
1 K7 G$ c( h% u’发送邮件服务器’中选中‘我的服务器需要认证’
& ?, j( P( X6 j' \( Q6 A+ s4 _- h然后在‘登录用户帐号’上填上5 Q3 i" m  y1 |
“你的用户名@你的realm冒号后面的服务器全称域名”1 w% W/ J3 b- N; ?; o1 N0 F
如:本文的情况是 jephe@smtp.domain.com" Q5 x1 O4 C' Y6 F8 d9 ?
密码为你在前面输入的密码。
" c3 o9 K3 I: Z. z注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。
) v  L% z! y* ?. y3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误; V, ~9 Q; Z$ ?( g5 Z, M  f
然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)在后面表示是通过允许的认证机制relay的邮件。
9 D! T( v+ l8 V% e: B7 F3 A七: FAQ。0 W. |9 c& v: u/ i4 `4 k, P- u/ T
1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。
9 r1 v4 y6 D& G答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。  W/ y! X( W* Q
2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。8 T+ p, \1 H- T% J: K7 y1 y1 y( T
答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为4 H1 R" J- y6 O
pwcheck_method:pam* E: w7 F) @- [! J  u- e; j: Q3 _% q
则你就简单地用useradd增加一个系统用户并更改密码即可。& M" ?8 p) h( b) ?' Q' G
然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。
* O9 K7 S; Z: r+ `4 a) w  r5 T3 u9 M验证pop3/ j' j) [( t6 j3 Q4 w' |) A/ K1 e/ ]
reahat 6.2 ----〉
! [- i8 S5 L& x7 ^1。/etc/inetd.conf0 Z# H( l1 I# E5 w& F
# pop3 stream tcp mowait0 I- ?: V, B* |/ m* Q: l* L: P2 O8 s
root /usr/sbin /tcpd/usr/sbin/in.popsd  (#去掉)+ m# a% _9 W, R* V/ |
2,存盘。/运行inetd5 b* T9 W/ i- O0 e, D) ]
3y验证:netstat -a |grep pop
( z4 n# e5 @3 ^) A( ?) W8 N( }" N) a) c4 E
输出 ------tcp 0 0 * : pop3 *:* listen/ g; a! C' I. p+ R$ v
ok了!
/ Z6 ~: E$ S8 l  a& |/ ?redhat 7.1以上:) r/ s1 R1 g% D6 s: {; b
1、vi  etc/services# V) B3 g- N; b
# pop3 110/tcp3 _% _8 i/ y2 U1 \$ w1 B! |0 Q
# pop3 110/udp (去掉#)
7 @* u/ A$ l) gok了!( j/ w. v8 T" c7 |7 f+ Y
* z" i' B: n# f  F( y1 `% ^
参考:http://www.phpwind.net/read/474365




返回列表
Namecheap
Namecheap.com - Cheap domain name registration, renewal and transfers - Free SSL Certificates - Web Hosting
互联网安全