iptables のテーブル表示 と アクセス許可/natの例

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などで、条件を反転
  • 「-j」パラメータに指定可能なアクション
ACCEPT パケットの通過を許可
DROP パケットを破棄
REJECT パケットを拒否し、ICMPメッセージを返信
REDIRECT 特定ポートにリダイレクト
SNAT 送信元NAT。SNAT --to(--to-source) [-][:port-port]
DNAT 送信先NAT。DNAT --to(--to-destination) [-][:port-port]

SNAT, DNATはIPアドレス/ポートとも範囲指定可。

  • 「-p」でtcp指定時にポート指定する場合
--sport 送信元ポート
--dport 送信先ポート
  • 「-p」でicmp指定時にICMPタイプを指定する場合
--icmp-type ICMPタイプ(echo-request, echo-reply等)

参考:
404 - エラー: 404
Linuxで作るファイアウォール[NAT設定編](1/2)
mangleというテーブルもあるらしい : @IT:iptablesによる負荷分散とDoS対策(1/4)