http://fedoranews.org/contributors/david_hart/rbldnsd/
などに英語ですがまさしく方法が載っています。
rbldnsでのスパム対策とはは怪しい送信サーバや
クライアントのリストのDNS情報(IPアドレス一覧)を使って
そのリストに載っているサーバからは受信しないということをします。
これがrbldnsの仕組みです。
qmail,postfix,sendmail
どのMTAでもこの機能はついています。
特にrbldnsはqmailの作者D. J. Bernsteinが
作成したdjbdnsの機能の一部として存在します。
bindに同じような機能はありません。
DJBのrbldnsではなくてrbldnsの機能だけに
特化しているrbldnsdというものが存在します。
もともとdjbdnsを参考にされています。
rblddnsdはbindやdjbdnsよりもパフォーマンスがいいようです。
http://www.corpit.ru/mjt/rbldnsd.html
ここからpostfixでrbldnsdを使う方法を記述していきます。
ただし、すでにdnsサーバにはbindで通常のDNSを運用しているので
新たにrbldnsdは1053番でポートで運用し、bindからrbldnsdのデータを
引きに行くように転送する設定をbindに施します。
【準備】
・rbldnsdのダウンロード
http://www.corpit.ru/mjt/rbldnsd.html
※下のほうにある
・ブラックリストのダウンロード
http://www.tqmcube.com/
に書いているようにdnsbl_lists.tar.bz2
ftp://ftp.tqmcube.com/pub/dnsbl_lists.tar.bz2
からダウンロードします。
●rbldnsのインストール
Makefileにinstallターゲットがないので
make後は自分でバイナリをコピーします。
# gzip -dc rbldnsd_0.995.tar.gz |tar xf -
# ./configure 2>&1|tee configure.log
# make 2>&1|tee make.log
# cp -a rbldnsd /usr/local/sbin/
・ブラックリストの展開
ftp://ftp.tqmcube.com/pub/dnsbl_lists.tar.bz2
のデータを展開しておきます。
# bzip2 -d < dnsbl_lists.tar.bz2 |tar xf -
README.htm asiaspam clients dynamic motd relays
のファイルが展開されます。
実際にデータが含まれているのは
asiaspam,clients,dynamic,relaysになっています。
# mkdir -p /var/lib/rbldns
# cp asiaspam clients dynamic relays /var/lib/rbldns/
# chown rbldns:rbldns /var/lib/rbldns/*
※他に有料でもhttp://www.spamhaus.org/
rbldnsd形式でのzone転送が受けることができます。
試用で30日間はアップデートも受けれます。
http://www.spamhaus.org/datafeed/pricecalculator.lasso
どちらを使うかはユーザの選択しだいです。
今回は無料版を使用しています。
・rbldnsdの起動
# cd /usr/local/sbin
# ./rbldnsd -sbl -r /var/lib/rbldns \
-b 127.0.0.1/1053 \
blocked.rbl:ip4set:clients,asiaspam,dynamic,relays
| rbldnsd: listening on 127.0.0.1/1053
rbldnsd: ip4set:clients,asiaspam,dynamic,relays: 20060123 063013: e32/24/16/8=189416/51211/7/0
rbldnsd: zones reloaded, time 0.56e/0.50u sec
rbldnsd: rbldnsd version 0.995 (28 Apr 2005) started (1 socket(s), 1 zone(s))
|
起動オプションについては
# /usr/local/sbin/rbldnsd -h
で詳細な説明が表示されます。
システム起動時に自動起動するように
# vi /etc/init.d/rbldnsd
---
#!/bin/sh
case "$1" in
start)
[ -f /var/lib/rbldns/asiaspam ] && \
[ -f /var/lib/rbldns/clients ] && \
[ -f /var/lib/rbldns/dynamic ] && \
[ -f /var/lib/rbldns/relays ] || exit 0
/usr/local/sbin/rbldnsd -sbl \
-r /var/lib/rbldns \
-b 127.0.0.1/1053 blocked.rbl:ip4set:clients,asiaspam,dynamic,relays
;;
stop)
PID=`ps -ef|grep rbldnsd|grep -v stop|grep -v grep|awk '{print $2}'`
kill $PID
;;
*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit
---
アクセス件を適切に設定しておきます。
# cd /etc/init.d/
# chmod 755 rbldnsd
# ln -s /etc/init.d/rbldnsd /etc/rc2.d/S60rbldnsd
※起動の順番としてはbindより先にあげるようにしておくほうが
念のためよいでしょう。
・rsyncで常に最新版のブラックリストファイルにしておく
# export EDITOR=vi
# crontab -e
0 3 * * * cd /var/lib/rbldns/;/usr/local/bin/rsync -avt tqmcube.com::spamlists/clients clients > /dev/null 2&>1
0 3 * * * cd /var/lib/rbldns/;/usr/local/bin/rsync -avt tqmcube.com::spamlists/asiaspam asiaspam > /dev/null 2&>1
0 3 * * * cd /var/lib/rbldns/;/usr/local/bin/rsync -avt tqmcube.com::spamlists/dynamic dynamic > /dev/null 2&>1
0 3 * * * cd /var/lib/rbldns/;/usr/local/bin/rsync -avt tqmcube.com::spamlists/relays relays > /dev/null 2&>1
取得もとのサイトによれば一日に1度更新されているということなので
夜中3時に更新するようにしておきます。
●bindの設定
今回はrbldnsdは1053番ポートで起動しています。
MTAからbindにblocked.rbl宛てに問い合わせがきたら
bindがblocked.rblゾーンをrbldnsdに問い合わせて
その結果を返すようにします。
named.confに
---
zone "blocked.rbl" IN {
type forward;
forward first;
forwarders {
127.0.0.1 port 530;
};
};
---
を追記してbindを再起動しておきます。
・実際に127.0.0.2などを返すかどうかのテスト
# dig 214.17.120.58.blocked.rbl
;; ANSWER SECTION:
214.17.120.58.blocked.rbl. 1869 IN A 127.0.0.2
# dig 214.17.120.58.blocked.rbl -t txt
とすると
;; ANSWER SECTION:
214.17.120.58.blocked.rbl. 1920 IN TXT "DNSBLA. 58.120.17.214 is a banned spam source. Removal Requests: http://www.tqmcube.com/dnsbl/dnsbl_remove.php"
と返ってくることを確認しましょう
●postfixの設定
# vi /etc/postfix/main.cf
--
smtpd_client_restrictions = permit_mynetworks,
reject_rbl_client blocked.rbl,
reject_rhsbl_client blocked.rbl,
reject_rhsbl_sender blocked.rbl,
その他自分で定義した拒否リスト
--
のようにします。
#
postfix reload
●実際の動作確認
テストで送信元を偽って遅れる環境であるなら一度
やってみればよいでしょう。
もし環境が用意できないなら実際にメールが届くのを
確認してみるしかありません。
実際に届けば
---
Jan 26 09:59:33 home3 postfix/smtpd[2664]: [ID 197553 mail.info] connect from cm62006.red.mundo-r.com[213.60.62.6]
Jan 26 09:59:34 home3 postfix/smtpd[2664]: [ID 197553 mail.info] NOQUEUE: reject: RCPT from cm62006.red.mundo-r.com[213.60.62.6]: 554 Service unavailable; Client host [213.60.62.6] blocked using blocked.rbl; DNSBL. 213.60.62.6 appears to be a dynamic IP Address. Pleaseuse your ISP's mail service. Removal Requests: http://www.tqmcube.com/dnsbl/dnsbl_remove.php; from=<fafnir@datalife.com> to=<sarcat@sunsolve.homeunix.com> proto=SMTP helo=<cm62006.red.mundo-r.com>
Jan 26 09:59:35 home3 postfix/smtpd[2664]: [ID 197553 mail.info] lost connection after RCPT from cm62006.red.mundo-r.com[213.60.62.6]
Jan 26 09:59:35 home3 postfix/smtpd[2664]: [ID 197553 mail.info] disconnect from cm62006.red.mundo-r.com[213.60.62.6]
---
のようなログがでて
blocked using blocked.rbl; DNSBL. 213.60.62.6 appears to be a dynamic IP Address. Pleaseuse your ISP's mail service. Removal Requests: http://www.tqmcube.com/dnsbl/dnsbl_remove.php; from=<fafnir@datalife.com> to=<sarcat@sunsolve.homeunix.com> proto=SMTP helo=<cm62006.red.mundo-r.com>
とはじいているのが分かると思います。
●その他
sendmailでの設定としては未検証ですが
# vi cf.m4 sendmail.mc
---追記---
FEATURE(`dnsbl',`blocked.rbl',`Rejected - see http://www.tqmcube.com/dnsbl')dnl
---------
で動作すると思われます。
追記した後は当然sendmail.cfに変換してsendmailを再起動しておきましょう。
# m4 cf.m4 sendmail.mc > sendmail.cf