首页 > 学技术 > 技术网文 > Mail服务器 > 正文

[精华] 再说说QMAIL邮件RELAY规则和SMTP认证的实现


来源 chinaunix.net 酷勤网整理

以前我曾经在本板块发过一个帖子专门讨论过QMAIL邮件的转发规则,
最近老是看到一些初学者提问SMTP认证.我觉得问题的根源在于:
1 初学者对QMAIL的邮件RELAY规则的本质还很模糊.
2 世界在进步,初学者老是拿N年前的帖子照葫芦化瓢.殊不知,QMAIL的配置
  是相当复杂的,而且一个完整的邮件服务器涉及到很多的相关软件和系统
  本身的环境.你用的是现在版本的QMAIL.VPOPMAIL以及一些相关的补丁,
   而人家讲的故事都是N年前的,在别人机器上行得通的安装方法在你的环境
  下就是不行.并且,经常有人在寻求那个经常被人提起的AUTH包.

下面我将使用最新版本的QMAIL和VPOPMAIL来实现QMAIL的SMTP认证,
至于其它的相关软件的安装我就不说了.

在这里,我将使用一个集成补丁包:qmail-toaster-0.8.3.patch以及
netqmail-1.05.tar.tar和vpopmail-5.4.0.tar.gz
qmail-toaster-0.8.3.patch这个补丁包含了以下补丁:
[color=Red]smtp auth[/color] (SMTP认证) 
spf (发信人DNS检查) 
qmail-queue (如果要使用病毒扫描引擎则需要这个补丁) 
maildir++ patch  
support oversize dns packets (not necessary if you use dnscache)  
chkuser (检查本地vpopmail用户表,信头的语法,这个补丁需要在安装vpopmail后被安装。) 
spam throttle  
qregex (匹配badmailfrom和badmailto文件里的规则) 
big concurrency (set the spawn limit above 255)  
同时,在这里我将使用一个新的包:toaster-scripts-0.8.1.tar.tar
这个包专门集成了安装QMAIL所需要的脚本,使得复杂的
QMAIL的配置变得尽可能的简单高效
在这里,你就无须疑惑,到底是使用qmail-smtp-auth还是使用qmail-smtpd.c来实现SMTP认证呢?
因为这里面已经有你需要的东西了,并且这些补丁放在一起你无须担忧他们之间有什么"隔阂".

下面来开始安装QMAIL和VPOPMAIL:
1 软件下载:
 http://shupp.org/software/
 http://qmail.yeah888.com/netqmail-1.05.tar.gz
 http://www.inter7.com/devel/

2  解压
tar -zxvf ~/src/netqmail-1.05
bzip2 ~/src/qmail-toaster-0.8.3.patch.bz2
tar ~/src/vpopmail-5.4.0.tar.gz
tar ~/src/toaster-scripts-0.8.1.tar.tar

3 给QMAIL打基本的补丁.
你只要执行以下一步就可以了.
cd ~/src/netqmail-10.5
./collate.sh

4 建立用户和组:
cd ~/src/netqmail-1.05/netqmail-1.05
vi INSTALL.ids 取用适合你系统的部分.
cp INSTALL.ids IDS
chmod  755 IDS
./IDS
顺便建立好VPOPMAL的用户和组
groupadd vchkpw -g 89 
useradd vpopmail -u 89 -g vchkpw 

5.编译安装QMAIL
rm -rf /usr/sbin/sendmail 
make 
make setup check 
也许你会问,那个新补丁包怎么不打上去呀?别急,现在还不能打,否则
QMAIL编译通不过,等安装好VPOPMAIL后再打.必须这样做.

./config-fast mail.domain.com

6 设置系统别名
cd /var/qmail/alias 
echo "[email]admin@domain.com[/email]" > .qmail-postmaster 
echo "[email]admin@domain.com[/email]" > .qmail-mailer-daemon 
echo "[email]admin@domain.com[/email]" > .qmail-root 
chmod 644 /var/qmail/alias/.qmail* 

7 开启SPF设置
echo ./Maildir/ >/var/qmail/control/defaultdelivery  
echo 3 > /var/qmail/control/spfbehavior 

