Назад | Перейти на главную страницу

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

Я использую iptables на сервере Ubuntu. Это веб-сервер на 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-адреса могут быть подделаны. Как их правильно ограничить?
Для этого добавлен еще один вопрос:
https://serverfault.com/questions/340258/how-to-rate-limit-spoofed-ips-with-iptables

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

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

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

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

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

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

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

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

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

-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

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

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

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

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

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

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