連載
» 2001年11月23日 00時00分 UPDATE

ゼロから始めるLinuxセキュリティ(4):Linuxで作るファイアウォール[NAT設定編] (1/2)

今回からiptablesの具体的な設定を解説する。iptablesの使い方はやや複雑だが、理屈を理解すれば難しいものではない。前半で紹介する知識を利用して、まずはNATを実現しよう。

[大貫大輔,株式会社ラック/不正アクセス対策事業本部]

 前回はiptablesを使用するためのカーネル再構築とルールの設計を行いました。これを基にファイアウォールを構築していきます。今回はiptablesの概要とNATの設定を行いましょう。

 なお、前回紹介したルールはあくまでも参考なので、実際には自分の環境に合わせて作成してください。ただし、ルールの作成方法は基本的に変わらないので参考になると思います。

iptablesの仕組みと機能

 これから本格的にファイアウォールを構築していくわけですが、その手段であるiptablesを理解していなければ目的を達することはできません。少々回り道になりますが、iptablesについて学んでおきましょう。

iptablesを理解するための概念

 iptablesを使うには、テーブルやチェインなどの概念を理解しておく必要があります。

 iptablesには、3つの「テーブル」が用意されており、それぞれ「filter」「nat」「mangle」と呼びます。この中のfilterテーブルがデフォルトテーブルで、テーブルを指定せずにiptablesコマンドを使用した場合はこれが使われます。また、テーブルによって使用できる「チェイン」が異なります。

filter INPUT、FORWARD、OUTPUT
nat PREROUTING、OUTPUT、POSTROUTING
mangle PREROUTING、OUTPUT
表1 各テーブルの組み込みチェイン

 チェインは、パケットを検査する「ルール」のリストです。各チェインでルールに適合するかを調べ、次のチェインにパケットを渡します。このチェインのルールを変更・追加することでfilterテーブルやnatテーブルの設定が行われ、これによってファイアウォールを構築するわけです。natテーブルで使用するPREROUTING、OUTPUT、POSTROUTINGについては、NATの設定時にあらためて解説します。

INPUT 入力(受信)パケット
OUTPUT 出力(送信)パケット
FORWARD フォワードするパケット
PREROUTING 受信時を変換するチェイン
POSTROUTING 送信時に変換するチェイン
表2 組み込みチェイン

コラム:ipchainsとiptables

 カーネル2.4から採用されたiptablesと、従来のipchains(カーネル2.4でもサポートされている)の違いの一部を紹介しましょう。

  • 組み込みチェイン名(INPUT、OUTPUTなど)が大文字に
  • チェイン名は31文字まで使えるように(ipchainsは8文字まで)
  • TCPおよびUDPのポート指定は--source-port/--sportあるいは--destination-port/--dportを必ず-p

tcpあるいは-p udpの後ろに記述する

  • DENYがDROPに名称変更
  • MASQがMASQUERADEになり、書式も変更された
  • 一度にチェインの内容のリストアップとリセットができるように

 これ以外にも多くの変更があります。詳しくはiptablesのmanページなどを参照してください。


iptablesコマンドのオプション

 iptablesはコマンドにオプションを指定してルールを作成します。基本的な設定方法はipchainsと同じです。まず、ファイアウォールを構築するうえで最低限必要であろうと考えられるオプションについて説明します。より詳細な説明が必要と判断したものについては、その都度解説を加えていきたいと思います。

 iptablesの「オプション」は、基本的にチェインの操作を行う際に使用します。表3はその一部です。

-A(--append) 指定チェインに1つ以上の新しいルールを追加
-D(--delete) 指定チェインから1つ以上のルールを削除
-P(--policy) 指定チェインのポリシーを指定したターゲットに設定
-N(--new-chain) 新しいユーザー定義チェインを作成
-X(--delete-chain) 指定ユーザー定義チェインを削除
表3 iptablesのオプション

 チェイン内のルールを指定するのに使うのが「パラメータ」です。同じくパラメータの一部を表4に挙げておきます。

-p(--protocol) プロコトル ルールで使うプロトコル(tcp、udp、icmp、all)を指定
-s(--source) IPアドレス[/mask] 送信元アドレス。IPアドレスのほかにホスト名などでも指定できる
-d(--destination) IPアドレス[/mask] 接続先アドレス。IPアドレスのほかにホスト名などでも指定できる
-i(--in-interface) デバイス パケットが入ってくるインターフェイス(eth0、eth1など)を指定
-o(--out-interface) デバイス パケットが出ていくインターフェイスを指定
-j(--jump) ターゲット パケットがマッチしたときのアクション(ターゲット)を指定
-t(--table) テーブル テーブル(filter、nat、mangle)を指定
! -p、-s、-dなどで、条件を反転する。「! 192.168.0.1」とすると、「192.168.0.1以外」という意味になる
表4 iptablesのパラメータ

 -jパラメータでは、「ターゲット」を指定する必要があります。これは、パケットがマッチした際のアクション(何を行うか)のことです。主なものを表5にまとめておきました。

ACCEPT パケットの通過を許可
DROP パケットを破棄
REJECT パケットを拒否し、ICMPメッセージを返信
REDIRECT 特定ポートにリダイレクト
表5 ターゲット(-jパラメータで指定するアクション)

 また、ターゲットには「SNAT」と「DNAT」があります。表では説明しにくいので、以下で書式とともに挙げておきます。

  • SNAT
    SNAT --to(--to-source) <ipaddr>[-<ipaddr>][:port-port]

パケットの送信元アドレスを変換する。natテーブルとPOSTROUTINGチェインでのみ有効。ポートを指定すると、変換されたアドレスの指定されたポートで接続することになる。IPアドレス、ポート共にレンジ指定が可能。

  • DNAT
    DNAT --to(--to-destination) <ipaddr>[-<ipaddr>][:port-port]

パケットの送信先アドレスを変換する。natテーブルとPREROUTING、OUTPUTチェイン、これらのチェインから呼び出されるユーザー定義チェインのみで有効。ポートを指定すると、変換されたアドレスの指定されたポートあてに接続することになる。IPアドレス、ポート共にレンジ指定が可能。

 一部のパラメータ(-pパラメータなど)では、パラメータ指定によってさらに拡張指定が行える場合があります。これを「マッチングの拡張」と呼びます。以下にその一部を紹介します。

  • --sport
    --sport(--source-port) [!] [port[:port]]

送信元ポートを指定する。ポートはレンジで範囲指定することも可能。パラメータ設定で「-p tcp」を指定したときに使用。

  • --dport
    --dport(--destination-port) [!] [port[:port]]

送信先ポートを指定する。ポートはレンジで範囲指定することも可能。パラメータ設定で「-p tcp」を指定したときに使用。

  • --icmp-type
    --icmp-type [!] typename

typenameにはICMPのタイプ(echo-requestやecho-replyなど)を指定する。パラメータ設定で「-p icmp」を指定したときに使用。

 iptablesのオプションやパラメータはこれですべてではありません。適宜manページなどを参照してください。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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