В заметке приведены различные варианты защиты от bruteforce-атак, на примере блокирования последовательного подбора паролей через ssh.Общий шаблон правил
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROPiptables -A INPUT -p all -i lo -j ACCEPT
iptables -A OUTPUT -p all -o lo -j ACCEPTЗдесь будут наши правила (вариант)
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
++ Вариант 1, используя модуль recent:Добавляем ip в таблицу
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name BLOCK —setС одного ip разрешаем 2 (--hitcount 3-1) запроса на соединение (NEW) в минуту (60 секунд),
третье блокируется и все последующие в течении минуты
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name BLOCK --update --seconds 60 --rttl --hitcount 3 -j DROPРазрешаем входящие соединения на 22 порт
iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT
++ Вариант 2, используя модуль hashlimit:С одного ip разрешаем 2 запроса на соединение (NEW) в минуту (2/m) все остальные пакеты (NEW) c этого ip блокируется
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m hashlimit \
--hashlimit-name BLOCK --hashlimit-mode srcip --hashlimit-above 2/m --hashlimit-burst 2 -j DROPРазрешаем входящие соединения на 22 порт
iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT
++ Вариант 3, используя модули connlimit, limit:С одного ip разрешаем не больше одно соединения (! --connlimit-above 1) на 22 порт, пропускаем 2 пакета в минуту с запросом на соединение (NEW), все остальные пакеты (NEW) c этого ip блокируется
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m connlimit ! \
--connlimit-above 1 -m limit --limit 2/m --limit-burst 2 -j ACCEPT++ Вариант 4, параноидальный:
Два раза в течении минуты разрешено подключаться к 22 порту, при превышении порога ip блокируется на 10 минут.
блокируем ip с запросом на соединение (NEW) попавшие в динамически обновляемую таблицу на 600 секунд
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name BLOCK --rcheck --seconds 600 -j DROPС одного ip разрешаем 2 запроса на соединение (NEW) в минуту (2/m), если превышен порог,то добавляем ip в таблицу BLOCK для блокировки на 600 секунд (10 минут)
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m hashlimit \
--hashlimit-name BLOCK --hashlimit-mode srcip --hashlimit-above 2/m --hashlimit-burst 2 -m recent --name BLOCK --set -j DROPРазрешаем входящие соединения на 22 порт
iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPTURL: http://linux-online-ru.blogspot.com/2010/06/bruteforce-iptab...
Обсуждается: http://www.opennet.me/tips/info/2386.shtml
А вот скажите мне инженеры, какой ширины поток эти модули выдерживают?
ну если эти параметры потюнить то вероятно выдержитHASHSIZE = CONNTRACK_MAX / 8 = RAMSIZE (in bytes) / 131072 / (x / 32)
where x is the number of bits in a pointer (for example, 32 or 64 bits)net.ipv4.ip_conntrack_max = 524288
net.ipv4.netfilter.ip_conntrack_max = 524288
net.ipv4.netfilter.ip_conntrack_buckets = 65536пс: использую модуль string с порядка 60-ти проверками вроде норма нагрузка почти нулевая при 50 запросов в секунду
Можно потюнить, и малость разгрузить ...iptable -N TCP_TABLES;
iptable -N SSH_TABLES;iptables -A INPUT -p tcp -j TCP_TABLES;
iptables -I TCP_TABLES --dport 22 -j SSH_TABLES;...
и т.д.
...
кстате вот это значение net.ipv4.netfilter.ip_conntrack_max = 524288 (большущее) сбрасывается если iptables рестартовать и ставится дефолтовое.
>кстате вот это значение net.ipv4.netfilter.ip_conntrack_max = 524288 (большущее)
>сбрасывается если iptables рестартовать и ставится дефолтовое.Было бы подозрительнее обратное.
У меня на потоке 250 Мбит (400 Мбит если считать в обе стороны) загрузки от правила с recent практически не видно. Я помимо своих серверов, защищаю еще и внешние сервера от брутфорса ссх моими юзерами. Вот бы все так делали :)
250 mbit/sec трафика по SSH порту? или может быть 250 мегабит трафика зарпосов на открытие соединения по 22 порту?
он имеет ввиду общий траф
Ребята может подскажите что это может быть.
Обнуляю iptables, потом использую один из выше описаных методов. При этом начинают блокироватся абсолютно все пакеты хоть коннект и не превышает лимиты по блокировке.
Уже второй день трахаюсь с Iptables и вроде все правелньо, но почему то не работает.Заранее благодарен за ответ)