この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)
最終回にあたり、iptablesを便利に使うTipsを紹介します。iptablesを1つ1つコマンドラインで実行するのは大変面倒です。そうした煩わしさを軽減できる設定や、実際の運用の手助けになるような工夫を紹介します。
→Linuxで作るファイアウォール[パケットフィルタリング設定編]http://www.atmarkit.co.jp/flinux/rensai/security05/security05a.html
→連載記事 「習うより慣れろ! iptablesテンプレート集」http://www.atmarkit.co.jp/flinux/index/indexfiles/iptablesindex.html
→連載記事 「習うより慣れろ! iptablesテンプレート集 改訂版」http://www.atmarkit.co.jp/flinux/index/indexfiles/newiptablesindex.html
本連載で紹介したテンプレートの適用には、一貫してシェルスクリプトを利用してきました。シェルスクリプトは修正と実行が簡単で、再利用性に優れています。
しかしiptablesそのものにも設定をファイルに保存し、復元する仕組みが用意されています。現在の設定を保存するには「iptables-save」コマンドを、復元するには「iptables-restore」コマンドを使用します。
・現在の設定をファイルに保存する
# /sbin/iptables-save > 設定ファイル
・ファイルから設定を復元する
# /sbin/iptables-restore < 設定ファイル
シェルスクリプトの場合、iptablesコマンドを1行1行実行し設定を適用しますが、iptables-restoreはトランザクション単位で処理を実行するため、コミットされて初めて設定が適用されます(下図の(4))。そのため数百行に及ぶ膨大な設定リストを適用する場合は、iptables-restoreを使用した方が効率がよくなります。
# Generated by iptables-save v1.3.5 on Fri Jul 30 11:46:10 2010 *filter ←(1)ここからfilterテーブルのルール :INPUT DROP [0:0] ←(2)各チェインのパケットカウンタとバイトカウンタ> :FORWARD DROP [0:0] :OUTPUT ACCEPT [1373:114541] :LOGGING - [0:0] -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT ←(3)ここから設定内容 -A INPUT -i lo -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -m hashlimit --hashlimit 1/min ... -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 --tcp-flags FIN... -A INPUT -p udp -m udp --sport 53 -j ACCEPT -A INPUT -j LOGGING -A LOGGING -j LOG --log-prefix "DROP:" -A LOGGING -j DROP COMMIT ←(4)COMMITが実行されて初めて設定が有効化 # Completed on Fri Jul 30 11:46:10 2010
また、iptables-saveやiptables-restoreは、パケットカウンタやバイトカウンタのスナップショットを保存できます。「-m limit」などでカウンタを利用している場合などに利用できます。パケットカウンタやバイトカウンタの値まで保存するには、「-c」オプションを指定します。
# /sbin/iptables-save -c > 設定ファイル
FedoraやCentOSのファイアウォールにはiptablesが組み込まれています。本連載第1回で、ファイアウォールを無効化し自動起動しないようにしましたが、サーバ起動時にiptablesを自動設定するには、ファイアウォール機能を利用します。ファイアウォールを無効にした場合、次のように再度有効にしておきます。
・サービスが削除されている場合
# /sbin/chkconfig --add iptables
・サービスが停止されている場合
# service iptables on
FedoraやCentOSでは「/etc/sysconfig/iptables」ファイルの内容がiptablesの自動設定に利用されます。設定ファイルを作るには、Tips 1で紹介した「iptables-restore」コマンドを使用します。
iptablesを手動で適用した後、その状態を設定ファイルに保存します。
# /sbin/iptables-save -c > /etc/sysconfig/iptables
これでサーバ起動時にiptablesが自動設定されます。なお/etc/sysconfig/iptablesファイルを修正し、適用することもできます。
Ubuntuにはiptablesを自動で設定する仕組みがありません。そこでTips 1で紹介した「iptables-save」と「iptables-restore」を使って、自動設定されるようにします。
iptables-saveを使って設定ファイルを用意します。設定ファイルには任意のものを使用できますが、ここでは「/etc/iptables.rules」を利用することにします。
# /sbin/iptables-save -c > /etc/iptables.rules
サーバ起動時に設定ファイルを読み込みiptablesを設定するには、iptables-restoreが自動的に実行されるよう、「/etc/network/if-pre-up.d/」ディレクトリの下に次のようなスクリプト「iptables_start」を用意します。
#!/bin/sh /sbin/iptables-restore < /etc/iptables.rules exit 0
作成したスクリプト「/etc/network/if-pre-up.d/iptables_start」に実行権限を追加します。
# chmod +x /etc/network/if-pre-up.d/iptables_start
これでサーバ起動時にiptablesが自動設定されます。なお/etc/iptables.rulesファイルを修正し適用することもできます。
Copyright © ITmedia, Inc. All Rights Reserved.