iptablesコマンド
概要
- パケットの流れを制御するソフトウェア
- NATを構築する
- Firewallを設定する
- ip6のiptablesは
ip6tables
引数
基本は以下の構成になる
$ iptables -t <table> -A <CHAIN> -i|-o|-j <TARGET>
-t <table>
- tableを操作
-A <CHAIN> ...
- CHAINにルールを追加
-D <CHAIN> ...
- CHAINからルールを削除
-A
と同じ引数
-P|--policy <CHAIN> <TARGET>
- CHAINにTARGETを適応
- この引数のときは短い表現になる
-N <CUSTOMCHAIN>
- CUSTOMCHAINという名前のCHAINを作成
-F <CUSTOMCHAIN>
- CUSTOMCHAINからルールを削除
-X <CUSTOMCHAIN>
- CUSTOMCHAINを削除
- CUSTOMCHAINが空であることを期待する
- ルール関連
-i
- inputインターフェース
-o
- outputインターフェース
-j <TARGET>
- ターゲット
-p <proto>
- プロトコルの選択
--dport <port-num>
- 宛先ポート
-d <ipaddress>
- 宛先IPアドレス
-s <ipaddress>
- 元のIPアドレス
<table>
の種類nat
<CHAIN>
POSTROUTING
- ルーティングの最初に適応
PREROUTING
- ルーティングの最後に適応
OUTPUT
filter
<CHAIN>
INPUT
OUTPUT
FORWARD
<TARGET>
の種類ACCEPT
- 許可する
DROP
- 通信を破棄し、拒否情報は返さない
REJECT
- 拒否通知を返す
LOG
- 通信を記録する
nat
MASQUERADE
- 送信元IPアドレスと送信先ポート番号を変換
SNAT --to-destination <ipaddress>
- 送信元IPを指定したIPに変換(IPを転送)
- 具体的なIPを指定できる
interfaceでNATを構築する
# iptables -A FORWARD -i wg0 -j ACCEPT
# iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
# ip6tables -A FORWARD -i wg0 -j ACCEPT
# ip6tables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE
- inputを
wg0
として、enp1s0
をアウトプットにする ip_forward
を設定するとルータを構築できる
forwardした内容の確認
# iptables -L -v -n
firewallを無効化する
- debian限定(ubuntuは別途fwソフトが入っている)
# iptables -I INPUT -j ACCEPT
# ip6tables -I INPUT -j ACCEPT
(OCIなどのクラウドサービスの)iptables設定を初期化してデフォルトにする
# iptables -F # すべてのチェーンを削除
# iptables -X # ノンデフォルトのチェーンを削除
# iptables -P INPUT ACCEPT
# iptables -P FORWARD ACCEPT
# iptables -P OUTPUT ACCEPT
- ここまでやって接続が失われないことを確認する
- 参考
iptablesで設定した内容を恒久化する(iptables-persistentを利用)
iptables-persistent
をインストールするだけでよい
iptablesの変更内容が保存され、再起動時に復元される
$ sudo apt install iptables-persistent
手動で保存する場合
$ dpkg-reconfigure iptables-persistent
で、対話式の保存画面が現れる
iptablesで設定した内容を恒久化する(/etc/init.d/netfilter-persistentを利用)
$ sudo /etc/init.d/netfilter-persistent save
$ sudo /etc/init.d/netfilter-persistent reload
iptablesの設定内容をバックアップと復元
バックアップ
# iptables-save > <backup-file>
復元
# iptables-restore < <backup-file>