BIND(blackhole対応)

Table of Contents

dnf upgradeで最新の状態にしたら、DNSのログに以下のような不正問い合わせ(オープンリレーならば踏み台にしてやろう的な)のログが大量に発生
allow-query { any ; };指定では、設定のしかたが悪いのか、別の不具合が発生したので、BindのBlackholeを自動化する – 蒲田ネットが簡単そうなので、そのまま導入

Nov 11 09:44:05 hp named[1224]: client @0x7f80f0039ec0 86.19.33.185#647 (sl): view world: query (cache) 'sl/ANY/IN' denied
Nov 11 09:44:08 hp named[1224]: client @0x7f80f0039ec0 174.72.248.226#53 (sl): view world: query (cache) 'sl/ANY/IN' denied
Nov 11 09:44:10 hp named[1224]: client @0x7f80f0039ec0 174.72.248.226#53 (sl): view world: query (cache) 'sl/ANY/IN' denied

named.confの設定

namedのoptionsにblackholeを追加

vi /etc/named.conf
----------------------------------------
include "/etc/blacklist.txt";   ←追加

options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { private-zone; };
        allow-transfer  { none; };

        blackhole{ black-list; };  ←追加
----------------------------------------

blacklist.txtを2か所作成

vi /var/named/chroot/etc/blacklist.txt
----------------------------------------
acl "black-list" {

};
----------------------------------------
vi /etc/blacklist.txt
----------------------------------------
acl "black-list" {

};
----------------------------------------

※ /etc/blacklist.txtは、named.confの設定確認(named-checkconf)のためなので、確認が終わったら削除で問題無い

named.confの設定確認

# named-checkconf /etc/named.conf

サービスの再起動

BINDを再起動して、設定を反映させる

# systemctl restart named-chroot
# systemctl status  named-chroot

/var/named/chroot/etc/named.confを参照して、設定が反映されているか確認する
※ サービスの再起動が漏れていているのを気づくのに半日かかった

IPを抽出するスクリプト

複数のmessagesファイルからIPを抽出(ブロック対象になったら約一か月ブロック)

vi /usr/local/sbin/ipblacklist.sh
----------------------------------------
#!/bin/bash

PASH=/var/log
FILE=messages*
LIST=/var/named/chroot/etc/blacklist.txt

# Feb  8 10:04:38 kamatans named[1318]: client @0x7f7d6c01bca0 174.101.79.68#6672 (sl): view external: query (cache) 'sl/ANY/IN' denied

echo "acl \"black-list\" {" > $LIST
find $PASH -name $FILE | xargs cat  \
          | grep 'denied' | grep 'view world' | grep -v 'inao.jp' \
          | awk '{print $8}' | awk -F '#' '{print $1}' | sort | uniq -c \
          | awk '$1 > 20 {print $2";"}' >> $LIST
echo "};" >> $LIST
systemctl reload named-chroot
----------------------------------------

cron

cron.hourlyにリンクを作成して定期実行させる。

# ln -s /usr/local/sbin/ipblcklist.sh /etc/cron.hourly/ipblcklist.sh

オープンリゾルバ確認

オープンリゾルバ確認サイトでオープンリゾルバ状態になってないか確認。
このサイトは、アクセスしたホストが設定している DNS と、自身の IP に対してチェックが行われるので、ssh 接続した Linux サーバ上などからチェックするには、コマンドラインからこのサイトに http でアクセスする必要がある。

$ wget -qO - http://www.openresolver.jp/cli/check.html
Configured DNS server: [NOT open] 214.***.***.6(s1100.exsample.net)
Source IP address: [NOT open] 214.***.***.128(dns2.exsample.com)

という具合に結果が返ってくるので、[NOT open] になっていれば OK だ。

参考URL

BindのBlackholeを自動化する – 蒲田ネット
2021年09月18日::なんでもや~3店目~

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です