◾️はじめに
https://dk521123.hatenablog.com/entry/2025/03/17/005508
で、昨日、iptablesコマンドについて軽く扱ったが、 今日、早速、kube-proxyでiptables モードってのを扱ったので 今回は、iptablesコマンドを深掘りしてみる
目次
【1】iptablesコマンド 【2】基本構成 1)Tables 2)Chains 3)Rules 【3】構文 1)オプション 2)拡張パラメータ 【4】コマンド例
【1】iptablesコマンド
* パケットフィルタリングとNATを実現するためのコマンド * 送受信パケットの廃棄/許可等のルールをnetfilterに設定/削除するコマンド
【2】基本構成
Tables -> Chains -> Rules
1)Tables
| Table names | Explanations |
|---|---|
| filterテーブル | パケットの許可/廃棄/拒否といったフィルタリング |
| natテーブル | ネットワークアドレス変換 |
| mangleテーブル | パケットのTOSフィールドやTTLフィールドを変更したり、パケットに特別なマークを付ける時に使用 |
| rawテーブル | コネクション追跡で扱われないよう特定のパケットにマークを付ける時に使用 |
2)Chains
| Chains | Explanations |
|---|---|
| PREROUTING | ルーティング前に実行 |
| INPUT | サーバに入ってくるパケットを制御 |
| OUTPUT | サーバに出ているパケットを制御 |
| FORWARD | サーバを経由するパケットの制御 |
| POSTROUTING | ルーティングの後に実行される |
3)Rules
* コマンドでは、オプション「-j」で指定する
| Rules | Explanations |
|---|---|
| DROP | ルールに一致するパケットを破棄 |
| ACCEPT | ルールに一致するパケットを受け入れる |
| REJECT | ルールに一致するパケットを破棄し、送信元にエラーメッセージを返す |
| RETURN | チェイン内のルール評価を終了 |
| REDIRECT | パケットを特定のポートにリダイレクト |
| SNAT | 送信元アドレスを変更 |
| DNAT | 送信先アドレスを変更 |
| MASQUERADE | プライベートIPアドレスを公開IPアドレスに変換 |
| LOG | パケットをログに記録 |
【3】構文
iptables -t {TableName} -コマンド {ChainName} {Rules}
例:PostgreSQLのポートを開ける(下記はデフォルトのポート「5432」の例)
iptables -I OUTPUT -p tcp --sport 5432 -m state --state ESTABLISHED -j ACCEPT # -I (--insert): チェーンの先頭にルールを追加 # --sport 5432 : Source Port。送信側のポート番号を指定 # -m (--match) : ルールに一致するための条件を指定
1)オプション
| Options | Explanations |
|---|---|
| -A (--append) | チェーンの最後にルールを追加 |
| -D (--delete) | チェーンからルールを削除 |
| -I (--insert) | チェーンの先頭にルールを追加 |
| -R (--replace) | チェーン内の既存のルールを置換 |
| -L (--list) | ルールを表示 |
| -n (--numeric) | アドレスとポートを数字で表示 |
| --line-numbers | 行数表示 |
| -F (--flush) | チェーン内のすべてのルールを削除 |
| -N (--new-chain) | 新しいチェーンを作成 |
| -P (--policy) | チェーンのデフォルトポリシーを設定 |
| -s (--source) | 送信元IPアドレスを指定 |
| -d (--destination) | 宛先IPアドレスを指定 |
| -p (--protocol) | プロトコルを指定 |
| -j (--jump) | ルールに一致した場合に実行するアクションを指定 |
| -m (--match) | ルールに一致するための条件を指定 |
| -i (--in-interface) | パケットの入力インターフェイスを指定 |
| -o (--out-interface) | パケットの出力インターフェイスを指定 |
2)拡張パラメータ
オプション「-p」で指定可能なパラメータ
| 指定方法 | 内容 |
|---|---|
| --sport | Source Port。送信側のポート番号を指定 |
| --dport | Destination Port。受信側のポート番号を指定 |
| --tcp-flags | TCP のときだけ指定(--tcp-flags SYN,RST,ACK SYN) |
| --syn | TCP のときだけ指定 |
| --icmp-type | ICMP のタイプを指定。pingに限定した指定をする際などに指定 |
state拡張で指定可能なパラメータ
| 指定方法 | 内容 |
|---|---|
| NEW | 全くの新参の接続 |
| ESTABLISHED | 既に許可された接続 |
| RELATED | 新参ではあるが許可された接続 |
| INVALID | パラメータの不明な無効な接続 |
【4】コマンド例
iptables -I INPUT -p tcp --dport [ポート番号] -j ACCESPT
現在のNATの設定を表示
# -n (--numeric):アドレスとポートを数字で表示 # -L (--list):ルールを表示 iptables -n -t nat -L
参考文献
https://christina04.hatenablog.com/entry/iptables-outline
関連記事
ネットワーク系コマンド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2016/07/27/214633
ネットワーク系コマンド ~ firewall編 ~
https://dk521123.hatenablog.com/entry/2025/03/17/005508
ホストOSの pgAdmin III からゲストOS / Debian のPostgreSQLにアクセスできるようにする
https://dk521123.hatenablog.com/entry/2015/04/14/214802
tcpdumpコマンド 〜 パケットキャプチャ 〜
https://dk521123.hatenablog.com/entry/2017/07/03/233336
Wireshark ~パケットキャプチャ~
https://dk521123.hatenablog.com/entry/2013/04/18/234813