42 lines
835 B
Bash
42 lines
835 B
Bash
#!/usr/bin/env bash
|
|
|
|
##FAIL2BAN LOG ANALYZER
|
|
|
|
set -euo pipefail
|
|
clear
|
|
|
|
##CONFIG
|
|
log="${1:-/var/log/fail2ban.log}"
|
|
|
|
##CHECK
|
|
if [[ ! -f "$log" ]]; then
|
|
echo "Error: File not found: $log" >&2
|
|
exit 1
|
|
fi
|
|
|
|
##RUN
|
|
echo "==========================="
|
|
echo "FAIL2BAN DAILY TOTALS "
|
|
echo "==========================="
|
|
echo "DATE LINES "
|
|
echo "---------------------------"
|
|
awk '
|
|
{
|
|
##FIELDS: $1 = date (YYYY-MM-DD), $2 = time
|
|
if ($1 ~ /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/) {
|
|
counts[$1]++
|
|
}
|
|
}
|
|
END {
|
|
n = asorti(counts, sorted, "@ind_str_asc")
|
|
for (i = 1; i <= n; i++) {
|
|
printf "%s %6d\n", sorted[i], counts[sorted[i]]
|
|
}
|
|
}
|
|
' "$log" | column -t -R 2
|
|
echo "---------------------------"
|
|
tot=$(wc -l < "$log" | tr -d ' ')
|
|
printf "TOTAL: %s LINES\n" "$tot"
|
|
echo "==========================="
|
|
|