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




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

一: 本文目的
1 C' m0 N% ?/ |利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,以允许外面的用户以用户名和密码认证来relay邮件。- Q5 v) _5 m( t; ?
二: 网络系统
% s2 z0 I+ w# p3 \) ^, S* ?; \# ^# F# o" K9 d
公司域名 : domain.com( L' @+ E8 [9 j
用来认证的SMTP服务器全称域名: smtp.domain.com
! _) f& j( U0 N- g  Y三: 为什么要这样用?/ Q! d8 N* Y+ |1 a: q, Q1 u
假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构,公司有统一的域名domain.com,* }* [4 S  Y9 i+ e4 j: b
所有员工的邮件地址类似如staffname@domain.com。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。
% f1 c, ]& p) y8 n5 l还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,则也同样需要一种认证方案去允许正确的用户relay邮件。
# K. A$ I3 Y! P- \. n现在我们考虑做公司自己内部的邮件relay系统。' Z6 R% Y: B1 m) a4 t1 Y
就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统’方式安装所有需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay自己公司的员工的邮件。
& i5 G4 a5 }7 t四: 配置Sendmail: C- g4 t) s- s+ J" c% \
1. 选择‘服务器系统’安装Redhat 7.1
% F* T. |' F0 R7 l2 J- ^2. 进入目录 /usr/share/sendmail-cf/cf 。% m8 _: z/ |' Y! b
如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。& G# O/ g9 Z" D0 O+ ~" x# W/ E
3. 修改文件redhat.mc如下
" G4 W4 W1 X: G% i1 a4 E2 Y/ H6 Pdivert(-1). w9 F% Q) ^  d# f+ p: z
dnl This is the sendmail macro config file. If you make changes to this file,, p8 v1 ]& k8 i. s4 t- ^
dnl you need the sendmail-cf rpm installed and then have to generate a
# {& K5 ~/ b( @, F  N$ K2 Zdnl new /etc/sendmail.cf by running the following command:
( T4 W& {$ p; d+ a  ndnl
, n# T. y. j; c6 [3 ]5 x8 Udnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
# |6 h0 [. Q# K( Cdnl1 B# |- }' b# t( I; s" E( n" g
include(`../m4/cf.m4')
% x" e" ^8 ^2 ~. s/ cVERSIONID(`linux setup for Red Hat Linux')dnl' L- |5 n! k& J9 u% g# R2 I
OSTYPE(`linux')
' E) V) z! \# Bdefine(`confDEF_USER_ID',``8:12'')dnl
3 m! o  C$ E* F9 t! p; G  h7 Aundefine(`UUCP_RELAY')dnl
0 p9 _  u2 y7 Dundefine(`BITNET_RELAY')dnl. A3 z1 b- _- o: E! E4 \
define(`confAUTO_REBUILD')dnl
9 G+ N8 @2 h& p4 g& |0 e2 Q6 ~) r- edefine(`confTO_CONNECT', `1m')dnl, h' }+ F8 o( q3 `7 K
define(`confTRY_NULL_MX_LIST',true)dnl
! }1 G/ G) S! A$ V) |define(`confDONT_PROBE_INTERFACES',true)dnl
2 f( e) y& M/ H( A9 `) ldefine(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl7 P, G1 v5 b5 H6 m  c) k0 i
define(`ALIAS_FILE', `/etc/aliases')dnl
9 e; F, E4 c  t4 J" l3 tdefine(`STATUS_FILE', `/var/log/sendmail.st')dnl
2 u& i4 Y. k; @- q$ ]$ @1 Q4 {define(`UUCP_MAILER_MAX', `2000000')dnl
3 T8 G( @+ K0 [+ x& r* L- Udefine(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl. d, X0 B2 w$ [- f% V
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl% `" I2 R; f8 |8 P: P
define(`confAUTH_OPTIONS', `A')dnl2 Q* a& j& d; C7 S% _* \
define(QUEUE_DIR,`/var/spool/mqueue/q*')
: _: y2 x. v' _TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
. y, T; K- ]: ]9 {4 _- V# n8 @- Hdefine(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl$ _$ g& {+ u0 N5 W1 f7 g7 ]
DAEMON_OPTIONS(`Port=25,Name=MTA')dnl1 {1 }3 |. q" x/ W- H+ E, Z
DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl9 O* U' x7 @+ m/ S. @
dnl define(`confTO_QUEUEWARN', `4h')dnl* x0 g# W: k# d( n' i  A
dnl define(`confTO_QUEUERETURN', `5d')dnl# M) X9 s/ o- @5 h3 o; L: N0 k4 g
dnl define(`confQUEUE_LA', `12')dnl) Y1 ?1 V. H4 j  h8 M9 m7 f
dnl define(`confREFUSE_LA', `18')dnl
5 E0 H$ w* @' i- w" o- Gdnl FEATURE(delay_checks)dnl/ v& U, O! w2 u/ o/ ]: [) t
FEATURE(`no_default_msa',`dnl')dnl
8 ]9 _6 B& a- f6 Y# V; V5 J, J; AFEATURE(`smrsh',`/usr/sbin/smrsh')dnl4 @2 y, T: b( U/ u& h
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl
4 B8 Y# z; O6 K$ g) A; S: UFEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl  F9 m, u9 g9 Y2 O8 }
FEATURE(redirect)dnl
& i+ _. U9 B% X9 mFEATURE(always_add_domain)dnl
" \0 E' S* \/ s4 _+ z0 M: \$ ~0 I' rFEATURE(use_cw_file)dnl9 T1 D7 c$ z* Z7 `1 w! v
FEATURE(use_ct_file)dnl
5 E- L+ X$ O* u' ?) \( OFEATURE(local_procmail)dnl6 c6 o* G0 N6 ~7 J
FEATURE(`access_db')dnl
' m- l& }% ?0 CFEATURE(`blacklist_recipients')dnl
5 J5 ^3 ?' `1 O# [3 }, aEXPOSED_USER(`root')dnl+ e) S( m' D0 j' w' o* G
dnl This changes sendmail to only listen on the loopback device 127.0.0.1
6 H- Q6 ^% a  u2 S' r3 a) ]' Zdnl and not on any other network devices. Comment this out if you want
8 @+ s: p  D& P1 C8 c7 o9 F  |dnl to accept email over the network.
8 f8 q# n! s& [dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
2 w- T+ `- Y  y8 x% k# R- mdnl We strongly recommend to comment this one out if you want to protect
# p$ x7 o9 z+ ^, s- |dnl yourself from spam. However, the laptop and users on computers that do
3 G( t+ g/ U. n) [. H4 ]dnl not have 24x7 DNS do need this.% c  x) Y' g6 j# L. q
dnl FEATURE(`accept_unresolvable_domains')dnl" ~: L+ p/ ?$ k4 y* \1 l' b6 k
dnl FEATURE(`relay_based_on_MX')dnl
# \0 K/ `3 E- m. vMAILER(smtp)dnl
) h0 \1 O! R$ @. X8 uMAILER(procmail)dnl* T2 ~- n7 v7 n. N' t  `1 ]
其中,我加了下面的行:3 u; }4 \4 G! _6 i( f) B; J
1. define(QUEUE_DIR,`/var/spool/mqueue/q*')2 ?9 j& Z; N/ p/ \
2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl4 K5 H% I4 H. ^
3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
) I& ~# ^) _* z* Q: P5 \$ Q3 M4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
0 ~7 t0 g; b, J3 w7 Y, [; P7 B) a5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
" R) i6 A, T5 n: n0 ?# r; {  U注:; g' j1 `8 Y( v
第1行我启动了多个邮件队列,希望得到更好的队列处理和性能改进。
, {" l2 _, T$ K* _: r; @8 f第2,3行 移走前面的注释,打开相应的各种认证机制。& M2 _1 ]$ @+ u8 o- q, |
第4,5行 设置相应的MTA和MSA所在的端口号。3 H4 O& p! N* o) ^( b- k; T" H$ U
且注释出了
6 j7 r5 f7 C+ O1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')6 [6 m" o' J! ^6 L6 c; j2 y
2. dnl FEATURE(`accept_unresolvable_domains')dnl
9 _; Z" u0 R' k4 X: r" m第1行 允许通过网络连接Sendmail。9 P0 F4 {8 m( L+ K
第2行 禁止不可解析的域名relay邮件+ j+ T7 A  v+ t$ w3 A  c1 n! O' m+ H1 H7 B
最后运行4 K" \6 F* Z7 z2 O
#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf+ t. F. V8 {# U* }/ T. Z
写到/etc/sendmail.cf文件中
% _: x7 g0 i# v9 F, S既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如
8 y# c9 r- B3 k# v- N: i+ X#cd /var/spool/mqueue
! u9 `1 @! L2 _7 A& t, f" a  G8 Y#mkdir q1 q2 q3 q4 q5 q6
# d( J2 Q- K/ v) a7 V$ o这样Sendmail将会使用这六个目录做为队列目录,增加了性能。
7 C( ]; A7 Z# h+ U五: 设置SASL认证方案* m2 r! Q5 Z) a* T
1. 运行下面的命令,确保SASL被编译进Sendmail.
8 n# b4 h: K2 _/ j& p) ]5 P#/usr/sbin/sendmail -d0.1 -bv root |grep SASL( p; s1 A) k- M7 |+ |& G$ v
输出应该类似如下面:+ e, `/ l1 @  H/ O, R! h
NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG
( q6 I5 B2 A) _) v确保你能看见上面的文本中的 SASL" R! F. }% {2 i2 R6 a" {( v
2. 测试端口25,确保输出AUTH提示行。8 j$ f5 ?& p8 `8 H; O7 a
#telnet localhost 25
& ~: a4 v( D5 J/ ^# HTrying 127.0.0.1...
  r- j  O8 i, k( W; s2 ?. GConnected to smtp.domain.com.
3 J4 ~" {( t( P+ HEscape character is '^]'.
6 Q; c' v  ^; W, x5 I% V! m7 [220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -08005 N! P) Q! l% l! [
EHLO localhost% x9 S% E9 \! T- ?7 n: D% Y# {
250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you  S5 v- }( J2 l, d, {- i* n& t/ J
250-ENHANCEDSTATUSCODES
8 p2 l, H7 a2 `3 n; x9 K  O250-EXPN0 D4 G4 i  y& T; H6 ^, j2 E, }. \
250-VERB7 i! x% n5 F+ I& b& o% J- D6 z1 p
250-8BITMIME
  h( m& e' K+ c3 H& d250-SIZE- ?7 ]; g% y3 l
250-DSN
' L0 _$ N& `8 q+ q# ~3 |/ I; o0 {7 X250-ONEX( b- j  e+ W$ N# Z3 R
250-ETRN. I/ K: P' r- h5 R7 L' P
250-XUSR
: X2 j6 L: v% |/ @4 a/ o250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
- d) ^* N% x# [( l( @7 W250 HELP- b1 h6 e9 v- {" {/ g
quit& c6 A* x' p: R& N( |( t0 ]
221 2.0.0 smtp.domain.com closing connection& h( ]7 H: ?0 X6 B* H  c0 u. g
Connection closed by foreign host.
6 K' |+ |9 H. Q% G3 |你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。! r6 ^. Q' B& p/ U
3. 增加SASL用户且更改密码
+ R1 S7 E% A' ]; \9 e#/usr/sbin/saslpasswd jephe8 V/ y) t. ?4 z1 ?. l3 U& ?
Password: *******  ]) Q4 G/ r! t8 a. R
Again (for verification): *******1 _" d# I6 K& W
#/usr/sbin/sasldblistusers- `( v( _  F3 ?9 L
user: jephe realm: smtp.domain.com mech: DIGEST-MD5
; E; D& C  _. ]4 p4 o+ Iuser: jephe realm: smtp.domain.com mech: PLAIN
0 B% @: V/ o+ Duser: jephe realm: smtp.domain.com mech: CRAM-MD5
5 j5 D. R' r; T8 {& R2 v2 N  E用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。9 s! A) F0 H9 Y& ?" F
特别注意: 在下面的windows的Outlook Express中设置用户名和密码时并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,在这里是 jephe@smtp.domain.com作为用户名。
% ]& V/ C7 R1 c( N! q5 J3 M#chmod 400 /etc/sasldb
: B" `1 ?, n& }1 v$ H可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。
0 ]. l  O; W! L* f' q% u! w4. 更改默认的Redhat 7.1密码认证方法
9 x- t* }' B  N- w默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了. r# J! J: D) Q. U9 K
增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。
/ |. }3 J4 [1 K8 y% ?* Z#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面5 P4 o+ E: {" y9 C7 I7 M& J
pwcheck_method:sasldb3 s  M7 B* B; E6 h/ q
5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。$ M" y8 S, b# r' V
六: 设置Windows的Outlook Express。
' P3 m( }- R( r2 F6 t1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中的AUTH行! E4 \5 u1 f5 }$ a# q8 z" R7 V4 Z
输出PLAIN LOGIN即可。
9 O( B* b! |+ z1 z2. 在‘工具’-‘帐号’-‘属性’-‘服务器‘-
4 {9 v. x! w( a/ e, w, w$ D& M2 e’发送邮件服务器’中选中‘我的服务器需要认证’
% S! t. j# Z7 x5 X2 \2 |, J然后在‘登录用户帐号’上填上* x! `/ u( I, _7 i6 ?) Z1 U4 ?! d! E7 B
“你的用户名@你的realm冒号后面的服务器全称域名”- T5 ^* d& {6 h
如:本文的情况是 jephe@smtp.domain.com7 m! [  \" R. l1 z5 G- f8 X7 k# U
密码为你在前面输入的密码。
7 B6 }" }8 J  s( j- I注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。: ]5 V$ q3 a5 T4 V
3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误7 H5 l- m/ a; r' ~
然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)在后面表示是通过允许的认证机制relay的邮件。8 B4 a6 [6 ^0 F5 q+ c
七: FAQ。; O$ X. x6 A/ j; d
1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。/ ^1 D* e6 w* e* V0 M
答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。
0 S1 E4 X1 c7 s. g/ ?: {! ?! c8 }4 R2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。
1 ^. r' f; _; Y; F# s8 f- w8 q1 V2 @答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为
# W5 k$ Z; Z7 \: `2 \5 Spwcheck_method:pam+ q. I) H- P* \! C# j5 C; l4 p+ P
则你就简单地用useradd增加一个系统用户并更改密码即可。
$ t/ h* Z6 v! o  ~7 B然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。0 o: Y" Z% J, |5 f5 d
验证pop3
" d. A# z( ~3 N: p5 D! d9 h6 \, creahat 6.2 ----〉0 h4 {4 i, q, _) \% u' ^
1。/etc/inetd.conf
" b( U& ]6 }3 o( j/ U( \1 D# pop3 stream tcp mowait* S; u2 z8 T( z: F) h7 t
root /usr/sbin /tcpd/usr/sbin/in.popsd  (#去掉)1 n/ K5 t' ?: S4 B
2,存盘。/运行inetd( r, u7 |+ K" G1 q4 M" d7 P
3y验证:netstat -a |grep pop
+ P. P; C" m0 o7 g0 C& E7 V9 d( I' _3 \2 f# [
输出 ------tcp 0 0 * : pop3 *:* listen
% {! e) P$ k, o& t1 _5 W, i$ H8 Gok了!
( E! C' m8 J1 Q4 d, D8 J! ]$ I  a  Dredhat 7.1以上:
( i1 K, N: p" R- ~# K/ `$ }1、vi  etc/services3 O- b6 h& G" |; q7 }! t4 p6 x
# pop3 110/tcp' c; q' v, p5 J7 O7 j0 @
# pop3 110/udp (去掉#). D2 O5 Q( P  A1 b$ J
ok了!
. R( M8 v3 K2 A( Y+ B
" ~$ B: y- @1 L; t  F参考:http://www.phpwind.net/read/474365

美国VPS、域名代购:http://tu8l.taobao.com

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