このチュートリアルでは、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