发新话题
打印

再说说QMAIL邮件RELAY规则和SMTP认证的实现【转】

再说说QMAIL邮件RELAY规则和SMTP认证的实现【转】

作者:xxjoyjn

以前我曾经在本板块发过一个帖子专门讨论过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这个补丁包含了以下补丁:
smtp auth (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 "admin@domain.com" > .qmail-postmaster  
echo "admin@domain.com" > .qmail-mailer-daemon  
echo "admin@domain.com" > .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

设置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


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认证有疑惑的朋友有所帮助,也希望高手们对本贴
的错误或者不足之处提出批评和建议,谢谢

本文由lili 发布于Linuxsky 论坛,网址:http://bbs.linuxsky.org/thread-3649-1-1.html

是故易有太极,是生两仪。两仪生四象,四象生八卦。

TOP

发新话题