サーバー用途として使用される事が多い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に記載されています。
confファイルに再定義している記載を良く見かけますが、 あとは使用するjailをenableにすれば監視できます。(もちろんカスタマイズや新たな定義も可能です)
/etc/fail2ban以下に jail.localファイルを作成し記述し、
デフォルトの設定を変更したり、使用するjailをenable(アクティブ化)します。
※あらたなjailを定義したい場合は、jail.d以下に記載します。(jail.localに記載も可能です)[DEFAULT] bantime = 86400 findtime = 86400 ##apache-authのjailを有効にし検知した場合、DROPします。 [apache-auth] enabled = true blocktype = DROP
- 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,
- 補足
- CentOS7のログの出力はJournaldとrsyslogで管理しており、デフォルト設定の場合大量のログがあると切りすてられて
/var/log/messagesにjournal: Suppressed 927 messages from /system.slice/xxxxx
のように切り捨てた情報を出力します。
syslogの溢れ対策 | まったりエンジニアの備忘録ように、細かな制御も可能ですがfail2banでログ監視しているためログをそのまま出力した方が良い為、無制限に設定しました。
ログ出力を無制限にする場合はそれぞれのintaervarを0に設定します。
/etc/systemd/journald.conf/etc/rsyslog.confRateLimitInterval=0
と設定後Journaldとrsyslogを再起動させます。$imjournalRatelimitInterval 0
systemctl restart systemd-journald systemctl restart rsyslog.service
こちらでログは全て出力されるようになります。