GNU/Linux >> Linux の 問題 >  >> Debian

Debian / UbuntuのBINDリゾルバーで応答ポリシーゾーン(RPZ)を設定する

このチュートリアルでは、BINDDNSリゾルバーのパブリックDNSレコードを応答ポリシーゾーンでオーバーライドする方法を示します。 (RPZ)Debian/Ubuntuで。

応答ポリシーゾーンとは何ですか?

対応ポリシーゾーン (RPZ)は、DNSリゾルバーがDNSレコードを変更できるようにします。もともとは危険なウェブサイトへのアクセスをブロックする方法として開発されました。たとえば、コンピューターがマルウェアを拡散する既知の危険なサイトのIPアドレスを照会すると、DNSリゾルバーは127.0.0.1を返すことができます。 DNS応答として、コンピュータが危険なサイトに接続できないようにします。これは元のユースケースです。そのため、応答ポリシーゾーンはDNSファイアウォールとも呼ばれます。 。

RPZは他の方法で使用できます。たとえば、

  • ローカルネットワークにNextcloudのようなセルフホストサービスがある場合は、RPZを使用してNextcloudドメイン(nextcloud.your-domain.com)をローカルIPアドレスにポイントできるため、外出する必要はありません。インターネットに接続してから、ローカルネットワークに戻ってNextcloudサーバーにアクセスします。
  • 親はRPZを使用して、子供がポルノサイトにアクセスするのをブロックできます。
  • 不要な広告をブロックできます。
  • VPSに多くのWebアプリケーションをインストールします。ウェブアプリがパブリックアクセスを目的としていない場合、ハッキングを防ぐために、BIND RPZにのみDNSレコードを追加し、ドメインレジストラでDNSレコードを公開しません。

はい、/etc/hostsにDNSエントリを作成できます ローカルコンピューター上のファイルを使用してパブリックDNSレコードを上書きしますが、拡張性が高くありません。さらに、iOSとAndroidではローカルDNSエントリを作成できません。 BIND DNSリゾルバーがパブリックDNSレコードをオーバーライドして、BINDリゾルバーを使用するネットワーク内のすべてのデバイスがカスタムDNSレコードを使用できるようにすると便利ではないでしょうか?

前提条件

このチュートリアルに従うために、Debian/UbuntuサーバーでBINDDNSリゾルバーが実行されていることを前提としています。そうでない場合は、次のチュートリアルのいずれかを読んで、BINDリゾルバーを設定してください。

  • Debian10バスターで独自のBIND9DNSリゾルバーを設定する
  • Ubuntu 16.04/18.04で独自のBIND9DNSリゾルバーを設定する
  • Ubuntu20.04で独自のBIND9DNSリゾルバーを設定する

BIND Resolverが起動して実行されたら、以下の手順に従ってください。

Debian/UbuntuサーバーでBIND応答ポリシーゾーンを設定する方法

まず、named.conf.optionsを編集します ファイル。

sudo nano /etc/bind/named.conf.options

options {...}に次の行を追加します 応答ポリシーゾーンを有効にする句。 (最初の行はコメントです。)

//enable response policy zone. 
response-policy { 
    zone "rpz.local"; 
};

ファイルを保存して閉じます。次に、named.conf.localを開きます ファイル。

sudo nano /etc/bind/named.conf.local

このファイルにRPZゾーンを追加します。

zone "rpz.local" {
    type master;
    file "/etc/bind/db.rpz.local";
    allow-query { localhost; };
    allow-transfer { 12.34.56.78; };
};

注:

  • fileでは、単純なファイル名ではなく絶対パスを使用することが重要です。 ディレクティブ、またはBINDは、ファイルが/var/cache/bind/にあると想定します 。
  • RPZゾーンでは、ローカルホストからのクエリのみを許可する必要があります。ローカルネットワーククライアントを追加する必要はありません。
  • 12.34.56.78を置き換えます ゾーン転送を実行できるスレーブBINDDNSリゾルバーのIPアドレスを使用します。 DNSリゾルバーが1つしかない場合は、localhostを使用できます このように:allow-transfer { localhost; };

ファイルを保存して閉じます。次に、ゾーンファイルを作成する必要があります。ゾーンファイルを最初から作成する代わりに、ゾーンテンプレートファイルを使用できます。 db.emptyのコンテンツをコピーします 新しいファイルに。

sudo cp /etc/bind/db.empty /etc/bind/db.rpz.local

次に、db.rpzを編集します ファイル。

sudo nano /etc/bind/db.rpz.local

