Redhat 7.1下的Sendmail SASL认证的实现
Jephe Wu(吴阿亭)
一: 本文目的
利用RedHat 7.1中的默认配置方便地设置一台利用SASL库进行用户名和密码认证的SMTP服务器,
以允许外面的用户以用户名和密码认证来relay邮件。
二: 网络系统
Redhat 7.1
__________
SMTP
Server smtp.domain.com
________ _________ (1.2.3.4)
Intranet ________
_________________Firewall_________________________ Router____Internet
_______
________
公司域名 : domain.com
用来认证的SMTP服务器全称域名: smtp.domain.com
三: 为什么要这样用?
假设上面的公司有专线接入Internet, 且在其它城市有多个分支机构, 公司有统一的域名
domain.com,所有员工的邮件地址类似如
[email protected]。 但是分支机构大多数没
有专线接入,用ISDN或者普通拨号方式入网, 并且越来越多的ISP不允许以非ISP的邮件地址
域名后缀发送邮件, 即使你是他们的拨号用户。
还有一种情况是移动用户,经常地,公司派遣用户在外出差旅行期间,用户需要发送邮件,
则也同样需要一种认证方案去允许正确的用户relay邮件。
现在我们考虑做公司自己内部的邮件relay系统。
就是设置一台SMTP服务器在防火墙之外,安装Redhat 7.1,选择‘服务器系统'方式安装所有
需要的包,然后设置Sendmail,配置一台基于SASL的用户名和密码认证的邮件服务器,以relay
自己公司的员工的邮件。
四: 配置Sendmail
1. 选择‘服务器系统'安装Redhat 7.1
2. 进入目录 /usr/share/sendmail-cf/cf 。
如果你没有该目录,说明你还没有安装sendmail-cf-8.11.2-14 RPM包,从你的安装CD中安装它。
3. 修改文件redhat.mc如下
divert(-1)
dnl This is the sendmail macro config file. If you make changes to this file,
dnl you need the sendmail-cf rpm installed and then have to generate a
dnl new /etc/sendmail.cf by running the following command:
dnl
dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
dnl
include(`../m4/cf.m4')
VERSIONID(`Linux setup for Red Hat Linux')dnl
OSTYPE(`linux')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`B99vNET_RELAY')dnl
define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
define(`STATUS_FILE', `/var/log/sendmail.st')dnl
[1] [2] [3] 下一页
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noeXPn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
define(QUEUE_DIR,`/var/spool/mqueue/q*')
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
FEATURE(local_procmail)dnl
FEATURE(`Access_db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl This changes sendmail to only listen on the loopback device 127.0.0.1
dnl and not on any other network devices. Comment this out if you want
dnl to accept email over the network.
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not have 24x7 DNS do need this.
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
其中,我加了下面的行:
1. define(QUEUE_DIR,`/var/spool/mqueue/q*')
2. TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
3. define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
4. DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
5. DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
注:
第1行 我启动了多个邮件队列,希望得到更好的队列处理和性能改进。
第2,3行 移走前面的注释,打开相应的各种认证机制。
第4,5行 设置相应的MTA和MSA所在的端口号。
且注释出了
1. dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
2. dnl FEATURE(`accept_unresolvable_domains')dnl
第1行 允许通过网络连接Sendmail。
第2行 禁止不可解析的域名relay邮件
最后运行
#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
上一页 [1] [2] [3] 下一页
写到/etc/sendmail.cf文件中
既然我们打开了多个队列,现在我们在/var/spool/mqueue/下创建任意多个队列目录如
#cd /var/spool/mqueue
#mkdir q1 q2 q3 q4 q5 q6
这样Sendmail将会使用这六个目录做为队列目录,增加了性能。
五: 设置SASL认证方案
1. 运行下面的命令,确保SASL被编译进Sendmail.
#/usr/sbin/sendmail -d0.1 -bv root grep SASL
输出应该类似如下面:
NETUNIX NEWDB QUEUE SASL SCANF SMTP USERDB XDEBUG
确保你能看见上面的文本中的 SASL
2. 测试端口25,确保输出AUTH提示行。
#telnet localhost 25
Trying 127.0.0.1...
Connected to smtp.domain.com.
Escape character is '^]'.
220 smtp.domain.com ESMTP Sendmail 8.11.2/8.11.2; Sun, 1 July 2001 17:56:54 -0800
EHLO localhost
250-smtp.domain.com Hello IDENT:
[email protected] [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-EXPN
250-VERB
250-8B99vMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250 HELP
quit
221 2.0.0 smtp.domain.com closing connection
Connection closed by foreign host.
你需要至少看见AUTH行中有LOGIN PLAIN在那里,否则不能relay mail。
3. 增加SASL用户且更改密码
#/usr/sbin/saslpasswd jephe
PassWord: *******
Again (for verification): *******
#/usr/sbin/sasldblistusers
user: jephe realm: smtp.domain.com mech: DIGEST-MD5
user: jephe realm: smtp.domain.com mech: PLAIN
user: jephe realm: smtp.domain.com mech: CRAM-MD5
用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。
特别注意: 在下面的windows的Outlook Express中设置用户名和密码时
并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,
在这里是
[email protected]作为用户名。
#chmod 400 /etc/sasldb
可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。
4. 更改默认的Redhat 7.1密码认证方法
默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了
增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。
#vi /usr
(出处:http://www.sheup.com)
上一页 [1] [2] [3]
#/usr/sbin/sasldblistusers
user: jephe realm: smtp.domain.com mech: DIGEST-MD5
user: jephe realm: smtp.domain.com mech: PLAIN
user: jephe realm: smtp.domain.com mech: CRAM-MD5
用户的密码DB文件在/etc/sasldb,用下面的命令确保正确的许可权设置。
特别注意: 在下面的windows的Outlook Express中设置用户名和密码时
并不是简单地使用用户名jephe,而是用象“user@realm”的用户名,
在这里是
[email protected]作为用户名。
#chmod 400 /etc/sasldb
可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。
4. 更改默认的Redhat 7.1密码认证方法
默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了
增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。
#vi /usr
(出处:http://www.sheup.com)
上一页 [1] [2] [3] [4]
在这里是
[email protected]作为用户名。
#chmod 400 /etc/sasldb
可以用/usr/sbin/saslpasswd加更多的用户,用/usr/sbin/sasldblistusers检查用户已经加入。
4. 更改默认的Redhat 7.1密码认证方法
默认地,Redhat 7.1中的Sendmail用PAM方法检查密码,这意味着用户必须是系统用户,为了
增强安全性,我们改用/etc/sasldb中的用户,改下面的文件中的pam为sasldb。
#vi /usr
(出处:http://www.sheup.com/)
上一页 [1] [2] [3] [4] [5]