連載
» 2005年07月05日 00時00分 公開

習うより慣れろ! iptablesテンプレート集(4):番外編:iptables活用Tips集 (2/4)

[鶴長鎮一,@IT]

Tips 2
iptables-save、iptables-restoreの利用

 本連載で紹介したテンプレートの適用には、一貫してshスクリプトを利用してきましたが、iptablesには設定情報をファイルに保存し、復元する仕組みも用意されています。現在の設定情報を保存する場合はiptables-saveコマンド、復元する場合はiptables-restoreコマンドを使用します。

# iptables-save > output.cfg
現在の設定をoutput.cfgファイルに書き込む
# iptables-restore < output.cfg
output.cfgファイルから設定を復元する

 iptables-restoreの利点は、設定の適用に掛かる動作が1つのトランザクションで完了することにあります。shスクリプトの場合、いちいちiptablesコマンドが呼び出され、1回の操作ごとにトランザクションが発生します。そのため、数百行、数千行に及ぶ膨大な設定リストを適用する場合は、iptables-restoreを使用した方が効率が良くなります。

 また、iptables-saveやiptables-restoreは、パケットカウンタやバイトカウンタのスナップショットを保存し、復元することもできます。「-m limit」などでカウンタを利用している場合などに利用できます。パケットカウンタやバイトカウンタの値を継続使用する場合は、「-c」オプションを指定します。

# iptables-save -c > output.cfg
パケットカウンタやバイトカウンタの現在の値も含めて保存
# iptables-restore -c < output.cfg
パケットカウンタやバイトカウンタの値を引き継いで復元

 ディストリビューション()によっては、/etc/sysconfig/iptablesとして設定を保存することで、サーバ起動時にルールを適用させることができます。その場合、「iptablesサービス」が自動起動するように設定しておく必要があります。

注:Fedora Core3、Turbolinux Server 10で確認しています。

# ls /etc/init.d/iptables ←iptables起動スクリプトが用意されていることを確認
# chkconfig --add iptables
# Generated by iptables-save v1.2.11 on Wed Jun  8 00:22:18 2005
*mangle ←mangleテーブルのルール
:PREROUTING ACCEPT [1:243] ←ここから各カウンタ
:INPUT ACCEPT [1:243]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m tcp --sport 22 -j TOS --set-tos 0x10 ←設定したルール
-A PREROUTING -p tcp -m tcp --sport 80 -j TOS --set-tos 0x08
COMMIT ←設定復元時に使用するため消去不可
# Completed on Wed Jun  8 00:22:18 2005
# Generated by iptables-save v1.2.11 on Wed Jun  8 00:22:18 2005
*filter ←filterテーブルのルール
:INPUT DROP [0:0] ←各カウンタ
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:LOGGING - [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ←INPUTチェインのルール
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.10.100 -d 192.168.20.200 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -s 192.168.10.100 -d 192.168.20.200 -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -s 192.168.10.100 -d 192.168.20.200 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -d 192.168.20.200 -p tcp -m state --state NEW,RELATED,ESTABLISHED -m tcp --dport 80 -j ACCEPT
-A INPUT -j LOGGING
-A OUTPUT -o lo -j ACCEPT ←ここからOUTPUTチェインのルール
-A OUTPUT -s 192.168.20.200 -d 192.168.10.100 -p icmp -m icmp --icmp-type 0 -j ACCEPT
-A OUTPUT -s 192.168.20.200 -d 192.168.10.100 -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A OUTPUT -s 192.168.20.200 -d 192.168.10.100 -p tcp -m tcp --sport 22 -j ACCEPT
-A OUTPUT -s 192.168.20.200 -p tcp -m tcp --sport 80 -j ACCEPT
-A LOGGING -m limit --limit 3/hour -j LOG --log-prefix "DROP:" ←ここからLOGGINGチェインのルール
-A LOGGING -j DROP
COMMIT
# Completed on Wed Jun  8 00:22:18 2005
template11.sh実行後に保存した設定のサンプル。テーブル、チェインごとに整理されている

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。