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




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

一: 本文目的5 y3 X  C+ Z: y0 a/ f! W0 L, c% _
利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,以允许外面的用户以用户名和密码认证来relay邮件。/ N( N, {5 u- i. v. I, {
二: 网络系统
- Z- R8 R( e1 s4 F4 u
# I9 \0 l: N* U+ p0 [公司域名 : domain.com; r" H' m6 l+ `; h
用来认证的SMTP服务器全称域名: smtp.domain.com
" f1 R! O$ S+ b/ d三: 为什么要这样用?
! M1 |# G/ W8 `* c5 G- {- A% g假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构,公司有统一的域名domain.com,$ `- @; d; q8 u
所有员工的邮件地址类似如staffname@domain.com。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。, Y/ r1 r* b! Q0 a4 P
还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,则也同样需要一种认证方案去允许正确的用户relay邮件。
0 c! z' K/ ^5 [1 H+ S现在我们考虑做公司自己内部的邮件relay系统。9 `& R# e+ W; [3 [& \4 ~
就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统’方式安装所有需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay自己公司的员工的邮件。  L6 v# J2 {# B
四: 配置Sendmail: \& l; o: |. \) B! W3 O
1. 选择‘服务器系统’安装Redhat 7.15 F- J0 |4 v; y7 A
2. 进入目录 /usr/share/sendmail-cf/cf 。
7 R( l: a/ z5 S5 a* P& @如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。
; Q% H( \* c4 ~0 U3. 修改文件redhat.mc如下
6 c: `* q  b, C/ h0 idivert(-1)
3 d6 q- S/ F7 X8 q2 Jdnl This is the sendmail macro config file. If you make changes to this file,
4 B+ l- n: j) z4 ~3 I3 Odnl you need the sendmail-cf rpm installed and then have to generate a( z$ h! P5 X, e' y$ l1 l
dnl new /etc/sendmail.cf by running the following command:
% m3 K" O+ u1 K$ y! F2 Ddnl( x9 p2 c4 |1 i
dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
/ K( u& z; |8 ^8 _- adnl2 Y) j# ^' n' W* P! ]
include(`../m4/cf.m4')
: R; b; d* _' S$ ]- z  p% sVERSIONID(`linux setup for Red Hat Linux')dnl# t% H4 Q! Q5 l. L' `' I/ T
OSTYPE(`linux')
" y% X8 \8 e, V0 t! F; S  M! @) S8 [4 B2 pdefine(`confDEF_USER_ID',``8:12'')dnl
5 t( [. P" V* [% [! Y' I5 Jundefine(`UUCP_RELAY')dnl
* ]9 g  Y' ^: ]undefine(`BITNET_RELAY')dnl
9 d4 c- e! S# U/ Ddefine(`confAUTO_REBUILD')dnl# o1 }. O. M. B/ |7 F( L& |  ?5 R
define(`confTO_CONNECT', `1m')dnl/ h( i& H" @" R
define(`confTRY_NULL_MX_LIST',true)dnl
) [5 D' o! V0 j& {+ e/ l( @define(`confDONT_PROBE_INTERFACES',true)dnl0 i9 p. Y1 `8 u: a  N7 ~  i
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
& ~2 z$ p5 [6 ]8 ^define(`ALIAS_FILE', `/etc/aliases')dnl
0 x1 ]- R5 l- N& ?4 e4 Rdefine(`STATUS_FILE', `/var/log/sendmail.st')dnl
9 v. T" i5 }; Ndefine(`UUCP_MAILER_MAX', `2000000')dnl
0 T( ]7 Z  J: P2 \0 I( r8 P5 Odefine(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl9 W- ~& {6 h- k3 ?
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl- {. g4 K  D/ O
define(`confAUTH_OPTIONS', `A')dnl
8 A7 T# B, ?4 E2 B4 G4 Adefine(QUEUE_DIR,`/var/spool/mqueue/q*')& |9 ~0 D( S5 H3 v
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
1 k% N7 f; }  _! h' t3 s2 D: Udefine(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
$ n8 s* w% k+ r. e# [2 PDAEMON_OPTIONS(`Port=25,Name=MTA')dnl4 T" j1 Z& V( _  D; }
DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl' {' K% l1 F7 m# w, T
dnl define(`confTO_QUEUEWARN', `4h')dnl; b0 }8 s  V) p  k3 T5 }* A
dnl define(`confTO_QUEUERETURN', `5d')dnl$ a$ [( p  \- \
dnl define(`confQUEUE_LA', `12')dnl$ K3 O- ^: |: Q8 q" @+ r% D# o" c% Z
dnl define(`confREFUSE_LA', `18')dnl
0 K- T& @, s  h+ e1 l6 d0 adnl FEATURE(delay_checks)dnl. Y( i4 m* y- ^9 S* H; M
FEATURE(`no_default_msa',`dnl')dnl
9 u8 @1 L+ _' _' x6 U2 i3 o2 S- M4 uFEATURE(`smrsh',`/usr/sbin/smrsh')dnl. _9 C  f! h0 J. G$ o" f& a
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl/ H' m3 o& N$ G* r
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl1 B: U; s* ~1 `
FEATURE(redirect)dnl+ ?! `+ o( h8 C6 @/ i$ U
FEATURE(always_add_domain)dnl
* B1 _1 E7 [# D3 z9 vFEATURE(use_cw_file)dnl- H4 q/ D3 Y& n$ r
FEATURE(use_ct_file)dnl
0 f8 C  r( N5 q$ J" Q2 j9 ~7 l4 V+ ]FEATURE(local_procmail)dnl" X6 e6 G! O7 s& t+ {" w
FEATURE(`access_db')dnl0 T. `7 ?6 v1 H, f% e" V7 S* |
FEATURE(`blacklist_recipients')dnl
) E2 c5 X: X  w3 ?EXPOSED_USER(`root')dnl
  t. N0 \3 t: cdnl This changes sendmail to only listen on the loopback device 127.0.0.11 a1 x+ a  c3 ]% }
dnl and not on any other network devices. Comment this out if you want, w' i: j0 I2 ^( o/ ]% V
dnl to accept email over the network.
$ a& s3 ^2 @# \7 Mdnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
: G" A+ f3 m* pdnl We strongly recommend to comment this one out if you want to protect+ |3 G* J( g& U0 H0 m$ Z& C* |
dnl yourself from spam. However, the laptop and users on computers that do. Q5 [0 b! _, l0 ]3 l
dnl not have 24x7 DNS do need this.
1 H# h; y, a/ h4 {* kdnl FEATURE(`accept_unresolvable_domains')dnl
4 w# I$ m  V- i; W/ K3 `& m! Bdnl FEATURE(`relay_based_on_MX')dnl
: _: b# a. [! }/ \& HMAILER(smtp)dnl
5 `/ k( b2 j% C( }1 h* U  Y# m( dMAILER(procmail)dnl
! p5 i$ s! k  S/ }; h$ p其中,我加了下面的行:
7 z7 r0 ?5 r9 C6 x0 l6 [+ U1. define(QUEUE_DIR,`/var/spool/mqueue/q*'): g& t( R0 l0 C; _+ N+ d
2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
! d+ r( X4 A* j3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
2 l. M7 ~& }4 v& j4 I6 O3 Y0 |4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
3 t3 {) D" g  S; C: u2 ~( m( Z5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
5 A# c  p' j5 |! A+ A注:
; ]1 s" M4 c1 w/ Y9 C! d- S第1行我启动了多个邮件队列,希望得到更好的队列处理和性能改进。6 f8 G* }- P) H& \
第2,3行 移走前面的注释,打开相应的各种认证机制。4 A, c: z% v! B; U6 F( c; }
第4,5行 设置相应的MTA和MSA所在的端口号。
) \! ]) }3 m4 w: f, M: a6 g$ W且注释出了$ l. h# a/ d5 }, E3 y$ p9 P5 I
1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')! Z- F' C$ |1 N+ d$ G
2. dnl FEATURE(`accept_unresolvable_domains')dnl, {/ ~& C$ g9 f+ v( W. Y2 g! I
第1行 允许通过网络连接Sendmail。3 y3 B2 w" d3 j7 e7 q' g* M
第2行 禁止不可解析的域名relay邮件; c, x5 o2 {$ _+ h& N
最后运行# a7 v/ P; x! \% a
#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
; X5 Z& D$ I; G写到/etc/sendmail.cf文件中
* h; C' H. s3 n; R  s1 O' D既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如
* {- V8 m0 H& L# K! i#cd /var/spool/mqueue+ m* Q$ M4 e" N% m, l$ F+ Y
#mkdir q1 q2 q3 q4 q5 q6
7 M5 {% j- ~. o2 j; a. w这样Sendmail将会使用这六个目录做为队列目录,增加了性能。
5 |$ ~0 W& ^2 K; z- \五: 设置SASL认证方案4 w9 g+ X. P+ ^, m# p& ^9 ?
1. 运行下面的命令,确保SASL被编译进Sendmail.
/ c* q3 C7 i  q#/usr/sbin/sendmail -d0.1 -bv root |grep SASL
. j; _* w8 E, E( {# x5 {% ?输出应该类似如下面:- _/ c. ]. q1 u- r0 \
NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG
3 S. P( _5 q! @8 c4 i% ~) u确保你能看见上面的文本中的 SASL
' l( ]4 \. s1 |" \2. 测试端口25,确保输出AUTH提示行。! }* f% I0 W( B9 P- I" k8 _" L8 P
#telnet localhost 25
) q$ D- ]# B& ]Trying 127.0.0.1...
6 ]8 C' B2 O4 S; i/ o& k8 \" j) EConnected to smtp.domain.com.0 e/ k8 t/ P' a0 ~
Escape character is '^]'.8 m, j9 q) _5 Z+ v
220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -0800
% R$ c8 z1 R; xEHLO localhost
" {: A1 i8 N- ?6 \+ K$ m! e$ p; |250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you
6 P' G- }, ^- q' ?& U; C250-ENHANCEDSTATUSCODES
* S; [' I; T% }. E250-EXPN( b; [) u. Q( E0 p; b5 k( s! F1 H
250-VERB* [. o' g- d  f1 ^
250-8BITMIME9 |5 g7 z3 I. t3 c! q
250-SIZE
" h! K, T4 g# z* v' w4 M250-DSN
4 k; R9 p  d4 b4 ?( }7 D! u: F1 E250-ONEX. j. K, D7 D" T" O
250-ETRN- A% M* e* B7 i1 J1 y. e0 b& F+ r
250-XUSR7 _. a1 J5 y6 y1 N: ?0 e+ |
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5% R4 _- v( _- z" Z, X1 m: w6 P: u, f& h
250 HELP
3 R# p- p0 R, |! m; s- P  e6 r& oquit
- @+ W( r& r5 ~+ {% Q$ g221 2.0.0 smtp.domain.com closing connection* w5 b. f* N: F# d, [* Q6 i
Connection closed by foreign host.: E1 O) q- c! X3 f& O3 p9 u
你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。- ]: R! u; h- _+ H1 _, e
3. 增加SASL用户且更改密码
& S/ R1 M$ s2 W) u7 s9 B( E#/usr/sbin/saslpasswd jephe; Y7 f. y4 i3 [6 E5 u! z
Password: *******3 ^4 l3 Q2 q( J; A  L9 l2 I
Again (for verification): *******
' S7 b: K# x( v#/usr/sbin/sasldblistusers- k) m" _1 m1 C+ _+ Y/ D' w: \$ l/ V" u
user: jephe realm: smtp.domain.com mech: DIGEST-MD5
% A8 Y/ q' N0 O8 {5 h) o( ?" duser: jephe realm: smtp.domain.com mech: PLAIN
. q! {1 I! r' z# R: quser: jephe realm: smtp.domain.com mech: CRAM-MD5
. F4 d6 Z  l3 g! `( [用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。5 e- C3 P$ u6 k* V
特别注意: 在下面的windows的Outlook Express中设置用户名和密码时并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,在这里是 jephe@smtp.domain.com作为用户名。, o) v1 b! F8 s4 v+ Z
#chmod 400 /etc/sasldb. I$ I/ {$ ~9 k# a6 o8 P
可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。
4 `' f% J2 \# z0 [4. 更改默认的Redhat 7.1密码认证方法0 d" ~/ c: a8 _% q7 t& U  I
默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了
8 G, x  r$ U. b- [3 q3 B/ P* T增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。
7 [& ~" |) R) p8 r#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面
( N9 {% T' d5 A! {% J! w% |  `3 Mpwcheck_method:sasldb; `2 }. a& S, D
5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。
, i; @* Y( O! `) V1 x六: 设置Windows的Outlook Express。, ^9 l/ y* w- A  I0 }4 H2 J* N
1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中的AUTH行
* j1 V1 B  a! w' l' X! g+ W( ]$ e输出PLAIN LOGIN即可。) z9 R: z( m, C# k' }& a# N
2. 在‘工具’-‘帐号’-‘属性’-‘服务器‘-
2 C# i3 X0 X; \) `; o! y’发送邮件服务器’中选中‘我的服务器需要认证’
7 y" F  w  h* R4 `$ ^# K# B然后在‘登录用户帐号’上填上
7 U9 F5 V1 p5 Z' |“你的用户名@你的realm冒号后面的服务器全称域名”$ P) V6 t8 E" y
如:本文的情况是 jephe@smtp.domain.com
- A0 Z0 Y5 H, \( k& W密码为你在前面输入的密码。
  w: U3 z: y3 q; V% S4 V注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。. ~. V- m) d4 O8 _% V
3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误+ T4 H1 c. b( M/ F( E
然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)在后面表示是通过允许的认证机制relay的邮件。, G  V3 \) Y$ H; c2 W4 X
七: FAQ。
2 q$ |; ]& ^) H" I/ F$ k# j& _" N1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。) {0 h! l3 B  _0 e2 C
答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。
( b1 n. I3 \9 _. F6 c' l2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。
4 P( b; y0 K4 K& M2 X( G答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为) F) K9 M4 ?% i9 k- Z! C  }
pwcheck_method:pam
6 E$ y6 ^/ g$ @* e$ \) M2 a则你就简单地用useradd增加一个系统用户并更改密码即可。
  ^$ w# ?7 z6 _, ?然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。
0 J1 Z" h, D; ]6 K; z1 o- H7 r0 U验证pop3
9 h# e! g( ]8 x' ?) A  n  O) vreahat 6.2 ----〉; B! I* O) R8 B, j$ y" |
1。/etc/inetd.conf5 D" J  z, G: W" c  h+ H  [6 D
# pop3 stream tcp mowait2 ?- u9 ^+ V% ^8 r, {( [0 ?
root /usr/sbin /tcpd/usr/sbin/in.popsd  (#去掉): q6 K4 |9 j( U5 c+ i
2,存盘。/运行inetd
* r/ @3 O: o$ U0 t$ m$ F  J; t3y验证:netstat -a |grep pop7 O% t$ u, F2 |+ X+ h0 B2 _5 V

5 J8 U$ W$ u4 x) w) L输出 ------tcp 0 0 * : pop3 *:* listen8 r# J% v9 l2 ^3 H0 c( `
ok了!0 ^0 V% t8 x3 I4 f4 Q
redhat 7.1以上:
  h9 B- \0 {) V# W0 m! ?1、vi  etc/services2 C. j! r; L( n/ T2 |
# pop3 110/tcp- \* n5 f4 V4 d% h
# pop3 110/udp (去掉#)
0 z; [. i3 z) ^' z- w: U0 n: dok了!
9 f7 G# _4 f. ^2 A5 D
3 {  u: F8 p5 w# r1 b5 |参考:http://www.phpwind.net/read/474365

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