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

12
venomius
На сайте с 20.02.2012
Offline
67
1129

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

LEOnidUKG
На сайте с 25.11.2006
Offline
1554
#1
✅ Трастовых площадок под размещение статей и ссылок. Опыт 12 лет! ( https://searchengines.guru/ru/forum/675690 ) ⭐ Купить вечные трастовые ссылки для сайта ( https://getmanylinks.ru/?srh ) ⭐ Ускорение ваших сайтов (WP, Opencart и др.) + Настройка сервера ( https://searchengines.guru/ru/forum/997205 )
venomius
На сайте с 20.02.2012
Offline
67
#2

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

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

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

SSD KVM ВПС от 149 ₽ в Германии. SSD хостинг от 119 ₽ в Германии или России |Выделенные серверы в Европе, Азии, США и РФ (https://www.robovps.biz/) Контакты: Telegram чат (https://t.me/rustelekom_bot) или LiveChat на любом из наших сайтов.
suffix
На сайте с 26.08.2010
Offline
261
#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
980
#5

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

С
На сайте с 14.04.2011
Offline
62
#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

SyS Admin KxK
На сайте с 30.01.2005
Offline
986
#7

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

Купить вечный впс (https://ddosov.net/lifetime-vds)
D
На сайте с 28.06.2008
Offline
980
#8

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

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

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

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

С
На сайте с 14.04.2011
Offline
62
#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

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