[Linux] ipsetのセットから特定IPアドレスを探す

はじめに

我が家のLinuxサーバーでは、接続拒否したいIPアドレス(CIDR)が膨大になってので数年前から、ipsetで拒否したいIPアドレス(CIDR)をセットという形でグループ化して、そのセットごとiptablesで許可・拒否の設定をしています。
ipsetで登録しているIPアドレス(CIDR)が500個を超え、どのリストにどのIPアドレス(CIDR)が登録されているかが分からなくなってきました。

よくあるのが「あれ?このIPアドレスは数日前に登録した様な気がするぞ?」という場面が多々あり、この度に何十個もあるリストを1つづつ確認して行くのは非効率なので、すぐにどのリストに登録されているかを確認するコマンドが無いか調べてみた結果を忘れないよう備忘録としてここに記録しておきます。

サーバー情報

自宅設置の物理サーバー
Rocky Linux release 8.6 (Green Obsidian)

iptablesの場合

ipsetを利用せず、iptablesで直接IPアドレスを許可・拒否の設定をしていた場合も記載しておきます。

特定IPアドレスが登録されているか調べる

iptablesで特定IPアドレスが登録されているか調べる方法は、登録してある全ルールを表示するオプションで出力して、単純にgrepコマンドで特定IPアドレスを検索する方法です。

[root@home-sv01]# iptables -nL |grep "123.123.123.123"
DROP       all  --  123.123.123.123         0.0.0.0/0

ipsetの場合

本題のipsetを利用している場合に、特定IPアドレスを検索する方法です。

特定IPアドレスがどのセットに登録されているか調べる

考え方はiptablesと同じで、登録されているIPアドレスを全部出力して、awkコマンドで絞り込む(フィルタリング)感じです。
ipsetの場合はIPアドレスが見つかれば、そのIPアドレスが登録されているセット名が出力されます。

[root@home-sv01]# ipset list | awk 'BEGIN { list_name = "Unknown" } /^Name:/ { list_name = $2 } /Members:/ { members_section = 1 } members_section && $0 ~ "123.123.123.123" { print list_name } /^Name:/ { members_section = 0 }'
DENY_HOSTS_009

「DENY_HOSTS_009」というセットに登録されていたようです。

特定セットの内容を全て表示する

再確認の意味も込めて、セット「DENY_HOSTS_009」に「123.123.123.123」が登録されているか見てみたいので、セットの内容を全て表示してみます。

[root@home-sv01]# ipset list DENY_HOSTS_009
Name: DENY_HOSTS_009
Type: hash:net
Revision: 6
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 3576
References: 2
Number of entries: 50
Members:
34.38.151.7
35.224.174.143
35.187.103.186
35.205.117.127
3.230.143.72
34.140.63.218
44.220.185.11
34.22.208.68
34.78.228.189
44.232.220.186
45.144.136.0/22
3.14.69.125
34.78.85.104
24.199.64.0/18
123.123.123.123
以下省略

特定セットに登録されているIPアドレス(member)のみを表示する

前項の出力結果では、登録されているIPアドレス以外にも、Name, Type, Revisionなどの情報が出力されています。
後々不便な気がしたので、IPアドレスのみを出力するコマンドも記録しておきます。

[root@home-sv01]# ipset list DENY_HOSTS_009 | awk '/^Members:/ {p=1; next} p'
34.38.151.7
35.224.174.143
35.187.103.186
35.205.117.127
3.230.143.72
34.140.63.218
44.220.185.11
34.22.208.68
34.78.228.189
44.232.220.186
45.144.136.0/22
3.14.69.125
34.78.85.104
24.199.64.0/18
123.123.123.123
以下省略

コメント