歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

Redhat6.2+qmail+smtpd認證防止垃圾郵件發送者濫用你的服務器

  作者:北極星     軟件環境:   redhat6.2 qmail1.3   郵件服務器服務於內部和外部,利用ADSL上網,域名解析利用dns2go.com的服務。單網卡,路由器為Linksys.     背景:   我已經利用一般的方法安裝了qmail服務器,工作穩定,DNS也進行了設置,不設置DNS會出現下列情況:在外網斷了的情況下,內網的郵件服務器不能登陸收取郵件。另外,我的服務器最近被利用發送大量的垃圾郵件(我也不知道我的服務器地址怎麼被人家發現的),因此現在想在原有的基礎上給smtpd加驗證功能。     我使用的是ideal撰寫文章(http://www.ccidnet.com/tech/network/2001/04/04/58_1931.Html )中的第三種方法,(推薦使用此種方法)     防止mail relay被濫用的方法三     對於有漫游用戶的郵件系統來說,防止其relay功能被濫用的另外一個方法就是在發送郵件時要求用戶認證,就象用戶收信是需要認證一樣。這裡假設系統已經安裝成功qmail-1.03和vpopmail,並且原有系統運行正常。     1、下載程序:     qmail-smtp補丁:http://members.elysium.pl/brush/qmail-smtpd-auth/     密碼檢驗補丁:http://members.elysium.pl/brush/cmd5checkpw/     從這兩個地址下載得到qmail-smtpd-auth-0.31.tar.gz(最新版本)及cmd5checkpw-0.22.tar.gz。     2、編譯安裝qmail-smtpd     將qmail-smtpd-auth-0.31.tar.gz解壓縮:     [root@www src]# tar xvfz qmail-smtpd-auth-0.31.tar.gz     [root@www src]# cd qmail-smtpd-auth-0.31     [root@www qmail-smtpd-auth-0.31]# ls     CHANGES README.auth auth.patch base64.c base64.h     [root@www qmail-smtpd-auth-0.31]# cp README.auth base64.c base64.h ../qmail-1.03/     [root@www qmail-smtpd-auth-0.31]# patch –d ../qmail-1.03   最好先將原文件備份。單獨編譯 qmail-smtpd :     [root@www qmail-smtpd-auth-0.31]#cd /var/qmail/bin     [root@www bin]#cp qmail-smtpd qmail-smtpd.old     [root@www bin]#cd /usr/src/qmail-1.03     [[email protected]]# 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 目錄下       3、編譯安裝cmd5checkpw-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 install       4、設置relay規則。       relay的意思是:服務器接受客戶端的smtp請求,將客戶端發往第三方的郵件進行轉發。 qmail下控制relay很簡單,只要客戶端接入的smtp進程的環境變量裡包含(RELAYCLIENT="")就允許relay ,否則拒收。實現方法是在/etc/tcp.smtp 裡對需要relay的IP逐條設置(RELAYCLIENT=""),然後用tcprules 生成規則表。因為本文要實現SMTP認證後的relay ,不需要對任何IP進行預先設定,所以默認規則設置成"只對本服務器relay"。/etc/tcp.smtp內容應該為:       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、設置/home/vpopmail/bin/vchkpw 的SetUID和SetGID。       這點很重要,否則認證無法通過。這是因為smtpd 的進程是由qmaild 執行的。而密碼驗證程序原來只使用於pop3進程,分別由root或vpopmail執行,為的是讀shadow或數據庫中的密碼,並取出用戶的郵件目錄。這些操作qmaild 都沒有權限去做。如果smtp進程要調用密碼驗證程序,則必須要使用 setuid 和setgid 。其實這點大可放心,這兩個密碼驗證程序都是帶源代碼的,本身非常安全,只需要放在安全的目錄裡就可以了(設置其他用戶除qmaild 可執行外都沒有權限執行;其實如果沒有其他SHELL帳戶,也就不用這麼麻煩了)。       chmod u+s /home/vpopmail/bin/vchkpw       chmod g+s /home/vpopmail/bin/vchkpw       5、修改smtpd啟動命令行   我的qmail是放在/etc/rc.d/init.d下自動啟動執行的,所以修改這個文件,將qmail-smtpd部分改成下面的參數形式:     /usr/local/bin/tcpserver -H -R -l 0 -t 1 -v -p -x /etc/tcp.smtp.cdb -u qmaild -g nofiles 0 smtp /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true /bin/cmd5checkpw /bin/true 2>&1 /var/qmal/bin/splogger smtpd 3 &       6、其他一些設置:       設置vpopmail的用戶目錄直到/目錄都被任何用戶可以讀取;       7、重新啟動qmail       /etc/rc.d/init.d/qmail stop       /etc/rc.d/init.d/qmail start       8、客戶端測試       在客戶端上使用 OutlookEXPress 和 FoxMail等郵件軟件進行檢驗。




Copyright © Linux教程網 All Rights Reserved