コマンド_iptables

Linux
ブログ

iptablesは、linuxでパケットフィルタリングができるコマンドです。パケットフィルタリングとは、ネットワークを流れるパケットを、遮断したり通過させたりするものです。ufwコマンドでもある程度できますが、iptablesはufwに比べてより細かい設定ができます。ここではubuntuserver22.04を使っています。

iptablesの操作

iptablesをインストール
$ sudo apt install iptables iptables-persistent
設定の保存
$ sudo /etc/init.d/netfilter-persistent save
設定に適用
$ sudo /etc/init.d/netfilter-persistent reload

iptablesの流れ

コマンド等

コマンド

-A指定したチェインの最後にルールを追加
-P指定したチェインのポリシー変更
-Iルールを番号を指定してルール挿入
-D指定したチェーンからルールを削除
-Lルールのリストを一覧表示
-F指定したチェイン内のルール全削除

チェイン

INPUTホストに入ってくるパケットに適用
OUTPUTホストから出ていくパケットに適用
FORWARDホストを経由するパケットに適用
PREROUTINGルーティング決定前のパケットに適用
POSTROUTINGルーティング決定後のパケットに適用

テーブル

filterフィルタリングを行う
natアドレス変換を行う
ほかにも「mangle」「raw」などがあるが省略

ターゲット

ACCEPTパケットの通過の許可
DROPパケットを破棄(送信元に通知なし)
SNAT送信元IPアドレス
MASQU
ERADE
送信元IPアドレスとポート番号の変換
LOGログに出力
REJECTパケットを拒否(送信元に通知)
DNAT送信先IPアドレス

ルール

-s送信元IPアドレス
–sport送信元ポート番号
–to宛先IPアドレス・ポート番号
-i入力インターフェース(eth0など)
-pプロトコル(tcp,udp,icmp,all)
-d送信先IPアドレス
–dport送信元ポート番号
-j適用するターゲット
-o出力インターフェース(ppp0など)

$ sudo iptables -nvL
 現在のiptablesの設定一覧表示
$ sudo iptables -nvL --line-numbers
 現在の設定状況に番号を付番して一覧表示
$ iptables -t filter -A INPUT -s 192.168.120.0/24 -j ACCEPT
 192.168.120.0/24からのパケット許可
$ iptables -t filter -A INPUT -s 100.1.1.0/24 -j DROP
  100.1.1.0/24からのパケットは破棄(通知なし)
  →「-t」を省略すると、デフォルト設定が「-t filter」となる。
$ iptables -t nat -A PREROUTING -d 203.0.113.200 -j SNAT --to-destination 172.16.0.200
  パケットの宛先アドレスを203.0.113.200から172.16.0.200へ変換
$ iptables -A FORWARD -j REJECT
  FORWARDパケットをデフォルトで拒否(通知あり)
$ iptables -A INPUT -p icmp -s 192.168.0.0/24 -j REJECT
  192.168.0.0/24からのicmpパケットを拒否(通知あり)
  →192.168.0.10のホストからping を打つと送信元にエラーが返る
$ iptables -A INPUT -p icmp -s 192.168.0.0/24 -j DROP
  192.168.0.0/24からのicmpパケットを破棄(通知なし)
  →192.168.0.10のホストからping を打っても音沙汰なし
$ iptables -A INPUT -p icmp -s 192.168.10.0/24 -j LOG
  /var/log/kern.logにログがある(ubuntu)
# iptables -A FORWARD -d 192.168.1.2 -p tcp --dport 80 -j ACCEPT
# iptables -t nat -A PREROUTING -p tcp --dport 8080 -i eth1 -j DNAT --to 192.168.1.2:80 
  ホストがインターネットと内部LANにある時、インターネットからポート8080番に届いたパケット(インターネット側eth1)を、LAN内(192.168.1.0/16)のホスト192.168.1.2の80番ポートへ転送。
$ iptables -t nat -A PREROUTING -p tcp -d 10.0.0.1 -dport 80 -j DNAT --todestination 192.168.1.1
  境界にあるLinuxサーバに来た、公開サーバ(10.0.0.1)宛のパケットを、当該公開サーバの内部ネットワークアドレス(192.168.1.1)宛に転送

参考文献

LinuC Level2 10.0教科書

LinuC Level2 10.0問題集

Ubuntuでiptablesを再起動後にも保持する方法

コメント