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




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

一: 本文目的9 s# A; m; E4 @' {
利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,以允许外面的用户以用户名和密码认证来relay邮件。+ \& C" r# D) B
二: 网络系统
2 x- S: ]6 `4 k, e. Y
8 g; s4 c7 B, k0 d7 E公司域名 : domain.com
$ H4 R- ^# [9 r9 d2 I, \( l) a; r用来认证的SMTP服务器全称域名: smtp.domain.com
3 b+ ~* X8 V; W2 A! ?  v8 r4 C! K/ {三: 为什么要这样用?, e) p' u1 l( `3 M# q6 _( j% s3 v
假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构,公司有统一的域名domain.com,* g: W; A% p8 {+ z
所有员工的邮件地址类似如staffname@domain.com。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。
& }. X0 x& O4 d* w9 k+ t还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,则也同样需要一种认证方案去允许正确的用户relay邮件。
6 j  k: e- ]/ c' n3 b5 q现在我们考虑做公司自己内部的邮件relay系统。
1 {( S$ v  S, c1 o* y就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统’方式安装所有需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay自己公司的员工的邮件。
6 j0 Q' J' l6 E  l6 Y7 t四: 配置Sendmail
0 N+ v' n7 K! C0 X/ T- W( ?2 N1. 选择‘服务器系统’安装Redhat 7.15 P, r! y0 L" t% \4 k5 E, `
2. 进入目录 /usr/share/sendmail-cf/cf 。
2 A* |. Z% k* [& V如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。- n2 N2 I# h: Y- o8 M3 z4 u
3. 修改文件redhat.mc如下
/ \: R7 w0 w4 a$ ]* @$ B7 |divert(-1)
. C( c% \( Q. ndnl This is the sendmail macro config file. If you make changes to this file,) J  ~! b6 A. g" A) `/ J0 {+ S% j
dnl you need the sendmail-cf rpm installed and then have to generate a+ \0 n) ~, |3 S+ t3 I5 L; s
dnl new /etc/sendmail.cf by running the following command:
5 g2 I* e. M# B, vdnl
: e- W6 P  O( b) W& k6 idnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf+ v, j3 C' p* L- o; c2 R
dnl, v8 J2 k0 a2 g1 o( P) M
include(`../m4/cf.m4')! u1 t6 i1 O) ?" y3 t* h" b" y
VERSIONID(`linux setup for Red Hat Linux')dnl# O" A! V! F2 r( v0 y' u
OSTYPE(`linux')& N* A" `9 m9 R$ }7 x
define(`confDEF_USER_ID',``8:12'')dnl
4 \0 T! F6 W% a- Bundefine(`UUCP_RELAY')dnl
2 Y' @+ ?1 {( z0 }$ Pundefine(`BITNET_RELAY')dnl
5 o, X- [( ?& n' Y1 ~% O& qdefine(`confAUTO_REBUILD')dnl
, G1 J- d( Q4 ]- L' {define(`confTO_CONNECT', `1m')dnl4 m# s, z! F% J- `% `2 A
define(`confTRY_NULL_MX_LIST',true)dnl8 @5 @" R2 L1 X; F
define(`confDONT_PROBE_INTERFACES',true)dnl) G# w, O; k4 ^0 [' _. L
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl8 y+ A2 h  {) l1 Z# c
define(`ALIAS_FILE', `/etc/aliases')dnl6 k% V% u" u& }1 J
define(`STATUS_FILE', `/var/log/sendmail.st')dnl
% A: g) P4 r/ G4 ^; l( G- hdefine(`UUCP_MAILER_MAX', `2000000')dnl  B0 J9 I  Z( ]+ G. Q
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl. A) J8 ~8 L& m7 t$ K- I, r. d
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
* N- D7 V, q$ R3 xdefine(`confAUTH_OPTIONS', `A')dnl# B; p# ?* e( G% u5 T8 c* b, |! e
define(QUEUE_DIR,`/var/spool/mqueue/q*')3 F7 J" R& G3 Z) W- o. l* h8 r
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl$ V) Y1 N2 l* G6 ?5 p
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl4 P- r, y; k& _! U7 s
DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
: d6 D5 j/ P8 r' w. ^: P+ `DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
2 k7 J( G# e* n' Jdnl define(`confTO_QUEUEWARN', `4h')dnl- i0 W; W( l2 T( t3 Q
dnl define(`confTO_QUEUERETURN', `5d')dnl
3 C+ Q7 h. W7 q6 ?) e! K1 D0 @dnl define(`confQUEUE_LA', `12')dnl
- y- ~3 J- G# sdnl define(`confREFUSE_LA', `18')dnl6 m) F) w: j* f8 E2 }
dnl FEATURE(delay_checks)dnl3 X" l- F/ m( U9 G4 d$ e
FEATURE(`no_default_msa',`dnl')dnl# o6 d. M9 D5 {
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl! l: n( I2 w3 q& a2 g
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl
* D: h# G/ o1 H: G% N  q$ g+ M. ?FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl5 K7 z9 R6 X. b6 n0 ^
FEATURE(redirect)dnl( e& U0 A, V8 Z9 ?# T
FEATURE(always_add_domain)dnl
4 x. h7 T2 A6 b5 w, d1 QFEATURE(use_cw_file)dnl
2 T4 e) l* j+ s6 J# ^1 M: `5 zFEATURE(use_ct_file)dnl
* C7 W( k/ B. c; eFEATURE(local_procmail)dnl
' g4 k; `+ G7 Z7 p% e6 dFEATURE(`access_db')dnl
" M6 E4 p, C% q7 _FEATURE(`blacklist_recipients')dnl
. G5 O( U. w# b% K5 WEXPOSED_USER(`root')dnl# R; ]! Y- C  O5 C4 r! D
dnl This changes sendmail to only listen on the loopback device 127.0.0.1
( m! y" p- Q( Y+ ^% rdnl and not on any other network devices. Comment this out if you want
% |2 u& N# s) fdnl to accept email over the network.5 _4 q# w7 x7 Q1 P
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')! w% y* q( L" o8 Z
dnl We strongly recommend to comment this one out if you want to protect
4 ~/ @1 T% J2 X+ T/ G6 t. Qdnl yourself from spam. However, the laptop and users on computers that do' L7 v8 O" U1 ?4 ^4 H5 r1 E' q8 n5 ^
dnl not have 24x7 DNS do need this.
. g+ E- a3 [7 J; }dnl FEATURE(`accept_unresolvable_domains')dnl
; f9 K$ ?" q! U3 ?9 ?dnl FEATURE(`relay_based_on_MX')dnl
  G  K+ n9 a6 J! YMAILER(smtp)dnl! K; W9 C# ]2 o( B8 b7 n) Q' |
MAILER(procmail)dnl; H: Y% |/ R$ |% M( l& z! q  e3 u/ O7 q
其中,我加了下面的行:9 W9 \! _' t  o% y
1. define(QUEUE_DIR,`/var/spool/mqueue/q*')
/ Y' O0 b8 k3 }2 c2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl9 J. a" C6 K+ e# o* L" n
3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl7 O0 T# {+ e$ @9 a/ j! q, B  f  D
4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
# O- a6 n7 W) `" ~* V( e7 u5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl2 e0 r4 H5 S4 ^5 m) X- ]
注:/ w3 ]6 w5 J( X" |( s' t) ~0 G  |: p
第1行我启动了多个邮件队列,希望得到更好的队列处理和性能改进。: L! K1 T  q" x" g! V6 S
第2,3行 移走前面的注释,打开相应的各种认证机制。
* m1 E2 h6 I3 ]第4,5行 设置相应的MTA和MSA所在的端口号。
9 H) d! ]* ~5 c3 l; e& ?且注释出了0 O: L$ P; b! |, k- h- t% p9 y
1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')1 T/ U/ n# }5 v8 e- m* w
2. dnl FEATURE(`accept_unresolvable_domains')dnl
6 o, c2 p- ?2 f! h1 S第1行 允许通过网络连接Sendmail。) X2 Q# Q$ P' @, |& b
第2行 禁止不可解析的域名relay邮件
- H7 o- g3 b/ P最后运行
0 A* [( \3 r6 c0 d3 v  y! @" F#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
6 s9 `0 k' k, U  T3 V* |写到/etc/sendmail.cf文件中
& ~, b5 P" N/ ~既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如' t2 b& n1 n- \
#cd /var/spool/mqueue, F3 g' g6 K( H% }
#mkdir q1 q2 q3 q4 q5 q6! S* v1 u& j8 o+ d: L
这样Sendmail将会使用这六个目录做为队列目录,增加了性能。* e) N; u3 }+ t2 L7 V
五: 设置SASL认证方案
+ L1 U0 v: i! x, A( L1. 运行下面的命令,确保SASL被编译进Sendmail.
, v# [5 n1 g8 ?8 `! I#/usr/sbin/sendmail -d0.1 -bv root |grep SASL
! u7 f; A' E7 d) [) I+ C输出应该类似如下面:
- `! d- b. H, d+ V* G& ENETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG/ N% Z% D6 O# @' z
确保你能看见上面的文本中的 SASL
: H2 C9 s! C$ O. A2. 测试端口25,确保输出AUTH提示行。" H/ s4 k$ a1 M( h) M
#telnet localhost 25
( z" O! @8 m1 y4 O+ X: b3 b+ cTrying 127.0.0.1...2 X" S% Z) x+ r+ J4 H7 E4 v
Connected to smtp.domain.com.5 `' j1 X) g7 E' H3 _
Escape character is '^]'./ c$ `/ w6 C6 T' Y; k
220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -0800) N; I* q' \( u$ _9 W& t8 {
EHLO localhost* o5 z6 Y- M( F: G7 M7 Q
250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you
0 Q# X% i  U7 Y7 g$ b; N  c$ Y250-ENHANCEDSTATUSCODES
2 [7 E2 @) B. X" }7 a250-EXPN
8 p7 M, t! D1 f5 X250-VERB
  y% `9 F" [3 Y: s! }/ E250-8BITMIME6 E. I: q' x" N$ D! n; Z
250-SIZE
* T" x! N+ ?3 f3 L* v6 ~" y* Q250-DSN
6 j, U7 S! @/ [250-ONEX
5 O2 M- c! R2 ~7 P) t8 U% B6 ]5 h250-ETRN
9 Z- `7 |. Q8 a7 Y' O3 _9 X# p250-XUSR) P/ H% R# v0 ]
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
/ H9 ]! z& L% D. J, s( ~: S+ d  q! h250 HELP
0 W/ C, K; f7 Yquit1 B* g# \8 z$ c4 i9 ~
221 2.0.0 smtp.domain.com closing connection
' v+ ?4 @6 E) N/ B1 |8 u$ aConnection closed by foreign host.! m' U  K: z% Z. a/ I& o" K
你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。
9 z6 D( G3 d) X/ ]  L0 C1 g3. 增加SASL用户且更改密码1 t) v" ]! Q% Q' ]1 x
#/usr/sbin/saslpasswd jephe
9 t4 c  }" y6 l+ OPassword: *******7 b+ J& j( T  {+ S: H
Again (for verification): *******1 y/ k" b$ w9 I
#/usr/sbin/sasldblistusers! |* w! h& D' ?" S. I! ~9 U) j' R: S! E
user: jephe realm: smtp.domain.com mech: DIGEST-MD5- i; q$ M& J2 H9 Y1 W7 l
user: jephe realm: smtp.domain.com mech: PLAIN
/ O1 i% e' R) ?% euser: jephe realm: smtp.domain.com mech: CRAM-MD51 |2 c3 D" U; Z: s
用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。$ V0 Q3 w5 ~( i( }
特别注意: 在下面的windows的Outlook Express中设置用户名和密码时并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,在这里是 jephe@smtp.domain.com作为用户名。
! p* p# z: Y9 i( w. @; p; p#chmod 400 /etc/sasldb+ l. ?1 B) Z  |. }( N9 i# C
可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。- u4 H$ o- a" G0 N2 S8 m$ e, l8 ~
4. 更改默认的Redhat 7.1密码认证方法
" O2 e, V, Z/ @/ }1 G5 N+ C: W7 I2 W默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了- _0 A' {3 I$ j. H7 B# ^+ t
增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。
. v, i* ]. f* R* b" B2 k#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面
9 U/ C; A6 k% S9 Fpwcheck_method:sasldb
& C3 x- T3 w) y* j5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。9 I1 S3 m1 G' g5 U* q* r
六: 设置Windows的Outlook Express。
0 A) i+ s: F0 ^: ]1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中的AUTH行
# F" k* z" N: s- E+ n6 D输出PLAIN LOGIN即可。0 t! K6 T& b9 L; T, E+ j- V
2. 在‘工具’-‘帐号’-‘属性’-‘服务器‘-8 Y2 K4 R8 ], E6 j+ ^2 M$ d5 X2 z
’发送邮件服务器’中选中‘我的服务器需要认证’% m7 [; f4 ^/ R2 B/ W
然后在‘登录用户帐号’上填上
3 z& j) u% c- O- `5 r3 B“你的用户名@你的realm冒号后面的服务器全称域名”! w2 x8 I: U; k# l3 g# t& E
如:本文的情况是 jephe@smtp.domain.com* W9 {, ^% }% R! l1 \
密码为你在前面输入的密码。* V* V* O5 `! e
注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。5 ?* Q+ n' p* G: y4 k# V4 p& \8 X6 ?
3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误
  y8 U; z# L4 C# t% I然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)在后面表示是通过允许的认证机制relay的邮件。
' ?7 d5 u% q5 C+ F  y6 S! Z5 J8 i七: FAQ。+ @% r2 h" E8 N$ l+ o
1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。" A% B7 f8 c7 h7 f+ ?
答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。# c0 l, `2 z6 i9 g3 Z; j
2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。
& `" s( t& k: k( y5 g- y. ^答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为# e- [0 I9 L& [- h
pwcheck_method:pam5 `/ [5 Y9 P5 @
则你就简单地用useradd增加一个系统用户并更改密码即可。# G" C6 U" N5 b% T- N
然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。
/ `' G* [) W9 o: \8 L; W验证pop3( k% ^2 H9 n" ]& O' j
reahat 6.2 ----〉# _8 b7 n& v# w* ~' w1 M
1。/etc/inetd.conf
$ N  _& U3 m3 a- h* C0 U# pop3 stream tcp mowait
8 h4 m: b% E# t  d; V/ l4 Broot /usr/sbin /tcpd/usr/sbin/in.popsd  (#去掉)0 w8 W: a( X# ]& \6 E- i
2,存盘。/运行inetd
4 g0 ^9 q$ j4 y7 x' L3y验证:netstat -a |grep pop
5 G7 B2 @( g7 y# Q8 r: C- n( n( u1 q  B' b4 z5 Z; z
输出 ------tcp 0 0 * : pop3 *:* listen
) t/ u- t+ M5 v( k( K! J( [ok了!) l0 Z  v. I' U. p; @2 [
redhat 7.1以上:
* A9 S4 Y; d# y7 _" n8 R# @1、vi  etc/services
2 o+ l) T9 d1 ?# pop3 110/tcp
. C( C1 D, B' p# I! P% v# pop3 110/udp (去掉#)- r- W4 Z! Q2 x/ X7 T! {; n- ^+ g
ok了!
8 C$ [0 ~7 T5 B
+ A1 j- U% \' }% i8 k$ N' L3 L参考:http://www.phpwind.net/read/474365


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