iptables DNSを許可する
Linuxのパケットフィルタ(いわゆるファイアーウォール)であるiptables でポートをいろいろ塞ぐと DNS 問い合わせをブロックしてしまうことがあります。DNSの通信をブロックしてしまうと、名前解決ができなくなり、ネットワーク通信ができなくなり、困ります。
目次
概要
DNSは、インターネットを支える技術の1つで、名前解決の機能を提供します。名前解決とは、FQDNの名前をIPアドレスに変換する処理です。パッケージのアップデートをするときに、パッケージのサーバにアクセスするときに、名前解決をして、IPアドレスを元に通信します。
DNS 問い合わせは、主にUDP が利用されます。UDPを利用する主な理由は、TCPに比べてオーバーヘッドが少ないからです。TCPでも可能ですが、3ウェイ・ハンドシェイクがあり、オーバーヘッドが大きくなります。
iptables で domain (53ポート) の通信が通らないと外部のDNS サーバーを利用した 名前解決 ができなくなります。
DNSのクライアントとDNSサーバ
DNSの通信と一言でいっても、利用形態が以下の2つがあります。
- DNSクライアント
- DNSサーバ
DNSクライアントは、DNSのサービス(名前解決のサービス)を利用するコンピュータです。たいていの場合は、こちらです。家のパソコンや自分のもっているサーバは、たいていクライアントです。
DNSサーバとは、名前解決のサービスを提供するサーバです。自分のドメインを所有し、サブドメインなどを管理する、といったときに、DNSサーバ をたてて、サービスすることになります。
DNSの通信
DNSの通信は、主に UDP で送ります。UDP は、セッションを持たない単発のパケットを投げ合うプロトコルであるため、iptablesでは、INPUT(インカミング) と OUTPUT(アウトゴーイング)のどちらのパケットのアクセスも許可しなければなりません。
使い方
DNSクライアントとして問い合わせをする
ここでの前提は、iptables を設定するホストが Domain Name System のサーバーとして機能するのではなく、DNS のクライアントとして動作する、ということです。 クライアントというのは、named/bind サービスを稼働するコンピュータではなく、パソコンやウェブサーバなどです。
ステート を利用して、通信を許可できます。
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ステートを使わずにDNSクライアントとして問い合わせをする
iptables の下記設定を追加します。
-A INPUT -p udp --sport 53 -j ACCEPT -A OUTPUT -p udp --dport 53 -j ACCEPT
UDP トラフィックをすべて遮断し、 53 だけ許す例です。
-A INPUT -p udp --sport 53 -j ACCEPT -A OUTPUT -p udp --dport 53 -j ACCEPT -A INPUT -p udp -j DROP -A OUTPUT -p udp -j DROP
DNS サービスを許可する
DNS を外部に公開する例です。bindなどを利用して、DNSのサービスを提供する場合に利用します。
iptablesの設定は、以下の通りです。
-A INPUT -p tcp --dport 53 -j ACCEPT
iptables の設定ファイルの例です。ssh 22とdomain 53を許可しています。
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -p tcp --dport 22 -j ACCEPT -A INPUT -p tcp --dport 53 -j ACCEPT -A OUTPUT -o lo -j ACCEPT COMMIT
関連項目
- iptables
- iptables のインストール
- iptables のテーブル
- iptables のサービスのコントロール
- iptables のコマンドラインオプション
- iptables のルールを確認する
- iptables の設定ファイル
- iptables の設定の変更
- iptables のターゲット
- iptables ログを出力する
- iptables アクセス回数を制限する
- iptables 接続状態
- iptables ステートフルパケットインスペクション
- iptables が動かない場合
- iptables ICMPのタイプ
- iptables icmp echo requestを許可する
- iptables DNSを許可する
- iptables HTTPとHTTPSを許可する
- iptables sshを許可する
- iptables の設定例
- ufw (Uncomplicated FireWall)、iptablesのフロントエンド
- ファイアーウォール
ツイート