CentOS7で,firewalldを使ってIPアドレスのブラックリストを登録する方法について説明します.ipsetコマンドを使うのが主流ですが,CentOS7ではfirewall-cmdだけでも設定できるので,記録としてこの記事を投稿します.
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
最後に,blacklistをすぐ使用可能にするために次のコマンドを実行します.
firewall-cmd --reload
以下のコマンドでルールが設定されていることを確認できます.
firewall-cmd --list-all
ブラックリストを登録する
1つずつ登録するには,次のようにしてエントリを追加します.
firewall-cmd --permanent --ipset=blacklist --add-entry=192.168.1.2
ファイルに一行ごとにIPアドレスを書いておくと,次のようにしてファイルから読み込むことができます.
firewall-cmd --permanent --ipset=blacklist --add-entries-from-file=/etc/firewalld/blacklist
上の例では/etc/firewalld/blacklistにブラックリストのファイルを用意します.
IPアドレスが登録されていることを確認するには,次のコマンドを実行します.
firewall-cmd --ipset=blacklist --get-entries
ブラックリストからIPアドレスを削除するには,次のようにします.
firewall-cmd --permanent --ipset=blacklist --remove-entry=192.168.1.2
ブラックリストのファイル/etc/firewalld/blacklistには次のようにIPアドレスを列挙します.なお,サブネットなども使えます.
192.168.1.2
192.168.1.3
192.168.2.0/24
同じIPアドレスが重複して指定された場合は,片方(より範囲の広い方)だけが登録されます.例えば192.168.2.0/24を登録した後に192.168.2.10を登録してもblacklistのエントリは変化しません.
ブラックリストの登録が完了したら次のコマンドで設定をロードします.
firewall-cmd --reload
リロードしたら,--get-entriesや--list-allを使って登録した設定が保存されていることを確認しましょう.