22.02.2014, 18:51 | #1 |
Новичок
Регистрация: 25.11.2008
Адрес: Cuba
Сообщений: 79
Вес репутации: 189
|
Блокировать по ip-адресу. Простой способ
Здравствуйте. Есть веб-сервер nginx+apche на FreeBSD. Неоднократно сталкиваюсь с ситуацией когда с одного ip-адреса поступает очень много запросов. По десять запросов в секунду и так на протяжении пяти минут. После чего сервер ложиться.
Как сделать так, чтобы Nginx или Apache или ФаерВолл FreeBSD блокировал этот ip-адрес? И больше не обрабатывал запросы от этого айпишника. |
22.02.2014, 19:24 | #3 |
Новичок
Регистрация: 25.11.2008
Адрес: Cuba
Сообщений: 79
Вес репутации: 189
|
Спасибо. Но этим способом уже научился пользоваться
Я имею ввиду. Как автоматически блокировать ip-шники? Так называемые "скрипт-кидди" запускают скрипт со своего компьютера. И к сайту идет куча get-запросов, к одной и той же веб-странице. Думаю есть весьма простой способ автоматической блокировки. Возможно есть некой ПО. Добавлено через 2 минуты Вот нашел такую программку Bruteblock - она блокируют тех кто пытается подобрать пароль. Может кому пригодиться. Но мне, она не поможет. Последний раз редактировалось masa; 22.02.2014 в 19:24. Причина: Добавлено сообщение |
22.02.2014, 19:26 | #4 |
Эксперт
Регистрация: 17.02.2008
Адрес: Донецк, ДНР
Сообщений: 8,880
Вес репутации: 502
|
Посмотрите эту тему: http://forum.sape.ru/showthread.php?t=90226
|
22.02.2014, 19:35 | #5 |
Мастер
Регистрация: 17.07.2012
Адрес: Москва
Сообщений: 815
Вес репутации: 194
|
У меня лично на эту тему написан собственный скрипт, который запускается раз в 5 минут, анализирует происходящее и банит правилами файрволла. FreeBSD 7+
Код:
#!/bin/sh # =================================== ======================================= # english documentation ru_RU.UTF-8 документация # Block attackers by IP using ipfw Блокирует IP атакующих с использованием # table logic. Counts connections to ipfw table. Считает коннекты на наш ip, # checkip:checkport and adds attacker добавляет ip в таблицу, сбрасывает tcp # to deny table. Then drops tcp. соединения. # # (C) 2011 Sergej Qkowlew. Public Domain (C) 2011 Яковлев Сергей. # +additions from Nefer +подсказки от Нефера. # =================================== ======================================= # Configurable params Конфигурируемые параметры # Table number to be used Используемый номер таблицы tabnum='1' # Rule number to be used Используемый номер правила rulnum='1030' # Our IP and port under attack Атакуемые наши IP и порт checkip='1.1.1.1' checkport='80' # Max connections not blocked макс. число соединений (больше - атака) countlim='34' # Max num GET / not blocked макс. число GET / (больше - атака) countstat='4' # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Static IP list to keep on reboots Где храним список IP между загрузками badiplist='/etc/rc.badip' # Commands to run some programms: Команды запуска некоторых программ: ipfwbin='/sbin/ipfw -q' tcpdropbin='/usr/sbin/tcpdrop' netstatcmd='/usr/bin/netstat -n -a' # Where temporary data is written Куда пишем временные файлы sqtmpfile="/tmp/deny_table_${rulnum}_${tabnum}" # Name used in syslog Имя для сообщений в syslog denytablename="deny_table" # Command to get http server status Команда взятия статуса вебсервера # NB: needed mod_status in Apache and требует выдачи расширенного статуса # needed to allow it from our IP вебсервером и разрешения оноого для нас. # If you do not want it, comment line Если не хотите - закомментируйте строку. #lynxcmd="/usr/local/bin/lynx -dump -traversal http://${checkip}/server-status/index.html" scriptfullpath='/root/deny_table' # =================================== ======================================= # fool-proof check защита от дурака. # check if rule already here. Проверяем есть ли уже такое правило. # if not - create it and fill table Если нет, создаём и заполняем таблицу # from static bad ip list из списка IP $ipfwbin list ${rulnum} >/dev/null 2>&1 || ( [ -r $badiplist ] && ( for i in `cat $badiplist`; do ${ipfwbin} table ${tabnum} add $i ; done ) ; ${ipfwbin} add ${rulnum} deny ip from table\(${tabnum}\) to any ; ${ipfwbin} add ${rulnum} deny ip from any to table\(${tabnum}\) ) # Clean table Очистка таблицы case $1 in [Cc][Ll][Ee][Aa][NnRr]) for i in `ipfw table ${tabnum} list| awk '{print $1;}'`; do ipfw table ${tabnum} delete $i; done ;; *) # Create filtered list from netstat Снимаем результат netstat ${netstatcmd} | grep ${checkip}.${checkport} >${sqtmpfile}_1 rm -f ${sqtmpfile}_2 # Create list of attackers Создаём список атакующих # ...by netstat result ...из результатов netstat cat ${sqtmpfile}_1 | awk '($3=="0"){split($5,IPart,"."); Ip=IPart[1] "." IPart[2] "." IPart[3] "." IPart[4]; if (Ip != MyIpIs) Count[Ip]++;} END {for (i in Count) {if (Count[i] > CountLimit) print i; } }' CountLimit=${countlim} MyIpIs=${checkip}>${sqtmpfile}_2 # ...by lynx dump result ...из статуса вебсервера [ -z "${lynxcmd}" ] || ${lynxcmd} | awk '(($13 == "GET") && ($14 =="/")) { Num[$11]++; } END { for (i in Num) { if (Num[i] > Lim) { print i; } } }' Lim=${countstat} >>${sqtmpfile}_2 # if no attackers found Если никого, файл имеет нулевую длину [ -s ${sqtmpfile}_2 ] || exit # =================================== ======================================= # add each attacker to deny table Добавляем атакующих в таблицу ipfw # log them into syslog Сообщаем о них в syslog for i in `cat ${sqtmpfile}_2` do ${ipfwbin} table ${tabnum} add $i logger -t ${denytablename} "$i added to table ${tabnum} used in ipfw rule ${rulnum} called from ${scriptfullpath}" done # Recreate netstat result for more Пересоздаём выдачу netstat чтобы список # actual connections to be dropped сбрасываемого стал более актуальным. ${netstatcmd} | grep ${checkip}.${checkport} >${sqtmpfile}_1 # Drop TCP connections for attackers Убиваем TCP соединения for i in `cat ${sqtmpfile}_2` ; do for j in `cat ${sqtmpfile}_1 | grep $i | awk '{split($5,IPart,"."); print IPart[5];}'`; do ${tcpdropbin} ${checkip} ${checkport} $i $j >/dev/null 2>&1 done done # Rewrite bad IP list from ipfw table Сохраняем список IP из таблицы ${ipfwbin} table ${tabnum} list | awk '{print $1;}' >${badiplist} ;; esac */5 * * * * root /root/deny_table >/dev/null 2>&1 Про эффективность - данный скрипт позволил выдержать DDOS атаку со стороны буйных укров на сайт евразийского союза молодёжи, когда активисты оного союза спилили ножовкой "вилку" на горе Говерла и очень на эту тему гордились. Последний раз редактировалось qkowlew; 22.02.2014 в 19:43. |
22.02.2014, 19:50 | #6 |
Новичок
Регистрация: 25.11.2008
Адрес: Cuba
Сообщений: 79
Вес репутации: 189
|
Этот листинг мне нравится.
Глупый вопрос. Но куда этот скрипт нужно добавить? Как им пользоваться? Добавлено через 6 минут Эту строчку */5 * * * * root /root/deny_table >/dev/null 2>&1 нужно добавить в файл /etc/crontab ? А где расположить сам скрипт? Последний раз редактировалось masa; 22.02.2014 в 19:50. Причина: Добавлено сообщение |
22.02.2014, 19:59 | #7 | |
Мастер
Регистрация: 17.07.2012
Адрес: Москва
Сообщений: 815
Вес репутации: 194
|
Цитата:
1. в /etc/rc.conf: Код:
firewall_enable="YES" firewall_type="OPEN" Если у тебя там iptables - придётся переписать все строки, где упоминается ipfwbin и собственно строку запуска на синтаксис iptables. Что делать после этого: 1. положить его в папку /root поименовав deny_table 2. отредактировать его в соответствии с IP своего сервера и номером правила. 3. Поэкспериментировать, запуская скрипт руками и читая в логе что получилось (и командами ipfw show). Если его запустить с парамтром Clean - он стирает всё что наворотил. 4. Убедившись в том, что скрипт в твоих условиях работает как задумано, прописать в /etc/crontab строку Код:
*/5 * * * * root /root/deny_table >/dev/null 2>&1 |
|
22.02.2014, 21:08 | #9 |
Мастер
Регистрация: 14.10.2011
Сообщений: 550
Вес репутации: 168
|
Я на своих серверах использую fail2ban
возможность блокировать айпи с которого идет много обращений к Апачу, ,фтп, портам и много другого... можно выставить вечный бан - а можно на определенное время.. очень гласная штука при переборе паролей на для входа на ваш сервер или сайт.. почитайте
__________________
|
22.02.2014, 21:32 | #10 |
Добрый модератор
Регистрация: 09.07.2007
Адрес: глобус Украины
Сообщений: 27,600
Вес репутации: 1024
|
+100500 за fail2ban
__________________
Правильный хостинг. В личке бесплатно не отвечаю обычно. |
Опции темы | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
поиск провайдера по IP адресу | Jimi Dini | Курилка | 4 | 02.01.2011 18:07 |
Простой способ немножко поднять ТИЦ | seo-ser | Вопросы от новичков | 14 | 23.03.2009 19:11 |
Простой способ выявления слиперов. | 9dVSnVN6 | Вопросы по работе системы | 4 | 31.07.2008 11:10 |
Часовой пояс GMT +3, время: 13:13.