next up previous contents
Next: 6.4.9 内部から外への自由なアクセス Up: 6.4 フィルタリングルール Previous: 6.4.7 Mail と Web

6.4.8 DNS query

DNS query についてはDNSプライマリーサーバとセカンダリサーバへの問い合わせ のみに限定します。その他の 53 番ポートへのアクセスはブロックしておきます。 何故ならば、内部からDNSを経由せずに外にqueryすることはなく、外部からは アタックの可能性があるからです。プロトコルについてはUDPのみを許可する というルールが基本になります(TCPはゾーン転送に使われるために、これを 許すとセキュリティホールのあるDNSが危険にされされることになるからです。 勿論、セキュリティホールがなければ許しても構わないのですが、転ばぬ先の 杖という所です)。ここで注意しなければならないのは、stateless で考える と、 UDPによるパケットで あるために、内側から外のDNSへの問い合わせに対する返答を許可しなければ ならない点で、そのために外から内側の53番ポートへのアクセスを禁止する ことは出来なくなりますが、IPFilterの keep state を用いれば すっきりと書く事が出来ます。

pass in  quick proto udp from any to MYDNS port = 53 group 100
pass in  quick proto udp from any port = 53 to any   group 100
pass out quick proto udp from MYDNS port = 53 to any group 200
pass out quick proto udp from any to any port = 53   group 200

この例では、MYDNS は自分のサイトの公式DNSを意味しています。もし、セカンダリ がある場合にはセカンダリについても上と同じ記述をする事が必要になります。 なお、この例では2行目の宛て先が to any になっていますが、これは内部ネット を意味しているので、より正確には内部ネットを指定するようにした方が良いでしょう。 これは4行目の from any についても同じです。

以上は、stateless な書き方ですが、これをstateful に書くと、

pass in  quick proto udp from any to MYDNS port = 53 keep state group 100
pass out quick proto udp from any to any port = 53 keep state group 200

となります。但し、この場合でも内部の任意のマシンから外の DNS へのアクセスを許しており、同時に、外部からのアクセスについて も制限はありません。しかし、外部からのアクセスが必ず port 53 から であるとは保証されていないので、強めるとしても次の程度でしょう。

pass in  quick proto udp from any to MYDNS port = 53
                                           keep state group 100
pass out quick proto udp from MYDNS port = 53 to any port = 53 
                                           keep state group 200

但し、この場合には、nslookup などを使った外のDNSサーバの検索が出来な くなり、DNSサーバの間のみの query とその response だけを許可すること になります。実際、DNSサーバ間の通信にはUDPを用い、 発信・受信ポートは共に 53番を用いるからです(DNS自体が53以外の ポートからの発信をしている場合もあります)。



Noriyo Kanayama