LoginSignup
0
0

fail2banの設定とBanIPの定期報告設定

Posted at

なにこれ

久々にサクラのVPSを再セットアップしたので、いろいろやったので備忘録代わりに書いておく

OS
CentOS Stream 9

まずはfail2banのインストール

CentOS9の場合インストール前にEPELのリポジトリを先に有効にしておく。
有効化の方法はほかのサイトでも記載があるので割愛。

インストールコマンド

dnf install fail2ban fail2ban-systemd -y

インストールが終わったらjail.localファイルを作成していく

vi /etc/fail2ban/jail.local

今回はsshの監視を入れておく

[sshd]
enabled = true
bantime  = 6000 # 秒数指定
findtime  = 10 # 秒数指定
maxretry = 2 #試行回数

やらかしたやつを豚箱にブチ込んでおく設定

[recidive]
enabled  = true
bantime  = 604800 # 秒数指定
findtime = 86400 # 秒数指定
maxretry = 2 # 二回やらかしたら豚箱行

設定の有効化

fail2ban-client start

監視状況確認 (今回の肝)

fail2ban-client status sshd

自動起動設定

systemctl enable fail2ban
systemctl start fail2ban

メールで定期的に報告できるようにしよう

結構放置がちにしてしまうので今回はメールで定期的に報告できるようにしておく。

ネットで探すとmailコマンドで外部のSMTPサーバで送信する例とかはあるが、
どうもCentOS8からはmailコマンドではなく、s-nailコマンドを使用して送信する必要がある。
なので、s-nailコマンドをインストールする。

s-nailコマンドインストール

dnf install s-nail -y

インストールしたら、送信できるかテストをする。
今回はXREAのメールサーバを使用するが、この記事見てやってみようと考えている方は
自分が使おうとしているメールサーバの設定に置き換えてやってください

簡単な設定のメモ

コマンドの一例
echo "本文" | mail -s "件名" -S v15-compat=yes -S mta=smtp://test%40exmple.com:Password@s1008.xrea.com:587 -S from=fromAddress@exmple.com ToAddress@gmail.com
コマンドとオプション 説明
echo "本文" ここに本文を入れる
mail -s "件名" 件名を入れる
-S v15-compat=yes サーバによっては要る
-S mta=smtp://test%40exmple.com:Password@s1008.xrea.com:587 SMTPサーバに関する設定。詳細については後述
-S from=fromAddress@exmple.com 送信元のアドレス
ToAddress@gmail.com 送信先のアドレス。送信元アドレスの後ろに半角スペースをつけて記載する

SMTPサーバに関する設定について

結構ややこしい部分があるためここについては詳細を記載する

SMTP認証でメールアドレスを使用する場合とパスワードに記号が含む場合

認証周りの記載としては基本的に以下の書式

UserID:Password

ただし、UserIDの設定でメールアドレスを設定する必要がある場合は次のコマンドでエンコードする必要がある

echo 'urlcodec enc test@exmple.com' | s-nail -#
test%40exmple.com

エンコードというよりもエスケープに近いが、上のコマンドを実施することによりアットマークが、
該当するコードに置き換わる。
なお、パスワードに記号を含む場合も上記のコマンドを実施する必要がある。
その場合は「test@exmple.com」の部分をエンコードするパスワードに置き換える。

送信サーバとポートの指定について

送信サーバについてはサーバによってまちまちなので指定方法について書く

@送信サーバアドレス:ポート番号

送信サーバアドレスはIPアドレスでも問題ないと思われるが、ポート番号に関しては25番の指定より、
サブミッションポートの587にしておけば問題ないと思う。

基本的にわかりずらいのはSMTP認証の設定がわかりずらいので、ここでエンコードがいるって認識なら躓かないかも。

定期報告を行うシェル

放置をかけてしまうので、後からどこのIPアドレス帯かを確認したいのでメールのコマンドと
fail2banの確認コマンドで定期的にメールで報告するシェルを作成する。

banrepo.sh

# !/bin/bash

reportdate=`date +%Y/%m/%d`
repoetsshbandata=`fail2ban-client status sshd`

echo "$repoetsshbandata" | mail -s "fail2ban sshd BanIP Report Mail $reportdate " -S v15-compat=yes -S mta=smtp://test%40exmple.com:Password@s1008.xrea.com:587 -S from=fromAddress@exmple.com ToAddress@gmail.com

特に変な処理は入れてないがfail2ban-client status sshdの結果を本文に入れて送る、
ごくシンプルなシェルです。
送信先が複数ある場合は実行結果を一時ファイルに書き込んで送信するのもよし、
メールの送信コマンドが長すぎるのであればすべて変数にしてしまうのもいい。

Cronに作ったシェルを設定

crontab -e
00 7 * * * /root/banrepo.sh

終わり

参考にしたサイト

s-nailで外部SMTPサーバーを利用してメール送信
キャンパーSEの備忘録 CentOSへFail2Banをインストール
それマグで! さくっとメールを送るコマンド mailx(s-nail/bsd-mailx)
ITSakura Linux cronでhello worldを表示するサンプル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0