既存のコンテンツを変更する必要はありません。カスタムDNSレコードを追加するだけです。たとえば、ローカルネットワーク上にIPアドレス192.168.0.103のNextcloudサーバーがある場合は、次のDNSレコードを追加するため、NextcloudクライアントはNextcloudサーバーに接続するためにインターネットに接続する必要はありません。 。

nextcloud.your-domain.com      A   192.168.0.103

子供にpornhub.comなどのポルノサイトにアクセスさせたくない場合は、このファイルに次の行を追加して、pornhub.comドメイン全体をブロックします。

*.pornhub.com          CNAME  .

ウェブページにGoogleAdSense広告を表示したくない場合は、次の行を追加してdoubleclick.netをブロックできます。 ドメイン。AdSense広告の配信に使用されます。

*.doubleclick.net      CNAME   .

ブロックできる広告サーバードメインは次のとおりです。

*.pubmatic.com        CNAME .
*.mopub.com           CNAME .
*.eskimi.com          CNAME .
*.adcolony.xyz        CNAME .
*.adsrvr.org          CNAME .
*.adsymptotic.com     CNAME .
*.servedby-buysellads.com CNAME .
srv.buysellads.com    CNAME .
*.powerinboxedge.com  CNAME .
*.defof.com           CNAME .
*.licasd.com          CNAME .
*.liadm.com           CNAME .

ドメイン名のMXレコードを上書きするには、次のような行を追加します。

example.com         MX     0    mail.example.com.

左側の名前はすべてドットで終わらせてはならず、右側の名前はすべてドットで終わらせてはなりません。

ホスト名の負荷分散が必要な場合は、以下のように複数の値を持つレコードを作成します。 DNSクライアントは2つのIPアドレスをランダムに使用し、トラフィックはそれらの間で分散されます。

host.example.com         A              12.34.56.78
                         A              12.34.56.79

ファイルを保存して閉じます。ログをより適切に分析するために、RPZ用に別のログファイルを使用することをお勧めします。構成するには、BINDメイン構成ファイルを編集します。

sudo nano /etc/bind/named.conf

次の行をファイルに追加します。

logging {
    channel rpzlog {
  	file "/var/log/named/rpz.log" versions unlimited size 100m;
    	print-time yes;
    	print-category yes;
    	print-severity yes;
    	severity info;
    };
    category rpz { rpzlog; };
};

ファイルを保存して閉じます。次に、/var/log/named/を作成します ディレクトリを作成し、bindを作成します 所有者として。

sudo mkdir /var/log/named/
sudo chown bind:bind /var/log/named/ -R

次に、次のコマンドを実行して、メイン構成ファイルに構文エラーがあるかどうかを確認します。サイレント出力は、エラーが見つからないことを示します。

sudo named-checkconf

次に、RPZゾーンファイルの構文を確認します。

sudo named-checkzone rpz /etc/bind/db.rpz.local

エラーが見つからない場合は、BIND9を再起動します。

sudo systemctl restart bind9

これで、digを実行できます BINDサーバーでコマンドを実行して、RPZが機能しているかどうかを確認します。たとえば、応答ポリシーゾーンに含まれているドメイン名のDNSレコードをクエリします。

dig A nextcloud.your-domain.com @127.0.0.1

コマンド出力に次のようなものが表示されます。これは、DNS応答がローカルRPZから提供されたことを示しています。

;; AUTHORITY SECTION:
rpz.local			86400	IN	NS	localhost.

BIND9クエリログを確認することもできます。

sudo tail /var/log/named/rpz.log

以下のようなものが表示されます。これは、応答がローカルRPZから提供されたことを意味します。

(example.com): rpz QNAME Local-Data rewrite example.com via example.com.rpz.local

FedoraクライアントはRPZを使用しませんか?

デフォルトでは、FedoraはRPZを使用しません。 digを使用できます RPZゾーンでホスト名のIPアドレスを検索するコマンドラインユーティリティですが、ホスト名にpingを実行すると、IPアドレスが見つかりません。

この問題を解決するには、/etc/nsswitch.confのhostsパラメータを変更する必要があります Fedoraクライアント上のファイル。

sudo nano /etc/nsswitch.conf

デフォルトでは、hostsパラメータは次のように定義されています:

hosts:   files myhostname mdns4_minimal [NOTFOUND=return] resolve [!UNAVAIL=return] dns

次のように変更します:

hosts:   files mdns4_minimal [NOTFOUND=return] dns myhostname mymachines

ファイルを保存して閉じます。 RPZは現在機能しているはずです。

フォワーダーでのRPZの使用

