Кто-то засыпает меня случайными пакетами на случайные закрытые порты.
Мой сервер отвечает на это пакетами tcp-reset, я думаю, что тоже снижает исходящую пропускную способность.
Как использовать iptables для блокировки пакетов tcp-reset?
В DROP
цель - это то, что вам нужно.
Если у вас есть только один ящик, и никакие другие машины в вашей сети не подключаются к нему, вам может сойти с рук блокировка всех RESET
пакеты.
-A OUTPUT -p tcp --tcp-flags RST RST -j DROP
Видеть фильтрация пакетов-HOWTO-7 для подробностей
Это не очень вежливо по отношению к законным соединениям, если вы случайно не работаете, и это может вызвать ненужные тайм-ауты в установленных соединениях, которые должны использовать RESET
пакет. Это не лучшая идея для постоянного использования, но если она позволяет вам справляться с DDoS-атаками, то временно все должно быть в порядке.
Если ваше обычное использование этого окна зависит от RESET
пакеты работают для обычных пользователей, и вы хотите заблокировать только RESET
пакеты для злоумышленника, вы захотите идентифицировать вредоносные пакеты, чтобы мы могли заблокировать только их.
Действительно ли эти пакеты случайны или все они имеют что-то общее?
-A INPUT -p tcp -j LOG
Если вы добавите LOG
в конце вашей конфигурации iptables, вы можете использовать этот журнал для анализа входящих пакетов, чтобы увидеть, есть ли шаблон. Вероятно, будет полезна диаграмма разброса номеров портов источника и назначения. Нанесение IP-адресов на карту IP-пространства может помочь идентифицировать вредоносные и безопасные диапазоны, хотя я подозреваю, что это с меньшей вероятностью даст полезные результаты. Будет полезно просто подсчитать количество атакующих IP-адресов. Если это достаточно мало, вы можете просто добавить их все в конфигурацию iptables.
Даже если вы не найдете шаблон, поскольку определенно существует шаблон, основанный на «слишком большом количестве пакетов сброса», вы можете создать правило fail2ban, которое добавит DROP
правило для любого IP-адреса, вызывающего более x RESET
пакетов за y секунд.
Вы можете использовать '-j DROP' вместо '-j REJECT --with-tcp-reset'.