378просмотров
8.6%от подписчиков
25 марта 2026 г.
Score: 416
Bash-совет: анализ неудачных SSH-логинов и бан «горячих» IP 🔒🐚 Хотите быстро узнать, какие IP вызывают максимум неудачных попыток входа в SSH, и оперативно заблокировать самых настырных? Ниже скрипт: #!/usr/bin/env bash
# ssh_fail_analyzer.sh
# Анализ неудачных SSH-попыток и вывод TOP-10 IP LOG_FILE="/var/log/auth.log" # путь к логам (для CentOS: /var/log/secure)
TOPN=10 # сколько IP показывать echo "Топ $TOPN IP с неудачными SSH-входами:"
grep -E "Failed password for" "$LOG_FILE" \ | grep -oP '(?<=from )[\d\.]+' \ | sort \ | uniq -c \ | sort -rn \ | head -n "$TOPN" Как это работает 1. grep -E "Failed password for" Ищем все строки с неудачными попытками.
2. grep -oP '(?<=from )\[\d.]+' С помощью PCRE-регулярки достаём только IP-адреса после слова "from".
3. sort | uniq -c | sort -rn Сортируем, считаем вхождения и выводим в порядке убывания.
4. head -n "\$TOPN" Ограничиваем результат топ-10. 🛠 Можно добавить в crontab ежедневный запуск и автоматическую отправку отчёта на почту или сразу бан «горячих» IP через iptables: # в crontab: каждый день в 00:10
10 0 * /path/to/ssh_fail_analyzer.sh | mail -s "SSH Fail Report" admin@example.com Или сразу блокировать подозрительные IP, если они превысили порог: THRESHOLD=50
for ip in $(grep -E "Failed password for" "$LOG_FILE" \ | grep -oP '(?<=from )[\d\.]+' \ | sort | uniq -c \ | awk -v t="$THRESHOLD" '$1 > t {print $2}'); do iptables -I INPUT -s "$ip" -j DROP echo "$(date): Заблокирован $ip за превышение $THRESHOLD неудачных попыток" >> /var/log/ssh_ban.log
done 🚪 Bash Ready | #практика