iptablesルールを簡易設定できるツールを使ってみる
ゴールデンウィーク中に、さくらの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のウィザードが表示されます。
ENTER
キーを押すと設定が切り替わり、TAB
キーでボタン間を移動します。(SPACE
キーでも切り替えできますが、IME無効にする必要があります)
"ファイアウォール:"で設定を有効にし(*マークをつける)TAB
キーで"カスタマイズ"に移動してENTER
キーを押します。
次にポートを開放するサービスを指定します。ここで指定したサービスについてはIP制限などせず解放されますのでご注意ください。とりあえずSSHだけ有効にして“転送”を選択します。
"その他のポート"という画面になりますので、何も指定せず"転送"を選択します。もし、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の簡易設定ができる