Qmail防止濫用mail relay的解決方案_Mail服務(wù)器教程
摘要:本文討論了在qmail環(huán)境下如何防止mail relay被垃圾郵件發(fā)送者濫用的解決方法。
軟件環(huán)境:redhat6.2 qmail1.3
硬件環(huán)境:hp netserver e60 128m內(nèi)存 單網(wǎng)卡
1.什么是mail relay及為何要防止被濫用?
設(shè)置好一個(gè)qmail服務(wù)器以后,該服務(wù)器將具有一個(gè)或若干個(gè)域名(這些域名應(yīng)該出現(xiàn)在local或viritualdomains文件內(nèi)),這時(shí)qmail-smtpd將監(jiān)聽(tīng)25號(hào)端口,等待遠(yuǎn)程的發(fā)送郵件的請(qǐng)求。網(wǎng)絡(luò)上其他的mail服務(wù)器或者請(qǐng)求發(fā)送郵件的mua(mail user agent,如outlook express、foxmail等等)會(huì)連接qmail服務(wù)器的25號(hào)端口,請(qǐng)求發(fā)送郵件,smtp會(huì)話過(guò)程一般是從遠(yuǎn)程標(biāo)識(shí)自己的身份開(kāi)始,過(guò)程如下:
helo remote.system.domainname
250 qmailserver.domain
mail from:[email protected]
250 ok
rcpt to: [email protected]
郵件的接收者[email protected]中的域名并不一定是本地域名,這時(shí)候本地系統(tǒng)可能有兩種回答,接受它:
250 ok
或者拒絕接受它:
553 sorry,.that domain is not in my domain list of allowed recphosts
第一種情況下,本地qmail服務(wù)器是允許relay的,它接收并同意傳遞一個(gè)目的地址不是本地的郵件;而第二種情況則不接收非本地郵件。
qmail有一個(gè)名為rcpthosts(該文件名源于rcpt to命令)的配置文件,其決定了是否接受一個(gè)郵件。只有當(dāng)一個(gè)rcpt to命令中的接收者地址的域名存在于rcpthosts文件中時(shí),才接受該郵件,否則就拒絕該郵件。若該文件不存在,則所有的郵件將被接受。當(dāng)一個(gè)郵件服務(wù)器不管郵件接收者和郵件接收者是誰(shuí),而是對(duì)所有郵件進(jìn)行轉(zhuǎn)發(fā)(relay),則該郵件服務(wù)器就被稱為開(kāi)放轉(zhuǎn)發(fā)(open relay)的。當(dāng)qmail服務(wù)器沒(méi)有rcpthosts時(shí),其是開(kāi)放轉(zhuǎn)發(fā)的。
如果系統(tǒng)管理員將自己的郵件服務(wù)器設(shè)置為open relay,將會(huì)導(dǎo)致一些垃圾郵件發(fā)送者將你的郵件服務(wù)器作為轉(zhuǎn)發(fā)自圾郵件的中繼站,這將使垃圾郵件的接收者將矛頭對(duì)準(zhǔn)你,可能會(huì)導(dǎo)致報(bào)復(fù)性的郵件炸彈;垃圾郵件還能消耗你大量的資源,占用你的帶寬。更為糟糕的事情可能是你的名字可能會(huì)上了黑名單,成為其他郵件接收者共同抵制的目標(biāo),你的郵件將被這些接收者所拒絕。
2.防止mail relay被濫用的方法一
這種方法僅僅適用于用戶ip地址固定的情況,例如某單位擁有自己的一個(gè)c類地址,并且擁有自己的局域網(wǎng),該郵件服務(wù)器僅僅是提供給局域網(wǎng)用戶收發(fā)電子郵件。
設(shè)置自己服務(wù)器為非open relay的最簡(jiǎn)單的辦法就是將你的郵件服務(wù)器的所有域名(若dns的mx記錄指向該機(jī)器,也應(yīng)該包括該域名。例如你的機(jī)器有三個(gè)域名mail.linxuaid.com.cn、mail1.linuxaid.com.cn,而且linuxaid.com.cn的mx指向mail.linuxaid.com.cn,則qmail的rcphosts的應(yīng)該包括mail.linuxaid.com.cn、mail1.linuxaid.com.cn和linuxaid.com.cn)。這將只允許客戶連接到服務(wù)器以后才能發(fā)送電子郵件,而不允許用戶通過(guò)mua來(lái)通過(guò)服務(wù)器轉(zhuǎn)發(fā)郵件,而要支持客戶使用mua來(lái)發(fā)送郵件,必須允許客戶使用服務(wù)器轉(zhuǎn)發(fā)郵件。qmail-smtpd支持一種有選擇性的忽略rcpthosts文件的方法:若qmail-smtpd的環(huán)境變量relayclient被設(shè)置,則rcpthost文件將被忽略,relay將被允許。但是如何識(shí)別一個(gè)郵件發(fā)送者是否是自己的客戶呢?就是判斷發(fā)送郵件者的源ip地址,若該ip地址屬于本地網(wǎng)絡(luò),則認(rèn)為該發(fā)送者為自己的客戶。
這里就要使用ucspi-tcp軟件包的tcpserver程序,該程序的功能類似于inetd-監(jiān)聽(tīng)進(jìn)入的連接請(qǐng)求,為要啟動(dòng)的服務(wù)設(shè)置各種環(huán)境變量,然后啟動(dòng)指定的服務(wù)。tcpserver的配置文件是/etc/tcp.smtp,該文件定義了是否對(duì)某個(gè)網(wǎng)絡(luò)設(shè)置relayclient環(huán)境變量。例如,本地網(wǎng)絡(luò)是地址為1Array2.168.10.0/24的c類地址,則tcp.smtp的內(nèi)容應(yīng)該設(shè)置如下:
127.0.0.1:allow,relayclient=""
1Array2.168.10.:allow,relayclient=""
:allow
這幾個(gè)規(guī)則的含義是指若連接來(lái)自127.0.0.1和1Array2.168.10則允許,并且為其設(shè)置環(huán)境變量relayclient,否則允許其他連接,但是不設(shè)置relayclient環(huán)境變量。這樣當(dāng)從其他地方到本地的25號(hào)連接將會(huì)被允許,但是由于沒(méi)有被設(shè)置環(huán)境變量,所以其連接將會(huì)被qmail-smptd所拒絕。
但是tcopserver并不直接使用/etc/tcp.smtp文件,而是需要先將該文件轉(zhuǎn)化為cbd文件:
[ideal@aidmail /etc]$ # tcprules tcp.smtp.cdb tcp.smtp.temp < tcp.smtp
然后在/service/qmail-smtpd目錄下的run文件中應(yīng)該具有如下的內(nèi)容:
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb
可以看到,tcpserver利用了/etc/smtp.cbd文件。若本地有多個(gè)網(wǎng)絡(luò),則需要這些網(wǎng)絡(luò)都出現(xiàn)在/etc/tcp.smtp文件中。
這樣就實(shí)現(xiàn)了允許本地客戶relay郵件,而防止relay被濫用。
3.防止mail relay被濫用的方法二
方法一對(duì)于局域網(wǎng)應(yīng)用場(chǎng)合來(lái)說(shuō)是足夠了,但是如果對(duì)于象263或163這樣的電子郵件系統(tǒng)來(lái)說(shuō),這種解決方法就不大適合,因?yàn)檫@些郵件系統(tǒng)的用戶遍布全世界各個(gè)地方,因此用戶可能從任何一個(gè)ip連接過(guò)來(lái)發(fā)送信件,因此就需要尋找其他的方法來(lái)限制郵件系統(tǒng)的relay功能被濫用。
若在qmail系統(tǒng)中使用vpopmail,則可以利用vpopmail專門針對(duì)漫游用戶的配置選項(xiàng)來(lái)實(shí)現(xiàn)防止郵件系統(tǒng)的relay功能被濫用。
若希望支持漫游用戶通過(guò)郵件服務(wù)器的轉(zhuǎn)發(fā)郵件(mail relay),則需要在安裝vpopmail時(shí)使用如下配置選項(xiàng):
[root@aidmail vpopmail-4.Array.4]# ./configure --enable-roaming-users=y
其支持漫游用戶的原理是:當(dāng)某個(gè)漫游用戶通過(guò)pop3取信以后,則在某段時(shí)間內(nèi)允許該地址通過(guò)郵件服務(wù)器的轉(zhuǎn)發(fā)信件。vpopmail安裝完成以后,通過(guò)cron來(lái)定時(shí)運(yùn)行程序如下:
40 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null
也就是每40分鐘清除允許relay的ip地址的列表,則當(dāng)某個(gè)用戶首先通過(guò)pop3取信件(因?yàn)橥ㄟ^(guò)pop3收取信件是需要認(rèn)證的,則可以保證這是合法的用戶)結(jié)束以后,則用戶在后來(lái)的40分鐘以內(nèi)可以通過(guò)該郵件系統(tǒng)轉(zhuǎn)發(fā)郵件,之后就不允許通過(guò)該系統(tǒng)轉(zhuǎn)發(fā)郵件。
4.防止mail relay被濫用的方法三
對(duì)于有漫游用戶的郵件系統(tǒng)來(lái)說(shuō),防止其relay功能被濫用的另外一個(gè)方法就是在發(fā)送郵件時(shí)要求用戶認(rèn)證,就象用戶收信是需要認(rèn)證一樣。這里假設(shè)系統(tǒng)已經(jīng)安裝成功qmail-1.03和vpopmail,并且原有系統(tǒng)運(yùn)行正常。
4.1.下載程序:
qmail-smtp補(bǔ)�。篽ttp://members.elysium.pl/brush/qmail-smtpd-auth/
密碼檢驗(yàn)補(bǔ)�。篽ttp://members.elysium.pl/brush/cmd5checkpw/
從這兩個(gè)地址下載得到qmail-smtpd-auth-0.26.tar.gz及cmd5checkpw-0.22.tar.gz。
4.2.編譯安裝qmail-smtpd
將qmail-smtpd-auth-0.26.tar.gz解壓縮:
[root@www src]# tar xvfz qmail-smtpd-auth-0.26.tar.gz
[root@www src]# cd qmail-smtpd-auth-0.26
[root@www qmail-smtpd-auth-0.26]# ls
changes makefile readme todo inetd.conf qmail-smtpd.c
qmail-smtpd.patch
將安裝成功的qmail目錄下的qmail-smtp.c拷貝到qmail-smtpd-auth-0.26目錄下:
[root@www qmail-smtpd-auth-0.26]# cp ../qmail-1.03/qmail-smtpd.c ./
然后對(duì)該文件進(jìn)行補(bǔ)丁處理:
[root@www qmail-smtpd-auth-0.26]# patch -p1 < qmail-smtpd.patch
將qmail-smtpd.c 拷貝到qmail 的源文件目錄里:
[root@www qmail-smtpd-auth-0.26]# cp qmail-smtpd.c ../qmail-1.03
最好先將原文件備份。單獨(dú)編譯 qmail-smtpd :
[root@aidmail qmail-smtpd]# make qmail-smtpd
./load qmail-smtpd rcpthosts.o commands.o timeoutread.o
timeoutwrite.o ip.o ipme.o ipalloc.o control.o constmap.o
received.o date822fmt.o now.o qmail.o cdb.a fd.a wait.a
datetime.a getln.a open.a sig.a case.a env.a stralloc.a
alloc.a substdio.a error.a str.a fs.a auto_qmail.o `cat
socket.lib`
將新生成的qmail-smtpd 拷貝到/var/qmail/bin 目錄下。在之前應(yīng)該對(duì)原來(lái)的執(zhí)行文件進(jìn)行備份。
4.3.編譯安裝kpw-0.22.tar.gz
解壓縮,編譯安裝:
[root@www src]# tar xvfz cmd5checkpw-0.22.tar.gz
[root@www src]# cd cmd5checkpw-0.22
[root@www cmd5checkpw-0.22]# make ;make instll
4.4.設(shè)置relay規(guī)則。
relay的意思是:服務(wù)器接受客戶端的smtp請(qǐng)求,將客戶端發(fā)往第三方的郵件進(jìn)行轉(zhuǎn)發(fā)。 qmail下控制relay很簡(jiǎn)單,只要客戶端接入的smtp進(jìn)程的環(huán)境變量里包含(relayclient="")就允許relay ,否則拒收。實(shí)現(xiàn)方法是在/etc/tcp.smtp 里對(duì)需要relay的ip逐條設(shè)置(relayclient=""),然后用tcprules 生成規(guī)則表。因?yàn)楸疚囊獙?shí)現(xiàn)smtp認(rèn)證后的relay ,不需要對(duì)任何ip進(jìn)行預(yù)先設(shè)定,所以默認(rèn)規(guī)則設(shè)置成"只對(duì)本服務(wù)器relay"。/etc/tcp.smtp內(nèi)容應(yīng)該為:
127.0.0.1:allow,relayclient=""
:allow
重新生成新的tcp.smtp.cdb文件:
/usr/local/bin/tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
4.5.設(shè)置/home/vpopmail/bin/vchkpw 的setuid和setgid。
這點(diǎn)很重要,否則認(rèn)證無(wú)法通過(guò)。這是因?yàn)閟mtpd 的進(jìn)程是由qmaild 執(zhí)行的。而密碼驗(yàn)證程序原來(lái)只使用于pop3進(jìn)程,分別由root或vpopmail執(zhí)行,為的是讀shadow或數(shù)據(jù)庫(kù)中的密碼,并取出用戶的郵件目錄。這些操作qmaild 都沒(méi)有權(quán)限去做。如果smtp進(jìn)程要調(diào)用密碼驗(yàn)證程序,則必須要使用 setuid 和setgid 。其實(shí)這點(diǎn)大可放心,這兩個(gè)密碼驗(yàn)證程序都是帶源代碼的,本身非常安全,只需要放在安全的目錄里就可以了(設(shè)置其他用戶除qmaild 可執(zhí)行外都沒(méi)有權(quán)限執(zhí)行;其實(shí)如果沒(méi)有其他shell帳戶,也就不用這么麻煩了)。
chmod 4755 /home/vpopmail/bin/vchkpw
4.6.修改smtpd啟動(dòng)命令行
#!/bin/sh
qmailduid=`id -u qmaild`
nofilesgid=`id -g qmaild`
exec /usr/local/bin/softlimit -m 2000000
/usr/local/bin/tcpserver -v -p -x /etc/tcp.smtp.cdb
-u $qmailduid -g $nofilesgid 0 smtp /var/qmail/bin/qmail-smtpd 2>&1
改為:
#!/bin/sh
qmailduid=qmaild
nofilesgid=nofiles
exec /usr/local/bin/softlimit -m 2000000
/usr/local/bin/tcpserver -h -r -l 0 -t 1 -v -p -x /etc/tcp.smtp.cdb
-u $qmailduid -g $nofilesgid 0 smtp /var/qmail/bin/qmail-smtpd
/home/vpopmail/bin/vchkpw /bin/true /bin/cmd5checkpw /bin/true 2>&1
4.7.其他一些設(shè)置:
設(shè)置vpopmail的用戶目錄直到/目錄都被任何用戶可以讀取;
4.8.重新啟動(dòng)qmail
/etc/rc.d/init.d/qmailstart stop
/etc/rc.d/init.d/qmailstart start
4.Array.客戶端測(cè)試
在客戶端上使用 outlookexpress 和 netscape 4.6 以上版本的郵件軟件進(jìn)行檢驗(yàn)。
作者:ideal
- qmail+vpopmail+sqwebmail的安裝步驟(1)
- 分布式的Qmail郵件系統(tǒng)(2)
- 以Procmail-Gateway過(guò)濾寄出信件病毒(2)
- QMAIL+MH設(shè)計(jì)方案(2)
- Webmail攻防實(shí)戰(zhàn)(8)
- 用WebEasyMail架構(gòu)Web郵件服務(wù)器(3)
- 分布式的Qmail郵件系統(tǒng)(1)
- 構(gòu)建反病毒反垃圾郵件系統(tǒng)(二)
- 配置你的第一臺(tái)e-mail服務(wù)器(4)
- Win2003自帶mail服務(wù)器配置詳細(xì)過(guò)程
- 用WebEasyMail架構(gòu)Web郵件服務(wù)器(4)
- 電子郵件系統(tǒng)收發(fā)不正常的常見(jiàn)原因
- 相關(guān)鏈接:
- 教程說(shuō)明:
Mail服務(wù)器教程-Qmail防止濫用mail relay的解決方案
。