はじめに
不審なアクセスを弾いているfail2ban。
sudo fail2ban-client status sshd
と実行することでBANしたIPのリストが出てきます。
ただ、それは
aaa.bbb.ccc.ddd AAA.BBB.CCC.DDD
のようにスペース区切りとなっていて読むのが大変。
そこで、IPアドレスを一覧表示して可読性を高めるようにします。
前提
環境
- Ubuntu 20.0.4
- fail2ban 0.11.1
sshdの設定
(抜粋)
[sshd]
enabled=true
filter=sshd
mode=normal
port=22
protocol=tcp
logpath=/var/log/auth.log
maxretry=3
bantime=-1
# ログインが3回失敗したIPアドレスを猶予期間無しに永久追放します
ignoreip = 127.0.0.0/8 ::1 #その他、除外IPを必要に応じて
enabled=true filter=sshd mode=normal port=22 protocol=tcp logpath=/var/log/auth.log maxretry=3 bantime=-1 # ログインが3回失敗したIPアドレスを猶予期間無しに永久追放します ignoreip = 127.0.0.0/8 ::1 #その他、除外IPを必要に応じて
さっくりとした手順
- fail2banが弾いているIPをログファイルに出力するためのスクリプトを作成します。
- 出力したファイルのディレクトリを作成します。
- 動作を確認します。
- cronで自動実行されるようにします。
- 出力したログファイルをローテーションする設定を追加します。
スクリプト作成
※教義・信仰に沿ったエディタで作成してください。※
#!/bin/bash
# ログの格納場所を指定
log_directory="/path/to/log/directory"
# fail2ban-client status sshdを実行し、IPアドレスを取得
ip_addresses=$(fail2ban-client status sshd | awk 'BEGIN {RS="[ \\t]+"} {if ($1 ~ /^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/) print $1}')
# IPアドレスを一行ずつ表示してソートし、csvファイルに出力
echo "$ip_addresses" | sort -n -t . -k 1,1 -k 2,2 -k 3,3 -k 4,4 > "$log_directory/sorted_ips.csv"
chmod +x fail2ban-ssh-sort.sh
ログ出力ディレクトリを作成
sudo mkdir /var/log/fail2ban-ips
# 上記のスクリプトで指定したディレクトリを指定します。
動作確認
sudo bash fail2ban-ssh-sort.sh
cat /var/log/fail2ban-ips/sorted_ips.csv
# IPアドレスの出力がされていれば成功です。
cron自動実行
sudo crontab -e -u root
0 3 * * * /path/to/directory/fail2ban-ssh-sort.sh
# スクリプトを格納したディレクトリを絶対パスで指定します
# この例では毎日午前3時に実行します
ログローテーション設定
※管理者権限で、教義・信仰に沿ったエディタで作成してください。※
- /etc/logrotate.d/fail2ban-ssh-sort
/var/log/fail2ban-ips/sorted_ips.csv {
# スクリプトで指定したログ格納ディレクトリ/ログファイルを指定
daily
rotate 3
compress
missingok
notifempty
}
ローテーション設定確認
sudo logrotate -d /etc/logrotate.d/fail2ban-ssh-sort
エラーがなければ成功です。
これで、加工しやすいCSVファイルで不審なログインのアクセス元を確認することが可能になりました。