Должен ли я ограничивать скорость пакетов с iptables?

8

Я использую iptables на Ubuntu Server. Это веб-сервер на VPS.
Я хотел бы знать, если я должен ограничить скорость пакетов. Если так, что я должен ограничить скорость? И я должен сделать это глобально или по IP-адресу?

Ссылка
я видел людей, предлагающих это:

# Limit packet traffic on a TCP or UDP port:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

# Limit established/related packet traffic:
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit $lim/s --limit-burst $lb -j ACCEPT

Вышеупомянутое, глобальное ограничение скорости не кажется очень полезным, по крайней мере для случаев, которые я могу вообразить. Есть ли какой-нибудь случай, когда я должен ограничить скорость в глобальном масштабе?
Я считаю, что ограничение скорости на IP обычно лучше:

# Add the IP to the list:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --set --name RATELIMITED
# Drop if exceeded limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -m recent --update --seconds $sec --hitcount $hc --rttl --name RATELIMITED -j DROP
# Accept if inside limit:
iptables -A INPUT -p $proto --destination-port $port --syn -m state --state NEW -j ACCEPT

Дополнительный вопрос: Удаленные IP-адреса могут быть подделаны. Как правильно их ограничить?
Для этого добавлен еще один вопрос:
/server/340258/how-to-rate-limit-spoofed-ips-with-iptables

Цель, которой
я пытаюсь снизить риск некоторых D / DoS-атак и общих злоупотреблений.

Связанный
Как я могу оценить ограничение SSH соединений с iptables?

PS : я только что открыл связанный вопрос только для ICMP, и он включает ограничение скорости для этого протокола: iptables | Типы ICMP: какие из них (потенциально) вредны?

ML--
источник

Ответы:

6

Ограничение скорости является не предупреждением, а скорее приглашением к DoS, особенно в представленной выше разновидности, где пакеты будут отбрасываться, если превышена определенная скорость неаутентифицированных пакетов без информации о состоянии. Поскольку каждый может подделывать пакеты (включая исходные IP-адреса) в этом состоянии соединения без особых усилий, возникнет новый вектор атаки DoS, использующий ваше средство ограничения скорости.

Как правило, ограничение скорости имеет смысл, только если у вас есть

  1. либо предсказуемый жесткий или мягкий предел соединения в вашей конфигурации
  2. установите ограничение скорости для общего трафика ниже этого предела, чтобы иметь возможность устанавливать подключения для приоритетного или административного трафика независимо от нагрузки

В то время как 1. часто бывает достаточно сложно определить, что даже беспокоит, 2. очевидно, будет работать только в том случае, если вы сможете надежно отличить «приоритетный или административный» трафик от остального при настройке соединения - например, если он проходит через другой сетевой интерфейс.

В других случаях это скорее уменьшит отказоустойчивость вашей системы, чем добавит к ней.

заместитель Wabbit
источник
Привет syneticon-DJ. Я понимаю и согласен с тем, что неправильно настроенный межсетевой экран является еще одним инструментом для атаки DoS. Спасибо за головы!
ML--
Ограничение скорости для каждого ip-порта или i-ip-порта также, по-видимому, имеет смысл при защите от легитимного трафика, который слишком велик для вашего сервера, но чей инициатор вряд ли воспользуется проблемой, о которой вы упомянули, скажем, злоупотребление Bingbot или Фейсбук боты.
Ян Лалинский
3

Проблема с -m limit - это ограничение всех пакетов TCP независимо от IP-адресов источника. Так что, если у вас есть низкое ограничение для пакетов синхронизации, таких как

-A INPUT -p tcp  --syn -m limit --limit 30/s --limit-burst 30 -j ACCEPT
-A INPUT -p tcp --syn -j DROP

только один клиент с командной строкой hping может отключить ваш сервер, отправив столько пакетов tcp с флагом SYN, потому что правило ограничения будет совпадать, и оно отбросит много пакетов независимо от IP-адресов источника. Лимит не имеет значения между хорошим трафиком и плохим трафиком. Это также снизит хороший входящий трафик.

hping может быть что-то вроде:

hping thetargetedhostip -p 80 -S -c 1000 -i u20000

Лучше использовать hashlimit, чтобы ограничить количество входящих TCP-соединений на IP-адрес . Следующее правило будет соответствовать, только если будет получено 30 пакетов в секунду, уменьшая количество авторизованных пакетов на IP до 15 пакетов в секунду.

-A INPUT -p tcp --syn -m hashlimit --hashlimit 15/s --hashlimit-burst 30 --hashlimit-mode srcip --hashlimit-srcmask 32 --hashlimit-name synattack -j ACCEPT 
-A INPUT -p tcp --syn -j DROP

На самом деле, я убежден, что многие серверы, которые сегодня отключены, используются не из-за нехватки ресурсов во время атаки, а из-за того, что модуль limit отбрасывает весь входящий трафик.

Николя Геренет
источник
1

Обычно я ограничиваю правила ограничения скорости серверами, которые я ожидаю иметь:

  • низкий объем ожидаемого трафика
  • услуги аутентификации

Например, страница входа в панель управления хостингом, POP3, IMAP, SSH и т. Д. Я обычно оставляю службы HTTP широко открытыми и блокирую их только в случае возникновения проблемы.

Вы не хотите отбрасывать хороший веб-трафик. Ссылка на slashdot может отправить вам тонны трафика, и с глобальными правилами вы можете не осознавать проблему.

Что касается поддельных IP-адресов, они не могут быть заблокированы с помощью этого метода и, как правило, не являются проблемой, поскольку эти правила в основном направлены на ограничение установленных соединений TCP. С поддельным IP-адресом TCP-соединение никогда не может быть установлено.

jeffatrackaid
источник
Привет jeffatrackaid, спасибо за ваш ответ! Я также склонен ограничивать скорость (глобально) этих типов услуг (SSH и т. Д.). Что касается HTTP-трафика, поэтому я не собираюсь применять глобальный лимит. В этом вопросе я ожидаю увидеть, есть ли случаи, когда ограничение на IP может быть интересным. Что касается поддельных IP-адресов (я открыл отдельный вопрос по этому вопросу), хотя соединения не могут быть установлены, существует вероятность DoS с использованием потока SYN. Мне по-прежнему интересно услышать, как это можно смягчить.
ML--