Как я могу заблокировать все блоки IP класса C, когда они отправляют слишком много пакетов SYN на мой сервер человечности 12.04?
Пример того, что я вижу во время нападения лавинной рассылки SYN:
Каждый различный IP только отправляет 1 пакет SYN, таким образом, брандмауэр не блокирует его. Но диапазон 192.132.209.*
все вместе отправляют много пакетов SYN в очень маленький период времени.
Я нашел похожее решение. Не совсем то, что я хотел, но очень похоже:
/sbin/iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 20 --connlimit-mask 24 -j REJECT --reject-with tcp-reset
Ограничивает новые соединения tcp (порт 80) до 20 для блока класса C. Я нашел это здесь:
Пример: ограничения класса C
IP-адрес класса C: с 192.0.0.0 по 223.255.255.255.
В этом случае опция --connlimit-mask
должна быть 192.0.0.0/3
в нотации CIDR.
Если вы укажете маску 24, она будет применяться также к классам А и В. Вы должны использовать нотацию CIDR, чтобы точно указать класс.
--connlimit-mask 192.0.0.0/24
Взяв 10.0.0.0/24
в качестве примера, что-то вроде
iptables -A INPUT -p tcp -s 10.0.0.0/24 --syn -m limit --limit 1/s --limit-burst 3 -j RETURN
должно делать эту работу и достаточно информативно, так что я не думаю, что мне нужно объяснение Вот хорошая, легко читаемая статья о том, как предотвратить атаки TCP SYN: Linux Iptables Ограничить количество входящих атак tcp connection / syn-flood . Это объясняет больше о вариантах, и предоставляет более обширный способ (регистрация, отдельная цепочка и т. Д.).
Я не могу видеть текущее состояние вашего iptables
отсюда, поэтому вы можете добавить это вверху цепочки INPUT
или интегрировать его должным образом в ваши текущие сценарии.
В комментариях, которые вы упомянули, вы ищете автоматический способ обнаружения этих блоков IP. Что ж, я должен просто пропустить фильтр адреса источника в команде (-s 10.0.0.0/8
), чтобы ограничение распространялось на весь мир.