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




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

一: 本文目的  w* D6 f: S* w# k/ O+ V2 m4 Q# _: M
利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,以允许外面的用户以用户名和密码认证来relay邮件。. w9 r5 n4 l# d: w- T
二: 网络系统" c" v* x. P& n$ V7 H- [
6 z. i+ u" m- Y: j# g3 G
公司域名 : domain.com
' `* b4 F& m' m  U- A2 F用来认证的SMTP服务器全称域名: smtp.domain.com
% e4 {* O" P6 X" A! Q三: 为什么要这样用?# r2 g% Q, q6 r$ j6 w3 j2 ^
假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构,公司有统一的域名domain.com,1 j& y) E0 h; |" e
所有员工的邮件地址类似如staffname@domain.com。但是分支机构大多数没有专线接入,用ISDN或者普通拨号方式入网,并且越来越多的ISP不允许以非ISP的邮件地址域名后缀发送邮件,即使你是他们的拨号用户。
4 e( f+ t, x, g2 s; d- W' |- H还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,则也同样需要一种认证方案去允许正确的用户relay邮件。
/ X: n+ s# p, F7 s3 Z1 }现在我们考虑做公司自己内部的邮件relay系统。5 n* B: w$ i+ P" J7 k7 [$ s4 F
就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统’方式安装所有需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay自己公司的员工的邮件。
3 {( k$ A! J: D/ }4 ~; R2 C% L* a四: 配置Sendmail
( a8 R+ H* I* p: V* v- {1. 选择‘服务器系统’安装Redhat 7.1
) O5 B( K6 z% m  `2. 进入目录 /usr/share/sendmail-cf/cf 。
2 C, V* z  k7 A/ g( c) T5 \9 J! Y$ H* c$ P如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。
; y0 j6 y5 o+ W( @5 |  U2 {. M3. 修改文件redhat.mc如下& j5 X1 K: B% z+ x, F; R
divert(-1)' c; D$ q7 t9 m: D& R
dnl This is the sendmail macro config file. If you make changes to this file,
( s# E  P; ]  K/ w7 P* t7 I! ~2 Cdnl you need the sendmail-cf rpm installed and then have to generate a% `, l& {7 Z; `7 ~) L: }' ~
dnl new /etc/sendmail.cf by running the following command:
" U5 F( X' h: y1 s( ~dnl
( G5 ?6 w' K5 q6 I' ydnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf- _# P1 }  H, s0 C4 g. h
dnl7 W+ G% s/ `# S9 O
include(`../m4/cf.m4')& T2 H( F4 N8 ~2 `
VERSIONID(`linux setup for Red Hat Linux')dnl- o4 P& l* i2 b. F" t
OSTYPE(`linux')
. i/ K! G6 ]5 T$ H4 z9 K0 [& y% H0 O4 Ddefine(`confDEF_USER_ID',``8:12'')dnl3 M2 y1 E: F. c" w4 R& w
undefine(`UUCP_RELAY')dnl
4 e$ t* P, K7 D' C: j4 @1 k) Nundefine(`BITNET_RELAY')dnl! g! h. V* p+ A! ^, H
define(`confAUTO_REBUILD')dnl
& s+ }* n+ j- P5 @, W! jdefine(`confTO_CONNECT', `1m')dnl
  m5 r1 o/ S0 a6 Y. h* x8 {, qdefine(`confTRY_NULL_MX_LIST',true)dnl+ q. }- E0 c% |, g8 g
define(`confDONT_PROBE_INTERFACES',true)dnl
/ G/ ]$ N7 I' t8 n' E% b6 adefine(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
% y. P1 {! \$ g, T) ~: gdefine(`ALIAS_FILE', `/etc/aliases')dnl
: h  l( D' P- B9 o( Wdefine(`STATUS_FILE', `/var/log/sendmail.st')dnl/ h# d3 T! I7 k: ?# O" H- i
define(`UUCP_MAILER_MAX', `2000000')dnl: x- y/ u6 T& Z) X9 b5 P) n
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
$ V" t" R1 V) d4 vdefine(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl9 b* X% i0 I; ^1 q
define(`confAUTH_OPTIONS', `A')dnl
6 V3 f/ m( d' z; H+ Bdefine(QUEUE_DIR,`/var/spool/mqueue/q*')5 J9 p# Y; W- u1 u; E) y
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
0 H1 X5 f3 G" Y, j$ C$ gdefine(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl( q% f7 J" w' m: i1 C3 A
DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
+ b7 J. n* Y- f; SDAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl4 J( u0 b% m7 B/ L5 h/ @6 F" i* {
dnl define(`confTO_QUEUEWARN', `4h')dnl
% V& i4 y0 E$ h% w  F/ t. _8 qdnl define(`confTO_QUEUERETURN', `5d')dnl  Y; f# f- g) `7 F
dnl define(`confQUEUE_LA', `12')dnl
& E) s' a, P0 L  Ndnl define(`confREFUSE_LA', `18')dnl, r  }+ Q8 @8 }) k) L
dnl FEATURE(delay_checks)dnl0 C- I$ W" O; {& B, @# I9 w0 h
FEATURE(`no_default_msa',`dnl')dnl" h" |+ ^1 m; T) F
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
- [, k% ^6 Z& z% M  C+ ~FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl. q6 \* A$ \( T
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl# v; n6 z. u. p. h
FEATURE(redirect)dnl; \9 \" ~' \* j' k' ~$ Q" G, s
FEATURE(always_add_domain)dnl% \% v, W1 w% T( l/ y& F+ l
FEATURE(use_cw_file)dnl0 p7 e1 l# b1 y! E  e2 F
FEATURE(use_ct_file)dnl
5 i. k$ F* c* ^9 P( k, [" eFEATURE(local_procmail)dnl7 v+ w" e3 X) s3 f! I5 t$ O
FEATURE(`access_db')dnl
$ n% d! s0 {, _2 p# GFEATURE(`blacklist_recipients')dnl
/ q3 x# S4 y' N* X4 LEXPOSED_USER(`root')dnl$ s) D' l( i0 K. p% A1 a( c
dnl This changes sendmail to only listen on the loopback device 127.0.0.1! e1 T# N; I/ L( r+ _6 g3 q
dnl and not on any other network devices. Comment this out if you want5 w5 k7 N2 t5 X! ]3 V
dnl to accept email over the network.6 }) s; B# D$ G- @2 w
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
# Z' @2 \" j' L1 p0 S' m$ Xdnl We strongly recommend to comment this one out if you want to protect; N! r, F6 i; s
dnl yourself from spam. However, the laptop and users on computers that do0 Q+ s( q6 @, l& a: e
dnl not have 24x7 DNS do need this.
, y. W: X. _2 s5 Fdnl FEATURE(`accept_unresolvable_domains')dnl& p) E) S( H. k
dnl FEATURE(`relay_based_on_MX')dnl
* a% s" v$ Q9 K& h' Z" ?5 qMAILER(smtp)dnl
4 y# U2 K2 T1 }/ r$ i0 YMAILER(procmail)dnl6 l7 x/ E- R* t, D
其中,我加了下面的行:& r% ^1 S3 d$ c  m( V. Z3 l: H6 s
1. define(QUEUE_DIR,`/var/spool/mqueue/q*')
' Q7 Z4 Y( X0 J/ [5 N7 J2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl* A# S% ?2 _' _! b* o$ m6 m1 Y! ?* A
3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl- K5 p  F9 c; y& k) H& W8 z
4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
% F9 R+ N  T6 k2 @: [7 e- D# t% h& J# `5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl9 j( o2 h" ]& O6 q4 `
注:
7 ]4 I: T# d( j' \* o第1行我启动了多个邮件队列,希望得到更好的队列处理和性能改进。
" a0 @& ~( C* e3 m/ E( ?( @, C0 l/ x" r第2,3行 移走前面的注释,打开相应的各种认证机制。) h. f: e; O4 r- _& z
第4,5行 设置相应的MTA和MSA所在的端口号。
0 W- `. b! t( b. d0 Z- V& j+ X且注释出了
% K% C, J% b  [4 }0 [( D0 R1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
! X. b# V* j) {2. dnl FEATURE(`accept_unresolvable_domains')dnl: x4 E; K* `! ^# B
第1行 允许通过网络连接Sendmail。
) `3 W/ h1 O" n# Q! N第2行 禁止不可解析的域名relay邮件5 c; v% s8 K/ F% d; p8 }
最后运行; r$ A0 w" M& Q% h! b
#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf* U6 M9 O( e3 |/ l) U
写到/etc/sendmail.cf文件中
! k: V6 D2 M' D! T; W- V4 u6 Q既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如% J4 \/ h7 k% ]2 Z: u
#cd /var/spool/mqueue
5 p2 _# }: M" c6 E#mkdir q1 q2 q3 q4 q5 q6
  o  z) I% H" m这样Sendmail将会使用这六个目录做为队列目录,增加了性能。1 G' V2 R" V. k$ c* E. m# I/ l
五: 设置SASL认证方案. h  @# ?. @9 s, z% j3 {
1. 运行下面的命令,确保SASL被编译进Sendmail.
. m" o! q8 m( d+ S3 X#/usr/sbin/sendmail -d0.1 -bv root |grep SASL
$ _2 U+ k& p- h, V0 h输出应该类似如下面:6 `4 ~/ e& C% a6 R9 N' Z' W
NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG$ u& @4 W2 Q1 a  n/ ~
确保你能看见上面的文本中的 SASL
3 L+ w$ T* W9 T& J3 `2. 测试端口25,确保输出AUTH提示行。9 X$ _; k) F9 i5 v% C# N+ G0 m6 n. o
#telnet localhost 25
7 h) Y. I" N( A! ^) j( ?Trying 127.0.0.1...
+ V6 x6 F1 d" cConnected to smtp.domain.com.5 a" b1 s) H* D, k/ a
Escape character is '^]'.9 H1 d( o4 A! w( O% K3 h% d. h6 z8 P
220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -0800" ?9 m) N0 U5 N9 q* [( q- h. D
EHLO localhost
. s5 }+ ~0 B( H4 Q0 v2 q4 l# a% G" @250-smtp.domain.com Hello IDENT:root@smtp.domain.com [127.0.0.1], pleased to meet you9 S% R: @3 I% u
250-ENHANCEDSTATUSCODES
3 Z2 K6 q5 ^" C0 u5 @250-EXPN$ _7 |3 @% ^2 I6 d$ L0 e
250-VERB5 ]4 \0 U1 I/ k/ D; I$ I
250-8BITMIME; J: H7 T+ }) ?4 R9 C6 E+ K
250-SIZE; U4 r) v7 l" G0 [) Q' P
250-DSN
7 f4 D4 ~; N/ b. l250-ONEX
) g' C; Q. o+ u  m( G& g250-ETRN
; N2 A; d1 W/ S8 |3 a250-XUSR
4 n4 V  v6 z0 r; }250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5; n- O2 s1 m. d
250 HELP8 Q7 N7 u; d" l4 |7 A
quit# @( e3 R# u7 ~% E* T
221 2.0.0 smtp.domain.com closing connection
5 y; n, N/ M2 o% k; aConnection closed by foreign host.' t0 v: r& {& M
你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。
, G1 {& K7 N  {# D/ w3. 增加SASL用户且更改密码" h+ b* e: }  i* F+ Z
#/usr/sbin/saslpasswd jephe
) Y+ \: c- D( r8 h% g3 IPassword: ******** W  a: E$ v2 I- {7 F0 g
Again (for verification): *******% p6 U! m( M1 p" o9 M) \7 s) _
#/usr/sbin/sasldblistusers; R1 T3 `6 @# B* V+ \
user: jephe realm: smtp.domain.com mech: DIGEST-MD5
2 B9 t6 v1 A5 q7 I% Auser: jephe realm: smtp.domain.com mech: PLAIN
) ^( q& u7 V6 n" guser: jephe realm: smtp.domain.com mech: CRAM-MD5
, W9 U: n0 b" g, L1 H% ~" Y用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。
% Z+ U; `, {9 H( Z特别注意: 在下面的windows的Outlook Express中设置用户名和密码时并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,在这里是 jephe@smtp.domain.com作为用户名。
6 U9 `. ]: _% r+ D#chmod 400 /etc/sasldb
$ t, t2 d) N# t/ p可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。: K4 V1 B5 R  z: Q' `$ c+ z3 `0 `
4. 更改默认的Redhat 7.1密码认证方法! \+ C0 t% N* e
默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了
9 Y9 X- _' P! r1 i, U" R! H% Q增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。" F' U1 J/ D5 H, O( f' L3 v8 W6 }( s
#vi /usr/lib/sasl/Sendmail.conf 更改pwcheck_method行象下面1 Q# y6 ]( s' s% v" c" L% F/ C
pwcheck_method:sasldb; ?9 u( B$ r6 Y5 o
5. 最后,运行/etc/rc.d/init.d/sendmail restart重新启动Sendmail。2 S5 O. T1 |" {; t6 x' Q
六: 设置Windows的Outlook Express。1 e& C) P% Y$ j0 u& E6 z% F" v1 H3 t
1. Outlook Express仅仅使用 PLAIN LOGIN 认证机制,确保上面的telnet localhost 25中的AUTH行8 u+ g% P4 e! |8 B! e
输出PLAIN LOGIN即可。
' [# y/ {) I$ M& h8 w' s2. 在‘工具’-‘帐号’-‘属性’-‘服务器‘-
- i7 [! n! f, o9 Y6 k’发送邮件服务器’中选中‘我的服务器需要认证’  O5 ~' ?: d3 Y) j5 m$ o
然后在‘登录用户帐号’上填上
8 X2 {( v5 M4 M4 v! m+ I“你的用户名@你的realm冒号后面的服务器全称域名”2 K) D, [8 R# l$ h- L+ W
如:本文的情况是 jephe@smtp.domain.com
4 o( D  F9 Z" z* e- e3 k) L密码为你在前面输入的密码。
/ e. y, h+ w+ {) O注意: 用户名绝不是简单地 jephe,必须跟上realm:后面的域名。
4 t& }+ {" \; F. E3. 现在测试,发一封信给自己,检查tail -f /var/log/maillog有无任何错误. {1 e; N) ^5 L1 F" {
然后在收到自己发出的信之后检查邮件头,你能发现被服务器接收后有个(authenticated)在后面表示是通过允许的认证机制relay的邮件。
- U: x1 m$ C4 O' q5 {7 U* ^+ i七: FAQ。: Z& H) ?& d4 D1 }
1. 如果你没有命令saslpasswd,sasldblistusers在/usr/sbin/目录下面。
; ]) s3 m" y8 W0 ]% Z( j. O: Q1 Z答: 你需要安装cyrus-sasl-1.5.24-17 RPM包。
3 l! d1 N( y6 `2. 如果不想用SASL认证,就用默认的Redhat 的PAM方法。8 i+ L; o, w. \; q  {; s3 \( p
答: 忽略上面的SASL设置的部分,默认地 Redhat 7.1的 /usr/lib/sasl/Sendmail.conf文件里面为; r! m. Y# c' w. v7 i
pwcheck_method:pam* N0 {0 `5 d7 U0 ?- c
则你就简单地用useradd增加一个系统用户并更改密码即可。
6 I1 U( ^) d4 w+ R7 @; |; E然后在Outlook Express中设置用户名时则只用如“jephe”即可,不需要跟全称域名。! p- v  z- ~  L3 V; T, u% h/ r
验证pop3! o9 l/ v$ Q; f: k0 j
reahat 6.2 ----〉- Q' i/ e* c. s3 O9 D) b/ V
1。/etc/inetd.conf$ M7 w" f" N0 D4 f; [$ \! A
# pop3 stream tcp mowait! R  H, S3 w* |5 n( G* @
root /usr/sbin /tcpd/usr/sbin/in.popsd  (#去掉)
- W5 m( ?+ V  I# x/ W% q- T2,存盘。/运行inetd( T% ?8 u: `) G
3y验证:netstat -a |grep pop1 A7 E& d. e* ^/ o: M7 q

, s( L! F  t4 k+ u) T5 L% ^输出 ------tcp 0 0 * : pop3 *:* listen1 ~( V! j% V7 Z. ]$ R
ok了!0 L7 k% Y! F& f
redhat 7.1以上:
) x' _. o, J8 X+ w# r: A1、vi  etc/services
# _8 R  ], ^! E2 v- q( e- i# pop3 110/tcp3 e" F) b$ J7 z; t
# pop3 110/udp (去掉#)
, d5 y1 j, s" T- l/ X- e. uok了!
7 a" A& L- M- F) W! d( b' f7 ]3 k. t7 ]  r) _
参考:http://www.phpwind.net/read/474365


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