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




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

一: 本文目的
/ @$ `/ i, V/ k7 |1 H( k& R利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,以允许外面的用户以用户名和密码认证来relay邮件。
+ u/ U$ j: ^) W( C  I二: 网络系统! A. {8 W" o/ Z$ D( `

& b2 C  e. M6 @9 w, P3 p& v公司域名 : domain.com0 r. c$ A1 z4 ]7 l. a# u7 ?) }
用来认证的SMTP服务器全称域名: smtp.domain.com4 p6 P4 }. U$ |# f& H  Z! t
三: 为什么要这样用?% q, i9 M( G/ O6 ?7 @- _& H
假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构,公司有统一的域名domain.com,
. |) C4 X; M  K* ?. ?. g所有员工的邮件地址类似如staffname@domain.com。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。8 `  O8 k2 Y" X* x% `$ L
还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,则也同样需要一种认证方案去允许正确的用户relay邮件。
/ C, E  [; }" J5 B$ E现在我们考虑做公司自己内部的邮件relay系统。5 j5 B6 ?' _, q0 m5 ]9 O0 W- u
就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统’方式安装所有需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay自己公司的员工的邮件。
' n( a1 a& k! l, c( A. [四: 配置Sendmail
) d/ r7 W: t+ i$ E7 q1 x: j# n1. 选择‘服务器系统’安装Redhat 7.1
. M, [- [6 z( T* b2. 进入目录 /usr/share/sendmail-cf/cf 。$ k) c6 L7 R' W5 V; l. C
如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。
4 G* N5 j: M  g2 T6 u3. 修改文件redhat.mc如下
+ J7 B; p( X3 u( @* _  ~5 d8 d0 Tdivert(-1)( s0 E3 A+ d- F7 r! a) E
dnl This is the sendmail macro config file. If you make changes to this file,
1 G1 B  m) O1 r9 sdnl you need the sendmail-cf rpm installed and then have to generate a
; Q8 _/ F+ c# ^+ m4 ^& K% ^0 cdnl new /etc/sendmail.cf by running the following command:! D5 ?# }- s( N& b1 _
dnl
4 v) C) _5 _% @7 Pdnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf. e' c2 d, Y/ N+ {
dnl) `0 }; t  `% {, A* [
include(`../m4/cf.m4')
+ [% y6 t+ b* l5 PVERSIONID(`linux setup for Red Hat Linux')dnl" Y) z. H( q* n$ h/ g3 G
OSTYPE(`linux')
& _. E/ x* W% }) h' T5 r+ `% j- K8 Hdefine(`confDEF_USER_ID',``8:12'')dnl
/ {' E6 h0 O/ r; `6 S9 mundefine(`UUCP_RELAY')dnl- w, o, C# e( D+ N; ~3 J
undefine(`BITNET_RELAY')dnl
3 Y8 k' B$ D( K% C) }" y; Vdefine(`confAUTO_REBUILD')dnl
5 a9 s, Y8 q2 I. F, gdefine(`confTO_CONNECT', `1m')dnl
9 k8 F% H+ x7 edefine(`confTRY_NULL_MX_LIST',true)dnl* e( d1 @- f* W# Y# I- i
define(`confDONT_PROBE_INTERFACES',true)dnl! m% L+ G* `( v' s
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl6 g" J/ i! U  |& p8 q" a9 \8 i' R" Z" w
define(`ALIAS_FILE', `/etc/aliases')dnl; L7 O% ]1 \7 Z' f0 H" W
define(`STATUS_FILE', `/var/log/sendmail.st')dnl
) R! B( h1 `4 b' j+ B- q3 d# o4 J: a( ~define(`UUCP_MAILER_MAX', `2000000')dnl
4 R9 m+ V' b: [3 I, d. Jdefine(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
+ {$ H& |$ \! p5 V9 K4 \6 Fdefine(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl' y' j  M; d2 v& G
define(`confAUTH_OPTIONS', `A')dnl
: A! H) u" q6 R/ J3 Mdefine(QUEUE_DIR,`/var/spool/mqueue/q*')# b' N7 K5 I* S- }5 ]/ U
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl* h6 O! g' k5 ?+ W* t9 Q, g
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
1 c1 z; P  l* L! }+ p! T1 sDAEMON_OPTIONS(`Port=25,Name=MTA')dnl
+ J7 M  ^- W& R8 d/ Z5 N0 CDAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl2 F" A6 m0 x' B6 _# z
dnl define(`confTO_QUEUEWARN', `4h')dnl
" P" U& t8 {4 ~6 w5 Tdnl define(`confTO_QUEUERETURN', `5d')dnl
! w. d9 D- K* ldnl define(`confQUEUE_LA', `12')dnl# c3 F; J1 z5 X8 w
dnl define(`confREFUSE_LA', `18')dnl; ^3 a0 e! z  h  p7 b3 E1 W
dnl FEATURE(delay_checks)dnl, ]0 }5 H& v; G' ]5 Y$ W* R
FEATURE(`no_default_msa',`dnl')dnl
# T! z& {; ]0 U( g; i& t6 ZFEATURE(`smrsh',`/usr/sbin/smrsh')dnl% _8 d' Y- I, O' Z$ r/ h( N5 A
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl
% _8 _7 B& X* N, r! O4 XFEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
" O0 {5 s5 e; A( ~FEATURE(redirect)dnl- h+ e: Y/ I0 Q6 v& E9 D0 D
FEATURE(always_add_domain)dnl: N( y5 F6 Y" n+ ^
FEATURE(use_cw_file)dnl1 |0 M8 f4 D4 Q; n2 k
FEATURE(use_ct_file)dnl- C% v7 q# c0 K7 F/ J! J& k
FEATURE(local_procmail)dnl/ }1 Z# a% N2 }1 \7 d9 d
FEATURE(`access_db')dnl
/ l* O  ?5 p3 X0 i; `FEATURE(`blacklist_recipients')dnl
  r5 v% S7 i8 _$ c7 [5 @) d& BEXPOSED_USER(`root')dnl
) z. v, s! R. Q* d* Udnl This changes sendmail to only listen on the loopback device 127.0.0.1" e+ z2 L" i! Q6 \7 c
dnl and not on any other network devices. Comment this out if you want  }) e! }/ P9 Q6 c9 e6 Z) I
dnl to accept email over the network.
' H. o( E1 U) s# h& Xdnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')9 p& `$ L9 {/ ^9 \
dnl We strongly recommend to comment this one out if you want to protect) d! b/ f. g- j; o3 L9 a
dnl yourself from spam. However, the laptop and users on computers that do
6 s: Q) D3 ]& G( Pdnl not have 24x7 DNS do need this." l& _' `" V1 n. O* y
dnl FEATURE(`accept_unresolvable_domains')dnl
& f9 I/ y1 }/ ndnl FEATURE(`relay_based_on_MX')dnl
+ Q/ c& O& b, W4 C! Z8 ?1 H9 w" [MAILER(smtp)dnl
, @5 M- J, a8 p1 gMAILER(procmail)dnl/ }8 O0 h7 j( ?  n$ j/ O! r  A' K
其中,我加了下面的行:
$ O" m( Q7 v4 N$ o3 R4 w2 N& Y0 g1. define(QUEUE_DIR,`/var/spool/mqueue/q*')
; H( Q  ?3 t& m* i2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
$ N  ~* H: D8 J7 h  B3 o6 {/ b8 n5 e3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
! s& J( _' y$ a; Z. P- p4 N4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
% ~; i6 w3 H: l5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl* H1 B$ C' M$ ]. m! J8 S- N# x
注:: R1 w: L! ~/ M2 o; \% l
第1行我启动了多个邮件队列,希望得到更好的队列处理和性能改进。
' e+ {7 z9 d0 C& Z$ i  m: Z6 S第2,3行 移走前面的注释,打开相应的各种认证机制。
/ x0 L. I& l) ^* O. ?第4,5行 设置相应的MTA和MSA所在的端口号。3 {' D; v, C9 Y' y7 |1 @& Z
且注释出了
4 \5 D( O4 }- U  x$ X1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')" p+ {( ?. A$ v. x& \3 [$ d) m- _& y
2. dnl FEATURE(`accept_unresolvable_domains')dnl
: L' i! e4 b. {! Z第1行 允许通过网络连接Sendmail。
. s, _9 F! I* F6 c# a第2行 禁止不可解析的域名relay邮件  r7 `* N2 \2 K1 }! K8 R
最后运行
& r2 U. s( A% {! U: r9 G- `# V/ i* U#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
& B# a  U2 E5 e: k; v% i! }写到/etc/sendmail.cf文件中: S% V3 Q+ x- {3 n
既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如
. f6 _% r7 n' A& i#cd /var/spool/mqueue, a& f- _! i  [' g. m+ r* e5 M
#mkdir q1 q2 q3 q4 q5 q6
. V" Q3 U% R  @这样Sendmail将会使用这六个目录做为队列目录,增加了性能。
0 c) z- d* u( l" b9 I五: 设置SASL认证方案) ~6 V* K' Y! g6 y5 d1 T5 R2 N; j+ P
1. 运行下面的命令,确保SASL被编译进Sendmail." b/ j9 _+ O+ p0 z1 {. K! ^
#/usr/sbin/sendmail -d0.1 -bv root |grep SASL2 ]3 Q2 y7 h1 \: Y5 _
输出应该类似如下面:$ A. Z& h5 ~" g; ~! e9 S( l. `( Z
NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG- G  n, {9 y) h) b0 ?0 i
确保你能看见上面的文本中的 SASL% r( N3 t! n: ^6 M: g
2. 测试端口25,确保输出AUTH提示行。0 P7 B, v) u. W( a: F/ n) g
#telnet localhost 251 r0 L! O& ^9 H8 z7 a) C
Trying 127.0.0.1...
* B1 \9 I3 K; p/ ]( jConnected to smtp.domain.com.
, E7 d! x7 K% y- C3 bEscape character is '^]'.$ E% m; u5 _6 ~; w6 d
220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -0800* a' N+ P1 ]; Z: D) T  m- y
EHLO localhost: z1 W4 ~3 r5 h
250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you' U- p- `. k$ Q2 O& j
250-ENHANCEDSTATUSCODES7 W1 k5 C9 l% H; z8 f
250-EXPN$ z( t: n. f( Y) M
250-VERB
0 G! ?6 _& W2 e4 e7 K8 J& m! x9 Q250-8BITMIME' I0 {! u% l! l: c0 s3 d6 O
250-SIZE/ t4 C" O  F  V& b6 _6 _
250-DSN1 i4 F' ^2 U: J. a+ }9 V0 y2 U( D
250-ONEX
* V& c. O+ O& @' I; O( k9 P2 p250-ETRN% T+ z) j' r: m
250-XUSR
" G3 E8 L0 U% U5 r250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5: k) B" \7 O$ }1 o( D
250 HELP
6 e$ \8 G4 G9 B8 Iquit" f4 E9 ?# j/ e3 p* }0 O+ A+ ~
221 2.0.0 smtp.domain.com closing connection  n+ z8 V+ C& @4 ^
Connection closed by foreign host.
" g# a" |* W; i! j; \( d# `" b4 `" M你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。# X# U9 {" F8 o5 s1 e- P
3. 增加SASL用户且更改密码
4 i  f7 R1 Y9 F- L. x# y8 C#/usr/sbin/saslpasswd jephe- ], e' W0 A% g( I! p" u  v" ^- E$ F
Password: *******
3 k; v9 S0 ]: l% |( N; @" D+ o) nAgain (for verification): *******
) [7 O) Y* x; Y2 O# d  U  a) n#/usr/sbin/sasldblistusers' c8 [/ }3 f" W4 n
user: jephe realm: smtp.domain.com mech: DIGEST-MD5
+ F* N% O3 O" N$ |: D, A$ ]9 ~user: jephe realm: smtp.domain.com mech: PLAIN
. B* q5 r8 d/ R; i5 ^5 Fuser: jephe realm: smtp.domain.com mech: CRAM-MD5# s6 S% S5 p; n  [# ?
用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。6 F8 f8 X! [0 I4 z8 _6 U
特别注意: 在下面的windows的Outlook Express中设置用户名和密码时并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,在这里是 jephe@smtp.domain.com作为用户名。
# O9 F. ~& S4 {. W9 s$ M#chmod 400 /etc/sasldb3 E- p$ l9 l9 q/ G$ H
可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。, I& [* c9 Z" |, g
4. 更改默认的Redhat 7.1密码认证方法
/ V3 [5 N- `# Q% w# _默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了
+ ?) r* S3 b9 q8 c9 O2 Y1 p: `增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。) Q) c5 E2 x, _- X
#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面4 f% i' f/ v; Z" O
pwcheck_method:sasldb
# N+ }3 D: V1 v5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。$ ^7 n; g% [' z3 {# C0 y
六: 设置Windows的Outlook Express。; G3 z7 H3 `, `  W; t! C0 A) ^- w& I
1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中的AUTH行
- H: h3 }  s* ?7 i1 b* |输出PLAIN LOGIN即可。
( n0 g6 U. X1 X( ~# u8 x' p  c0 H2. 在‘工具’-‘帐号’-‘属性’-‘服务器‘-' Z  x6 Q8 \. W& Y
’发送邮件服务器’中选中‘我的服务器需要认证’# S% }8 i' d/ p1 K6 _
然后在‘登录用户帐号’上填上. Y. W3 V' T, u
“你的用户名@你的realm冒号后面的服务器全称域名”
0 G/ f4 S! {  F+ X. k/ q6 j如:本文的情况是 jephe@smtp.domain.com& X" I' u+ k& B# l( e% \" u% F
密码为你在前面输入的密码。
1 f7 i+ P  p. \4 p$ W注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。! x, U  q2 |. K# @& D
3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误
: i% f" f- O8 p& x6 {( J# l然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)在后面表示是通过允许的认证机制relay的邮件。- t) w- E5 i8 m+ H
七: FAQ。+ X1 y3 c& r9 D! S! s2 c, A- V5 `4 a
1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。+ p* V& J6 T$ V
答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。" R+ V$ c; V/ d3 M+ B+ S9 Q; K4 Y  z
2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。, v' j- j6 _* u2 \, P4 k/ M
答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为& R+ U5 Z- U1 j) S3 d7 ^2 E
pwcheck_method:pam5 p2 p# z+ Z1 K, q
则你就简单地用useradd增加一个系统用户并更改密码即可。! A* F' r  ^- e9 [
然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。  j+ N" R* m, j2 I
验证pop3  m, }, ~6 ^1 p2 ?1 W
reahat 6.2 ----〉
6 Y; N1 z$ s. k2 m% ^1。/etc/inetd.conf1 ~5 B$ L( D. \
# pop3 stream tcp mowait
/ [3 h, i8 F$ E5 j' A# troot /usr/sbin /tcpd/usr/sbin/in.popsd  (#去掉)
$ o  Z2 D  [: [2,存盘。/运行inetd- g) n/ g2 D1 k2 }3 S9 X$ L6 m
3y验证:netstat -a |grep pop8 t# I+ l: n! m) y3 J' w

7 d# I- p. D3 M输出 ------tcp 0 0 * : pop3 *:* listen" Y2 q4 ]; P( k* u1 d5 t/ x( j
ok了!: y% i* l: b& p, g5 U7 R, F+ I
redhat 7.1以上:
" z" ^! Z* X7 m1 s! g1 B' I2 o1、vi  etc/services
8 q& h, T* q1 u# E6 c. H4 D# pop3 110/tcp  r7 M0 G, H+ `9 p9 R5 H' [" j
# pop3 110/udp (去掉#)
2 i! Q9 s) m$ \% p$ Z8 Rok了!7 `0 \, `5 Q  N- v8 Z9 _
0 E0 c" d& N7 U) _% ]
参考:http://www.phpwind.net/read/474365


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