LINUX.ORG.RU

iptables как ограничить запросы к серверу и добавить фильтр?

 


0

2

Добрый день всем. Я дно. Уже сутки изучаю фаервол iptables и никак не могу составить простейшие правила. Что требуется:

1. Ограничить количество одновременных запросов к серверу (по всем портам) с 1 ip за секунду > 40 запросов. 2. Добавить в фильтр ip и диапазон ипышников чтоб их запросы не считал.

Всё что я смог найти:

iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 40 --connlimit-mask 24 -j DROP

iptables -A INPUT -p tcp --dport 7777 -s 127.0.0.1 -j ACCEPT 

Кто поможет собрать что блокировал все порты и добавить в фильтр ip и диапазон ip то-же не допёр.

Не совсем понятно, что значит «Ограничить ... за секунду > 40 запросов», если это не более 40 запросов в секунду, то это ″-m hashlimit --hashlimit-mode srcip --hashlimit-upto 40/second -j ACCEPT″. Понятно, что соединение это ″-m conntrack --ctstate NEW″.

Возможно, что ″--hashlimit-upto″ не будет работать и нужно будет писать ″--hashlimit-above 40/second -j DROP″, а перед ним:

iptables -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Неправильно работает модуль hashlimit iptables (комментарий)

Что касается

Добавить в фильтр ip и диапазон ипышников чтоб их запросы не считал.

Это просто отдельное правило (правила) перед правилом с hashlimit, которые делают ″-j ACCEPT″ или ″-j RETURN″ для пакетов с заданным src ip адресом.

mky ★★★★★
()
Ответ на: комментарий от mky

ябадабаду

А мне выдало мол нужен модуль connlimit. Опять придётся... Ваш вариант попробую, спасибо!

Просто искал способ ограничить флуд, дос на порты, а то по 100+ запросов захерачат.

rootsasiska
() автор топика
19 июля 2016 г.

Когда-то на основе примера использования xt_recent в iptables (Limiting brute-force attacks with IPTables) сделал блокировку агрессивных хостов, считайте, что нищебродский anti-DDoS.

Прилагаю свой допиленный вариант:

# перезагружаем модуль xt_recent с оптимизированными под большую нагрузку параметрами
rmmod xt_recent
modprobe xt_recent ip_list_tot=5000 ip_pkt_list_tot=250

# цепочка фильтрации HTTP
iptables -N http
# траффик для установленных подключений принимается без проверки
iptables -A http -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# блокировка хоста действует 3600 секунд
iptables -A http -m recent --update --seconds 3600 --name BANNED --rsource -j DROP
# новые подключения проверяются
iptables -A http -m conntrack --ctstate NEW -j trusted_http
iptables -A http -m conntrack --ctstate NEW -j sanitize

# цепочка исключения доверенных хостов
iptables -N trusted_http
iptables -A trusted_http -s 1.1.1.0/24 -j ACCEPT

# цепочка определения нормального траффика
iptables -N sanitize
iptables -A sanitize -m recent --set --name attackers
# если количество новых подключений с одного хоста превышает 250 за 10 секунд, то переходим к цепочке log_and_drop
iptables -A sanitize -m recent --update --seconds 10 --hitcount 250 --name attackers --rsource -j log_and_drop
# всё остальное разрешаем
iptables -A sanitize -j ACCEPT

# цепочка логирования и блокировки
iptables -N log_and_drop
iptables -A log_and_drop -m limit --limit 1/min -j LOG --log-prefix "too aggressive host: " --log-level 7
iptables -A log_and_drop -m recent --set --name BANNED --rsource -j DROP

# точка отправления траффика на проверку: нелокальные TCP SYN запросы на 80 порт отправляем в цепочку http
iptables -A INPUT -p tcp --syn --dport 80 ! -i lo -j http
frozen_twilight ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.