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




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

一: 本文目的
: ?7 l: D3 G6 G7 y利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,以允许外面的用户以用户名和密码认证来relay邮件。7 [7 C% ^; C+ H1 r+ d& \( t
二: 网络系统' u* h5 k0 q/ R/ z3 r
- Z' T5 |  P9 B: X3 X
公司域名 : domain.com
. J6 b/ F* W& e% X用来认证的SMTP服务器全称域名: smtp.domain.com7 `9 i3 {$ @4 r' w
三: 为什么要这样用?
+ g% G0 G. y4 ~# q7 L# A假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构,公司有统一的域名domain.com,
6 U% Y# b  V/ g/ H7 |0 K5 G/ x, e所有员工的邮件地址类似如staffname@domain.com。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。
  f8 _6 `. g- C0 T5 A还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,则也同样需要一种认证方案去允许正确的用户relay邮件。
+ L6 [1 ^8 n  {- Z现在我们考虑做公司自己内部的邮件relay系统。& y; H' m( m) C$ a( n9 b
就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统’方式安装所有需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay自己公司的员工的邮件。  l( a/ W% a( ^6 B" W& ^. n5 G
四: 配置Sendmail7 l' [: J6 j* |
1. 选择‘服务器系统’安装Redhat 7.1
& a7 h3 b( ]7 P2 ]% O% X2. 进入目录 /usr/share/sendmail-cf/cf 。
6 S/ c# `; S& i8 p; O如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。
, D1 f3 m7 t( I3. 修改文件redhat.mc如下- ]6 `9 H5 Y- `, Q9 ^+ O  e
divert(-1)
9 a" T6 P+ p. J: @8 Wdnl This is the sendmail macro config file. If you make changes to this file,
1 W' f  C2 g7 d3 g; sdnl you need the sendmail-cf rpm installed and then have to generate a
  z! o: q+ C( E7 T3 Ldnl new /etc/sendmail.cf by running the following command:
- h& o8 J+ ~; q, E# M5 r, @dnl
1 K% F2 V7 N2 c: ]7 T5 `dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
. x6 P: Y0 p, _dnl' f6 X7 _. V- P& I% @
include(`../m4/cf.m4')
5 N3 S* q' w+ M2 _, i4 g8 A* `VERSIONID(`linux setup for Red Hat Linux')dnl
; ]% n! m- V: A# rOSTYPE(`linux')! e* a6 X& T, }
define(`confDEF_USER_ID',``8:12'')dnl
7 E( P9 U, t  N! z8 a$ c- nundefine(`UUCP_RELAY')dnl% Z- A  b$ f- R/ O
undefine(`BITNET_RELAY')dnl
5 U( i$ |% y# W2 {define(`confAUTO_REBUILD')dnl
: }' i4 ~) i- ~6 R+ V; Sdefine(`confTO_CONNECT', `1m')dnl
$ l6 o/ F5 R# U; E3 K! ~; |$ ddefine(`confTRY_NULL_MX_LIST',true)dnl( F% w8 g/ ^, P. {
define(`confDONT_PROBE_INTERFACES',true)dnl( M  C; q+ S+ Z% @! V& i" ~
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
0 Z/ B' j3 |9 Y! F3 d+ Mdefine(`ALIAS_FILE', `/etc/aliases')dnl. O+ i8 x6 |* y; o6 E7 @
define(`STATUS_FILE', `/var/log/sendmail.st')dnl
% H) ~. b+ O# `8 c& z" Ddefine(`UUCP_MAILER_MAX', `2000000')dnl& F0 F% v7 U( q( {1 N, {* a! _
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl$ V' H3 C; \0 c  U8 G" e/ e
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl" d& P5 f/ i' t6 A, `1 z/ x
define(`confAUTH_OPTIONS', `A')dnl
% Q- w. [$ @+ o6 w( F/ l1 r1 Vdefine(QUEUE_DIR,`/var/spool/mqueue/q*')
- K2 a' E% |; C4 WTRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
0 M2 M( d! F$ k$ b" @6 p# hdefine(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl; l5 }. d  C% Q. }  C/ W: X" Q5 y
DAEMON_OPTIONS(`Port=25,Name=MTA')dnl% {' O2 G3 ], z& `& [, L
DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
1 l2 T- E! D( X6 _7 P! l4 Q7 |dnl define(`confTO_QUEUEWARN', `4h')dnl
: I: b' Q; y/ odnl define(`confTO_QUEUERETURN', `5d')dnl& b/ [0 [# N' r6 S3 O! U' J4 }# q" O
dnl define(`confQUEUE_LA', `12')dnl3 ]$ s& h% i0 i- ~4 L  k* a
dnl define(`confREFUSE_LA', `18')dnl
; n, C! o. V: p( cdnl FEATURE(delay_checks)dnl1 w! `) u) ?- g/ K/ T2 V
FEATURE(`no_default_msa',`dnl')dnl
; T! ]3 o8 j- U- _3 g( Y- lFEATURE(`smrsh',`/usr/sbin/smrsh')dnl
/ j: b8 d0 l2 B, d. d& c7 Q! `FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl
! R+ f4 W! {$ P) E& IFEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl( o9 p2 G+ k  ^
FEATURE(redirect)dnl& M4 [/ ?. I8 q# g  u3 W
FEATURE(always_add_domain)dnl8 N/ ?4 Q5 e( r9 O2 g7 V
FEATURE(use_cw_file)dnl# A0 ?" e" w5 \2 E0 O3 j
FEATURE(use_ct_file)dnl3 j4 P" z  z' [$ [4 B8 \1 C
FEATURE(local_procmail)dnl, a2 u9 b+ u1 m# _; V" a
FEATURE(`access_db')dnl3 ?1 D% \" L: w6 c! \' \9 g5 ~
FEATURE(`blacklist_recipients')dnl
* G% o+ X6 m2 v6 H3 c  qEXPOSED_USER(`root')dnl. y0 x$ N% M$ D( M4 X2 c
dnl This changes sendmail to only listen on the loopback device 127.0.0.1
; s' k* |- m9 d6 ?dnl and not on any other network devices. Comment this out if you want
- \+ Z+ J/ B+ `$ o5 i5 }* rdnl to accept email over the network.& ?& u1 I4 `# U% B  F$ X
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
$ X6 E: A/ z$ k( J; Ndnl We strongly recommend to comment this one out if you want to protect
. ]8 V% }! v+ }  \dnl yourself from spam. However, the laptop and users on computers that do
2 c3 u1 L7 H3 g, K8 V, K1 \dnl not have 24x7 DNS do need this.1 m2 ^8 X" ]! `) B
dnl FEATURE(`accept_unresolvable_domains')dnl7 a8 T% V: q' L' b' H
dnl FEATURE(`relay_based_on_MX')dnl
& P+ Y+ V/ m7 {5 ]7 s1 `MAILER(smtp)dnl4 S. v1 Y& ]8 k/ ~. s$ I
MAILER(procmail)dnl
3 P0 I1 B/ E* C/ s4 U% L4 W  R1 ^其中,我加了下面的行:, F1 k0 f3 R9 d  \( C/ C0 |
1. define(QUEUE_DIR,`/var/spool/mqueue/q*')* @. V" J# T7 Z" [, k
2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
+ I( N- D) x8 H2 O8 x! _3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl. x3 Z# L1 [, r; O# p4 e
4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
: G, c" I5 U4 s$ x4 @9 i2 `& Q5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl' c1 S( @4 A; c: e& k/ \
注:: n; ]( h0 q( b7 P  C; @# d
第1行我启动了多个邮件队列,希望得到更好的队列处理和性能改进。
' U. Z! n$ B3 D) K第2,3行 移走前面的注释,打开相应的各种认证机制。
6 o0 T" _0 j+ }% a) U第4,5行 设置相应的MTA和MSA所在的端口号。1 Q  L' R) K* ^  Z) R5 A8 @
且注释出了
8 F8 j6 l0 z& I, S1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')9 W( ?3 O5 j' P! n' g& d
2. dnl FEATURE(`accept_unresolvable_domains')dnl
* Z7 _. l! B2 P) |0 v, e9 ]第1行 允许通过网络连接Sendmail。2 k1 T, z) W+ t: G: j. B8 ]
第2行 禁止不可解析的域名relay邮件
- N( E8 r3 o3 }5 ^8 t' x' L最后运行: `$ @) {, H" v1 U2 I+ L
#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf  k/ A1 E( J6 R2 J' u% r
写到/etc/sendmail.cf文件中
& Z$ n% W( ]& q既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如
4 F6 D6 H; S! o, t#cd /var/spool/mqueue
1 g/ o& [: M, B) y8 w  B#mkdir q1 q2 q3 q4 q5 q6
: h& G9 v, E8 w# \8 Y  E. E* h这样Sendmail将会使用这六个目录做为队列目录,增加了性能。
1 J: A, X, s- G! L五: 设置SASL认证方案
% E* {, a( l" h! ?: w3 G1. 运行下面的命令,确保SASL被编译进Sendmail.
5 Q) M1 v6 o0 S& D- Z5 O#/usr/sbin/sendmail -d0.1 -bv root |grep SASL2 M1 \8 {  `( I
输出应该类似如下面:
# S0 x: ]* B2 k3 w" m0 aNETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG$ W3 H" q1 v. y: t7 N# b/ L; Z. s1 ^
确保你能看见上面的文本中的 SASL$ [- A1 X3 e5 ~8 T# M
2. 测试端口25,确保输出AUTH提示行。
, k' N9 M. y/ u* W& R#telnet localhost 252 o, v9 W5 ?$ |3 O4 {5 m0 A
Trying 127.0.0.1...
; |5 z) Y( C. @# b# G( zConnected to smtp.domain.com.# |; J7 o5 I- }* I$ j, {! Y
Escape character is '^]'.2 p3 {; r* p+ B5 L3 W7 l8 t! {
220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -08001 C- z2 D7 \8 G4 `" R
EHLO localhost
+ Q7 B( S0 R$ N- w$ s250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you" e0 `/ f. ]0 v+ X
250-ENHANCEDSTATUSCODES
1 `. i) }- ^) q7 l6 C4 @$ e250-EXPN" r, J' h5 l* j* s
250-VERB
- J! t8 ?1 X0 H6 Z$ k2 U9 X* Y2 M250-8BITMIME
: g1 s* q2 y: v7 V% N250-SIZE+ ]1 {  E' N  T6 q( o3 N3 F. J
250-DSN
9 u+ J, i5 k5 K6 l5 q  a250-ONEX
  N2 c7 T! M  G, g! r# d250-ETRN
! X' A5 s& Q7 z* C$ k250-XUSR8 j0 ~' M0 b' l$ L! l
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
& ~8 t8 b+ A1 ?& `5 a5 p5 ?8 l0 N& G250 HELP, J4 c0 E% ~1 \2 Y
quit7 |; R8 W4 V9 w3 w$ O, k
221 2.0.0 smtp.domain.com closing connection
8 V* O$ \7 s- y3 Y- L) h1 nConnection closed by foreign host.! x8 Z  h9 i$ q0 ~
你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。: T, j6 T: V6 X
3. 增加SASL用户且更改密码7 s; z- k  [' P; v6 g/ n& n. S
#/usr/sbin/saslpasswd jephe
5 a& K/ _, |% L2 s0 {% g/ w+ KPassword: *******+ ?8 S: S" f" \
Again (for verification): *******2 Y$ d- m1 Z/ h" F. e- x
#/usr/sbin/sasldblistusers
  [; J4 V! g( \- Juser: jephe realm: smtp.domain.com mech: DIGEST-MD5& v" l/ S& K/ x2 x6 i9 k
user: jephe realm: smtp.domain.com mech: PLAIN
' E7 F. Y; T) o# U6 [0 ?8 t; Cuser: jephe realm: smtp.domain.com mech: CRAM-MD5
1 N5 i( V% M( Z# z用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。
$ Y8 y, o2 {4 g% l/ P7 G特别注意: 在下面的windows的Outlook Express中设置用户名和密码时并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,在这里是 jephe@smtp.domain.com作为用户名。
5 X4 M6 h! k# R/ D- C* d7 @3 `#chmod 400 /etc/sasldb4 {$ J: T5 Q. a0 |! l0 d
可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。% B% J5 ~' `. h3 c; @1 ^
4. 更改默认的Redhat 7.1密码认证方法% z0 V9 y2 H! x
默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了( z' [0 b$ y2 j
增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。9 j! e# P( f7 P/ i: w
#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面
, v# V& Q  r2 E$ N0 d& K) L+ wpwcheck_method:sasldb
% |9 e5 z$ x8 r9 p& u5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。
: a( v/ Z5 _2 U4 M六: 设置Windows的Outlook Express。
- ~: g% ^& q3 F3 u0 b2 [! [1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中的AUTH行
; j2 A+ P7 B! ?5 I% {# C$ L输出PLAIN LOGIN即可。; P0 u% `4 I) j& W7 F7 S6 ?
2. 在‘工具’-‘帐号’-‘属性’-‘服务器‘-8 f3 m. _- W# |  s; y
’发送邮件服务器’中选中‘我的服务器需要认证’
0 R! ?  r' U8 \. ^5 w0 d: I' z& |然后在‘登录用户帐号’上填上
) m' g0 t: W" h, Y) Y, y% t" {“你的用户名@你的realm冒号后面的服务器全称域名”
& r1 m7 j( s% W/ f/ y; i如:本文的情况是 jephe@smtp.domain.com6 H0 i  e, D1 R. I' r
密码为你在前面输入的密码。2 [' ?5 X1 r$ Y- ]
注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。
/ E- ?. I9 Q/ c3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误
7 G8 G5 H- U) Q  z) P然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)在后面表示是通过允许的认证机制relay的邮件。7 v: g; S/ S, m: P2 J; z
七: FAQ。0 R- n) K- a' Z7 \, Q
1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。" P; \7 ]( e/ L% X: V4 E
答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。4 ?1 l9 Y' `/ m) S! P
2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。
  C/ H, a* e& C, X" n8 H) Z答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为1 {9 [( ^3 z7 Q
pwcheck_method:pam
6 ^* G4 l0 }- M6 p4 k7 e8 h4 k& a则你就简单地用useradd增加一个系统用户并更改密码即可。+ X+ ?# S7 L# x
然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。# |! @5 k+ Y) I2 |! j' K8 f7 O/ G' K
验证pop3
9 E8 u( o% O# freahat 6.2 ----〉6 }9 r" ]6 X% J) ~& D
1。/etc/inetd.conf* D. m; X' E6 U+ Q$ {. F4 `0 s) D. z# }
# pop3 stream tcp mowait7 I$ |. b* A8 e4 z$ P. v
root /usr/sbin /tcpd/usr/sbin/in.popsd  (#去掉)
0 r- F7 @9 ^! K  \" ]2,存盘。/运行inetd
* V. B# k; s. X% s# \3y验证:netstat -a |grep pop
$ }* W+ g# b' H0 q) h9 F! B
$ b* e8 V' [, g; N3 k7 e输出 ------tcp 0 0 * : pop3 *:* listen" ?- F" P1 n% f2 c
ok了!
4 J8 \2 J* Q1 L; b5 `redhat 7.1以上:
$ k: L  z% Y. w% {) c1、vi  etc/services1 I4 B5 ^# {' K: f$ j: g/ |
# pop3 110/tcp& Z, E( V8 D8 ~4 K
# pop3 110/udp (去掉#)
7 l+ w" [! i2 h8 b" m5 gok了!
+ M. M0 b# _* q) c: k: b, C: \: w+ d& m$ a& I2 u
参考:http://www.phpwind.net/read/474365




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