fail2banで不正アクセス防御[CentOS7編]

CentOS7の設定を今更記載するのもと思ったりもしたのですが、

サーバー用途として使用される事が多いCentOSが、 CentOSプロジェクトからCentOSの位置づけの変更が発表され今後Streamというディストリビューションに注力する形になりました。
RHEL開発版の位置づけのものでサポートされる期間もRHELより短くなっていまいました。


その影響で最新のCentOS8が2029/05/31迄のサポート期間を変更し2021年12月末でサポート終了とりました。 ひとつ前のCentOS7は当初の予定通りサポート期間が2024/06/30まである為、あと数年はCentOS7で運用し今後どのディストリビューションに変更するかを検討する事もあるかと思い備忘録代わりに

fial2banとはログファイルを監視し、攻撃判定を行いブロックするツールになります。


実際のブロックはファイアーウォールソフト(iptablesやfirewalld等)が行います。

その為別途、ファイアーウォールソフト(iptablesやfirewalld等)の設定が必要になります。

STEP1
fail2banのインストール fail2banはepelリポジトリにあるため、epelリポジトリのインストールがされていない場合はepelリポジトリのインストール後、fail2banをインストールします。


##epelリポジトリのインストール
yum install epel-release

##fail2banのインストール
yum install fail2ban fail2ban-systemd

STEP2
fail2banの設定

fail2banの監視設定は jailが一つの監視のルールとなっておりjailは 1つ以上のフィルターと1つ以上のアクションで構成されています。
フィルターは、ログファイルの攻撃パターンを正規表現で定義します。
アクションは、フィルタで不正な IP アドレスが検知されたときに実行すべきコマンドを定義します。

fail2banをインストールしただけで、上記フィルターやアクションーの定義ファイルはインストールされており更に、基本的な 監視用のjailもjail.confに記載されています。

基本的には、あとは使用するjailをenableにすれば監視できます。(もちろんカスタマイズも可能です)
/etc/fail2ban以下に jail.localファイルを作成し記述し、
デフォルトの設定を変更したり、使用するjailをenable(アクティブ化)します。


[DEFAULT]
bantime  = 86400
findtime = 86400

##apache-authのjailを有効にし検知した場合、DROPします。
[apache-auth]
enabled = true
blocktype = DROP

※あらたなjailを定義したい場合は、jail.d以下に記載します。(jail.localに記載も可能です)
STEP3
fail2banのサービス自動起動と起動




##fail2banのサービス自動起動
systemctl enable fail2ban

##fail2banの起動
systemctl start fail2ban

STEP4
fail2banの確認

fail2banの監視(jail)が有効になっているか確認します。 fail2ban-client statusのコマンドで有効なjailの一覧が表示できます。 ※パラメータにjail名を付加すると詳細(該当のjailで攻撃検知し制限されているIPアドレス等が表示されます。)も表示可能です。 ex:fail2ban-client status apache-auth


fail2ban-client status
Status
|- Number of jail:      13
`- Jail list:   apache-auth, apache-badbots,

ログを監視する為、アクセス数などによって負荷が高くなる恐れもありますが、 簡易の監視ツールとしては有効かと思います。 最近はクラウド型WAFやUTMも比較的安価で導入可能にはなっているので予算がゆるされるならそちらの方が良いとは思います。
補足
CentOS7のログの出力はJournaldとrsyslogで管理しており、デフォルト設定の場合大量のログがあると切りすてられて /var/log/messagesにjournal: Suppressed 927 messages from /system.slice/xxxxx のように切り捨てた情報を出力します。

syslogの溢れ対策 | まったりエンジニアの備忘録ように、細かな制御も可能ですがfail2banでログ監視しているためログをそのまま出力した方が良い為、無制限に設定しました。

ログ出力を無制限にする場合はそれぞれのintaervarを0に設定します。

/etc/systemd/journald.conf

RateLimitInterval=0

/etc/rsyslog.conf

$imjournalRatelimitInterval 0

と設定後Journaldとrsyslogを再起動させます。

systemctl restart systemd-journald
systemctl restart rsyslog.service


こちらでログは全て出力されるようになります。