連載
» 2010年08月23日 00時00分 公開

iptablesテンプレート集 改訂版(8):知らなきゃ損するiptablesのTips (1/3)

この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部)

[鶴長鎮一,@IT]

はじめに

 最終回にあたり、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


Tips 1:iptablesの設定を保存・復元する

 本連載で紹介したテンプレートの適用には、一貫してシェルスクリプトを利用してきました。シェルスクリプトは修正と実行が簡単で、再利用性に優れています。

 しかしiptablesそのものにも設定をファイルに保存し、復元する仕組みが用意されています。現在の設定を保存するには「iptables-save」コマンドを、復元するには「iptables-restore」コマンドを使用します。

・現在の設定をファイルに保存する

# /sbin/iptables-save > 設定ファイル

・ファイルから設定を復元する

# /sbin/iptables-restore < 設定ファイル
iptablesの設定を保存・復元する

 シェルスクリプトの場合、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
iptabels-saveで保存した設定のサンプル

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

# /sbin/iptables-save -c > 設定ファイル
パケットカウンタやバイトカウンタの現在の値も含めて保存する

Tips 2:サーバ起動時にiptblesを設定する(Fedora・CentOS編)

 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」に保存

 これでサーバ起動時にiptablesが自動設定されます。なお/etc/sysconfig/iptablesファイルを修正し、適用することもできます。

Tips 3:サーバ起動時にiptblesを設定する(Ubuntu編)

 Ubuntuにはiptablesを自動で設定する仕組みがありません。そこでTips 1で紹介した「iptables-save」と「iptables-restore」を使って、自動設定されるようにします。

 iptables-saveを使って設定ファイルを用意します。設定ファイルには任意のものを使用できますが、ここでは「/etc/iptables.rules」を利用することにします。

# /sbin/iptables-save -c > /etc/iptables.rules
現在のiptablesの状態を設定ファイルに保存

 サーバ起動時に設定ファイルを読み込み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」の内容

 作成したスクリプト「/etc/network/if-pre-up.d/iptables_start」に実行権限を追加します。

# chmod +x /etc/network/if-pre-up.d/iptables_start
スクリプトに実行権限を追加する

 これでサーバ起動時にiptablesが自動設定されます。なお/etc/iptables.rulesファイルを修正し適用することもできます。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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