BASH_SRV Telegram 89
💡 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)" [email protected] < "$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
👍7



tgoop.com/bash_srv/89
Create:
Last Update:

💡 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)" [email protected] < "$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

BY Bash Советы




Share with your friend now:
tgoop.com/bash_srv/89

View MORE
Open in Telegram


Telegram News

Date: |

Over 33,000 people sent out over 1,000 doxxing messages in the group. Although the administrators tried to delete all of the messages, the posting speed was far too much for them to keep up. best-secure-messaging-apps-shutterstock-1892950018.jpg 3How to create a Telegram channel? In 2018, Telegram’s audience reached 200 million people, with 500,000 new users joining the messenger every day. It was launched for iOS on 14 August 2013 and Android on 20 October 2013. How to create a business channel on Telegram? (Tutorial)
from us


Telegram Bash Советы
FROM American