Возможно ли через iptables закрыть доступ произвольного ip по критерию?

12
venomius
На сайте с 20.02.2012
Offline
107
1151

Здравствуйте, подскажите возможно ли решение проблемы с помощью iptables. Как закрыть доступ произвольному ip обратившемуся (допустим) более N раз к одной странице (именно количества обращения к одной странице, обращения к различным страницам допустимы) за определенный интервал, допустим 10 минут? Естественно ip неизвестен и не имеет никакой привязки ни к стране, ни к чему.

LEOnidUKG
На сайте с 25.11.2006
Offline
1722
#1
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
venomius
На сайте с 20.02.2012
Offline
107
#2

Понимаю, что скорее всего такое невозможно, тогда, если было более N обращений к серверу за 10 минут, то дропать на промежуток некоторый времени.

rustelekom
На сайте с 20.04.2005
Offline
522
#3

Такие вещи обычно решают динамические фаерволлы. К примеру CSF Это для тех, кто не хочет разбираться в правилах iptables.

SSD VPS, SSD хостинг и выделенные серверы в Германии или РФ, FTP хранилища, регистрация доменов и SSL сертификаты ( https://www.robovps.biz/ ) Контакты: Telegram ( https://t.me/rustelekom_bot )
suffix
На сайте с 26.08.2010
Offline
325
#4
venomius:
Понимаю, что скорее всего такое невозможно, тогда, если было более N обращений к серверу за 10 минут, то дропать на промежуток некоторый времени.

Если я правильно помню такое возможно в связке modsecurity, fail2ban и iptables.

Для modsecurity пишите правило запрета N+1 посещению одной страницы подряд в нужный интервал времени.

А в fail2ban включаете парсинг error лога по признаку ModSecurity: Access denied with - ну и дальше с первого ли раза блокировать и на какое время попавшийся IP.

А уж fail2ban внесёт блокировку в iptables.

Клуб любителей хрюш (https://www.babai.ru)
D
На сайте с 28.06.2008
Offline
1101
#5

Я такое сделал bash скриптом паршу лог nginx каждые 5 минут, ip заносятсся в конфиг, который инклюдится в основной конфиг + релоад каждые пол часа

С
На сайте с 14.04.2011
Offline
63
#6

Dram

Зачем скриптом? Это делается средствами nginx.

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
location /{
limit_req zone=one burst=5;
}
}

http://nginx.org/ru/docs/http/ngx_http_limit_req_module.html

kxk
На сайте с 30.01.2005
Offline
970
kxk
#7

Сентябрь, Можно ещё парсить ип привысивших и банить:)

Ваш DEVOPS
D
На сайте с 28.06.2008
Offline
1101
#8

Сентябрь, читайте внимательно условия. ТС нужно банить ip обратившиеся более N раз, а не тормозить их. На голом Nginx такое не сделаешь, поэтому и нужен парсинг лога Nginx.

HB
На сайте с 02.10.2014
Offline
75
#9
Dram:
Сентябрь, читайте внимательно условия. ТС нужно банить ip обратившиеся более N раз, а не тормозить их. На голом Nginx такое не сделаешь, поэтому и нужен парсинг лога Nginx.

Парсить логи очень затратно для ресурсов. Если нет проблемы с парсингом, то и парсить не надо. Вероятно, там логов очень мало. А когда реально появится необходимость банить, то сервер загнется при попытке парсить файл или будет делать это очень долго.

Поэтому можно и средствами nginx делать тоже самое. В момент тормоза отправлять запрос какому-нибудь perl скрипту, куда передавать ip-адрес. И банить его.

С
На сайте с 14.04.2011
Offline
63
#10

Вот это ограничивает обращения с одного айпи адреса, на одно в секунду, последующие банятся.

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

Если так всё равно очень сложно, можно ещё проще.

http://nginx.org/ru/docs/http/ngx_http_limit_conn_module.html#limit_conn

location / {

limit_conn addr 1;
}

Парсить ничего не надо.

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий