Edited at

立ち上げ直後のiptablesを設定する。

More than 5 years have passed since last update.


環境


  • CentOS release 6.4 (Final)

  • iptables.i686 1.4.7-9.el6


方針

以下の大原則に従う設定を作ることとする。


  • 自ホストからの通信は通してやる。

  • 外からのpingは通してやる。

  • 外からのSSHは通してやる。

  • それ以外の外からの通信は受け付けない。

  • 外へ出ていく通信はすべて通す。


手順


まず、外からのすべての通信を受け付けないようにする。

外からの通信(INPUT, FORWARD)をすべてDROPする。そのあとで通すものを書いていくホワイトリスト方式とする。

中から外へ出ていく通信はすべて通してやる。

:INPUT DROP [0:0]

:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]


確立済みの通信は通してやる。

どこから来たのか、どのポート宛てなのか、は気にせず、すでに確立済みなら通してやる。要するに、これに続く記述で通信を確立させるかどうかを設定してやる。

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


pingは通してやる。

プロトコルがICMPなら通してやる。

-A INPUT -p icmp -j ACCEPT


ループバックは通してやる。

自ホストからの通信は問答無用で全部通してやる。

-A INPUT -i lo -j ACCEPT


SSHは通してやる。

他ホストからSSH接続はするので、宛先が22番ポートなら通してやる。当然、SSH側のセキュリティ(パスワードログインさせないとか、rootログインさせないとか)はそちらで別途設定すること。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

SSH以外のサービスのためのポートを開ける場合はこれを真似して追加していく。例えば、HTTP(80)ならこんな感じで。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT


全体はこんな感じで。


/etc/sysconfig/iptables

*filter

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
COMMIT


iptablesを再起動して設定を反映させる。

rootでね。

/etc/init.d/iptables restart