連載
» 2009年12月01日 00時00分 公開

iptablesテンプレート集 改訂版(1):スタティックなパケットフィルタリング (1/4)

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

[鶴長鎮一,@IT]

はじめに

 インターネットにつながったサーバやPCの安全性を確保するのにファイアウォールは必須です。専用のアプライアンスやソフトウェア以外に、OSの機能の一部として提供されるものを利用することもできます。

 Linuxならば、「iptables」でファイアウォールを実現することができます。iptablesのパケットフィルタリングはLinuxカーネルが提供する機能です。CentOSでもUbuntuでも、どんなLinuxディストリビューションでも利用することができます。

 また、単純なパケットフィルタリング以外に、NAT、帯域制御、負荷分散、DoS対策といった高度な機能を利用できます。本連載ではそうしたiptablesの活用事例を紹介します。

 iptablesなどのパケットフィルタ・ツールを理解するには、ネットワークについての深い知識、しかもパケットレベルのミクロな知識が必要になります。本連載では、そのような理屈は二の次とし、「とにかくiptablesを使いたい」という方のためにパターン別設定例を提供します。

 とはいうものの、理屈を無視するわけにはいきません。本連載と併せて以下の記事を参照すると、知識をより深めることができるでしょう。

関連リンク:

→Linuxで作るファイアウォール[パケットフィルタリング設定編]
http://www.atmarkit.co.jp/flinux/rensai/security05/security05a.html

→連載記事 「習うより慣れろ! iptablesテンプレート集」
http://www.atmarkit.co.jp/flinux/index/indexfiles/iptablesindex.html


 もちろん、本連載でも必要に応じてできるだけ解説を加えていきます。

iptablesの基本

 本連載では各事例に合わせたテンプレートを用意し、iptablesを実行しています。テンプレートに埋め込まれたIPアドレスなどのパラメータを変更するだけで、大方のネットワークに適用できるようにしています。iptablesを知らなくてもテンプレートを利用することはできますが、設定の確認やリセットといった基本的な操作については理解しておきましょう。活用事例を紹介する前に、iptablesの基本的な操作方法を紹介します。

 iptablesの実行にはroot権限が必要です。FedoraやCentOSなら「su -」のように、root権限にスイッチすることができますが、Ubuntuでは使用できません。代わりに「sudo」コマンドを使ってiptablesをroot権限で実行するようにします。なおiptablesのコマンドパスはディストリビューションによって異なりますが、本連載では「/sbin/iptables」としています。

iptablesとLinuxカーネルモジュール

 Linuxのパケットフィルタリングはカーネルが備えている機能の一部です。iptablesはそれを設定するためのツールにすぎません。iptablesがインストールされていてもパケットフィルタリングのためのカーネルモジュールが有効でないと、ファイアウォールとして機能させることはできません。

 本連載では、Ubuntu/CentOS/Fedora(注1)での動作を確認していますが、Linuxディストリビューションによっては、カーネルの再構築やiptablesの再インストールといった作業が必要な場合もあります。

注1:本章で取り上げるディストリビューションは、Ubuntu デスクトップ版 9.10、CentOS 5.4、Fedora 12となっています。


 ファイアウォールのためのLinuxカーネルモジュールや、それを操作するためのiptablesプログラムモジュールは、次のようにして確認することができます。

・Linuxカーネルモジュール$ ls /lib/modules/`uname -r`/kernel/net/netfilter
nfnetlink.ko        xt_NFQUEUE.ko    xt_esp.ko        xt_policy.ko
nfnetlink_log.ko    xt_NOTRACK.ko    xt_helper.ko     xt_quota.ko
nfnetlink_queue.ko  xt_SECMARK.ko    xt_length.ko     xt_realm.ko
...省略...
(「`uname -r`」でLinuxカーネルのバージョンを出力します)・iptablesプログラムモジュール$ ls /lib/iptables
libip6t_CONNMARK.so    libipt_CLUSTERIP.so   libipt_ecn.so
libip6t_HL.so          libipt_CONNMARK.so    libipt_esp.so
libip6t_LOG.so         libipt_DNAT.so        libipt_hashlimit.so
...省略...
(どちらもCentOS5.3での実行例)
ファイアウォール機能に必要なLinuxカーネルモジュール、iptablesプログラムモジュール

テーブルとチェイン

 iptablesを駆使するには「テーブル」と「チェイン」の理解が欠かせません。

 iptablesには「fiter」「nat」「mangle」といったテーブルが用意されており、フィルタリングの目的に応じて使い分けます。例えばパケットの通過や遮断を制御するには「filterテーブル」を使用し、送信先や送信元といったパケットの中身を書き換えるには「natテーブル」を使用します。

 またそれぞれのテーブルには「チェイン」が用意されており、どのタイミングで処理を施すか、「チェイン」を使って指定します。例えばfilterテーブルには、「INPUT」「OUTPUT」「FORWARD」といったチェインが用意されており、パケットが入ってきたタイミングで処理を行うにはINPUTチェインを、パケットが出て行くタイミングではOUTPUTチェインを使用します。natテーブルには「POSTROUTING」「PREROUTING」「OUTPUT」といったチェインが用意されています。

図1 パケット送受信において各チェインが処理されるタイミング 図1 パケット送受信において各チェインが処理されるタイミング

 ここではそれらの1つ1つまでは解説しません。今後紹介する事例の中で、その都度取り上げます。「習うより慣れよ!」を実践していきます。

       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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