DNSクエリフィルタリング

バインドDNSサーバーのバージョン9.8.1から、DNS RPZという新しい機能が登場しました。 これは、多くのシステム管理者にとって非常に役立つ興味深いツールです。 奇妙ですが、インターネットのロシア語のセグメントでは、このトピックは完全にはカバーされていません。 私はこのギャップを埋めるために急いでいます。



それはどんな動物で、何と一緒に食べますか?



略称RPZは、応答ポリシーゾーンを表します。 これは、ISCによって開発された技術であり、特定のリソースへのDNSクエリをブロックしたり、代替アドレスにリダイレクトしたりする簡単な方法を通信事業者に提供します。 RPZは、サーバー間で転送できるゾーン(DNS AXFR / IXFR)であり、トランザクション署名(DNS TSIG)で保護され、リアルタイムで更新されます(DNS NOTIFY)。



ゾーン形式



他のDNSゾーンと同様に、SOAレコードと少なくとも1つのNSレコードが必要です。 SOAは、シリアル番号とタイマーを持つ有効なレコードであり、ゾーンの委任に使用され、レコードの有効期間(TTL)を示します。 NSレコードは使用されることはなく、互換性のためです。 通常、単一のNSレコードにはダミーのlocalhost値があります。 ゾーンの残りの部分は、DNSポリシーの表現です。 ポリシーは、ドメイン名またはそのテンプレートに適用できます。



仕組み



単純化されたRPZの作業は、次のスキームで表すことができます。



右側の部分は、通常のキャッシングDNSサーバーと連携するスキームを示しています。DNSサーバーは、ホースサーバーからのすべての応答をそのままクライアントに返します。 RPZの場合、セキュリティポリシープロバイダー(ドメイン名解決ポリシーを取得するDNSサーバー)が表示されます。 サードパーティプロバイダーの存在は完全にオプションであり、独自のローカルポリシーを設定できます。 例として、これについては後で詳しく説明します。



独自のRPZサーバーを作成できるなど、いくつかのプロバイダーが存在する場合があります。



プロトコルの詳細については、公式ドキュメント(下記のリンク)を参照してください-詳細が必要な人は、自分でプロトコルを習得すると思います。



作業構成の例を使用して、RPZの動作を示しましょう。 これは、すでにDNSサーバーが構成されていることを意味します。すべてが機能するために有効にする必要があるオプションのみを示します。 このアクションはUbuntu 12.10で行われます。



まず、/ etc / bind / named.conf.optionsファイルで「response-policy」オプションを使用して、RPZを有効にします。

response-policy { zone "rpz.zone"; };
      
      





「response-policy」内には複数のゾーンがあり、それぞれが独自のポリシーを持つことができます(詳細については仕様を参照してください)。



ファイル/etc/bind/named.conf.localに、ゾーンの説明を配置します。

 zone "rpz.zone" { type master; file "/etc/bind/db.rpz.zone"; allow-query {any;}; allow-update {none;}; };
      
      







最後に、ゾーン自体(ファイル/etc/bind/db.rpz.zone):

 ;RPZ $TTL 10 @ IN SOA rpz.zone. rpz.zone. ( 5; 3600; 300; 86400; 60 ) IN NS localhost. vk.com CNAME habrahabr.ru. *.gov.by CNAME . gov.by MX 0 gmail.com. *.blabla.com A 1.2.3.4 *.xxx A 127.0.0.1 1.by CNAME abcde-net.by.
      
      







新しい設定を適用します:

 sudo rndc reload
      
      





そして何が起こったのかを見てください

 dig vk.com ; <<>> DiG 9.8.1-P1 <<>> vk.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11880 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;vk.com. IN A ;; ANSWER SECTION: vk.com. 10 IN CNAME habrahabr.ru. habrahabr.ru. 466 IN A 212.24.43.44 ;; Query time: 0 msec ;; SERVER: 192.168.3.204#53(192.168.3.204) ;; WHEN: Thu Apr 25 00:56:49 2013 ;; MSG SIZE rcvd: 66
      
      





サーバーの応答からわかるように、アドレスはhabrahabr.ruになりすました。

ブラウザに次のように表示されます。



もちろん、内部サーバーで置換を行うこともできます。たとえば、要求されたドメインへのアクセスがセキュリティポリシーによって禁止されていることをクライアントに通知します。



 dig gov.by ; <<>> DiG 9.8.1-P1 <<>> gov.by ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10961 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;gov.by. IN A ;; AUTHORITY SECTION: rpz.zone. 10 IN SOA rpz.zone. rpz.zone. 8 3600 300 86400 60 ;; Query time: 11 msec ;; SERVER: 192.168.3.204#53(192.168.3.204) ;; WHEN: Thu Apr 25 00:59:18 2013 ;; MSG SIZE rcvd: 68
      
      





ここでは、リクエストは未回答のままです。 gov.byサブドメインでも同じことが起こります。



blabla.comドメインのすべてのサブドメインがアドレス1.2.3.4に置き換えられ、xxxゾーンのすべてのドメインがlocalhostに置き換えられることは簡単に推測できます。



ゾーンの最後の行について個別に説明します。 地方の町の小さなプロバイダーとして、私たちは完全にタイトなユーザーの問題に遭遇することがよくあります。私たちのホームページのアドレスを入力することは圧倒的な仕事です(そしてこれがすべての内部リソースの出発点です)。

技術サポートが頭をテーブルの上に置いてヒステリックに打ち負かしたとき、それは時々コミックケースになります。 これが、このレコードが作成された目的です。 クライアントがブラウザのアドレスバーに「1.by」と入力するだけで(引用符なし)、必要な場所に移動します。





そして、このような不名誉は、Webサーバー(ApacheのRewriteRule)を使用して、読み書きのできるユーザーの目を刺激しないように、ホスト「1.by」は有効なサーバーアドレスにリダイレクトされます。



参照:

ftp.isc.org/isc/dnsrpz/isc-tn-2010-1.txt

kb.isc.org/category/110/0/10/Software-Products/BIND9/Features/DNSRPZ



All Articles