Fail2Ban で独自のフィルターを自作する

Fail2Ban は基本的には「/etc/fail2ban/filter.d」にフィルターが存在するモノに対してしか有効化出来ない。

そこで今回は、Fail2Ban でフィルターを自作した時の話をする。

Fail2Ban の対象となるのはログ

自作でデーモンなどを作成した場合、大抵は SystemD のユニットファイルを自作したと思う。この時に標準出力や標準エラー出力に出力したメッセージはジャーナルになる。つまり、自分でログファイルなどを作成する必要が無いとも言える。

ジャーナルの確認

これでジャーナルとして出力が確認出来れば問題は無い。

フィルターの自作

説明

「/etc/fail2ban/filter.d/フィルター名.conf」

ここでは作成したサービス(ユニット)は「toybox」である。先ずは自分が作成したユニットに変更して貰いたい。

次に重要なのは「logtype = journal」と「journalmatch = _SYSTEMD_UNIT=toybox.service」である。

これにより、上記のコマンドの「journalctl -u ユニット名 -f」の監視対象がジャーナルである事と、ユニットが「toybox.service」である事を記述している。

failregex」にはジャーナルの Ban 対象となる正規表現を記述している。ここで重要な部分は「<HOST>」の部分である。ここに攻撃者の IP アドレスが入る事を想定している。

ignoreregex」には Ban 対象外のアドレスを正規表現で記述おく。「<HOST>」の部分が「ignoreregex」にマッチする場合は、Ban 対象外となる。

なお、今回のファイル名は「toybox.conf」としておいた。

「/etc/fail2ban/jail.d/local.conf」に追記

「enabled = true」でフィルターが有効になる。

action = firewallcmd-ipset」で、Ban する方法が、firewall-cmd の ipset を用いたブロックが行われる。

Fedora では FirewallD が用いられているので、「 firewallcmd-ipset」を使用しているが、iptables を利用している場合は「iptables-ipset」を選択する必要がある。

なお、Ban する時間は「bantime = 1h」で1時間、期間は「findtime = 1d」で1日に対して、「maxretry = 3」3回以上(4回目からはBan)としている。

Facebooktwitterfoursquare

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です