8 配置脚本
mkdir -p /var/qmail/supervise/qmail-send/log 
mkdir -p /var/qmail/supervise/qmail-smtpd/log 
mkdir -p /var/qmail/supervise/qmail-pop3d/log 
mkdir -p /var/qmail/supervise/qmail-pop3ds/log 
cp /home/pkg/toaster-scripts-0.8.1/send.run /var/qmail/supervise/qmail-send/run 
cp /home/pkg/toaster-scripts-0.8.1/send.log.run /var/qmail/supervise/qmail-send/log/run 
cp /home/pkg/toaster-scripts-0.8.1/smtpd.run /var/qmail/supervise/qmail-smtpd/run 
cp /home/pkg/toaster-scripts-0.8.1/smtpd.log.run /var/qmail/supervise/qmail-smtpd/log/run 
cp /home/pkg/toaster-scripts-0.8.1/pop3d.run /var/qmail/supervise/qmail-pop3d/run 
cp /home/pkg/toaster-scripts-0.8.1/pop3d.log.run /var/qmail/supervise/qmail-pop3d/log/run 
cp /home/pkg/toaster-scripts-0.8.1/pop3ds.run /var/qmail/supervise/qmail-pop3ds/run 
cp /home/pkg/toaster-scripts-0.8.1/pop3ds.log.run /var/qmail/supervise/qmail-pop3ds/log/run 
echo 20 > /var/qmail/control/concurrencyincoming 
chmod 644 /var/qmail/control/concurrencyincoming 
chmod 755 /var/qmail/supervise/qmail-send/run 
chmod 755 /var/qmail/supervise/qmail-send/log/run 
chmod 755 /var/qmail/supervise/qmail-smtpd/run 
chmod 755 /var/qmail/supervise/qmail-smtpd/log/run 
chmod 755 /var/qmail/supervise/qmail-pop3d/run 
chmod 755 /var/qmail/supervise/qmail-pop3d/log/run 
chmod 755 /var/qmail/supervise/qmail-pop3ds/run 
chmod 755 /var/qmail/supervise/qmail-pop3ds/log/run 
mkdir -p /var/log/qmail/smtpd 
mkdir -p /var/log/qmail/pop3d 
mkdir -p /var/log/qmail/pop3ds 
chown -R qmaill /var/log/qmail 
cp toaster-scripts-0.8.1/rc /var/qmail/rc 
chmod 755 /var/qmail/rc 
cp toaster-scripts-0.0.8.1/qmailctl /var/qmail/bin/ 
chmod 755 /var/qmail/bin/qmailctl 
ln -s /var/qmail/bin/qmailctl /usr/bin 
ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail 
rm -rf /usr/lib/sendmail 
ln -s /var/qmail/bin/sendmail /usr/lib/sendmail  
 用daemontools来启动qmail-send和qmail-smtpd 
ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service  

虽然有很多行,但比以前的手工配置简单多了,并且减少了出错的可能性.

9 安装VPOPMAIL
mkdir -p /home/vpopmail/etc
echo "domain.com" > /home/vpopmail/etc/defaultdomain

[color=Red]设置smtp规则,关闭open relays 
echo '127.0.0.1:allow,RELAYCLIENT=""' > /home/vpopmail/etc/tcp.smtp 
cd /home/vpopmail/etc ; tcprules tcp.smtp.cdb tcp.smtp.tmp < tcp.smtp [/color]

echo "localhost|0|数据库账户|账户密码|数据库名" > /home/vpopmail/etc/vpopmail.mysql 
chmod 640 /home/vpopmail/etc/vpopmail.mysql  
chown -R vpopmail.vchkpw /home/vpopmail/etc  

./configure --enable-incdir=/usr/include/mysql --enable-libdir=/usr/lib/mysql --disable-roaming-users --enable-logging=p --disable-passwd --enable-clear-passwd --disable-domain-quotas --enable-auth-module=mysql --enable-auth-logging --enable-sql-logging --disable-valias --disable-mysql-limits --enable-learn-passwords 

make 
make install-strip  

echo 'export PATH=$PATH:/home/vpopmail/bin' >> /etc/profile 
source /etc/profile  

POP3和IMAP的启动脚本: 
cp /home/pkg/toaster-scripts-0.8.1/vpopmailctl /var/qmail/bin 
ln -s /var/qmail/bin/vpopmailctl /usr/bin 
chmod 755 /var/qmail/bin/vpopmailctl 

cd ~/src/netqmail-1.05/netqmail-1.05 
patch -p0 < ~/src/qmail-toaster-0.8.3.patch.bz2 | 
make clean 
make 
qmailctl stop 
make setup check 
chown -R vpopmail:vchkpw /var/qmail/spam  

好了,现在可以使用vpopmailctl start|stop|stat,qmailctl start|stop|stat来
启动.停止.观察两种服务了.

现在该说说这个帖子的主题了
你只要是按照我上面说的步骤安装的QMAIL和VPOPMAIL,就已经实现了SMTP认证
上面的红色部分是设置转发规则的一部分,在这个例子里,除了登陆本机,在其它的任何
别的地方请求服务器转发邮件,都要求验证.现在让我们来做试验:

