Обмеження швидкості з 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
    

Чи означає це, що ставка ніколи не може бути встановлена?
Том

2
Не обійшлося без злому джерела, принаймні не для UFW 0.30pre1-0ubuntu2, який є актуальним для Ubuntu 10.04. З погляду речей у поточному джерелі це не змінилося. Однак ви можете помістити правила iptables в /etc/ufw/after.rules (або /etc/ufw/before.rules), і вони також будуть використовуватися. Див людина UFW-рамка для отримання додаткової інформації.
бонсайвінг

@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.


1

Варто вказати на можливі ненавмисні наслідки використання функції LIMIT ufw.

Припустимо, один розмістив ковдру на порту 22 / tcp як перше правило ufw:

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

з припущенням, що будь-які з'єднання, що працюють під обмеженням, все-таки можуть бути відфільтровані, дотримуючись правил ufw і, нарешті, політики за замовчуванням "відхилити (вхід)".

Принаймні, для ufw 0,35, це припущення було б неправильним. Насправді логіка LIMIT IN негайно приймає будь-які дані, не відхилені критерієм границь.

У psuedocode логіка LIMIT є

if CONDITION then DENY else ACCEPT

тоді як інші правила ufw мають логіку:

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

Я особисто виявив, що це несподівана поведінка для ufw LIMIT, яку я виявив лише несподівано виявивши багато спроб входу в порт 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.