Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.
IT и технологии · 9 февраля 2026 г.
Bash-совет: анализ неудачных SSH-логинов и бан «горячих» IP 🔒🐚 — 9 февраля 2026 г. в 10:40:43.060
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_srv

