Ограничение скорости с UFW: установка ограничений

22

На справочной странице UFW упоминается, что он может настроить ограничение скорости iptables для меня:

ufw поддерживает ограничение скорости соединения, что полезно для защиты от атак методом перебора. UFW будет запрещать соединения, если IP-адрес пытался инициировать 6 или более соединений в течение последних 30 секунд. См. Http://www.debian-administration.org/articles/187 для деталей. Типичное использование:

     ufw limit ssh/tcp

К сожалению, это вся документация, которую я смог найти. Я хотел бы придерживаться UFW, а не использовать более сложные команды iptables (чтобы не усложнять ситуацию).

Как бы я использовал ufw, чтобы ограничить весь входящий (поэтому не исходящий) трафик через порт 80 до 20 подключений за 30 секунд? Как отключить ограничение скорости для портов от 30000 до 30005? Ограничение скорости включено по умолчанию для всех портов?

Том
источник

Ответы:

21

UFW спроектирован так, чтобы быть «несложным», что в данном случае означает, что вы не имеете контроля над частотой, с которой соединения ограничены. Если вы хотите покопаться в исходном коде UFW для Python, вы можете узнать, как его настроить. Соответствующая информация (в моей системе Ubuntu 10.04) находится в/usr/share/pyshared/ufw/backend_iptables.py

Если оставить в стороне вопрос о сроках, то вот некоторые ответы на ваши быстрые вопросы в конце.

  1. Предполагая, что 10.10.10.0/24 - ваша локальная сеть, это применяет правило ограничения по умолчанию к входящему порту 80 / tcp:

    ufw limit proto tcp from any port 80 to 10.10.10.0/24
    
  2. и 3. Ограничение скорости не включено по умолчанию. Чтобы добавить его к каждому (целевому) порту, кроме требуемого диапазона, используйте это правило. Обратите внимание, что правила (даже с диапазонами) являются атомарными единицами и не могут быть разделены. Вы не можете, например, добавить правило для какого-либо порта, а затем delete(несуществующее) правило для определенного диапазона, чтобы удалить его. limitэто ufw defaultтоже неприемлемый аргумент .

    ufw limit from any to any port 0:29999,30006:65535
    
bonsaiviking
источник
Значит ли это, что ставка никогда не может быть установлена?
Том
2
Не без взлома исходного кода, по крайней мере, не для UFW 0.30pre1-0ubuntu2, который актуален для Ubuntu 10.04. Судя по тому, как выглядит текущий источник , это не изменилось. Однако вы можете поместить правила iptables в /etc/ufw/after.rules (или /etc/ufw/before.rules), и они также будут использоваться. Смотрите man ufw-framework для получения дополнительной информации.
Бонсайвинг
@bonsaiviking Это возможно iptable, если да, то iptable является бэкэндом UFW.
Nullpointer
6

Как уже упоминалось в предыдущем посте, вы можете настроить user.rules. Мне нужно ограничение скорости подключения SMTP до 12 подключений за 6 секунд. Я добавил правило, как показано ниже. Примечание: это добавляет правило ограничения, позволяющее 6 в 30 секунд по умолчанию

ufw limit smtp

и я отредактировал /lib/ufw/user.rules (я храню пользовательскую копию этого файла с множеством других настроек), как показано ниже ...

### tuple ### limit tcp 25 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --set
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --update --seconds 6 --hitcount 12 -j ufw-user-limit
-A ufw-user-input -p tcp --dport 25 -j ufw-user-limit-accept
Арул Сельван
источник
Я нашел user.rules в / etc / ufw
Отто Канеллис
5

ограничение скорости может быть изменено в файле правил ufw, который можно найти в /lib/ufw/user.rules. по умолчанию нет ограничений на все порты. Вы должны добавить каждый порт вручную или отредактировав файл user.rules.

cikuraku
источник
1

Стоит указать на возможные непредвиденные последствия использования функции LIMIT в UFW.

Предположим, что в качестве первого правила ufw было установлено общее ограничение для порта 22 / tcp:

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     LIMIT IN    Anywhere                  
...

с предположением, что любые соединения, работающие в рамках лимита, все еще могут быть отфильтрованы, следуя правилам ufw и, наконец, политике по умолчанию «deny (входящий)».

По крайней мере, для ufw 0.35 это предположение было бы неверным. Фактически логика LIMIT IN немедленно принимает любой вход, не отклоненный по критерию предела.

В psuedocode логика LIMIT имеет вид

if CONDITION then DENY else ACCEPT

тогда как другие правила UFW, кажется, имеют логику:

if CONDITION then (DENY|ACCEPT) else continue to next rule,

Лично я обнаружил, что это было неожиданное поведение для LIMIT ufw, которое я обнаружил только неожиданно, обнаружив много попыток входа на порт 22 в системном журнале, который никогда не должен был происходить из-за фильтрации по другим правилам ufw.

Детали подтверждения поведения

Соответствующие строки кода iptables, вставленные ufw, следующие:

-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT

Приведенный выше список может быть создан с

iptables -S | grep ufw-user-limit

Первые две строки являются последовательными, в ufw-user-inputкоторых можно подтвердить

iptables -S | grep ufw-user-input
Крейг Хикс
источник