前回、以下の記事でドメインとIPアドレスの関係を調べてみました。
世の中にはこの関係をおかしくさせる攻撃もあるようなので、今回まとめてみます。
攻撃って?
DNSキャッシュポイズニングという攻撃手段があるようです。
詳しくは、DNSスプーフィング - Wikipediaを参照いただきたいのですが、ドメイン名とIPアドレスの対応を教えてくれるDNSサーバのIPアドレスがキャッシュされていない時に、偽の応答を送信してIPアドレスを騙して覚えさせるもののようです。
なお、DNSSECのような電子署名を利用して、偽の応答を受け取らないように対策されていることが多いようですので、最近はあまり身構えなくても良さそうです。
ただし、よくわからないDNSサーバに優先して接続するような場合は注意が必要かもしれません。
構築してみる
というわけで実際にDNSサーバを構築して動きを見てみようと思います。
Bindのインストール
UbuntuServerの公式に設定方法があるので、そのまま使ってみます。
https://ubuntu.com/server/docs/service-domain-name-service-dns
$ sudo apt update && sudo apt -y upgrade && sudo apt install -y bind9 dnsutils
設定ファイルを変えてみる
/etc/bind/配下に設定ファイルがあるようなので、そこをいじってみます。
/etc/bind/named.conf.optionsに、一般的なDNSサーバに問い合わせる設定を記述するようです。
ここをうっかり設定してしまうと、インターネットに存在する権威DNSサーバへの攻撃になってしまいそうなので、あえてスキップして進めます。
ただ、この時点で存在しないドメインに問い合わせるにしても、localhostのサブドメインで試せば権威DNSサーバに行かないので良いのかもしれません。
$ dig shikairo.sonzaishinai.localhost +noall +answer
shikairo.sonzaishinai.localhost. 0 IN A 127.0.0.1
このドメインのZoneを/etc/bind/named.conf.localで設定してみます。
$ cat /etc/bind/named.conf.local
zone "shikairo.sonzaishinai.localhost" {
type master;
file "/etc/bind/db.example.com";
};
読み込むファイルは例にあるようにコピーして作ってみます。
$ sudo cp /etc/bind/db.local /etc/bind/db.example.com
デフォルトだとlocalhost向けの設定になっているようです。
$ cat /etc/bind/db.example.com
;
; BIND data file for local loopback interface
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
@ IN AAAA ::1
一旦このままサービスを再起動してみます。
$ sudo systemctl restart bind9.service
すると何も変わりませんでした…
$ dig shikairo.sonzaishinai.localhost +noall +answer
shikairo.sonzaishinai.localhost. 0 IN A 127.0.0.1
resolve.confも修正する
どうも、クライアント側のresolve.confの設定変更が必要なようなのでやってみます。
$ cat /etc/resolv.conf
nameserver 127.0.0.53
search shikairo.sonzaishinai.localhost
これでも変わらない…
と思ってよくよくみたんですが、このファイルでlocalhostの設定はされてしまっているんですね。
/etc/bind/named.conf.default-zones: default zones such as localhost, its reverse, and the root hints
なぜか動かない…
原因としては、以下のコマンドを実行しても127.0.0.53が返ってこないことかなと思うのですが、今回はここまでの調査とします。
$ resolvectl status
感想
普段何気なく使わせてもらっているDNSサーバですが、自前で作るとなるとつまづきポイントがいろいろあるように感じました。
またリベンジしてみます。