LINUX.ORG.RU

Iptables как настроить ограничение пакетов за единицу времени


1

2

Читаю книгу по Iptables так что я еще пока новичок. у меня стоит сервер на java , и его постоянно ложат пакетами с 1 -2 -10 адресов. Бывает и больше. Хотел узнать ваше мнение как лучше избавиться от флуда.

Пробовал (-m connlimit --connlimit ) почему то не получилось, хотя наверное это потому что я писал эти правила на роутере (DT-WRT) для цепочки FORWARD таблицы filter. ( Хотя проверял командой 'iptables -L' правила были прописаны.

iptables -I INPUT -p tcp --syn --dport 7777 -m connlimit --connlimit-above 5 -j DROP

iptables -I INPUT -p tcp --syn --dport 2106 -m connlimit --connlimit-above 5 -j DROP

затем пробовал

iptables -F INPUT # Очищаем цепочку INPUT

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Пропускаем все, что идет по уже установленным соединениям

# Вводим ограничения для новых подключений

iptables -A INPUT -m conntrack --ctstate NEW -p tcp -m multiport --dport 2106,7777 -m hashlimit --hashlimit-upto 5/min --hashlimit-mode srcip,dstport --hashlimit-name server -j ACCEPT

iptables -P INPUT DROP # Всех остальных не пускаем

( сомневался по поводу -j ACCEPT (может за одно объясните почему если пишут правило на ограничение 5 пакетов в минуту, то получается меньше 5 пакетов то пропускаем?а если больше то нет? ))

как написать что бы после 5 коннектов, не важно откуда давался бан на 5 минут. Или что то в этом роде.

Ответ на: комментарий от Hitray

Попробовал этот случай он помог.

# Создаем цепочку для проверки попыток соединений на защищаемый порт

iptables -N ssh_brute_check

# Если за последние 5 минут (300 секунд) с одного адреса было 3 или более новых соединений — блокируем этот адрес

iptables -A ssh_brute_check -m conntrack --ctstate NEW -m recent --update --seconds 300 --hitcount 3 -j DROP

# В противном случае — разрешаем, и при этом заносим в список

iptables -A ssh_brute_check -m recent --set -j ACCEPT iptables -F INPUT

# Очищаем цепочку INPUT

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

# Разрешаем пакеты по установленным соединениям # Все попытки открыть новое соединение по SSH направляем на проверку

iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 22 -j ssh_brute_check

Но вот с connlimit не получается. Я также отправляю в мою цепочку на проверку но такое ощущение что писал что не писал все равно конекты идут. Где ошибка ?

iptables -A FORWARD -p tcp --dport 7777 -m connlimit --connlimit-above 5 -j DROP

iptables -A FORWARD -p tcp --dport 7777 -j ACCEPT

Paulra ()
Ответ на: комментарий от anonymous

приведи пожалуйста пример . Я не понимаю к чему ты это написал и что значит -20 и это как ?

Paulra ()
Ответ на: комментарий от anonymous

как оно должно правильно быть написано чтобы не было много подключений ?

Paulra ()

connlimit ограничивает количество одновременных соединений с одного хоста (если не задана маска (--connlimit-mask). Вам нужно сначала разобраться от чего именно падает ваш сервер, может его зафлуживают не syn пакетами. Может ему нужно просто запретить принимать более, допустим, 10 коннектов в минуту (через limit).

Если же вам нужен ban на 5 мин, то в принципе вы думаете правильно, сначала проверку по списку в recent, а потом проверку по connlimit и если сработало правило connlimit, то заносить этот ip-адрес в список recent (через --set).

mky ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.