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 だ。