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




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

一: 本文目的
0 A& |: W) `% A8 B6 J利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,以允许外面的用户以用户名和密码认证来relay邮件。3 p; B, \% A7 f+ z7 ~
二: 网络系统3 _! ]; m6 |% l0 v& v

1 g5 I; l3 r& }+ {公司域名 : domain.com
% \/ c+ r8 S: e& P0 l  ]. P- i用来认证的SMTP服务器全称域名: smtp.domain.com& d# D: ?5 L& U7 \
三: 为什么要这样用?& x4 S0 a7 e7 h% U; p0 R
假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构,公司有统一的域名domain.com,9 o& ?' z8 R( C% a  H
所有员工的邮件地址类似如[email protected]。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。
; G) E. @8 w# L4 W还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,则也同样需要一种认证方案去允许正确的用户relay邮件。
  o4 s2 q5 G7 r: x- {现在我们考虑做公司自己内部的邮件relay系统。9 y( v* |/ Y% ^2 m7 R
就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统’方式安装所有需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay自己公司的员工的邮件。
3 Q. p* U& w( q1 Y5 H四: 配置Sendmail
5 h' c& O# U& J+ `4 |1. 选择‘服务器系统’安装Redhat 7.1% Y8 j+ s* _, H7 i
2. 进入目录 /usr/share/sendmail-cf/cf 。  c" U* V( I- a4 I. P
如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。
2 v' E' M4 E0 S/ H- Y3. 修改文件redhat.mc如下( B) h& o  v2 n1 d$ w. ^5 O% @* V
divert(-1)
% Q, k3 S) P5 z" F+ s' U$ s/ Odnl This is the sendmail macro config file. If you make changes to this file,$ I4 p8 p- I; s
dnl you need the sendmail-cf rpm installed and then have to generate a' A& y* w! H# Y
dnl new /etc/sendmail.cf by running the following command:0 g8 t1 f7 O+ B, n4 W+ O! @1 }( P
dnl
, b9 S. s) P9 _1 F$ E0 Vdnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
: ^5 s' c, n- hdnl
3 Y+ p" l: A* y" h/ @! k0 I( `% ~include(`../m4/cf.m4')/ N" K5 t) [1 J! P# |8 }
VERSIONID(`linux setup for Red Hat Linux')dnl" }* k% T( \7 ^% m
OSTYPE(`linux')
7 M# s3 }8 W9 \6 j2 \- ydefine(`confDEF_USER_ID',``8:12'')dnl
2 U. t0 Y3 z+ C- I* a7 lundefine(`UUCP_RELAY')dnl. k2 |6 ~* o" B. C: |% {4 W) Q+ ^
undefine(`BITNET_RELAY')dnl3 s1 g! ^' n0 V9 w& D. i
define(`confAUTO_REBUILD')dnl" u7 p1 F% j2 R3 R/ n) j% p
define(`confTO_CONNECT', `1m')dnl
* w. i- b2 Q1 odefine(`confTRY_NULL_MX_LIST',true)dnl
" G8 b( v# G0 f6 J% i9 b+ Vdefine(`confDONT_PROBE_INTERFACES',true)dnl
# }) w8 f+ F# {: r0 Ddefine(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
5 Y& @- O& R/ t3 X' X1 ydefine(`ALIAS_FILE', `/etc/aliases')dnl" x$ ?4 f% f' b( S8 ?
define(`STATUS_FILE', `/var/log/sendmail.st')dnl
1 R  P( q  X; ?; @) r1 ddefine(`UUCP_MAILER_MAX', `2000000')dnl
7 A3 o, s( Y4 L5 T0 X  P9 x% Jdefine(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl8 V3 ~# i+ G* |. |: r
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
  _$ b2 T6 F9 P( V; d$ V: Ldefine(`confAUTH_OPTIONS', `A')dnl/ t6 {8 ?# A; E, B/ p
define(QUEUE_DIR,`/var/spool/mqueue/q*')8 O+ L$ A* Q3 T8 u' z" m$ z9 O& W, Z
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl2 K9 A* p  [9 I0 g
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl9 |  g9 O! j6 W2 L( @& @) C- d; i
DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
( `8 r& v. q2 h  S( vDAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
) Z7 n2 O4 q, ]" [0 Gdnl define(`confTO_QUEUEWARN', `4h')dnl; J9 s' l: Y% {. v' C
dnl define(`confTO_QUEUERETURN', `5d')dnl2 Y3 W3 ?  w- m) S
dnl define(`confQUEUE_LA', `12')dnl
4 P( V3 Q/ n* U% Mdnl define(`confREFUSE_LA', `18')dnl( d) U/ J' ~% m1 M) s6 u/ G
dnl FEATURE(delay_checks)dnl3 o/ o( [% q" P6 x
FEATURE(`no_default_msa',`dnl')dnl
+ w; m& n1 |) A7 rFEATURE(`smrsh',`/usr/sbin/smrsh')dnl
" S; o7 X8 e  J4 F4 YFEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl
( C+ D# b4 J; G, n* ?  NFEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl5 M- i9 ?) C" R. y5 m, v/ A
FEATURE(redirect)dnl
+ ?: V* F( v, Q, I! ^FEATURE(always_add_domain)dnl) |+ [/ ~) Z9 G8 u% n
FEATURE(use_cw_file)dnl: L& M4 d9 y4 i4 R) ]9 y5 M
FEATURE(use_ct_file)dnl* w, Q0 f0 I5 \. G" X! k
FEATURE(local_procmail)dnl
/ r. h3 f& Y+ W6 Y6 w/ nFEATURE(`access_db')dnl
5 W& X- F; k! |FEATURE(`blacklist_recipients')dnl
, Q; T% t' D. X- k; K; O4 u1 GEXPOSED_USER(`root')dnl
2 S9 `* b/ l1 Y! h2 T, Q: }dnl This changes sendmail to only listen on the loopback device 127.0.0.1
7 y* c0 x5 Q1 m- M- Qdnl and not on any other network devices. Comment this out if you want& L9 B7 L% O6 s0 y
dnl to accept email over the network.
; Y; v, b+ x9 Q0 d9 K# z; Zdnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
9 g. i% M' B; v# Z3 x2 `  L! z# Ednl We strongly recommend to comment this one out if you want to protect$ w& R' v& i) F, w
dnl yourself from spam. However, the laptop and users on computers that do
9 C2 H6 a, n7 Y6 T& v  C! W* ]dnl not have 24x7 DNS do need this.
) T8 Q0 E/ J' xdnl FEATURE(`accept_unresolvable_domains')dnl
* I7 v& A0 Y; @" A8 c" ~5 i2 X- Zdnl FEATURE(`relay_based_on_MX')dnl
" x* l7 i" {( W$ M( B# _MAILER(smtp)dnl& E8 K$ }1 U8 s( ^/ G
MAILER(procmail)dnl( U1 o7 z& q3 t) R% ?
其中,我加了下面的行:
( i7 W5 `# T0 B$ x1. define(QUEUE_DIR,`/var/spool/mqueue/q*')
  e6 }' @: Z+ M0 i7 t# i- O2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl8 Y3 S0 }9 W$ ~( r3 H
3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
8 X# _7 s# Q+ o0 ~6 T' B2 z: J4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl" b: B+ h  r4 H" G: z7 T* i
5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl1 q0 u; z. A4 k0 ?& E
注:
/ u' e' V, w! t9 I! p# I4 D第1行我启动了多个邮件队列,希望得到更好的队列处理和性能改进。
( }# A# q3 T/ G3 y# n% a; ^第2,3行 移走前面的注释,打开相应的各种认证机制。6 N# {6 V+ T4 z- n+ I% I. x
第4,5行 设置相应的MTA和MSA所在的端口号。* X$ G2 T- p; m+ b! x4 S
且注释出了
6 B# P0 @8 m: f1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
. v+ u3 d6 |2 h  q$ S. @) F2. dnl FEATURE(`accept_unresolvable_domains')dnl/ x/ f* |! u) F( e
第1行 允许通过网络连接Sendmail。
6 m# g3 _3 Z& `6 I& a) w$ O第2行 禁止不可解析的域名relay邮件
9 o6 K3 x8 W0 f  `" w* W! S4 u最后运行( \& V( O, V% @1 S- ]
#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
7 M3 F7 H3 a6 w5 @- i写到/etc/sendmail.cf文件中
0 M( W+ o& g5 D7 @  P既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如. x* k4 `, K" }# y# l2 d
#cd /var/spool/mqueue  Z& A' Y: D# D' D% i" q$ X4 Y
#mkdir q1 q2 q3 q4 q5 q6
! i9 h" g( V7 [' v- \* [; N( V5 F6 u这样Sendmail将会使用这六个目录做为队列目录,增加了性能。& \- @; ~) \; R0 N1 a  l2 h
五: 设置SASL认证方案
3 h% D) \9 J/ z4 u1. 运行下面的命令,确保SASL被编译进Sendmail.6 X# b: B% m% f# H$ w5 x
#/usr/sbin/sendmail -d0.1 -bv root |grep SASL
0 b9 [/ L( D# ^" B) m& C输出应该类似如下面:* s. [# t( {" s! u
NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG
. l" J" s8 \  x  S- x' z9 A+ f确保你能看见上面的文本中的 SASL
" B  v& U/ G8 J/ i2. 测试端口25,确保输出AUTH提示行。5 t. w3 b+ }/ L9 k6 ^
#telnet localhost 25
" S% F3 c" X7 r  Y' N0 s# VTrying 127.0.0.1...* P% v  {  R1 ]
Connected to smtp.domain.com.. B4 \0 _  v& R3 X+ e* z# W
Escape character is '^]'.; L6 e2 y; M9 B2 o" {
220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -08007 @$ x. O/ ^' }8 \- H  E
EHLO localhost
. c1 w# ^1 m& }& a' f' n250-smtp.domain.com Hello IDENT:[email protected] [127.0.0.1], pleased to meet you1 N) `/ ]0 c  v) L
250-ENHANCEDSTATUSCODES
7 Z) R  l9 a2 ^250-EXPN+ s4 o3 H. W. {: p, j* S
250-VERB4 V, @# E6 h- U6 Q: E( U
250-8BITMIME
2 |+ q$ _6 O, \9 l250-SIZE
7 x8 Z; ?: s+ ~+ ?- I250-DSN* ~0 q4 Q/ h1 Y+ g- z) N
250-ONEX
% G- C) K) r8 J6 d. S1 _7 k$ F' W250-ETRN
' e, K, m$ D( Z250-XUSR
" t) x7 F4 f5 V& F$ h, X6 a250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5- b% y$ [' L; E& n8 Z; ?* x
250 HELP
+ b  ]' ?- g' [/ e3 p% Xquit$ f% Y7 V6 V  P2 k8 p
221 2.0.0 smtp.domain.com closing connection4 k& Z, w* X1 `/ \% O. w
Connection closed by foreign host.3 p/ R; E  E1 P9 k  F
你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。
& D6 _+ A1 z) s5 D# r3. 增加SASL用户且更改密码
- i4 R6 d5 Y3 a) J) p#/usr/sbin/saslpasswd jephe7 i2 P! \5 [+ K: b7 ^
Password: *******
; V2 E! ^* u. t: d4 ?# C& p4 N! ]Again (for verification): *******. A  u3 w" w2 v: Y; P
#/usr/sbin/sasldblistusers  n1 S( c- \9 W& j8 A5 t
user: jephe realm: smtp.domain.com mech: DIGEST-MD5
+ F- K) `- P- \$ l! p% _8 }: V6 ^user: jephe realm: smtp.domain.com mech: PLAIN
2 b8 V/ _2 ^5 i! ~& Auser: jephe realm: smtp.domain.com mech: CRAM-MD5
. `4 t+ {  t) ]6 N4 I用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。! x5 n; \7 i% N( b4 @
特别注意: 在下面的windows的Outlook Express中设置用户名和密码时并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,在这里是 [email protected]作为用户名。
8 H! ~3 V9 C5 a' K3 c5 o5 e#chmod 400 /etc/sasldb
) p+ A4 ?; I# J! l可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。  D9 b6 l4 c( X1 R* {+ j4 Z- y( g/ v3 O
4. 更改默认的Redhat 7.1密码认证方法7 Z  x: X8 O) f! Q; \2 q  u5 ~
默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了
6 {% x8 p3 H; m, A增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。
7 m% o, ]3 ~7 c- }: P; J" q& b#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面
# R" x% A  ^( gpwcheck_method:sasldb
; {% v& @+ S9 E  z( l+ i% M- }5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。
) ?7 v  Q. x. G六: 设置Windows的Outlook Express。
. h% S1 f  O  i3 F1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中的AUTH行' V" E( F- K7 Q: U2 U4 ~
输出PLAIN LOGIN即可。2 r& Q: a8 g( U/ g- y
2. 在‘工具’-‘帐号’-‘属性’-‘服务器‘-2 Q# X8 x7 B) Q, r" h
’发送邮件服务器’中选中‘我的服务器需要认证’$ n  ?. \9 U  W
然后在‘登录用户帐号’上填上  ]7 |+ c& H1 E* h: m$ E
“你的用户名@你的realm冒号后面的服务器全称域名”
: `  f4 h) i' ?3 k7 Y0 n# r- b& d如:本文的情况是 [email protected]
; D% g2 q- E% l6 c密码为你在前面输入的密码。4 j" E  a+ t7 ]# r0 O! @
注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。, y7 {9 b  X+ }& H! i
3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误& J7 e( p# L3 T2 M3 T0 z1 ^. n  A2 v
然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)在后面表示是通过允许的认证机制relay的邮件。
9 y& A( `0 j4 {+ O( b七: FAQ。, m- ^+ G: b  R
1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。6 Y! l* h9 a2 v8 D
答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。! a) K, y" v7 U
2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。, b# G3 C. O6 e3 G
答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为
5 w$ P8 C$ a3 N  S3 f2 r5 M9 c, Dpwcheck_method:pam+ X% @# H/ {' t1 V
则你就简单地用useradd增加一个系统用户并更改密码即可。6 X, V% @1 t! W$ m8 M8 A1 X
然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。
, T" n3 C+ ^% f验证pop35 R2 Z: ~% V& z: z! e0 l
reahat 6.2 ----〉6 G' T$ Y5 M; h$ k6 ]( @1 ?
1。/etc/inetd.conf0 \( f9 P7 E* y2 H
# pop3 stream tcp mowait
) q) J* s& l" }9 _, {root /usr/sbin /tcpd/usr/sbin/in.popsd  (#去掉)- R& @# b" ^$ @
2,存盘。/运行inetd! V8 Q  I* X/ e1 x* }
3y验证:netstat -a |grep pop- `2 {  i, [% e' K( R! T

* `2 e; Z  v3 m# ?$ v% z输出 ------tcp 0 0 * : pop3 *:* listen
9 H. I. D( A/ G+ eok了!
$ {6 l* ^1 O- X' eredhat 7.1以上:9 z: ^% k2 M4 T2 D( ]# I
1、vi  etc/services
" i2 J8 w- @+ c# pop3 110/tcp
0 J3 k9 s3 o) W) I; Q# pop3 110/udp (去掉#)& q9 L) v# z+ z0 ^5 d
ok了!
& @6 E+ k; c* D* _9 K$ Y% q7 L8 O/ T; ]' p  c
参考:http://www.phpwind.net/read/474365

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