在另外一台PC机器上启动OE,设置访问待验证的服务器的账号,首先,不勾选"我的服务器
需要验证"看看会发生什么,发信给你在外面的邮箱,比如:abc@126.com.发生什么了?
恩?发不出去!让我给你解释吧:
不勾选"我的服务器需要验证",就意味着OE给服务器发送helo而不是ehlo,helo是不需要
验证的意思,那么这个时候QMAIL就会启用rcpthosts文件,因为此时不需要验证,同时在
~/vpopmail/etc/tcp.smtp明文规定只对本机RELAY,所以就不能忽略rcpthosts这个
文件,但是,这个文件在QMAIL编译安装的时候--config--fast domain.com
在这个文件里,默认就只有一个domain.com.也就是说,在不需要验证的情况下只有发往
domain.com也就是本地是可以的,否则就会被拒绝转发,所以OE报错为:553 sorry,that domain isn't
in my list of allowed rcpthosts....注意,这个时候是没有启用SMTP认证的,但是认证服务却依然存在.

好了,现在请勾选"我的服务器需要验证",在发同样的信,看看有发生什么了?
特别注意:此时你要重新开设一个账号,之所以要这么做,是因为:
刚才上面你开启的账号也许是正确的账号,那么这次验证将顺利通过,不会提示要你输入
正确的用户和密码,会让你感觉不到验证的存在,那么此时你要重新设置一个账号,并且
这个账号用户名可以是正确的,密码随便写一个,这个时候发信会弹出一个对话框要你
输入密码,直到你输入了正确的密码,服务器就可以给你转发邮件了.怎么样?验证是成功的
吧!如果你勾选了"我的服务器需要验证",那么OE跟服务器会话时就会送ehlo而不是helo
ehlo是要求验证的意思,那么服务器将启动验证程序,直到OE传给它正确的用户名和密码.
一旦启用了验证,就将忽略rcpthosts这个文件.也许你觉得这个rcpthosts文件是多余的了,
你如果这么想就大错而特错了,如上面所说,如果选择我的服务器不需要验证,那么就只能依靠
这个文件了,如果没有这个文件,那么服务器就是开放转发的,因为垃圾邮件发送者是不会
勾选"我的服务器需要验证"的.
rcpthosts这个文件你可以随便编辑,加入你觉得可以发信的地址,但是如果有了验证就不需要
加入其它的任何地址了,只有一个默认的domain.com就可以了,如果不选择我的服务器需要
验证,那么任何人都还是可以向本地发信的,包括垃圾邮件发送者,但有了验证,就可以保证
你的服务器不会被列为黑名单,不会被垃圾邮件发送者利用.至于别人向你本地发送垃圾
邮件,那就属于反垃圾邮件的策略了,不在本主题范围.

以上策略在AS4上测试通过

好了,本次就谈到这,今天是6月30日,阿根廷和德国队的比赛快开始了,23点开始,
现在已经是晚上22:30了,我得去看看这场令人瞩目的比赛,时间比较紧张,所以
本贴写的不是很细腻,疏漏错误支出在所难免.但还是
希望对对SMTP认证有疑惑的朋友有所帮助,也希望高手们对本贴
的错误或者不足之处提出批评和建议,谢谢

[ 本帖最后由 xxjoyjn 于 2006-7-3 13:04 编辑 ]



 laihou 回复于:2006-07-01 09:31:56

强力支持LZ,谢谢,这几天我正在为SMTP认证所困惑呢,有你的指点我终于明白了很多


 zhanghj_ok 回复于:2006-07-03 09:58:45

支持!

所谓熟能生巧,希望有一天我也能发这样的贴,学习中....


 xxjoyjn 回复于:2006-07-03 12:21:35

谢谢斑竹的鼓励,继续向你学习ING


 红雨 回复于:2006-07-03 22:43:11

利用本地SMTP的外部帐号不验证发送邮件給本地帐号需要认证么?
利用本地SMTP的本地帐号不验证发送邮件給本地帐号需要认证么?

有没有地址测试?


 zhanghj_ok 回复于:2006-07-04 14:44:46

qmail-toaster-0.8.3.patch这个包在哪里?

怎么找都只找到个qmail-toaster-0.8.1.patch 在http://shupp.org/software/上!


 红雨 回复于:2006-07-07 22:09:15

http://www.shupp.org/toaster/


 sh_jacky 回复于:2007-06-13 17:25:50

我还是能发!奇怪




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=783563
转载请注明作者名及原文出处



收藏本页到: