dnsdistは、高パフォーマンスで柔軟なDNSプロキシとロードバランサです。PowerDNSプロジェクトによって開発され、オープンソースで利用可能です。dnsdistは、DNSトラフィックの制御、トラフィックの分散、セキュリティの向上など、さまざまな目的で使用されます。DDoSへの対策になりそうなので調べた内容です。
環境
Ubuntu 22.04
インストール
$ sudo apt update $ sudo apt install dnsdist
設定ファイルを修正
/etc/dnsdist/dnsdist.conf
に設定ファイルがあるので修正する。
-- フロー制限アクションを作成 addAction(MaxQPSIPRule(1, 2), DropAction()) newServer({address="192.168.1.1:53", name="dns-1"}) setServerPolicy(firstAvailable) -- Listen on port 53 addLocal('0.0.0.0:54') root@worker003:/home/ryu# cat /etc/dnsdist/dnsdist.conf -- フロー制限アクションを作成 addAction(MaxQPSIPRule(1, 2), DropAction()) newServer({address="192.168.1.1:53", name="dns-1"}) setServerPolicy(firstAvailable) -- Listen on port 53 addLocal('0.0.0.0:54')
addAction()は、dnsdistで使用される関数の1つで、フィルタリングルールとアクションを組み合わせてリクエストの処理を制御する。setServerPolicy()は、dnsdistで使用される関数の1つで、バックエンドサーバの選択ポリシーになります。
制限を入れる
やりたかったのはこの部分になります。dnsdistである程度クエリを落としたり遅延させることでそのバックエンドのDNSを守ろうという考えになります。
Packet Policies — dnsdist documentation
やりたいことのまとめはここにあります。QPSを制限するのにとても柔軟に設定ができるイメージを持ちました。ネットワークマスクの値を取れるのは特に便利でDDoSって割と偏りがあったりするのでその辺を絞った制限をできるだけでも大分便利そうです。