fowardersを追加した場合 optionsの以下のようなディレクティブ /etc/bind/named.conf.optionsの句 ファイルの場合、BINDリゾルバーはフォワーダーになります。フォワーダーはDNS要求を8.8.8.8のようなアップストリームDNSリゾルバーに転送します 。

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
        ...
};

応答ポリシーゾーンは、このフォワーダー設定で機能します。バインドは、最初にローカル応答ポリシーゾーンを照会します。 DNSレコードがRPZで見つからない場合、要求はアップストリームDNSリゾルバーに転送されます。独自のBINDリゾルバーがDNS名の解決に時間がかかりすぎる場合は、フォワーダーを使用してDNS解決を高速化することをお勧めします。

ゾーン転送の構成

別のBINDDNSリゾルバーがある場合は、マスターDNSリゾルバーから更新を自動的に受信するようにスレーブリゾルバーとして構成できます。

まず、/etc/bind/named.conf.localを編集する必要があります マスターDNSリゾルバー上のファイル 。

sudo nano /etc/bind/named.conf.local

スレーブDNSリゾルバーのIPアドレスをallow-transferに追加します ディレクティブ。

zone "rpz.local" {
    type master;
    file "/etc/bind/db.rpz.local";
    allow-query { localhost; };
    allow-transfer { 12.34.56.78; };
    also-notify { 12.34.56.78; };
};

複数のスレーブDNSリゾルバーがある場合は、以下のように複数のIPアドレスを追加します。

 allow-transfer { 12.34.56.78; 12.34.56.79; };

also-notify ディレクティブは、RPZゾーンが変更されたときに、マスターDNSリゾルバーがスレーブリゾルバーに通知メッセージを送信するようにします。ファイルを保存して閉じます。変更を有効にするには、BINDを再起動します。

sudo systemctl restart bind9

マスターDNSリゾルバーでファイアウォールが実行されている場合は、スレーブDNSリゾルバーがポート53に接続できるようにする必要があります。たとえば、UFWファイアウォールを使用している場合は、次のコマンドを実行します。

sudo ufw insert 1 allow in from 12.34.56.78 to any port 53

次に、named.conf.optionsを編集します スレーブDNSリゾルバー上のファイル 。

sudo nano /etc/bind/named.conf.options

options {...}に次の行を追加します 応答ポリシーゾーンを有効にする句。 (最初の行はコメントです。)

//enable response policy zone. 
response-policy { 
    zone "rpz.local"; 
};

ファイルを保存して閉じます。次に、named.conf.localを編集します ファイル。

sudo nano /etc/bind/named.conf.local

このファイルにスレーブRPZゾーンを追加します。 11.22.33.44をマスターDNSリゾルバーのIPアドレスに置き換えます。

zone "rpz.local" {
    type slave;
    file "db.rpz.local";
    masters { 11.22.33.44;};
    allow-notify { 11.22.33.44; };
    allow-transfer { none; };
    allow-query { localhost; };
};

ファイルを保存して閉じます。

また、マスターDNSリゾルバーがnotifyを送信できるように、スレーブリゾルバーのファイアウォールを構成する必要があります。 メッセージ。

sudo ufw insert 1 allow in from 11.22.33.44 to any port 53

次に、次のコマンドを実行して、メイン構成ファイルに構文エラーがあるかどうかを確認します。サイレント出力は、エラーが見つからないことを示します。

sudo named-checkconf

エラーが見つからない場合は、BIND9を再起動します。

sudo systemctl restart bind9

BIND9が再起動すると、ゾーン転送がすぐに開始されます。次のコマンドでBIND9ログを確認します。

sudo journalctl -eu bind9

または

sudo journalctl -eu named

ゾーン転送が成功したことを示す以下のようなメッセージが表示されます。

transfer of 'rpz.local/IN' from xx.xx.xx.xx#53: Transfer status: success
transfer of 'rpz.local/IN' from xx.xx.xx.xx#53: Transfer completed: 1 messages, 34 records, 899 bytes, 0.248 secs (3625 bytes/sec)

注: マスターリゾルバーでRPZゾーンを変更するときはいつでも、シリアル番号を更新する必要があります。スレーブリゾルバがRPZゾーンが変更されたことを認識できるように、大きくします。

複数のRPZゾーンの作成

特定のDNSレコードをスレーブリゾルバーに転送したくない場合があります。別のRPZゾーンを作成できます。 named.conf.optionsを編集します ファイル。

sudo nano /etc/bind/named.conf.options

新しいRPZゾーンを追加します。

