DigiLoog

PC関係の事なら何でもいけるそんな処

自作DNSBLデータベースでメール鯖を強化した

2022年06月04日(土) - 17:40 | カテゴリ: Linux

5月頃から従来のスパムメールとは違う物が来る様になり、
学習フィルタを始め実装済みの対策を抜けていて困っていた。
DKIMポリシーを強める事で拒否するのも手だが、
自由に弄れる方が良いので既存設備を使って実装出来る自作DNSBLを作ってみた。

筆者の自鯖では権威DNSを立てているのと、
ログをリアルタイム解析して動的にiptablesやFirewallを遮断する仕組みが動いている。
最終的にはこの仕組みに組み込む事も考慮して、
リストを一元管理しやすいDNSBLを採用する事にした。

仕組みは単純で、所持ドメインにDNSBL用のサブドメインを新たに作成し、
サブドメインのゾーンにAレコードが127.0.0.0/8のホスト名を追加し続けるのみ。
DNSBLは何でも良いのでAレコードが返れば動くので、
ローカルアドレスを使って登録するケースが多いらしく踏襲した。

この仕組みなら自動遮断と連携する場合もDNSゾーンを操作する仕組みだけで良いので、
PowerDNSあたりをMasterにしてゾーン転送すれば拡張可能なのがメリットだったりする。

smtpd_client_restrictions =
    permit_mynetworks,
    reject_rbl_client dnsbl.example.jp,
    reject_rhsbl_client dnsbl.example.jp,
    reject_rhsbl_sender dnsbl.example.jp,
    permit

Postfixからの参照はコツが必要で、上のような設定をPostfixのmain.cfに書く必要がある。
接続元IPアドレスを元に制限する場合は”reject_rbl_client”を使えばいいが、
送信元メールドメインで制御するには”reject_rhsbl_client”や”reject_rhsbl_sender”が必要。

今回は同じサブドメインにDNSBLを全て登録しているのと、
IPアドレス・ドメインの両方で遮断するケースが出てきたので、
接続元IP・送信元ドメイン・MAIL Fromドメインの3つで制御する事にした。

………

実装してから1週間が経過したが、遮断したい対象をうまくフィルタする事が出来ている。
取り急ぎスパムメールを止めたかったのでDNSBL自体は手動更新になっているが、
前述の通りAnsibleとAPIで作り込めば自動化出来そうだった。
今時、DNSBLを使うのは時代に逆行している意見も多いが、
古典的だからこそ確実に動くのがメリットだったりするので少しの間弄ってみようと思う。





  • 応援中

    はじめるセカイの理想論 -goodbye world index-