CentOS 7のfirewall-cmdでブラックリストを使う
某中華系のホストからの執拗なポートスキャンが続いたのでCentOS 7のファイアウォール機能を使ってブラックリストベースの接続拒否を行なってみたらとても簡単だった。
# ipset create blacklist hash:ip hashsize 4096
# ipset add blacklist 58.218.199.182
# firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -m set --match-set blacklist src -j DROP
追記
最近のfirewalldではrich roulesが拡張されてfirewalls(firewall-cmd)からもipsetが扱える様になったので、以下の様にfirewall-cmdだけでもipsetコマンドとfirewalldのdirectルールを使った場合と同じ様な設定を行えます。
firewall-cmdだけでipsetを使ったフィルタリングを実施
# firewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
# firewall-cmd reload
# firewall-cmd --ipset=blacklist --add-entry=58.218.199.182
# firewall-cmd --add-rich-rule='rule source ipset=blacklist drop'
※ "firewall-cmd --new-ipset=" で新しくipsetのセットを作る場合には--permanentオプションを指定して恒久的な設定とする必要があります。(一時的なセットは作れない!)
※よって、 "firewall-cmd reload" で一旦設定をリロードして有効にする必要があります。
また、以下の様に "--add-entries-from-file=" でIPアドレスが列挙されたテキストファイルからセットを一括で読み込むことができます。
ファイルからセットを読み込む
# firewall-cmd --ipset=blacklist --add-entries-from-file=/somewere/blacklist
セットに登録されたエントリーの一覧を取得する
# firewall-cmd --ipset=blacklist --get-entries
firewall-cmdのパラメーターでエントリーの表示がlistだったりshowだったりgetだったり、削除がremoveだったりdeleteだったり、是非統一して欲しい…