検索
連載

ステートフルパケットフィルタを使ったサービスの公開習うより慣れろ! iptablesテンプレート集(1)(6/6 ページ)

初心者にとって、iptablesは設定が最も困難な機能の1つである。そこで、学習の第1歩としてテンプレートを自分の環境に合わせて修正することから始めよう。(編集部)

Share
Tweet
LINE
Hatena
前のページへ |       

テンプレート5
内部からの接続を許可(テンプレート4の改良)

テンプレート5の想定環境

・外部からの接続パケットは基本的にすべて破棄
・ただし接続済み通信のパケットは許可
・内部からの接続パケットは基本的にすべて許可
・ループバックアドレスに関してはすべて許可
・メンテナンスホストからのping、メンテナンスホストへのpingを許可
・メンテナンスホストからのssh(TCP 22)を許可
・任意のサーバからのHTTP(TCP 80)を許可
 ただし接続の最初時にSYNで始まらない接続パケットは破棄

 テンプレート1から4までは一貫して、内部から発信されるパケットを基本的にすべて破棄してきました。そのため、DNS問い合わせの例のように、送信パケットについても許可ルールを追加する必要がありました。今後も、この方法で必要なサービスに対してのみ通過許可を与えるようにすることを推奨します。

 しかし、利便性を考え、ホストからの問い合わせ要求とそれに対する応答はフィルタを通過させることも考慮してみます。テンプレート4を基に、テンプレートを改良してみましょう。

 

テンプレート5の解説

 内部からの接続を基本的にすべて許可するため、OUTPUTチェインのルールで破棄(DROP)となっている個所をコメントアウトします(16、54行目)。

 外部からの接続で、接続済み通信のパケット以外をすべて破棄するため、18行目のようにパケットのステートフル性を確認し、「--state ESTABLISHED,RELATED」となっているものに通過許可を与えます。

18  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

 ただし、template05.shを単に実行しただけでは、意図したフィルタを設定することができません。一度でもOUTPUTなどのチェインに破棄(DROP)を設定した場合、シェルスクリプト中のリセットでは完全にフィルタのない状態に戻すことができないためです。

フィルタリセット時の注意

 template05.shを実行しただけでは既存のフィルタを完全にリセットできず、矛盾が生じします。ここまでに紹介したシェルスクリプトを1度でも実行していた場合、

iptables -P OUTPUT DROP

が残ってしまうため、手動で修正する必要があります。修正はDROPの逆を行います。

# iptables -P OUTPUT ACCEPT

 このように、「-X」や「-F」ではリセットできないものもあるため、新たなルールを適用する前に、次の3行を実行するといいでしょう。

# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT

Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る