Вернуться   Форум SAPE.RU > Другое > Курилка

-->
Ответ
 
Опции темы
Старый 22.02.2014, 18:51   #1
Новичок
 
Аватар для masa
 
Регистрация: 25.11.2008
Адрес: Cuba
Сообщений: 79
Вес репутации: 189
masa - весьма и весьма положительная личностьmasa - весьма и весьма положительная личность
По умолчанию Блокировать по ip-адресу. Простой способ

Здравствуйте. Есть веб-сервер nginx+apche на FreeBSD. Неоднократно сталкиваюсь с ситуацией когда с одного ip-адреса поступает очень много запросов. По десять запросов в секунду и так на протяжении пяти минут. После чего сервер ложиться.

Как сделать так, чтобы Nginx или Apache или ФаерВолл FreeBSD блокировал этот ip-адрес? И больше не обрабатывал запросы от этого айпишника.
masa вне форума   Ответить с цитированием
Старый 22.02.2014, 19:11   #2
Эксперт
 
Аватар для SergejF
 
Регистрация: 17.02.2008
Адрес: Донецк, ДНР
Сообщений: 8,880
Вес репутации: 502
SergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущее
По умолчанию

Добавьте строчку

deny from 1.1.1.1

в файл .htaccess. Естественно, вместо единичек - ip адрес, которых хотите заблокировать.
SergejF вне форума   Ответить с цитированием
Старый 22.02.2014, 19:24   #3
Новичок
 
Аватар для masa
 
Регистрация: 25.11.2008
Адрес: Cuba
Сообщений: 79
Вес репутации: 189
masa - весьма и весьма положительная личностьmasa - весьма и весьма положительная личность
По умолчанию

Спасибо. Но этим способом уже научился пользоваться

Я имею ввиду. Как автоматически блокировать ip-шники?
Так называемые "скрипт-кидди" запускают скрипт со своего компьютера. И к сайту идет куча get-запросов, к одной и той же веб-странице.

Думаю есть весьма простой способ автоматической блокировки. Возможно есть некой ПО.

Добавлено через 2 минуты
Вот нашел такую программку Bruteblock - она блокируют тех кто пытается подобрать пароль. Может кому пригодиться. Но мне, она не поможет.

Последний раз редактировалось masa; 22.02.2014 в 19:24. Причина: Добавлено сообщение
masa вне форума   Ответить с цитированием
Старый 22.02.2014, 19:26   #4
Эксперт
 
Аватар для SergejF
 
Регистрация: 17.02.2008
Адрес: Донецк, ДНР
Сообщений: 8,880
Вес репутации: 502
SergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущееSergejF - прекрасное будущее
По умолчанию

Посмотрите эту тему: http://forum.sape.ru/showthread.php?t=90226
SergejF вне форума   Ответить с цитированием
Старый 22.02.2014, 19:35   #5
Мастер
 
Регистрация: 17.07.2012
Адрес: Москва
Сообщений: 815
Вес репутации: 194
qkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущее
По умолчанию

У меня лично на эту тему написан собственный скрипт, который запускается раз в 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
в /etc/crontab :
*/5 * * * * root /root/deny_table >/dev/null 2>&1

Про эффективность - данный скрипт позволил выдержать DDOS атаку со стороны буйных укров на сайт евразийского союза молодёжи, когда активисты оного союза спилили ножовкой "вилку" на горе Говерла и очень на эту тему гордились.

Последний раз редактировалось qkowlew; 22.02.2014 в 19:43.
qkowlew вне форума   Ответить с цитированием
Старый 22.02.2014, 19:50   #6
Новичок
 
Аватар для masa
 
Регистрация: 25.11.2008
Адрес: Cuba
Сообщений: 79
Вес репутации: 189
masa - весьма и весьма положительная личностьmasa - весьма и весьма положительная личность
По умолчанию

Этот листинг мне нравится.
Глупый вопрос. Но куда этот скрипт нужно добавить? Как им пользоваться?

Добавлено через 6 минут
Эту строчку */5 * * * * root /root/deny_table >/dev/null 2>&1 нужно добавить в файл /etc/crontab ?

А где расположить сам скрипт?

Последний раз редактировалось masa; 22.02.2014 в 19:50. Причина: Добавлено сообщение
masa вне форума   Ответить с цитированием
Старый 22.02.2014, 19:59   #7
Мастер
 
Регистрация: 17.07.2012
Адрес: Москва
Сообщений: 815
Вес репутации: 194
qkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущееqkowlew - прекрасное будущее
По умолчанию

Цитата:
Сообщение от masa Посмотреть сообщение
Этот листинг мне нравится.
Глупый вопрос. Но куда этот скрипт нужно добавить? Как им пользоваться?
Речь о FreeBSD 7+. Условия работы скрипта:
1. в /etc/rc.conf:
Код:
firewall_enable="YES"
firewall_type="OPEN"
2. Заведите себе в правилах файрволла белый список и ОБЯЗАТЕЛЬНО пропишите в него "свои" IP чтобы случайно не забанить себя самого этим (или другим) скриптом! И пропишите ему номер правила меньше того, что в скрипте.

Если у тебя там 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
qkowlew вне форума   Ответить с цитированием
Старый 22.02.2014, 20:13   #8
Новичок
 
Аватар для masa
 
Регистрация: 25.11.2008
Адрес: Cuba
Сообщений: 79
Вес репутации: 189
masa - весьма и весьма положительная личностьmasa - весьма и весьма положительная личность
По умолчанию

Спасибо. Буду пробывать.
masa вне форума   Ответить с цитированием
Старый 22.02.2014, 21:08   #9
Мастер
 
Регистрация: 14.10.2011
Сообщений: 550
Вес репутации: 168
fsb-sasha - это имя известно всемfsb-sasha - это имя известно всемfsb-sasha - это имя известно всемfsb-sasha - это имя известно всемfsb-sasha - это имя известно всемfsb-sasha - это имя известно всем
По умолчанию

Я на своих серверах использую fail2ban
возможность блокировать айпи с которого идет много обращений к Апачу, ,фтп, портам и много другого... можно выставить вечный бан - а можно на определенное время.. очень гласная штука при переборе паролей на для входа на ваш сервер или сайт.. почитайте
__________________
)) там парам парам
fsb-sasha вне форума   Ответить с цитированием
Старый 22.02.2014, 21:32   #10
Добрый модератор
 
Аватар для zhegloff
 
Регистрация: 09.07.2007
Адрес: глобус Украины
Сообщений: 27,600
Вес репутации: 1024
zhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущееzhegloff - прекрасное будущее
По умолчанию

+100500 за fail2ban
__________________
Установка кода сапы от $9.95. Пишите в личку.
Правильный хостинг.
В личке бесплатно не отвечаю обычно.
zhegloff вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск провайдера по 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.