dnsmasq(DNS キャッシュサーバ)を使ったサイトアクセス制限
DNS のキャッシュサーバとしてつかえる、dnsmasq というソフトウェアがあります。
ちょっと前から DHCP サーバの機能まで内蔵してしまったようでして LAN 内で便利に使えるソフトになっています。
もちろん、外部の DNS サーバへの問い合わせおよびそのキャッシュにもつかえるのですが、dnsmasq には、/etc/hosts の内容を読み、それを応答として返却する機能があります。
つまり、内部向けのプライベート DNS サーバとして使うことができ、LAN 内の WWW サーバに、www.localnet といった名前を簡単につけることができます。
この機能を使って次のようなことができます。
あまりアクセスしたくない(させたくない) Webサイトがあったとします。
例えば、広告ばかり出しているサイト、クリックしたら何やら ActiveX をインストールしようとするところ、どう考えても「追跡」が目的でしょうと思われるサイト….。
そういったサイトがある時、hosts に以下のように登録してやります。(ここでは、仮に、www.example.com とします。)
127.0.0.1 www.example.com
すると、dnsmasq がこの行を読み、LAN内のクライアントから、www.example.com の名前を引くと、127.0.0.1 が返却される、つまり、アクセス不能になります。*1
ずっとこれでやっていたのですが、面倒な場合が出てきました。
複数のホスト名があるときです。
この場合、複数行定義する必要があります。
127.0.0.1 www1.example.com 127.0.0.1 www2.example.com 127.0.0.1 www3.example.com 127.0.0.1 www4.example.com
これだと、ホスト名が増えたり変更になっても即応できませんし、そもそも書くのが面倒です。
何か良い方法はないかと思っていたのですが、そのものずばりの機能が、dnsmasq に存在していました。
dnsmasq の設定ファイル(dnsmasq.conf )のサンプルに、
# Add domains which you want to force to an IP address here. # The example below send any host in doubleclick.net to a local # webserver. #address=/doubleclick.net/127.0.0.1
という設定があります。
まさにこれです。
release 1.12 で追加されたようなので、結構昔から合ったようです。ちゃんとドキュメントは読まないといけませんね。
早速これのコメントアウトをはずし、
# Add domains which you want to force to an IP address here. # The example below send any host in doubleclick.net to a local # webserver. address=/example.com/127.0.0.1
とすると、example.com 配下の全ホストの名前解決が 127.0.0.1 になるようになりました。
address= を何行も並べると複数のドメインの定義が可能です。
*1:当然ながら、名前解決をしない、つまり IP アドレスを使っているリンクに対しては無力。