Fail2Ban SOC Dashboard v3 — мини-система анализа атак на Linux-сервере

Fail2Ban SOC Dashboard v3 — мини-система анализа атак на Linux-сервере

Когда сервер открыт в интернет, он почти сразу начинает получать автоматические попытки входа: перебор SSH-паролей, сканирование портов и боты из разных стран. Обычного Fail2Ban достаточно для защиты, но для понимания картины атак полезно видеть не просто баны, а статистику и структуру атакующих.

Для этого можно использовать простой Bash-скрипт — Fail2Ban Control Panel v3 (SOC mode).


🧠 Что делает эта версия

Fail2Ban SOC Dashboard v3 превращает стандартные логи в удобную аналитическую панель прямо в терминале:

  • показывает события FAIL / BAN
  • определяет IP-адреса атакующих
  • группирует атаки по подсетям (/24)
  • определяет страны через GeoIP
  • считает статистику:
    • топ IP
    • топ подсетей
    • топ стран

⚙️ Установка зависимостей

Перед запуском нужно установить GeoIP:

sudo apt update
sudo apt install geoip-bin coreutils -y

🧩 Создание скрипта

Создаём файл:

nano f2b-soc-v3.sh

💎 Код Fail2Ban SOC Dashboard v3

#!/bin/bash

LOG="/var/log/fail2ban.log"

declare -A GEO_CACHE
declare -A IP_COUNT
declare -A SUBNET_COUNT
declare -A COUNTRY_COUNT

get_ip() {
    echo "$1" | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' | tail -n 1
}

get_country() {
    local ip=$1

    if [[ -n "${GEO_CACHE[$ip]}" ]]; then
        echo "${GEO_CACHE[$ip]}"
        return
    fi

    country=$(geoiplookup "$ip" 2>/dev/null | cut -d: -f2)

    GEO_CACHE[$ip]=$country
    echo "$country"
}

get_subnet() {
    echo "$1" | awk -F. '{print $1"."$2"."$3".0/24"}'
}

echo "======================================"
echo "   FAIL2BAN SOC DASHBOARD v3"
echo "======================================"
echo ""

while read -r line; do

    [[ "$line" != *"Ban"* && "$line" != *"Found"* ]] && continue

    ip=$(get_ip "$line")
    [[ -z "$ip" ]] && continue

    subnet=$(get_subnet "$ip")
    country=$(get_country "$ip")

    ((IP_COUNT["$ip"]++))
    ((SUBNET_COUNT["$subnet"]++))
    ((COUNTRY_COUNT["$country"]++))

    if [[ "$line" == *"Ban"* ]]; then
        type="BAN"
    else
        type="FAIL"
    fi

    printf "%-20s %-5s %-15s %-20s %-15s\n" \
        "$(echo "$line" | awk '{print $1,$2,$3}')" \
        "$type" \
        "$ip" \
        "$country" \
        "$subnet"

done < <(tail -n 500 "$LOG")

echo ""
echo "========== TOP IPS =========="
for ip in "${!IP_COUNT[@]}"; do
    echo "${IP_COUNT[$ip]} $ip"
done | sort -nr | head -10

echo ""
echo "======== TOP SUBNETS ========"
for s in "${!SUBNET_COUNT[@]}"; do
    echo "${SUBNET_COUNT[$s]} $s"
done | sort -nr | head -10

echo ""
echo "======== TOP COUNTRIES ======"
for c in "${!COUNTRY_COUNT[@]}"; do
    echo "${COUNTRY_COUNT[$c]} $c"
done | sort -nr | head -10

echo ""
echo "Done"

🔧 Делаем исполняемым

chmod +x f2b-soc-v3.sh

▶️ Запуск

./f2b-soc-v3.sh

📊 Что показывает скрипт

1. Живые события

Пример вывода:

2026-05-16 15:29:31 BAN  92.118.39.195 RO, Romania 92.118.39.0/24

2. ТОП атакующих IP

Показывает самые активные источники атак:

15 92.118.39.236
12 92.118.39.195

3. ТОП подсетей (ботнеты)

Позволяет увидеть целые кластеры атак:

40 92.118.39.0/24
28 45.148.10.0/24

4. ТОП стран атак

География атак:

60 RO, Romania
45 NL, Netherlands

🧱 Почему это полезно

Обычный Fail2Ban показывает только:

  • кто забанен

SOC Dashboard v3 показывает:

  • кто атакует чаще всего
  • какие подсети используются
  • какие страны активны
  • есть ли ботнеты

🚀 Практическое применение

Этот скрипт особенно полезен для:

  • VPS серверов
  • SSH-доступа в интернет
  • VPN серверов (Xray / 3x-ui)
  • веб-серверов (Nginx / Apache)
  • любых публичных Linux систем

⚡ Итог

Fail2Ban SOC Dashboard v3 — это простой, но мощный инструмент, который превращает обычные логи в понятную картину атак.

Он помогает не просто блокировать IP, а понимать структуру угроз и поведение ботнетов.


Leave a Reply