GNU/Linux >> Linux の 問題 >  >> Cent OS

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

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

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

対応ポリシーゾーン (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レコードを使用できるようにすると便利ではないでしょうか?

前提条件

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

  • CentOS 8 /RHEL8で独自のBIND9DNSリゾルバーをセットアップする

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

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

まず、named.confを編集します Nanoなどのコマンドラインテキストエディタを使用してファイルを作成します。

sudo nano /etc/named.conf

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

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

次に、このファイルの一番下までスクロールして、このファイルにRPZゾーンを追加します。

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

注:

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

ログをより適切に分析するために、RPZ用に別のログファイルを使用することをお勧めします。そのため、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/を作成します ディレクトリを作成し、namedを作成します 所有者として。

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

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

sudo cp /var/named/named.empty /var/named/rpz.local

ゾーンファイルを編集します。

sudo nano /var/named/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   .

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

example.com         MX     0    mail.example.com.

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


ファイルを保存して閉じます。次に、namedを設定する必要があります /var/named/rpz.localのグループ所有者として ファイル、または名前付きはこのゾーンをロードできません。

sudo chown root:named /var/named/rpz.local

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

sudo named-checkconf

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

sudo named-checkzone rpz /var/named/rpz.local

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

sudo systemctl restart named

これで、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/named.confの句 ファイルの場合、BINDリゾルバーはフォワーダーになります。フォワーダーはDNS要求を8.8.8.8のようなアップストリームDNSリゾルバーに転送します 。

options {
//      listen-on port 53 { 127.0.0.1; };
//      listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        max-cache-size 100m;
        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     { localhost; 10.10.60.0/24;};

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

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

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

ゾーン転送の構成

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

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

sudo nano /etc/named.conf

スレーブ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 named

マスターDNSリゾルバーでファイアウォールが実行されている場合は、スレーブDNSリゾルバーがポート53に接続できるようにする必要があります。

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="12.34.56.78" accept'
sudo systemctl reload firewalld

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

sudo nano /etc/named.conf

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

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

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

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

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

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

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="11.22.33.44" accept'
sudo systemctl reload firewalld

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

sudo named-checkconf

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

sudo systemctl restart named

BINDが再起動すると、ゾーン転送がすぐに開始されます。次のコマンドで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)

ゾーンファイルは/var/named/rpz.localとして保存されます スレーブリゾルバ上。

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

複数のRPZゾーンの作成

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

sudo nano /etcnamed.conf

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

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

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

zone "rpz.local.notransfer" {
    type master;
    file "/var/named/rpz.local.notransfer";
    allow-query { localhost; };
    allow-transfer { localhost; };
};

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

sudo cp /var/named/named.empty /var/named/rpz.local.notransfer

ゾーンファイルを編集します。

sudo nano /var/named/rpz.local.notransfer

Cent OS
  1. Chroot機能を備えたLinux/Rhel/CentOSにDNS/BINDをインストールして構成する

  2. CentOS 7 /RHEL7でホスト名を設定または変更する方法

  3. CentOS 7 / RHEL 7でスレーブDNS(BIND)を構成する方法

  1. RHEL 8 / CentOS8LinuxにDNSサーバーをインストールする方法

  2. chrootを使用してCentOS5/RHEL5でDNSを構成する

  3. CentOS 5 /RHEL5でDNSサーバーを構成する方法

  1. CentOS / RHEL 7/6/5でDNS(バインド)サーバーをセットアップする方法

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

  3. CentOS7でタイムゾーンを設定する方法