俺でも解る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ちゅ〜のは特別なことをしてるそうで、単純にフィルタリングを掛けるだけでは使えない。使えるようにするに
は上記のモジュールをロードする必要がある。


burikama art works.
Copyright c 1998-2017 keomin. All rights reserved.