Ubuntuでiptableとipsetの設定を永続化する
おはこんばんにちわ
タイトル通りの内容の記事です
永続化する部分の情報が検索すると色々出てきてややこしかったので
自分にとって一番平易なやり方を備忘録として残します
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