俺でも解るIPTABLES<復刻版:2008/05/09>
1.フィルタリングとアドレス変換
パケットフィルタリングとは:
パケットのヘッダー部分を見て、 設定した条件(送信元IPアドレスや宛先IPアドレス、ポート番号など)と
一致するかどうかを判 定して、 一致する場合は設定したアクション(転送、破棄、アドレス書き換えなど)を
行うものである。
アドレス変換とは:
パケットのヘッダー部分を見て、設定した条件と一致するかどうかを判定し、 一致する場合はヘッダーの
IPアドレスやポート番号を書き換えるものである。
2.ipchainsとの違い
などと ipchains と iptables を比較して、解説してるページがあるが混乱するだけなので、ipchainsの
ことは忘れてしまおう!古いLinuxに触る機会でもなければ無用の産物なのだ。
3.「テーブル」という概念
パケットフィルタリング専用の filter テーブルと、 NAT/マスカレード専用の nat テーブルと分けて区別
されている。(mangleテーブルってのもあるんですが、解説が省かれている解説サイトが多いので、特に覚え
なくてもいいのか?)
フィルタリング用 filterテーブル |
アドレス変換用 natテーブル |
FORWARD |
フォワードするパケット |
INPUT |
入力(受信)パケット |
OUTPUT |
出力(送信)パケット |
|
PREROUTING |
送信時に変換するチェイン |
POSTROUTING |
受信時を変換するチェイン |
OUTPUT |
出力(送信)パケット |
|
よくテーブルやチェインなどの概念を難しく解説している所があるが要は、
filter(テーブル)で使えるのがFORWARD,INPUT,OUTPUT(チェイン)で、
natで使えるのがPREROUTING,POSTROUTING,OUPUTということらしい。
これでフィルタリングとマスカレードの機能をちゃんと区別できる。
つまり、# /sbin/iptables -t nat -A FORWARD ってのはありえないってこと。
また、書式の中でfilter(テーブル) は省略できる為、通常書かないようだ。
ま、面倒だから誰も書かないよね。
4. filter テーブルの INPUT/OUTPUT チェインは、
ローカルマシンへのパケットだけに適応される
ローカルに出入りするパケットの流れと、ローカルを通過するパケットの流れを
完全に区別して取り扱うようになった為、外部から入って来るパケットをフィルタする
には、ローカルへのフィルタリング設定と、内部LANへのフィルタリング設定と、両方
指定する必要がある。
INPUT,OUTPUT,FORWARDの関係は下図を見ると解りやすいと思う。
5.iptablesコマンドのオプション
iptablesの形式
# iptables [ -t <table> ] [
-A <chain> ] [ <条件> ] [ <アクション> ]
iptablesのオプション(
[ -A <chain> ])
|
-A(--append) |
指定チェインに1つ以上の新しいルールを追加 |
-D(--delete) |
指定チェインから1つ以上のルールを削除 |
-P(--policy) |
指定チェインのポリシーを指定したターゲットに設定 |
-N(--new-chain) |
新しいユーザー定義チェインを作成 |
-X(--delete-chain) |
指定ユーザー定義チェインを削除 |
-F |
テーブル初期化 |
|
iptablesのパラメータ([ <条件> ])
|
-p(--protocol) プロコトル |
プロトコル(tcp、udp、icmp、all)を指定 |
-s(--source) IPアドレス[/mask] |
送信元のアドレス。IPアドレスorホスト名を記述 |
-d(--destination)
IPアドレス[/mask] |
送信先のアドレス。IPアドレスorホスト名を記述 |
-i(--in-interface) デバイス |
パケットが入ってくるインターフェイスを指定 |
-o(--out-interface) デバイス |
パケットが出ていくインターフェイスを指定 |
-j(--jump) ターゲット |
条件に合ったときのアクションを 指定 |
-t(--table) テーブル |
テーブルを指定 |
-m state --state |
パケットの状態を条件として指定 stateは、
NEW、ESTABLISHED、RELATED、INVALIDが指定できる |
! |
-p、-s、-dなどで、条件を反転(〜以外となる) |
|
上記パラメータにある-jのターゲット([ <アクション> ])
|
ACCEPT |
パケットの通過を許可 |
DROP |
パケットを破棄 |
MASQUERADE |
マスカレード |
SNAT |
送信元のアドレスの変換 |
DNAT |
送信先のアドレスの変換 |
LOG |
ログを取る |
REJECT |
パケットを拒否し、ICMPメッセージを返信 |
REDIRECT |
特定ポートにリダイレクト |
|
とりあえず、他にかなりのボリュームのコマンドオプションがあるが、それについては
設定例に出てくるたびに解説することにする。以下、設定例。
iptableの初期化
# /sbin/iptables -F INPUT |
# /sbin/iptables -F OUTPUT |
# /sibn/iptables -F FORWARD |
この例では-Fオプション指定でINPUT、OUTPUT、FORWARDのテーブルを初期化している。
基本ポリシーの設定
# /sbin/iptables -P INPUT DROP |
# /sbin/iptables -P OUTPUT DROP |
# /sbin/iptables -P FORWARD DROP |
すべてのパケットを破棄するという意味。すべての穴をふさいでから必要なポートを空けていくのが良いだろう。
外側に向ってマスカレード(NAT)
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE |
-t nat でNAT宣言、-A POSTROUTINGでLAN内部から送信するパケットを対象にし、プライベートネットワーク
のアドレス(-s 192.168.1.0/24)を、ネットワークカードeth0から出る時( -o eth0)にマスカレードしますよ〜となる。
特定の外部のサーバからパケットを受け入れる場合(NAT)
iptables -t nat -A PREROUTING -d 172.16.0.10 -i eth0 -j DNAT --to 192.168.1.10 |
-t nat でNAT宣言、-A PREROUTINGで、外部ネットワークのアドレス(-d 172.16.0.10)から、eth0にパケット
が送られてきたら(-i eth0)、192.168.1.10に転送しますよ〜。
特定の外部のサーバからパケットを受け入れる場合その2(NAT)
iptables -t nat -A PREROUTING -d 172.16.0.10 -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.10 |
-t nat でNAT宣言、
-A PREROUTINGで外部ネットワークから受信するパケットを対象に、外部ネットワークの
アドレス(
-d 172.16.0.10)から、eth0にパケットが送られてきた(
-i eth0)かつ、プロトコルがTCPでポートが80
の場合、192.168.1.10に転送しますよ〜。
ゲームをやる時必要になる静的NAT(NAT)
iptables -t nat -A PREROUTING -p tcp --dport 7000 -i eth0 -j DNAT --to 192.168.1.10:7000 |
iptables -t nat -A PREROUTING -p udp --dport 7000 -i eth0 -j DNAT --to 192.168.1.10:7000 |
ネットゲーで、自分がサーバを提供する場合必要になる。-t nat でNAT宣言、-A PREROUTINGで外部ネット
ワークから受信するパケットを対象に、tcpプロトコル及びudpプロトコル7000番のパケットが、eth0に送られて
きたら、192.168.1.10の7000ポートに転送しますよ〜。
ループバックアドレス
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT |
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT |
ループバックアドレスに関してはすべて許可する。
ゲームをやる時必要なフィルタリング
iptables -A FORWARD -i eth0 -p tcp --dport 1024:65535 -j ACCEPT |
ネトゲーに必要なフィルタリング。EQでは1024番以降のパケット通さないとゲームできませんのでこの設定が
必要。つ〜か通しておけば何のゲームでもできる。eth0から入ってきたパケット1024〜65535はクライアントに
流す。ただしほとんどパケットを受け入れる状態になるのでゲームサーバーのアドレスが解っていたら指定する
に限る。
www用フィルタリング
iptables -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT |
www用に80を設定。すでにお判りだと思うが、あとは自分で使いたいポートを好きなようにパケット通せば良い。
smtpは25番とかね。ftpに関しては20:21を通すだけでなく下記のモジュールのロードが必要。
プライベートアドレス側からftpを使えるようにする
/sbin/insmod ip_nat_ftp |
/sbin/insmod ip_conntrack_ftp |
ftpちゅ〜のは特別なことをしてるそうで、単純にフィルタリングを掛けるだけでは使えない。使えるようにするに
は上記のモジュールをロードする必要がある。
Copyright c 1998-2017 keomin. All rights reserved.