| Защита от bruteforce средствами iptables | [исправить] | 
| В заметке приведены различные варианты защиты от bruteforce-атак,   на примере
блокирования последовательного подбора паролей через ssh.
Общий шаблон правил
   iptables -P INPUT DROP
   iptables -P OUTPUT DROP
   iptables -P FORWARD DROP
   iptables -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 ACCEPT
 | 
|  | 
| 
 | 
 | | Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Пакетные фильтры и фаерволы / Пакетные фильтры в Linux: iptables, ipchains | 
| | 1.3, Миноша (?), 09:40, 10/06/2010  [ответить] [﹢﹢﹢] [ · · · ] | +/– |  | А вот скажите мне инженеры, какой ширины поток эти модули выдерживают? 
 |  |  | 
 
|  | | 2.4, Sw00p aka Jerom (?), 10:24, 10/06/2010 [^] [^^] [^^^] [ответить] | +/– |  |  ну если эти параметры потюнить то вероятно выдержит 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 запросов в секунду
 |  |  | 
 |  | | 3.5, pavlinux (ok), 21:04, 10/06/2010 [^] [^^] [^^^] [ответить] | +/– |  |  Можно потюнить, и малость разгрузить ... 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;
 ...
и т.д.
 ...
 
 |  |  | 
 |  | | 4.9, Sw00p aka Jerom (?), 11:16, 16/06/2010 [^] [^^] [^^^] [ответить] | +/– |  |  кстате вот это значение net.ipv4.netfilter.ip_conntrack_max = 524288 (большущее) сбрасывается если iptables рестартовать и ставится дефолтовое. 
 |  |  | 
 |  | | 5.10, pavlinux (ok), 15:40, 16/06/2010 [^] [^^] [^^^] [ответить] | +/– |  |  >кстате вот это значение net.ipv4.netfilter.ip_conntrack_max = 524288 (большущее) >сбрасывается если iptables рестартовать и ставится дефолтовое.
 Было бы подозрительнее обратное.
 |  |  | 
 | 
 | 
 | 
 | 2.6, Sokol (??), 20:20, 13/06/2010 [^] [^^] [^^^] [ответить] | +/– |  | У меня на потоке 250 Мбит (400 Мбит если считать в обе стороны) загрузки от правила с recent практически не видно. Я помимо своих серверов, защищаю еще и внешние сервера от брутфорса ссх моими юзерами. Вот бы все так делали :) 
 |  |  | 
 |  | | 3.7, barab (?), 16:06, 14/06/2010 [^] [^^] [^^^] [ответить] | +/– |  |  250 mbit/sec трафика по SSH порту? или может быть 250 мегабит трафика зарпосов на открытие соединения по 22 порту? 
 |  |  | 
 | 
 | 
 
 
 | 1.11, Андрей (??), 12:32, 02/10/2010  [ответить] [﹢﹢﹢] [ · · · ] | +/– |  |  Ребята может подскажите что это может быть. Обнуляю iptables, потом использую один из выше описаных методов. При этом начинают блокироватся абсолютно все пакеты хоть коннект и не превышает лимиты по блокировке.
 Уже второй день трахаюсь с Iptables и вроде все правелньо, но почему то не работает.
 Заранее благодарен за ответ)
 |  |  | 
 
 
 
 |