「iptables DNSを許可する」の版間の差分

提供: セキュリティ
移動: 案内検索
(関連項目)
行1: 行1:
<!--
+
[[Linux]]のパケットフィルタ(いわゆる[[ファイアーウォール]])である[[iptables]] でポートをいろいろ塞ぐと [[Domain Name System|DNS]] 問い合わせをブロックしてしまうことがあります。[[DNS]]の通信をブロックしてしまうと、[[名前解決]]ができなくなり、ネットワーク通信ができなくなり、困ります。
vim: filetype=mediawiki
+
-->
+
[[iptables]] でポートをいろいろ塞ぐと [[Domain Name System|DNS]] 問い合わせをブロックしてしまうことがあります。
+
  
 
__TOC__
 
__TOC__
  
 
== 概要 ==
 
== 概要 ==
 +
[[DNS]]は、インターネットを支える技術の1つで、[[名前解決]]の機能を提供します。[[名前解決]]とは、[[FQDN]]の名前を[[IPアドレス]]に変換する処理です。パッケージのアップデートをするときに、パッケージのサーバにアクセスするときに、名前解決をして、[[IPアドレス]]を元に通信します。
 +
 +
[[Domain Name System|DNS]] 問い合わせは、主に[[UDP]] が利用されます。[[UDP]]を利用する主な理由は、[[TCP]]に比べてオーバーヘッドが少ないからです。[[TCP]]でも可能ですが、[[3ウェイ・ハンドシェイク]]があり、オーバーヘッドが大きくなります。
  
[[Domain Name System|DNS]] 問い合わせは、[[UDP]] が利用されます。
+
[[iptables]] で domain (53ポート) の通信が通らないと外部の[[Domain Name System|DNS]] サーバーを利用した [[名前解決]] ができなくなります。
そのため、[[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のサービスを提供する場合に利用します。
  
[[Domain Name System|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
 +
-->

2015年6月14日 (日) 19:49時点における版

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

関連項目