為 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