bind: 無効な再帰クエリのブラックホール?

bind: 無効な再帰クエリのブラックホール?

私は公開されているネームサーバーを持っています。いくつかのドメインの権威あるネームサーバーです

現在、サーバーはANYisc.org、ripe.netなどの偽のリクエストで溢れています(これは既知の分散型DoS攻撃)。

サーバーは BIND を実行し、allow-recursionこれらの要求が拒否されるように LAN に設定されています。このような場合、サーバーはルート サーバーを参照するセクションauthorityのみで応答します。additional

応答をまったく送信せずに、これらの要求を完全に無視するように BIND を構成できますか?

答え1

同じ問題に直面した私は、すべての再帰リクエストを無視することにしました。すべてのリゾルバは、私のサーバーを権威サーバーとして使用したい場合、非再帰クエリを送信します。私の場合、誤って構成されたクライアントと攻撃者だけが再帰クエリを使用します。

残念ながらBINDでこれを行う方法は見つかりませんでしたが、iptablesで十分な場合は、

iptables -t raw -I PREROUTING -i eth0 -p udp --destination-port 53 \
    -m string --algo kmp --from 30 \
    --hex-string "|01000001000000000000|" -j DROP

答え2

私は次のことを試します:

zone "." {
  type redirect;
  allow-query "none";
}

クライアントをルート サーバーに参照する応答は、「リダイレクト」ゾーンによって制御されます。これにより、それらに応答しないように指示されます。

これは Bind9 のドキュメントで示唆されています:http://ftp.isc.org/isc/bind9/cur/9.9/doc/arm/Bv9ARM.ch06.html#id2592674

"none"ローカルサブネットに置き換えることもできます。

すでにzone "."宣言がある場合は、allow-query "none";それに追加するだけです。

答え3

文字列 isc.org をブロックしたり、その 16 進文字列をブロックしたりしてみましたか?

これは私にとってはうまくいきました:

iptables -A INPUT -p udp -m 文字列 --hex-string "|03697363036f726700|" --algo bm -j DROP

答え4

基本的な考え方は、bind が DNS 応答を拒否として分類し、iptables を使用して拒否を黙って無視するように変換することです。

拒否は、named.conf オプション セクションの簡単な部分です。

allow-recursion { none;};

または、もちろん、ローカル例外用のお気に入りの ACL もあります...

次に、iptables のすごい魔法として、必要に応じて「-o eth0」を調整または削除します。このコマンドは、UDP の前に標準の 20 バイトの IPv4 レイヤー ヘッダーがあることを想定しています。

iptables -A OUTPUT -o eth0 -p udp --sport 53 -m string --from 30 --to 32 --hex-string "|8105|" --algo bm -j DROP

これは、DNS応答のフラグフィールドを次のビットを設定してキーします。

  • DNS 応答
  • 再帰クエリ
  • 返信コードが拒否されました

ルールが一致し、テスト用のフィードバックが得られるときに、デバッグでバインドを実行するとログ メッセージ「応答の送信エラー: ホストに到達できません」が表示されることに気付きました。

これはすべて、いくぶん無意味な作業であることを認めなければなりません。増幅がなければ、攻撃者は簡単に TCP SYN をリフレクションできます。結局のところ、DNS は壊れており、TCP を使用するか、Eastlake の DNS クッキーを展開する以外に実行可能な解決策はありません。

関連情報