Bash Советы - Bash Scripting | Linux Terminal & Shell. Скрипты и Автоматизация задач. Командная строка для Sysadmin и DevOps. Уроки Баш, Zsh и CLI Tools. Unix Console.
IT и технологии · 5 февраля 2026 г.
💡 Bash-совет: Анализ самых активных IP в логах веб-сервера 🐚🚀 — 5 февраля 2026 г. в 08:53:02.022
💡 Bash-совет: Анализ самых активных IP в логах веб-сервера 🐚🚀 Когда на сервере много трафика, полезно быстро узнать, какие IP-адреса обращаются к веб-серверу больше всего. Предлагаю скрипт, который: 1. Извлекает IP из access.log (или любого другого лог-файла). 2. Считает количество запросов от каждого IP. 3. Сортирует и показывает топ N «запросчиков». 📋 Скрипт: top_ips.sh #!/usr/bin/env bash # -------------------------------------------- # Скрипт для поиска топ-N IP-адресов в логах # Автор: @bash_srv # -------------------------------------------- # Путь к лог-файлу (по умолчанию /var/log/nginx/access.log) LOGFILE="/var/log/nginx/access.log" # Сколько адресов показать (по умолчанию 10) TOP_N=10 # Временный файл для списка всех IP TEMP="/tmp/all_ips_$(date +%Y%m%d_%H%M%S).txt" # Проверка, что лог-файл существует if [[ ! -f "$LOGFILE" ]]; then echo "❌ Лог-файл '$LOGFILE' не найден!" exit 1 fi echo "🔎 Извлекаем IP-адреса из $LOGFILE и рассчитываем топ $TOP_N..." # 1. Извлекаем первый столбец (обычно там IP), записываем во временный файл awk '{print $1}' "$LOGFILE" > "$TEMP" # 2. Считаем повторы, сортируем по убыванию, выводим топ N echo -e "\n📊 Топ $TOP_N IP-адресов (по количеству запросов):" sort "$TEMP" | uniq -c | sort -nr | head -n "$TOP_N" | awk '{printf "%s запросов — %s\n", $1, $2}' # 3. Убираем временный файл rm -f "$TEMP" echo -e "\n✅ Готово!" 📝 Как это работает 1. LOGFILE — путь к вашему файлу логов Nginx/Apache. Для Apache обычно /var/log/apache2/access.log, для Nginx — /var/log/nginx/access.log. Если у вас другой путь, просто адаптируйте переменную LOGFILE. 2. Команда awk '{print $1}' "$LOGFILE": Берёт первый столбец в каждой строке лога (IP-адрес). Сохраняет все адреса во временный файл $TEMP. 3. sort "$TEMP" | uniq -c | sort -nr | head -n "$TOP_N": sort упорядочивает список IP по возрастанию. uniq -c объединяет подряд идущие одинаковые строки и выводит количество повторений. Второй sort -nr сортирует по числу запросов (включая самое большое значение сверху). head -n "$TOP_N" берёт первые N строк (топ N IP). 4. awk '{printf "%s запросов — %s\n", $1, $2}' форматирует вывод: Например: 1234 запросов — 192.168.1.100. 5. По завершении удаляется временный файл $TEMP для чистоты. 🔧 Как улучшить и кастомизировать Датафильтрация: если нужен анализ только за последние N дней, можно применять grep с date: # Пример: IP-адреса из логов за сегодня TODAY=$(date '+%d/%b/%Y') grep "$TODAY" "$LOGFILE" | awk '{print $1}' > "$TEMP" Здесь date '+%d/%b/%Y' выдаёт, например, 05/Jun/2025, что совпадает со строками формата Nginx-лога. Анализ URL: можно аналогично извлекать запрашиваемые URL: awk '{print $7}' "$LOGFILE" | sort | uniq -c | sort -nr | head -n 10 Это покажет топ-10 запрашиваемых путей. Выгрузка в файл/почту: чтобы сохранить результаты или отправить их администратору: OUTPUT="/tmp/top_ips_report.txt" sort "$TEMP" | uniq -c | sort -nr | head -n "$TOP_N" > "$OUTPUT" mail -s "Топ IP-адресов на $(hostname)" admin@example.com < "$OUTPUT" Интеграция в cron: автоматизируйте ежедневный отчёт: # crontab -e 30 0 * * * /usr/local/bin/top_ips.sh >> /var/log/top_ips.log Это запустит скрипт каждый день в 00:30 и добавит результаты в /var/log/top_ips.log. 🔔 Вывод: Используя этот простой Bash-скрипт, вы сможете в пару команд узнать, какие IP-адреса генерируют наибольшую нагрузку на ваш веб-сервер. Это поможет вовремя выявить подозрительные активности, защититься от DDoS-атак или просто понять, кто чаще всего посещает сайт. 👉 @bash_srv

