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




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

一: 本文目的7 I; |+ T0 }6 o- V3 u$ F
利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,以允许外面的用户以用户名和密码认证来relay邮件。" u% N0 O, l1 A! F9 v* D- E
二: 网络系统
5 c! v! K5 x6 ]# ^8 ~- C0 {) ]9 B/ u! L8 ?; j! S
公司域名 : domain.com
* b' ?5 D  S0 i' v  S* m7 O4 C. ~用来认证的SMTP服务器全称域名: smtp.domain.com
$ V' j2 U" c$ k7 n9 M+ Y3 b. s三: 为什么要这样用?; W$ [2 S; D) b, s$ K5 U3 [
假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构,公司有统一的域名domain.com,
# }4 a( Z2 l, H; z+ K% R. |" a2 H所有员工的邮件地址类似如staffname@domain.com。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。
! g5 ~* e. `9 ^$ s" h# G# X; k3 U" Q还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,则也同样需要一种认证方案去允许正确的用户relay邮件。4 w9 k* B6 p% V( M6 @& F, j( v3 X
现在我们考虑做公司自己内部的邮件relay系统。; `: d& d8 a: y9 Q9 w
就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统’方式安装所有需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay自己公司的员工的邮件。" Y1 M, Z' f5 X% W1 ~
四: 配置Sendmail5 k; b+ R- D% c) e0 }: V
1. 选择‘服务器系统’安装Redhat 7.1
! H4 z) E" r% C8 \3 {. k. \& x6 ~$ m" n2. 进入目录 /usr/share/sendmail-cf/cf 。0 B0 C, h" ?$ W5 Z" @# R
如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。
% W5 l0 J) S* z& f5 g9 y# O3. 修改文件redhat.mc如下: p( F0 x9 _6 G3 y+ Y% u+ {( Z' C
divert(-1)
8 x6 h8 C# F5 Y6 l8 Y0 gdnl This is the sendmail macro config file. If you make changes to this file,$ N& g+ E: V& u. J& K, n% Z
dnl you need the sendmail-cf rpm installed and then have to generate a4 S/ [: h' ]2 j2 L' ]1 R
dnl new /etc/sendmail.cf by running the following command:, j  e' y6 C7 m8 Z
dnl
7 f, f% v5 m5 M( M5 I8 W; vdnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf6 ^* R8 E/ m$ \6 A1 [
dnl9 _; x( |& X, F/ k1 V
include(`../m4/cf.m4')
" y- p0 L% e. }VERSIONID(`linux setup for Red Hat Linux')dnl! r7 I5 N" k5 i' v( C; W2 ~) l
OSTYPE(`linux')# n& X/ z4 }! [" x
define(`confDEF_USER_ID',``8:12'')dnl
" `4 y5 c. }9 ^4 Bundefine(`UUCP_RELAY')dnl9 M; R; ~0 c" |( I2 J/ }4 L
undefine(`BITNET_RELAY')dnl, K: {3 l0 b& a  ^( {
define(`confAUTO_REBUILD')dnl/ L, c! T' K; F0 L) x& p8 c! X
define(`confTO_CONNECT', `1m')dnl  }' Y; W  R, o  E
define(`confTRY_NULL_MX_LIST',true)dnl! I4 w' K4 e1 g9 S7 K' P+ Y
define(`confDONT_PROBE_INTERFACES',true)dnl
' i/ J9 V, y* d: I/ D) Udefine(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl+ u& n8 \/ z) M: o9 k* a+ Q+ L6 x0 u
define(`ALIAS_FILE', `/etc/aliases')dnl6 m5 {9 G! N( @9 n6 T
define(`STATUS_FILE', `/var/log/sendmail.st')dnl- C- R& o; V* |4 b' ~
define(`UUCP_MAILER_MAX', `2000000')dnl
. X0 c$ c& a- s9 }$ Udefine(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
& I# H6 J9 P) E, V. }9 Z4 J2 W( k7 D: Bdefine(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl' k9 N# Y! N  t6 M: H, M
define(`confAUTH_OPTIONS', `A')dnl$ G6 X' |4 J1 K9 }" f  I
define(QUEUE_DIR,`/var/spool/mqueue/q*')
: O8 V- q8 M( sTRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
! h. b" }2 x  f$ m: u5 Pdefine(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
2 l2 l  S/ n6 a, _; a( G( D7 uDAEMON_OPTIONS(`Port=25,Name=MTA')dnl' {& U' c, A( e( {: R1 P7 p
DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
, ?. ]' {% ?5 L6 b% [' ^dnl define(`confTO_QUEUEWARN', `4h')dnl
* `9 ^' J9 y0 ?1 ~! @( a" e% o6 z$ J3 hdnl define(`confTO_QUEUERETURN', `5d')dnl
2 X& e0 O7 _$ E2 w& a7 udnl define(`confQUEUE_LA', `12')dnl- i0 a9 E- w; o( x- o8 Q. }3 e# G
dnl define(`confREFUSE_LA', `18')dnl! H" o5 ]2 i; _, `, u8 z
dnl FEATURE(delay_checks)dnl& Z  t/ @0 P+ v4 y2 C
FEATURE(`no_default_msa',`dnl')dnl9 u8 C; r* J; I
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
+ ?( b9 M, e0 S5 EFEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl
) [# ?- k' }/ W# {6 K' H3 y% S2 e) NFEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
) n5 K! \$ m0 M2 x2 `FEATURE(redirect)dnl+ B  k3 k% ]) O( {
FEATURE(always_add_domain)dnl, t& w. U% T2 D( Z7 g8 M( w7 h% D
FEATURE(use_cw_file)dnl
' s0 S+ K: c! B  y; _FEATURE(use_ct_file)dnl
, N: K& @# g- v2 R  a6 d7 K. N/ sFEATURE(local_procmail)dnl1 D- L+ }2 A  \& z1 c
FEATURE(`access_db')dnl
: k4 J* _* d0 {* |) j0 aFEATURE(`blacklist_recipients')dnl- n0 Y% C( x( A0 W2 H3 ^
EXPOSED_USER(`root')dnl
- w- l, [* j6 {9 g$ r% m' a9 qdnl This changes sendmail to only listen on the loopback device 127.0.0.1& Q2 d" S  p% T2 C1 N1 a. _' i# \$ d
dnl and not on any other network devices. Comment this out if you want: Z% ~' h6 M/ H
dnl to accept email over the network.
: @( d* y1 {1 f, T, x8 ^dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')  ~5 q; s) J8 `( V3 z- t
dnl We strongly recommend to comment this one out if you want to protect
! g- `& j. Q: n/ ?% `dnl yourself from spam. However, the laptop and users on computers that do
. ]3 M) O  Y4 c& ^1 l) l6 ?dnl not have 24x7 DNS do need this.
& j# ]! u$ o. x6 rdnl FEATURE(`accept_unresolvable_domains')dnl
' c1 B8 b( ]' Ndnl FEATURE(`relay_based_on_MX')dnl7 l" k" c! {6 H
MAILER(smtp)dnl) ~* g$ z9 A6 }3 V
MAILER(procmail)dnl6 E' F, A: e9 d/ R" q( f, J0 i
其中,我加了下面的行:3 t0 J' A5 R; D1 i  n( `5 N6 j
1. define(QUEUE_DIR,`/var/spool/mqueue/q*')& ?, T) a# q2 g! W: z+ U3 _
2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl* B6 [8 k# [' j
3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
' O7 i! v+ A! T2 d! q4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
: C; o8 s1 W% U3 Z3 O6 ]- A5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
4 Y( K( k$ v( V" h) F) m" Q3 r; m注:. }# ^# V- Z0 Q$ t6 [
第1行我启动了多个邮件队列,希望得到更好的队列处理和性能改进。
7 {' V3 L* O6 d第2,3行 移走前面的注释,打开相应的各种认证机制。5 z, Z" k9 I8 s: L, b7 ~9 n2 t
第4,5行 设置相应的MTA和MSA所在的端口号。3 e: z& H) f4 i% c
且注释出了. B9 ?; x( L& T. J* G9 s- Y
1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
& C% _! h0 w! Y7 m. N2. dnl FEATURE(`accept_unresolvable_domains')dnl  d5 x7 s' a: Z! y6 R; |1 a4 Q- w
第1行 允许通过网络连接Sendmail。
! N) ~, R, B  U第2行 禁止不可解析的域名relay邮件, W3 ]: i% M: m: l5 m4 o5 I3 K7 y6 K
最后运行
, V  e: G+ P5 h2 }3 X( D#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
% G+ z" J* s3 A; c& W写到/etc/sendmail.cf文件中  o" H' F. Q+ L4 B* J
既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如
+ [) ~3 n2 l. B7 M- U. J#cd /var/spool/mqueue% }5 q, ?! n+ d" g4 j
#mkdir q1 q2 q3 q4 q5 q6$ \/ u* u* I/ r4 Z; W8 z
这样Sendmail将会使用这六个目录做为队列目录,增加了性能。
! q9 I' ^, a8 B五: 设置SASL认证方案
5 S, p0 E) I- T1. 运行下面的命令,确保SASL被编译进Sendmail.
1 ?3 A: H/ u& h* e# z#/usr/sbin/sendmail -d0.1 -bv root |grep SASL
; @# W" D7 ?4 P/ ?6 A6 g输出应该类似如下面:
6 z( M) A. f; I# p2 q& sNETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG+ i& ?" [: e' z) ?  H
确保你能看见上面的文本中的 SASL, q3 |1 _( X  x2 i% H8 v3 H* T
2. 测试端口25,确保输出AUTH提示行。  E1 e7 f! K1 B4 X& C7 R# h' p+ r
#telnet localhost 25
# g  T% |+ c$ ?# TTrying 127.0.0.1...- [2 o1 m; v" S
Connected to smtp.domain.com.
+ R" ]5 p9 L1 S( _: EEscape character is '^]'.: M! K4 F5 C( K' W$ ]
220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -0800
) k2 U3 M/ e3 F  X8 d& ?( H& m. vEHLO localhost
. w1 B' n1 b( L  X% B2 @2 ^" R250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you" g$ n- m3 w2 C; z
250-ENHANCEDSTATUSCODES
# ~$ ?1 t( {' A( \250-EXPN) O# V2 e4 Z* x* b2 c5 }7 q2 n4 {
250-VERB7 c& j+ |* K! s; H! i# L
250-8BITMIME/ E* ~( B" w% W
250-SIZE
+ g# p6 ~% L3 g+ N/ u' x* U) ?& q! c250-DSN
' {5 {# I3 J: a/ D5 E! E/ {250-ONEX
3 |% t- {. y2 Y: U/ u: b250-ETRN  z( O# |4 j# @0 P, L
250-XUSR1 s* q, X$ A7 d, o' `
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD51 Y' ]* P7 j  d; ?, p
250 HELP
7 I6 F4 p# \# B( x( N) @, [  Y8 ?, [quit- i. k( j2 ^0 ^; y9 i
221 2.0.0 smtp.domain.com closing connection
  u5 ~9 M8 _5 a7 w" {2 fConnection closed by foreign host.
7 r- }; U! i3 U. y0 |& O5 a$ x. u3 H你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。# N" A: [9 L- F/ m! I
3. 增加SASL用户且更改密码
) @  f0 S* v" u) _#/usr/sbin/saslpasswd jephe
. i# g4 }9 q7 i  v( u6 wPassword: *******
. ~; ?- l4 W; s  r: H4 GAgain (for verification): *******
5 U  L9 D1 m& q5 [- o" {#/usr/sbin/sasldblistusers
1 z0 u" ]9 p  M& r- wuser: jephe realm: smtp.domain.com mech: DIGEST-MD5
, P- Z# h6 |. u" a3 l1 C1 @* Muser: jephe realm: smtp.domain.com mech: PLAIN4 \6 e% Z& `, R: r3 U, Z; N
user: jephe realm: smtp.domain.com mech: CRAM-MD5
# ], |! d! N) A* G用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。$ W+ }& @  J. W2 o
特别注意: 在下面的windows的Outlook Express中设置用户名和密码时并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,在这里是 jephe@smtp.domain.com作为用户名。: f$ P1 y; a) }) {0 w- j* S- l
#chmod 400 /etc/sasldb
. T* S! W# {# v8 J可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。
( {' v' z* J: q) U4. 更改默认的Redhat 7.1密码认证方法
4 s/ ^) S- s  A" j7 Q默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了, c$ G, M2 j: l
增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。) V5 u' Z0 U. X0 _" W5 s
#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面( O) t; w  w8 }' p6 A2 D
pwcheck_method:sasldb
: i2 U: N7 Z9 e$ u' \& O5 z$ X5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。# P5 z# B: ]) H. m' X
六: 设置Windows的Outlook Express。" t. w0 ]* n' U- @2 t
1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中的AUTH行1 ]( c7 W* k* L4 y) ?
输出PLAIN LOGIN即可。
# a" Y! i6 }: `: k2. 在‘工具’-‘帐号’-‘属性’-‘服务器‘-# |" G$ h+ h( C9 f0 e: E) j
’发送邮件服务器’中选中‘我的服务器需要认证’
' w8 K! n5 \+ m1 V+ T! [# v1 Y然后在‘登录用户帐号’上填上
1 j& a3 T  q- e“你的用户名@你的realm冒号后面的服务器全称域名”& y9 h8 o1 Q& o  C  @
如:本文的情况是 jephe@smtp.domain.com
; `. w* Y0 H' }8 v  t2 O密码为你在前面输入的密码。
9 T+ O  O0 }' V  n/ @6 s注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。, c+ M1 ~7 c3 g' {8 z! }; r
3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误9 T: A; ]6 y8 {5 H6 B3 b7 |6 T
然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)在后面表示是通过允许的认证机制relay的邮件。
2 m  S( j. e: }6 o+ ^& A七: FAQ。0 T2 W4 K8 `! v+ v2 p
1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。
( N. d0 R% F- k# H! E答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。* P3 L# ~$ g& m/ Y' r4 h
2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。8 N  u7 M, M/ z: k7 Q$ @* L2 s
答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为
! i8 I5 l# B7 B8 c* m# U! {pwcheck_method:pam
. @8 e) y: m3 i; P6 T则你就简单地用useradd增加一个系统用户并更改密码即可。( |0 h( q! M' C* x$ q' E4 S
然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。
; K! H0 P1 ]% s1 J验证pop3
! h; C2 t6 w3 O; O6 D5 ?reahat 6.2 ----〉% O% r: t/ D5 p, H
1。/etc/inetd.conf
9 U+ F& s7 V: p2 H4 f" [) @6 T# pop3 stream tcp mowait
% [  J7 U7 d' U3 g' W$ y$ T! j, Lroot /usr/sbin /tcpd/usr/sbin/in.popsd  (#去掉)+ N8 M9 B5 X' h' M' b1 Q/ F
2,存盘。/运行inetd, ~. o+ N( a: F8 ]: J9 N8 _
3y验证:netstat -a |grep pop* _% @2 u) D# _6 n6 _

/ K3 z7 K& R' ?1 z4 _3 b- _输出 ------tcp 0 0 * : pop3 *:* listen- [6 ^. c% P. d" B2 r
ok了!
5 \$ q% m, _) h$ r. t9 t* Gredhat 7.1以上:5 H1 B1 ^) u" G
1、vi  etc/services; I# x$ k3 t9 j& x) s. J% c+ j/ h
# pop3 110/tcp
/ Z: Q2 F0 T; a! t# pop3 110/udp (去掉#)
- U% ^4 u9 [6 r) @+ n+ [6 \- Qok了!
# q1 w9 X$ V* C, i; h4 {
+ k. [( x8 G5 C" r8 \参考:http://www.phpwind.net/read/474365


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