ufwからiptables-persistentでの永続化と移行

by haturatu

3 min read

こんにちは、無能です。
今まで簡単にFW設定ができるufwを使用していたのですが、pf.confのように移行しやすいようにconfレベルで管理したいなあと思ってiptables-persistentをインストールしました。
どうやらpfを使えるようにするカーネルパッチもあるようなのですがそこまで無理して使うのも違うし、iptablesから逃げることにもなるので導入しました。

インストール

すでにiptablesはだいたい入っているはずなので、iptables-persistenだけインストールします。
ちなみに競合するためufwは自動で消されるので事前のルールは確認しておきましょう。

sudo apt install iptables-persistent

netfilter-persistent最低限の使い方

現在のルールを/ets/iptables/配下に保存する場合

sudo netfilter-persistent save

現在の/etc/iptables/の設定を使ってリロードする場合

sudo netfilter-persistent reload

ちなみに、reloadしてない状態でsaveすると現在のルールを保存扱いになって記述した設定が吹っ飛ぶので気をつけてください。

設定

こんな感じの設定になりました。
iptables、コメントも改行も全てsaveで吹っ飛ぶの結構きついですね・・・。

# cat rules.v4 
# Generated by iptables-save v1.8.9 (nf_tables) on Sat Oct 11 16:27:52 2025
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [18:1900]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i 127.0.0.1/32 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -j ACCEPT
-A INPUT -i wg0 -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sat Oct 11 16:27:52 2025

許可ルールに関しては基本ローカルとWireGuardのインターフェースごと許可するようになっています。
基本的にArch Wikiからパクってきました。
シンプルなステートフルファイアウォール - ArchWiki

というのも
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPTこれを追加しないと、例えばcurlしたときの戻りが返って来れなくなるのでしっかり明示的にコネクションが確立したものに関しては別ルールに振り分ける必要があるようだった。pfが強力にしてくれるのはこの手の状態管理もよしなにやってくれていることに改めて気づき、改めてpfちゃんをヨシヨシしたくなった一日でした。
それではまた。

ちなみにIPv6はナシ

# cat rules.v6
# Generated by ip6tables-save v1.8.9 (nf_tables) on Sat Oct 11 17:37:50 2025
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sat Oct 11 17:37:50 2025

よろしくお願いします。

PGP --- Contact --- Machines --- cat -v