Fail2banで不正なアクセスをブロック(BAN)してサーバを守る

Fail2banで不正なアクセスをブロックしてサーバを守る サーバー

メールサーバーに何やら不審なアクセスが続いている。

アクセス元のIPアドレスから国を調べると「セーシェル」らしい。その他にも国外の怪しいIPアドレスからのアクセスが大量に存在する。

早速Fail2banで対策する。

※動作確認環境
CentOS 7.6

ログ調査

/var/log/maillogの状況は以下のとおりです。

このようなログの内容がずっと続いています。

どう見ても不正なアクセスですね。

Fail2banとは

Fail2banとは、サーバーのログを解析して不正なアクセスしてくるIPアドレスを自動でブロック(BAN)してくれるプログラムです。

メールサーバーやWEBサーバー、SSHやFTPなど各サービスごとにJAILルール(監獄ルール)を設定して細かく指定することができます。

Fail2banのインストール

CentOS 7にインストールするには「epel」リポジトリが必要ですので、リポジトリがインストールされていない方は「epel-release」をインストールします。

Fail2banをインストールします。

インストール完了です。

Fail2banの設定

設定するルール内容

今回設定するルールは以下の内容で行います。

  • 5分間で3回アクセス失敗したIPアドレスは1時間アクセスが禁止される。
  • BANが発動した場合はIPアドレスのWHOIS情報をメール送信する。
  • [sshd]、[proftpd]、[postfix] 、[dovecot]、[postfix-sasl]でFail2banを有効とする。
  • 1日間に5回BANされたIPアドレスは1週間BANする。(recidive設定)

設定

設定ファイルの/etc/fail2ban/fail2ban.confを直接編集せずに、/etc/fail2ban/jail.localを編集して設定します。

BANされたパケットを拒否せずにドロップ(破棄)する設定を行います。(※iptables-common.localというファイルを新規作成して編集します。)

このまま起動すると「 NOTICE Jail started without 'journalmatch' set. Jail regexs will be checked against all journal entries, which is not advised for performance reasons.」というエラーがFail2banのログファイル(/var/log/fail2ban.log)に出力されますので、その原因の「proftpd」の設定ファイルを編集します。

Fail2ban起動

Fail2banの自動起動をオン

これで完了です。

念のために正常に稼働しているか「systemctl status fail2ban」「fail2ban-client status」及びFail2banのログファイル(/var/log/fail2ban.log)でチェックしましょう。

【備考】ログにjournalmatchのエラーが表示されている場合

もしFail2banのログファイル(/var/log/fail2ban.log)に「 NOTICE Jail started without 'journalmatch' set. Jail regexs will be checked against all journal entries, which is not advised for performance reasons.」というエラーが表示されている場合は以下の対策を行ってください。

まずログを調査します。

jail.localで設定したFail2banを適用させるサービスの中で、「INFO Added journal match for: '_SYSTEMD_UNIT=サービス名.service'」という行がログに存在しないサービスを探します。

そのサービス名の設定ファイルが/etc/fail2ban/filter.d/ディレクトリの中にありますので、以下のフォーマットで情報を追加します。

Fail2banを再起動で完了です。

もう一度ログをチェックしてエラーが無いか確認してみてください。

【備考】アラートメールにmissing whois programと表示されている場合

BANされたIPアドレスのWHOIS情報をメール送信するという設定をした際に、BANアラートメールに「missing whois program」と記載されていた場合は、IPアドレスからWHOIS情報をしらべる「whois」というパッケージがインストールされていませんのでインストールしましょう。
whoisをインストール

Fail2banの代表的な設定オプション

enabledルールを発動するか否か。(true 又は false)
portサービス名又はポート番号
filterログファイル解析用のfailregex情報を含むファイルの名前
logpathサービスのログの場所
backendログの監視方法(CentOS 7の場合はsystemdと設定)
ignoreipホワイトリストIPアドレス
bantimeIPアドレスがBANされる期間(秒)。デフォルト値は600(10分間)。負の数に設定すると永久BANになります。
findtimeBANが発動するまでの判定時間(※この判定時間内にmaxretryで設定した回数に達するとBANが発動します。)
maxretryBANが発動するまでの回数
actionBANが発動したときのアクション。デフォルトは「%(action_)s
%(action_)s」:BANのみ。
%(action_mw)s」:BANしてWhois情報を含めてメール通知
%(action_mwl)s」:BANしてWhois情報とログ情報をメール通知

状況確認とBAN解除は「fail2ban-client」コマンド

現在のBANの状況確認

現在のFail2banのBAN状況は以下のfail2ban-clientコマンドで確認できます。

fail2ban-client status <JAILルール名>

▼sshd

▼proftpd

▼postfix

▼dovecot

▼postfix-sasl

▼recidive

BANの解除方法

もし、BANされているIPアドレスをBANから解除したい場合は以下のfail2ban-clientコマンドで解除できます。

fail2ban-client set <JAILルール名> unbanip <IPアドレス>

代表的なfail2ban-clientコマンド一覧

fail2ban-client startFail2banサーバ起動(※非推奨 systemctl で起動する方が良い)
fail2ban-client reloadFail2banの設定ファイルを再読み込み
fail2ban-client reload <JAILルール名>指定したJAILルールをリロード
fail2ban-client stopFail2banサーバ停止(※非推奨 systemctl で停止する方が良い)
fail2ban-client statusFail2banサーバのステータスを表示
fail2ban-client status <JAILルール名>指定したJAILルールのステータスとBAN状況を表示
fail2ban-client set <JAILルール名> banip <IPアドレス>指定したJAILルールで指定したIPアドレスを手動でBAN
fail2ban-client set <JAILルール名> unbanip <IPアドレス>指定したJAILルールで指定したIPアドレスをBAN解除
fail2ban-client stopでFile2banを停止した場合、fail2ban-client startで再度起動しようと思ってもERROR Server already runningというエラーが出て起動できなくなります。
File2banの起動と停止は、systemdのsystemctl start fail2ban及びsystemctl stop fail2banで行いましょう。

まとめ

怪しいアクセスを発見したらFail2banで不正アクセスをブロック。

むしろ怪しいアクセスを発見する前に、設定も簡単なのでFail2banを導入しておきましょう。

以上で解決です。

タイトルとURLをコピーしました