はじめに
Webベースのシンプルなメールクライアント**RainLoopをサーバーにインストールすることで、Webブラウザから自分のメールアカウントにアクセスすることができます。
本記事では、Fail2Ban**を使ってRainLoopへの不正アクセスを対策し、不正なログインを試みたクライアントのIPアドレスをBANします。
対象読者
RainLoopを導入するサーバー管理者。
環境
- Debian 9.9
- Fail2Ban 0.9.6-2
- RainLoop v1.13.0
Fail2Banのインストール
APTでインストール。
$ sudo apt install fail2ban
$ sudo service fail2ban start
RainLoopのインストール
RainLoopは公式サイトから「Community edition」をダウンロードして/var/www/rainloop/
に展開します。
基本的な設定は他の記事で解説されているので割愛します。
不正アクセスの対策をする
RainLoopとFail2Banの設定を変更します。1
RainLoopのログ出力を設定
RainLoopの設定ファイルは/var/www/rainloop/data/_data_/_default_/configs/application.ini
にあります。
[logs]セクションの以下の項目を変更し、ログ出力時のデフォルトのタイムゾーンがUTCになっているのを日本標準時(システムのタイムゾーン)に合わせます。
また、出力されるログのファイル名をauth-fail.log
にしておきます。
time_offset = 9
auth_logging = On
auth_logging_filename = "fail2ban/auth-fail.log"
auth_logging_format = "[{date:Y-m-d H:i:s}] Auth failed: ip={request:ip} user={imap:login} host={imap:host} port={imap:port}"
Fail2Banに設定を追加
/etc/fail2ban/filter.d/rainloop.conf
を作成してauth-fail.log
の出力にマッチするフィルタを設定します。
[Definition]
failregex = Auth failed: ip= user=.* host=.* port=.*$
また、/etc/fail2ban/jail.local
を作成し、RainLoop用の設定を追加します。ここでは、作成したffilter.d/rainloop.conf
をフィルタに設定し、対象ログにauth-fail.log
を指定します。
[rainloop]
enabled = true
filter = rainloop
logpath = /var/www/rainloop/data/_data_/_default_/logs/fail2ban/auth-fail.log
設定ファイルを作成したら、fail2ban-client
コマンドから設定を読み込みます。
$ sudo fail2ban-client reload
これにより、jail.conf
の設定に基づき、600秒以内に5回ログインに失敗したクライアントのIPアドレスを600秒間BANし、サーバーへのアクセスを遮断するiptablesが設定されます。なお、この設定を変更する場合もjail.conf
は変更せず、jail.local
に新たな項目を追加して上書きします。
動作確認
/var/log/fail2ban.log
から、ログインの失敗と対象のBANが確認できます。また、iptables -L
コマンドよりChain f2b-rainloopが追加されていることが分かります。
なお、BANされている間はSSHでサーバーに接続することもできなくなってしまうため動作を確認する際は注意しましょう。