なにこれ
久々にサクラの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を表示するサンプル