新しくフルサービスリゾルバ(キャッシュDNSサーバ、再帰的DNSサーバ)を構築する手順を示します。
構築する動機
internal.example.com
など組織内ネットワークからのみアクセス出来るゾーンがあるとします。これは、インターネットからアクセス出来ない、内部むけ権威サーバを設置することで可能となります。
このとき、外部のフルサービスリゾルバは内部むけ権威サーバにアクセス出来ないため、内部向けフルサービスリゾルバを構築する必要があります。
また、組織内ネットワークに属する全ての計算機は、その内部向けフルサービスリゾルバを参照する必要があります。参照するフルサービスリゾルバの変更は次章で紹介します。
キャッシュポイズニング攻撃対策を読もう
フルサービスリゾルバは外部からの問い合わせを拒否するように設定したほうがよいです。
キャッシュポイズニング攻撃のリスク軽減の観点からも、オープンリゾルバーの修正は必須
キャッシュポイズニングでは、自組織の利用者や顧客が直接危険にさらされる
なぜオープンリゾルバを運用すべきではないかを理解するために、キャッシュDNSサーバー運用者向け―基本対策編を読むことをおすすめします。
この資料は(緊急)キャッシュポイズニング攻撃の危険性増加に伴うDNSサーバーの設定再確認についてから参照出来ます。
Unboundを使おう
先程までBINDの説明をしてきましたが、新しく構築するのであればUnboundがおすすめです。
理由として以下が挙げられます。
- 設定が容易である(デフォルトで安全な設定ができる)
- (BINDの次に)資料が豊富である
詳細は https://unbound.jp/unbound を参照してください。
access-controlをしっかりと設定しよう
内部向け権威サーバのアクセス制御がどうなっているのか、必ず調べてください。
権威サーバから見ると、クライアントはフルサービスリゾルバになるため、フルサービスリゾルバは権威サーバのそれよりも小さい範囲からアクセスを許可する必要があります
そうしなければ、本来許可されていないサーバがフルサービスリゾルバを介して権威サーバの資源レコードにアクセス出来てしまいます。
server:
access-control: 172.16.0.0/12 allow
interface:0.0.0.0
を使わない
wikipediaによると、0.0.0.0は
サーバにおいては、0.0.0.0は「ローカルマシン上の全てのIPv4アドレス」を意味する。ホストに192.168.1.1と10.1.2.1の2つのIPアドレスがあり、そのホストで実行されているサーバが0.0.0.0で待ち受けするように構成されている場合、どちらのIPアドレスに対しても到達可能になる。
便利なアドレスですが、これを使わず1つ1つ設定しましょう
server:
interface: 192.168.1.1
interface: 10.1.2.1
interface: 127.0.0.1
これは予想外のIPアドレスからアクセスされる可能性をなくすことと、127.0.0.53:53
でlistenしているsystemd-resolvedのstub listenerと競合しないようにするためです。
ドキュメントを読もう
https://unbound.jp/unbound/unbound.conf/ は一通り読むとよいでしょう。
特定のゾーンで権威サーバを指定する
internal.example.com.
の権威をもつ内部向け権威サーバが192.168.0.3
で動いているとき、このように設定できます。
stub-zone:
name: "internal.example.com."
stub-addr: 192.168.0.3
逆引きの設定は以下のようになります。
server:
local-zone: "3.0.168.192.in-addr.arpa." nodefault
stub-zone:
name: "3.0.168.192.in-addr.arpa."
stub-addr: 192.168.0.3