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

  • 313
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

環境

  • 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