filterテーブル表示
$ iptables -L -t filter
natテーブル表示
# iptables -L -t nat
ssh, http, ftp アクセスの許可
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT_COUNTRY
ACCEPT_COUNTRY は国内からのアクセスを許可する。
443ポート宛のアクセスを13579ポートへリダイレクトする
# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 13579
172.16.0.1宛のパケットを192.168.0.1宛とする
# iptables -t nat -A PREROUTING -d 172.16.0.1 -i eth0 -j DNAT --to 192.168.0.1
192.168.0.1から送信されたパケットを172.16.0.1から送信されたものとする
# iptables -t nat -A POSTROUTING -s 192.168.0.1 -i eth0 -j SNAT --to 172.16.0.1
項目説明
filter |
INPUT、FORWARD、OUTPUT |
nat |
PREROUTING、OUTPUT、POSTROUTING |
INPUT |
入力パケットに対するチェイン |
OUTPUT |
出力パケットに対するチェイン |
FORWARD |
フォワードするときのチェイン |
PREROUTING |
受信時に変換するチェイン |
POSTROUTING |
送信時に変換するチェイン |
-A (--append) |
指定チェインにルールを追加 |
-D (--delete) |
指定チェインからルールを削除 |
-P (--policy) |
指定チェインのポリシーを指定したターゲットに設定 |
-N (--new-chain) |
ユーザー定義チェインを作成 |
-X (--delete-chain) |
指定ユーザー定義チェインを削除 |
-p (--protocol) プロコトル |
ルールで使うプロトコル(tcp、udp、icmp、all)を指定 |
-s (--source) |
送信元アドレス。 |
-d (--destination) |
接続先アドレス。 |
-i (--in-interface) |
パケットが入ってくるインターフェイス |
-o (--out-interface) |
パケットが出ていくインターフェイス |
-j (--jump) ターゲット |
パケットがマッチしたときのアクション指定 |
-t (--table) テーブル |
テーブル(filter, nat)を指定 |
! |
-p、-s、-dなどで、条件を反転 |
ACCEPT |
パケットの通過を許可 |
DROP |
パケットを破棄 |
REJECT |
パケットを拒否し、ICMPメッセージを返信 |
REDIRECT |
特定ポートにリダイレクト |
SNAT |
送信元NAT。SNAT --to(--to-source) [-][:port-port] |
DNAT |
送信先NAT。DNAT --to(--to-destination) [-][:port-port] |
SNAT, DNATはIPアドレス/ポートとも範囲指定可。
--sport |
送信元ポート |
--dport |
送信先ポート |
- 「-p」でicmp指定時にICMPタイプを指定する場合
--icmp-type |
ICMPタイプ(echo-request, echo-reply等) |
参考:
404 - エラー: 404
Linuxで作るファイアウォール[NAT設定編](1/2)
mangleというテーブルもあるらしい : @IT:iptablesによる負荷分散とDoS対策(1/4)