//enable response policy zone. 
response-policy { 
    zone "rpz.local";
    zone "rpz.local.notransfer"; 
};

:2つのRPZゾーンに競合するDNSレコードがある場合、最初のエントリが優先されます。優先順位を逆にしたい場合は、次のように位置を切り替えます。

//enable response policy zone. 
response-policy { 
    zone "rpz.local.notransfer"; 
    zone "rpz.local";
};

ファイルを保存して閉じます。次に、named.conf.localを開きます ファイル。

sudo nano /etc/bind/named.conf.local

このファイルに新しいゾーンの定義を追加します。

zone "rpz.local.notransfer" {
    type master;
    file "/etc/bind/db.rpz.local.notransfer";
    allow-query { localhost; };
    allow-transfer { localhost; };
};

ファイルを保存して閉じます。次に、ゾーンファイルを作成する必要があります。ゾーンファイルを最初から作成する代わりに、ゾーンテンプレートファイルを使用できます。 db.emptyのコンテンツをコピーします 新しいファイルに。

sudo cp /etc/bind/db.empty /etc/bind/db.rpz.local.notransfer

次に、db.rpzを編集します ファイルを作成し、カスタムDNSレコードを追加します。

sudo nano /etc/bind/db.rpz.local.transfer

トラブルシューティングのヒント

セカンダリDNSリゾルバーがプライマリDNSリゾルバーからのRPZレコードの複製に失敗した場合、セカンダリDNSリゾルバーで次のことが発生する可能性があります。

  • ファイアウォールルールが間違っています。
  • BINDリゾルバーが実行されていません。
  • BINDは必要なネットワークインターフェースをリッスンしていません。

BINDのビューでRPZを使用する方法

内部の信頼できるネットワークのみがRPZにアクセスできるようにする場合は、BINDのビューを使用してそれを実現できます。この設定は、マスター/スレーブゾーン転送と互換性があります。

まず、named.conf.optionsを編集します ファイル。

sudo nano /etc/bind/named.conf.options

aclを使用して内部ネットワークとゲストネットワークを定義します ディレクティブ。

options {
     .....
     .....
}

acl internal {
    10.10.10.0/24;
};

acl guest { 
   10.10.20.0/24;
};

ここで10.10.10.0/24 networkは、内部の信頼できるネットワークです。 10.10.20.0/24 ゲストネットワークです。また、このファイルから次の行を削除してください。

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

ファイルを保存して閉じます。

次に、named.conf.localを編集します ファイル。

sudo nano /etc/bind/named.conf.local

ゾーン定義をview内に配置する必要があります 以下のような条項。 view内で応答ポリシーゾーンを有効にする必要があることに注意してください 条項。

view "internal" {
  match-clients { internal; };

  //enable the response policy zone.
  response-policy {
     zone "rpz.local";
  };

  zone "rpz.local" {
    type master;
    file "/etc/bind/db.rpz.local";
    allow-query { localhost; };
    allow-transfer { 12.34.56.78; };
  };

};

ファイルを保存して閉じます。次に、named.confを編集します ファイル。

sudo nano /etc/bind/named.conf.default-zones

デフォルトのゾーンをguestに配置します ビュー。

view guest {
     match-clients { guest; };
     allow-recursion { any; };

    zone "." {
        type hint;
        file "/usr/share/dns/root.hints";
    };

    zone "localhost" {
        type master;
        file "/etc/bind/db.local";
    };

    .....
    .....
};

ファイルを保存して閉じます。次のコマンドを実行して、構成ファイルに構文エラーがあるかどうかを確認します。サイレント出力は、エラーが見つからないことを示します。

sudo named-checkconf

エラーが見つからない場合は、BIND9を再起動して、変更を有効にします。

sudo systemctl restart bind9

Debian
  1. CentOS8でBINDを使用してプライベートDNSサーバーを設定する方法

  2. Ubuntu20.04でUnboundDNSリゾルバーを設定する方法

  3. Ubuntu20.04およびDebian10でApache仮想ホストをセットアップします

  1. Ubuntu18.04でDNSネームサーバーを設定する方法

  2. Ubuntu / DebianにDNSサーバー(バインド9)をインストールして構成する方法

  3. Ubuntu 18.04 /16.04およびDebian10/9でスレーブDNS(BIND)サーバーを構成する方法

  1. Debian 10 /Debian9でDNSサーバーを設定する方法

  2. Debian11でタイムゾーンを設定する方法

  3. DNSdistを使用してDebianでDNSoverHTTPS(DoH)リゾルバーを設定する