iptablesの基本的な使用例についてのメモ。
最初に使いたくなるのはfilterテーブルだと思うのでfilterテーブルでパケット破棄するルールの設定例を紹介する。
まずはパケットのフィルタリングテーブルを表示
iptables -nvL でfilterテーブルの内容を確認できる。
# iptables -nvL
Chain INPUT (policy ACCEPT 798 packets, 69179 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 793 packets, 70755 bytes)
pkts bytes target prot opt in out source destination
#
パケットのフィルタリングを設定してみる
UDPで送信元IPアドレスが10.10.10.0/24で、送信先アドレスが20.20.20.5で、送信先ポート番号が20000で、eth0インタフェースに入ってくるパケットを、破棄する設定を入れるコマンドはこんな感じ。
# iptables -A INPUT -p udp -i eth0 -s 10.10.10.0/24 -d 20.20.20.5 --dport 20000 -j DROP
- チェインについて
入ってくるパケットに対しては INPUT チェインを指定。送信するパケットに対しては OUTPUT チェイン、転送するパケットに対しては FORWARD チェイン。
-A [チェイン] でルールを追記。
-I [チェイン] [数字] でルールを数字で指定されたインデックスに挿入。
- プロトコルについて
-p でプロトコル指定(tcp / udp / icmp)。
- NWインタフェースについて
-i でパケットが入ってくるインターフェース名を指定。
- IPアドレス、ポート番号について
-s で送信元IPアドレス、-dで送信先IPアドレス、--dportで送信先ポート番号の指定。
- パケットの処理方法について
-j でパケットの処理方法を指定(DROP(破棄) / ACCEPT(許容) / REJECT(拒否))。
再度filterテーブルを確認。
コマンド投入後にルールを再表示するとこんな感じでINPUTチェインにルールが追加されたことがわかる。
# iptables -nvL
Chain INPUT (policy ACCEPT 121 packets, 9944 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP udp -- eth0 * 10.10.10.0/24 20.20.20.5 udp dpt:20000
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 110 packets, 9142 bytes)
pkts bytes target prot opt in out source destination
IPパケットのフィルタリングを削除
ルールの解除は、設定投入時のコマンドに対し、-Aを-Dに変更するだけでOK。
# iptables -D INPUT -p udp -i eth0 -s 10.10.10.0/24 -d 20.20.20.5 --dport 20000 -j DROP
あるいは、インデックス指定でも削除可能。
# iptables -D INPUT 1
ルールの全消し
ルールをすべて削除したいときは -F オプション。危険なので気軽に打たないこと。
# iptables -F
もっと深くしりたい?
- 他のオプションについて
iptablesの全オプションはこちらのURLが参考になります。
https://linuxjm.osdn.jp/html/iptables/man8/iptables.8.html
- チェインやテーブルについて
チェインには、今回紹介した INPUT / OUTPUT / FORWARD の他にも、PREROUTING / POSTROUTING などがあります。
また、テーブルについても、今回のフィルタ(filter)テーブルの他にも nat や mangle などがあります。
これらのチェインやテーブルは、パケットフローの中でどの部分にルールを適用するかによって使い分けることになります。
パケットフローの仕組みは以下の図が参考になります。iptablesの領域は「Network Layer」の箇所です。
https://commons.wikimedia.org/wiki/File:Netfilter-packet-flow.svg