CentOS Stream 9を使ってIPアドレスのブラックリストを登録する方法についての覚え書きです。
ipsetを作る
blacklistというipsetを作る
まず、blacklistという名前の新しいipsetを作ります。
# firewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
ルールを設定する
firewall-cmdでは、いずれのオプションでも–permanentを付けないとリロード時に設定が消えてしまうので注意が必要です。
また、blacklistに該当するIPアドレスからの通信を遮断するために、次のようにルールを設定します。
# firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset=blacklist drop'
firewalldをリロードする
blacklistをすぐ使用可能にするためにfirewalldをリロードします。
# firewall-cmd --reload
ルールが設定されていることを確認します。
# firewall-cmd --list-all public (active) target: default : 途中省略 : rich rules: rule source ipset="blacklist" drop #
ブラックリストを登録する
blacklistファイルを作成する
あらかじめblacklistファイルを作成します。
# vi /etc/firewalld/blacklist :wq //保存して終了
エントリを追加する
1つずつ登録するには、次のコマンドを用いてエントリを追加します。
サブネットも使うことができます。
firewall-cmd --permanent --ipset=blacklist --add-entry=xxx.xxx.xxx.0/24
ファイルから読み込む
/etc/firewalld/blacklistファイルに1行ごとにIPアドレスを書いておくと、次のコマンドでファイルからIPアドレスを読み込むことができます。
firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=/etc/firewalld/blacklist
IPアドレスが登録されているか確認する
# firewall-cmd --ipset=blacklist --get-entries xxx.xxx.xxx.0/24 xxx.xxx.xxx.xxx xxx.xxx.0.0/16 #
ブラックリストからIPアドレスを削除する場合
ブラックリストからIPアドレスを削除する場合は次のコマンドを実行します。
firewall-cmd --permanent --ipset=blacklist --remove-entry=xxx.xxx.xxx.xxx
ブラックリストの中身
ブラックリストファイル/etc/firewalld/ipsets/blacklist.xmlには次のように記述されています。
<?xml version="1.0" encoding="utf-8"?> <ipset type="hash:ip"> <entry>xxx.xxx.xxx.0/24</entry> <entry>xxx.xxx.xxx.xxx</entry> <entry>xxx.xxx.0.0/16</entry> </ipset>
IPが重複して指定した場合
同じIPアドレスが重複して指定された場合は、片方(より範囲の広い方)だけが登録されます。
例えば192.168.2.0/24を登録した後に192.168.2.10を登録しても以下のメッセージが表示されてblacklistのエントリは変化しません。
# firewall-cmd --permanent --ipset=blacklist --add-entry=xxx.xxx.xxx.10 Error: INVALID_ENTRY: Entry 'xxx.xxx.xxx.10' overlaps with existing entry 'xxx.xxx.0.0/16' #
ブラックリスト登録の完了
ブラックリストの登録が完了したらfirewalldをリロードします。
# firewall-cmd --reload
リロードしたら、–get-entriesや–list-allを使って登録した設定が保存されていることを確認して設定完了となります。
お疲れ様でした。
コメント