「iptables DNSを許可する」の版間の差分
(→関連項目) |
|||
(同じ利用者による、間の1版が非表示) | |||
行1: | 行1: | ||
− | + | [[Linux]]のパケットフィルタ(いわゆる[[ファイアーウォール]])である[[iptables]] でポートをいろいろ塞ぐと [[Domain Name System|DNS]] 問い合わせをブロックしてしまうことがあります。[[DNS]]の通信をブロックしてしまうと、[[名前解決]]ができなくなり、ネットワーク通信ができなくなり、困ります。 | |
− | + | ||
− | + | ||
− | [[iptables]] でポートをいろいろ塞ぐと [[Domain Name System|DNS]] 問い合わせをブロックしてしまうことがあります。 | + | |
__TOC__ | __TOC__ | ||
== 概要 == | == 概要 == | ||
+ | [[DNS]]は、インターネットを支える技術の1つで、[[名前解決]]の機能を提供します。[[名前解決]]とは、[[FQDN]]の名前を[[IPアドレス]]に変換する処理です。パッケージのアップデートをするときに、パッケージのサーバにアクセスするときに、名前解決をして、[[IPアドレス]]を元に通信します。 | ||
+ | |||
+ | [[Domain Name System|DNS]] 問い合わせは、主に[[UDP]] が利用されます。[[UDP]]を利用する主な理由は、[[TCP]]に比べてオーバーヘッドが少ないからです。[[TCP]]でも可能ですが、[[3ウェイ・ハンドシェイク]]があり、オーバーヘッドが大きくなります。 | ||
− | + | [[iptables]] で domain (53ポート) の通信が通らないと外部の[[Domain Name System|DNS]] サーバーを利用した [[名前解決]] ができなくなります。 | |
− | + | == DNSのクライアントとDNSサーバ == | |
+ | [[DNS]]の通信と一言でいっても、利用形態が以下の2つがあります。 | ||
+ | * DNSクライアント | ||
+ | * DNSサーバ | ||
− | + | DNSクライアントは、DNSのサービス(名前解決のサービス)を利用するコンピュータです。たいていの場合は、こちらです。家のパソコンや自分のもっているサーバは、たいていクライアントです。 | |
+ | DNSサーバとは、名前解決のサービスを提供するサーバです。自分のドメインを所有し、サブドメインなどを管理する、といったときに、DNSサーバ をたてて、サービスすることになります。 | ||
+ | == DNSの通信 == | ||
+ | [[DNS]]の通信は、主に [[UDP]] で送ります。[[UDP]] は、セッションを持たない単発のパケットを投げ合うプロトコルであるため、[[iptables]]では、INPUT(インカミング) と OUTPUT(アウトゴーイング)のどちらのパケットのアクセスも許可しなければなりません。 | ||
+ | == 使い方 == | ||
=== DNSクライアントとして問い合わせをする === | === DNSクライアントとして問い合わせをする === | ||
ここでの前提は、[[iptables]] を設定するホストが [[Domain Name System]] のサーバーとして機能するのではなく、[[Domain Name System|DNS]] のクライアントとして動作する、ということです。 | ここでの前提は、[[iptables]] を設定するホストが [[Domain Name System]] のサーバーとして機能するのではなく、[[Domain Name System|DNS]] のクライアントとして動作する、ということです。 | ||
+ | クライアントというのは、named/bind サービスを稼働するコンピュータではなく、パソコンやウェブサーバなどです。 | ||
[[iptables 接続状態|ステート]] を利用して、通信を許可できます。 | [[iptables 接続状態|ステート]] を利用して、通信を許可できます。 | ||
行20: | 行28: | ||
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== ステートを使わずにDNSクライアントとして問い合わせをする === | === ステートを使わずにDNSクライアントとして問い合わせをする === | ||
− | |||
[[iptables]] の下記設定を追加します。 | [[iptables]] の下記設定を追加します。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行37: | 行43: | ||
-A OUTPUT -p udp -j DROP | -A OUTPUT -p udp -j DROP | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== DNS サービスを許可する === | === DNS サービスを許可する === | ||
+ | [[Domain Name System|DNS]] を外部に公開する例です。bindなどを利用して、DNSのサービスを提供する場合に利用します。 | ||
− | [[ | + | [[iptables]]の設定は、以下の通りです。 |
− | + | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
-A INPUT -p tcp --dport 53 -j ACCEPT | -A INPUT -p tcp --dport 53 -j ACCEPT | ||
行58: | 行63: | ||
COMMIT | COMMIT | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== 関連項目 == | == 関連項目 == | ||
{{iptables}} | {{iptables}} | ||
− | <!-- vim: filetype=mediawiki --> | + | <!-- vim: filetype=mediawiki |
+ | --> |
2016年1月12日 (火) 00:16時点における最新版
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のフロントエンド
- ファイアーウォール