BLOGTIMES
2006/06/17

rbldnsdでプライベートなDNSBLを作ってみた

  antispam 
このエントリーをはてなブックマークに追加

最近、ある方法で英文のspamはシャットアウトできるようになった*1ので安心していたのですが、日本語のspamで新手が現れました。MLM系の広告spam*2です。

これらを防ぐためにspamの疑いがあるdomainやipをblacklistに追加して防ぎたいと思ったのですが、普段spamを防ぐために使っているdnsblは当然のことながらこれらのdnsblはspamの疑いがあるだけではURLやIPをsubmitすることができません。*3。ということで、自分のポリシーですき放題domainやipを登録できるプライベートなdnsblを作ってみました。

ウチではメールサーバにもdnsblを活用しているのでそのあたりとブラックリストを共通化して管理できるというメリットもあります。また、万が一rbl.bulkfeeds.netなどが利用できなくなった場合でも、自前である程度の防御ができるというリスク分散の側面もあります。このあたりはNP_Blacklistの件で懲りました。備えあれば憂いなしということで。

なぜrbldnsdか?

今回はrbldnsd*4を使いました。dnsbl自体はどのようなdnsサーバーでも構築することができるのですが、一般的に使われているbindなどで構築しようとするとゾーンファイルの定義やその更新の手間がかかってしまって結構大変です。その点、今回使ったrbldnsdはdnsblの構築に特化したツールなので、ゾーンファイルの定義も簡易で、なおかつプロセスの再起動などをしなくてもゾーンファイルのreloadも自動的に行ってくれます。

ソースからインストール

結論から書きますが、実はバイナリのパッケージが配布されていたのでコンパイルしてインストールする必要はありませんでした。バイナリパッケージを使うと起動スクリプトを自分で書かなくていいのでオススメです。

とりあえず、今回紹介する設定は以下の前提条件のもとに書かれています。

前提条件

rbldnsd用のユーザー: bldns 設定ファイル類の配置場所: /var/lib/rbldns プロセスの管理: daemontools rblのゾーン名: rbl.cles.net

今回作業した手順はこのような感じです。

tar zxvf rbldnsd_0.996.tar.gz cd rbldnsd-0.996/ ./configure make cp -a rbldnsd /usr/local/sbin/

セットアップ

インストールが終わったのでユーザーやディレクトリを作り、設定を行っていきます。

adduser rbldns mkdir -p /var/lib/rbldns chown rbldns:rbldns /var/lib/rbldns

今回は/var/lib/rbldns以下にipアドレス登録用のipというファイルと、host名登録用のhostという2つのファイルを作りました。

/var/lib/rbldns/ip

:127.0.0.2: Blocked - $ $SOA 3000 silesia.cles.net hostmaster.silesia.cles.net 0 600 300 86400 300 $NS 3000 silesia.cles.net 192.168.0.0/24 192.168.1.0/24 192.168.2.0/24

/var/lib/rbldns/host

:127.0.0.2: Blocked - $ $SOA 3000 silesia.cles.net hostmaster.silesia.cles.net 0 600 300 86400 300 $NS 3000 silesia.cles.net .example.com .example.net

設定ファイルのフィールドセパレータは:です。上記の例だと一番上の行がデフォルト設定を表していて、2番目のフィールドにはdnsblにヒットしたときに返すipアドレス(Aレコード)、3番目のフィールドはdnsblにヒットしたときに返すメッセージ(TXTレコード)です。TXTレコードにおいて$はヒットしたドメイン/IPに置換されるようです。

上記の例では192.168.0.0/24や.example.com以下の部分が自分のブラックリストになるので、その部分に拒否したいipアドレスやドメインを列挙していきます。

最後にこれをdaemontoolsから動かせるようにするためのrunファイルを書きました。このサーバーには通常のDNSサーバー(BIND)がすでに動作しているため、port 553で起動させています。BINDとの連携については後述。

/service/rbldnsd/run

#!/bin/sh exec /usr/local/sbin/rbldnsd \ -u rbldns \ -r /var/lib/rbldns \ -b 127.0.0.1/553 \ -l +- \ -n \ rbl.cles.net:ip4set:ip \ rbl.cles.net:dnset:host \ 2>&1

これで、daemontoolsでrbldnsdを起動することができるようになりました。

BINDとの連携

前述の設定でrbldnsdは553という変なポートで起動させているため、このままでは作成したdnsblを参照することができません。このrbldnsdをBIND経由で参照することができるようにします。

/etc/named.confに以下の部分を追加

zone "rbl.cles.net" IN { type forward; forward first; forwarders { 127.0.0.1 port 553; }; };

この設定により、port53のBINDにrbl.cles.netのリクエストがあった場合、127.0.0.1のport 553に問い合わせを回送するようになります。

アプリケーションの設定

最後にdnsblを使っているアプリケーション(MTやNucleus、qmailなど)でrbl.cles.netを使うように設定を変更しておきます。

ちなみに・・・・

これまでの設定を見るとrbl.cles.netは外部から参照可能になっているように見えますが、named.confで外部からの問い合わせに対してはrecursionが切ってあるので外部からrbl.cles.netを参照することはできません。(というか、rbl.cles.netの問い合わせだけrecursionをonにする方法がわかりませんでした。)とりあえず、プライベートdnsblの構築というミッションは果たせたのでこれでOKということにしました。

参考

rbldnsdでスパム対策
RBLDNSD

  • *1: 詳しく述べるのは避けますが、ban asciiのような方法は採用していません。
  • *2: ページが「だれでも成功できる→まずは資料請求→メールフォーム」という構成で、具体的なビジネス内容がほとんど記載されていなければMLMだと思って間違いないです。
  • *3: そんなことができたら悪戯し放題になってしまうので。
  • *4: 名前が紛らわしいのですがDJBのrbldnsとは違うツールです。サイトにはrbldnsにインスパイアされたとは書いてありますが。。。。。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/1465
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン