・外部からの接続パケットは基本的にすべて破棄
・ただし接続済み通信のパケットは許可
・内部からの接続パケットは基本的にすべて許可
・ループバックアドレスに関してはすべて許可
・メンテナンスホストからのping、メンテナンスホストへのpingを許可
・メンテナンスホストからのssh(TCP 22)を許可
・任意のサーバからのHTTP(TCP 80)を許可
ただし接続の最初時にSYNで始まらない接続パケットは破棄
テンプレート1から4までは一貫して、内部から発信されるパケットを基本的にすべて破棄してきました。そのため、DNS問い合わせの例のように、送信パケットについても許可ルールを追加する必要がありました。今後も、この方法で必要なサービスに対してのみ通過許可を与えるようにすることを推奨します。
しかし、利便性を考え、ホストからの問い合わせ要求とそれに対する応答はフィルタを通過させることも考慮してみます。テンプレート4を基に、テンプレートを改良してみましょう。
内部からの接続を基本的にすべて許可するため、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.