Извлеките вредоносные IP-адреса из журналов Apache и заблокируйте их с помощью iptables

Я пытаюсь удержать некоторых злоумышленников, которые пытаются использовать уязвимости XSS с моего веб-сайта, я обнаружил, что большинство вредоносных попыток начинаются с классического теста «alert (document.cookie);». Сайт не уязвим для XSS, но я хочу заблокировать нарушающие IP-адреса, прежде чем они найдут настоящую уязвимость, а также сохранить журналы в чистоте.

Моя первая мысль – иметь скрипт, постоянно проверяющий в Apache журналы всех IP-адресов, начинающихся с этого зонда, и отправки этих адресов в правило сбрасывания iptables. Что-то вроде этого:

Cat / var / log / httpd / -access_log | Grep "alert (document.cookie);" | Awk '{print $ 1}' | уник

Почему бы эффективный способ отправить вывод этой команды в iptables?

Спасибо заранее за любые данные!

Вы будете рады узнать, что вам не нужно писать программу; Fail2ban уже делает это.

Что-то, что я делаю, главным образом из-за моего незнания более элегантного решения, – это вручную проверять журналы Nginx каждые 4 часа, а журналы почтового сервера каждые 2 минуты – для чрезмерного доступа отдельными IP-адресами. Я запускаю несколько скриптов, которые:

  1. Проверьте access.log и перечислите 10 лучших IP-адресов, организованных количеством обращений к серверу
  2. Дамп результатов в файл журнала
  3. Попросите другой скрипт посмотреть этот файл журнала и запретить любой IP-адрес, который поразил сервер больше, чем X раз в течение последних X часов
  4. Сохраните мои iptables.save

Вот как это выглядит:

autoBanIPs_mail.sh

 #!/bin/bash # This script checks the last 2 minutes of log entries to see if any # IP has made over 99 connections now=$(date +"%m_%d_%Y") /root/bin/checkBadIPs_mail.sh > /home/ipChecker/ipcheckMAIL_$now.txt cat /home/ipChecker/ipcheckMAIL_$now.txt | \ grep " \\(\\([9][9]\\)\\|\\([0-9][0-9][0-9]\\+\\)\\) " | \ awk '{print $2}' > /home/ipChecker/badMailIPs_$now.sh sed -i "s/^/\/usr\/local\/sbin\/blockIP /g" /home/ipChecker/badMailIPs_$now.sh /bin/bash /home/ipChecker/badMailIPs_$now.sh cat /home/ipChecker/ipcheckMAIL_$now.txt >> /home/ipChecker/ipcheckMAIL_$now.log rm /home/ipChecker/ipcheckMAIL_$now.txt rm /home/ipChecker/badMailIPs_$now.sh 

checkBadIPs_mail.sh

ОЧЕНЬ важно отметить здесь, что вам НЕОБХОДИМО настроить белый список или вы начнете блокировать множество аутентичных IP-адресов с серверов, на которые вы просто получаете много сообщений электронной почты, или в случае других журналов, IP-адреса, которые Просто поразили ваш сервер по законным причинам. Мой белый список просто встроен в этот скрипт, добавив grep-каналы сразу после | Grep ']' | Которые выглядят примерно так: «grep -v 127.0 |» ,
Вам нужно потратить время, чтобы научить вашего сервера, что IP-адреса с высоким трафиком являются законными, а какие нет. Для меня это означало, что я должен был провести первую неделю или около того, проверяя мои журналы вручную каждые пару часов, просматривая высокий трафик ip на iplocation.net, а затем добавляя законные, такие как amazon, box.com или даже мой домашний / офис IP переходит в этот белый список. Если вы этого не сделаете, вы, вероятно, будете заблокированы на своем собственном сервере, или вы собираетесь заблокировать законные почтовые / веб-серверы и вызвать перебои в электронной почте или трафике.

 cat /var/log/mail.log | awk \ -v d1="$(date --date="-2 min" "+%b %_d %H:%M")" \ -v d2="$(date "+%b %_d %H:%M")" \ '$0 > d1 && $0 < d2 || $0 ~ d2' | \ grep '\[' | grep '\]' | \ grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -v 127.0 | \ awk '{print $1}' | sort | uniq -c | sort -n | tail -10 

Blockip

 #!/bin/bash sudo iptables -I INPUT -s $1 -j DROP sudo bash -c "iptables-save > /etc/network/iptables.save" 

У меня есть несколько журналов, проверенных каждые 2 минуты, в основном мой ssh ​​auth log и почтовый журнал, поскольку они были избиты :(.

Я настраиваю конкретные сценарии для каждого файла журнала, хотя это было бы достаточно просто из ручного скрипта, который я использую сам, когда вы хотите проверять журналы. Выглядит так:

 #!/bin/bash log=$1 time=$2 cat /var/log/${log} | awk \ -v d1="$(date --date="-${time} min" "+%b %_d %H:%M")" \ -v d2="$(date "+%b %_d %H:%M")" \ '$0 > d1 && $0 < d2 || $0 ~ d2' | \ grep '\[' | grep '\]' | \ grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | \ sort | uniq -c | sort -n | tail -10 

Для этого требуется 2 входа при запуске, файл журнала, который вы хотите сканировать, и как далеко назад в прошлое, которое вы хотите отсканировать.

Поэтому, если бы я хотел проверить mail.log для подсчета ip, скажите, что за 75 минут до этого я запускал:

 $ sudo script.sh mail.log 75 

Снова я знаю, что это грустно, как черт, и, вероятно, есть хороший чистый эффективный протокол, который делает все это, но я не знал об этом, и эта штука уже год или два продолжается и удерживает плохих парней в страхе. Единственное, что я бы очень СЕРЬЕЗНО рекомендовал, это то, что у вас есть прокси-сервер или другой сервер в крыльях, который вы можете использовать для доступа к вашему основному серверу. Причина в том, что если вы делаете веб-разработку один день из-за океана, и вы Ping your self 2000 раз за 5 часов для некоторого тестирования, вы можете получить блокировку, не возвращаясь обратно, за исключением прокси.

Вы можете видеть, что в checkBadIPs.sh я поставил grep -v 127.0, и в моих фактических файлах у меня есть тонна правил игнорирования для моих собственных IP-адресов и других доверенных диапазонов IP-адресов, но иногда ваш IP-изменения вы забываете обновить, а затем вы «Заблокирован из вашего собственного сервера.

В любом случае, надеюсь, что это поможет.

  • Ограничение доступа к nginx
  • Безопасно ли предоставлять каждому клиенту домашний directory?
  • Отkeyение USB / съемных устройств в программном обеспечении
  • Как вы можете безопасно отправлять syslog * через общеansible Интерless?
  • Что предотвращает атаку на Postfix через свои именованные каналы?
  • Крепление 2 стойки стойки или фиксация патчей?
  • Управление securityю (Java) в общей среде
  • необходима дополнительная настройка после установки SSL-certificateа?
  • Предоставить привилегии NON-администратора для IIS 7
  • Защищенная сетевая структура
  • Узнайте, сколько browserов отклоняет SSL-certificate
  • Давайте будем гением компьютера.