iptablesルールを簡易設定できるツールを使ってみる

No Photo

ゴールデンウィーク中に、さくらのVPSを借りて、gitlabなどを試していましたtanakaです。GitLab、インストールが難しいという話を耳にしていましたが今はomnibus-gitlabとしてパッケージングされていて導入が簡単になってるんですね。今日はそのときに知った、iptablesのルールを簡易設定できるツールを紹介します。

iptablesの現在の設定を確認する

chef / centos-6.5 (vagrantcloud.com)のboxから仮想マシンを起動したときのiptablesの状態は以下のような感じでした。

$ sudo chkconfig --list iptables
iptables        0:off   1:off   2:on    3:on    4:on    5:on    6:off
# iptablesのサービスはランレベル3では起動する
$ sudo ls /etc/sysconfig/iptables
ls: cannot access /etc/sysconfig/iptables: そのようなファイルやディレクトリはありません
$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

iptablesサービスは動作してますが、ルールは設定されてない状態のようです。

system-config-firewall-tui / iptables の設定ファイルを対話的に作成する

system-config-firewall-tuiがインストールされていなかったのでインストールします。

$ sudo yum install system-config-firewall-tui

system-config-firewall-tuiコマンドで起動すると、以下のようなCUIのウィザードが表示されます。

20140511-tanaka-iptables-lokkit.png

ENTERキーを押すと設定が切り替わり、TABキーでボタン間を移動します。(SPACEキーでも切り替えできますが、IME無効にする必要があります)

"ファイアウォール:"で設定を有効にし(*マークをつける)TABキーで"カスタマイズ"に移動してENTERキーを押します。

次にポートを開放するサービスを指定します。ここで指定したサービスについてはIP制限などせず解放されますのでご注意ください。とりあえずSSHだけ有効にして“転送”を選択します。

20140511-tanaka-iptables-lokkit-02.png

"その他のポート"という画面になりますので、何も指定せず"転送"を選択します。もし、SSHやHTTPSなどでポートを変更している場合はここで追加する必要があるでしょう。

"信頼したインターフェイス"という画面でも何もせず"転送"を選択します。インターネット側に公開していないインターフェイスからはフルアクセスできるようにしたい場合はここで設定できるようです。

"マスカレーディング","ポートフォワーディング","ICMP フィルター","カスタムルール"については説明を省略します。

カスタマイズの途中で"閉じる"を押すと最初の画面(ファイアーウォールの設定)に戻ります。SSHを有効にしてている場合は"OK"を押します。"警告"が表示されますので、解放しなければいけないポートが設定されていれば"はい"を選択します。

ウィザードを終了するとiptablesが設定されます

ウィザードを終了すると設定ファイルが作成されます。また動作中のiptablesのルールにも反映されます

/etc/sysconfig/iptables

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [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
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

iptables -L

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

lokkit コマンドで簡易設定する

さて、Webサーバとして公開するために以下のようにApacheをインストールしてみましたが、ブラウザでSTARTページが表示されませんでした。

$ sudo yum install httpd
$ sudo service httpd start

80番ポートが開放されてなかったからですね。ここで先ほどと同様にsystem-config-firewall-tui を実行することもできますが、lokkitコマンドで非対話的にルールを追加することもできます。

$ sudo lokkit -s http

ルールが追加されているか確認します

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     icmp --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

追加されていますね。ちなみに、設定ファイルが無い状態からlokkit -s http を実行しても同じ状態になります。(ssh,httpが有効な状態になる)

まとめ

  • system-config-firewall-tuiコマンドを使うと対話的にiptablesの簡易設定ができる
  • lokkitコマンドを使うと非対話的にiptablesの簡易設定ができる
  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