Я использую 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. очевидно, что он будет работать только в том случае, если вы сможете надежно отличить «приоритетный или административный» трафик от остального при настройке соединения - например, если он поступает через другой сетевой интерфейс.
В других случаях это скорее снизит отказоустойчивость вашей системы, чем повысит ее.
Проблема с -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-соединение.