【Linux】iptablesコマンド

◾️はじめに

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 / DebianPostgreSQLにアクセスできるようにする
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