💾

Ubuntuでiptableとipsetの設定を永続化する

2022/08/23に公開

おはこんばんにちわ

タイトル通りの内容の記事です
永続化する部分の情報が検索すると色々出てきてややこしかったので
自分にとって一番平易なやり方を備忘録として残します

ipsetの永続化

ipsetの使い道ですが例えば日本のIPアドレスだけアクセスを許可したい場合に
iptablesにCIDRを直接入れてしまうととんでもない量になるので
まずはipsetでまとめたリストを作成してiptablesからはそのリストに対して許可/拒否等の設定を行うことで
管理を容易したりする用途で使います

例えば以下のようにすれば日本のIPだけフィルタする事が出来るリストが作れます。

$ apt install -y ipset
$ ipset create JP hash:net
$ curl -s http://nami.jp/ipv4bycc/cidr.txt.gz | zgrep JP | cut -f2 | xargs -I{} ipset add JP {}
$ ipset list JP | grep entries
Number of entries: 2934

これでJPという名前のリストが作成されましたがこのリストはメモリ上にしか無いので再起動で消えてしまいます
そこで以下のパッケージを追加することでipsetで作成したリストを永続化します

$ apt install -y ipset-persistent

これで準備が出来ました
この状態で以下を叩くことで現在の状態を再起動時に再構築してくれます

$ netfilter-persistent save

iptablesの永続化

とりあえずipsetだけでは意味ないので上記の例で作ったJPフィルタをiptablesに適用してみましょう

$ iptables -I INPUT -m set --match-set JP src -j ACCEPT
$ iptables -P INPUT DROP
$ iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             match-set JP src

これで日本以外のIPからきたアクセスは全てDROPするように設定されました
ただ、この設定も同じように再起動で消えてしまいますので同様に以下の手順で永続化しましょう

$ apt install -y iptables-persistent
$ netfilter-persistent save

netfilter-persistent saveの部分は同じですね
これは追加したパッケージがどちらもnetfilter-persistentのプラグインとして動作するからです

以上で永続化出来るようになりました!

おまけ

例として日本のフィルタを作って説明しましたが
この情報は変わる可能性があるので
利用したい場合は定期的に更新するのが良さそうです
cron等でipset flush JPして再度読み込み直すようにしておくと良いでしょう
その際にはsaveも忘れずに!

それでは良い防壁を!
とっぴんぱらりんのぷう

P.S

久しぶりに技術っぽい事書いた気がする。。。
自分用の備忘録メインなんで元々そんなに更新頻度高くはないけど
子供大きくなるにつれどんどん時間が無くなっていくなぁ。。。

Discussion