為 sendmail 加掛 milter-greylist
作者:Joe Horn( joehorn AT leobbs DOT net )
授權:[CC授權:姓名標示-非商業性-相同方式分享 2.5]
附註:安裝步驟適用於 FreeBSD 平台,其它 UNIX-Like OS 可能有所不同。
使用軟體:
前言
在 RFC 所制定的 SMTP 協定中,若是發信端接收到 450 這個 error code ,會先把信件 queue 住,隔一段時間後再重新送信。
而 grey-listing 機制的運作方式為:
- 一開始,某 A 機器要寄信到 B 機器時,使用 grey-listing 機制的機器 B 會先丟出 450 的錯誤代碼,請 A 先保留信件。
- 過了一小段時間(端看機器 B 的設定)後,機器 A 重新送信,機器 B 比對紀錄後發現 A 機器已經過了設定的時間,便把信件收下來。
而目前廣告信發送軟體為了減輕負載,加快發信速度,所以不會遵循這個 rule ,沒有設計佇列機制。
如此,我們便可以使用 grey-listing 來減少廣告信。
暫停 sendmail
# cd /etc/mail # make stop
安裝 milter-greylist
# cd /usr/ports/mail/milter-greylist # make install clean
設定 milter-greylist 的啟動狀態
編輯 /etc/rc.conf ,加進以下這行:
miltergreylist_enable="YES"
設定 milter-greylist
更改 milter-greylist 的設定檔( /usr/local/etc/mail/greylist.conf )。
- 如果您有多台 MX server ,並且都裝上了 milter-greylist ,請將 IP 加入成為 peer ,例如:
peer 111.222.333.444
- 讓 LAN 端的使用者/機器可以直接送信,請加入成為 addr ,例如:
acl whitelist addr 192.168.1.0/24
啟動 milter-greylist
使用這個指令啟動 milter-greylist:
/usr/local/etc/rc.d/milter-greylist.sh start
更改 sendmail 設定檔
接下來用編輯器開啟 /etc/mail/`hostname`.mc 這個檔案,例如:
# vi /etc/mail/`hostname`.mc
在最後面加上以下幾行:
INPUT_MAIL_FILTER(`greylist', `S=local:/var/milter-greylist/milter-greylist.sock') define(`confMILTER_MACROS_CONNECT', `j, {if_addr}') define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}') define(`confMILTER_MACROS_ENVFROM', `i, {auth_authen}')
安裝 sendmail 設定檔
讓更改過的 mc 檔產生成 cf 檔,並套用於 sendmail.cf:
# cd /etc/mail # make install
啟動 sendmail
請使用以下指令:
# cd /etc/mail # make start