DDOS атака на VPS с VLESS+REALITY

Вот ещё бразильские братушки:

45.166.196.244
45.166.196.95
45.166.197.159
45.166.197.220
45.166.197.35
45.166.197.44
45.166.197.7
45.166.198.132
45.166.198.6
45.166.199.172
45.166.199.193
45.166.199.246
45.166.199.247
45.166.199.73

И все-таки совсем не блочится. У меня Debian с 3x-ui в Docker. Подскажите, плз, таблицы raw там, я так понимаю нет, и находил инфу, что используется nftables вместо iptables. Есть знатоки? =)

Так ведь правила iptables работают на всю систему, в том числе и на Docker, разве нет? По крайней мере у меня тоже Debian 12 с 3X-UI (правда без докера, не вижу особого смысла в его применении в моём случае) и правила iptables отрабатывают как надо. Да, в выводе всё равно будут видны запросы от заблоченных айпишников, но дальше iptables они не идут, соответственно лишний раз не нагружают ресурсы сервера (хоть и нагрузка там мизерная).

root@localhost:~# iptables -t raw -A PREROUTING -s 181.191.0.0/16 -j DROP

root@localhost:~# iptables -t raw -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  181-191-0-0.uplinkx.com.br/16  anywhere
root@localhost:~# sudo timeout 15s tcpdump -nq -f "port 443 and inbound and tcp[tcpflags] & (tcp-syn) != 0" | awk '{print $3}' | cut -d'.' -f1-4 | sort | uniq
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on ens1, link-type EN10MB (Ethernet), snapshot length 262144 bytes
20 packets captured
25 packets received by filter
0 packets dropped by kernel

181.191.40.10
181.191.40.138
181.191.40.158
181.191.41.70
181.191.43.166
181.191.43.238
181.191.43.76

Выглядит так, что не блочится, и жрет ресурсы CPU

Хм, а какой вывод даст эта комманда?

iptables -t raw -L -n -v

root@localhost:~# iptables -t raw -L -n -v

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 
 2761  144K DROP       0    --  *      *       181.191.0.0/16       0.0.0.0/0   

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination 

Я далеко не эксперт в таких делах, но вроде бы правило работает как надо:

 2761  144K DROP       0    --  *      *       181.191.0.0/16       0.0.0.0/0   

Расшифровка - ВХОДЯЩИЙ АДРЕС 181.191.0.0/16; ОТКЛОНЕНО: 2761 пакет, общим размером 144 килобайт

А следующее:

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)

Говорит о том, что никакой трафик из этой цепочки не прошёл дальше iptables.

Используйте input в таблице фильтров
iptables -A INPUT -s 181.191.0.0/16 -j DROP

Разве таблица FILTER не идёт после RAW? Просто кмк в случае RAW трафик будет блокироваться ещё раньше, тем самым минимально соприкасаясь с адресами в статусе DROP

Пробуй:
iptables -D INPUT -p tcp --syn -j syn_flood 2>/dev/null
iptables -F syn_flood 2>/dev/null
iptables -X syn_flood 2>/dev/null
iptables -N syn_flood
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --syn -j syn_flood
iptables -A syn_flood -m limit --limit 100/s --limit-burst 170 -j RETURN
iptables -A syn_flood -j DROP

Сделал максимум запросов 100 за 170 прыжков, и нагрузка на сервер заметно снизилась. Поправьте, если где-то накосячил

вы уверены что ваше правило вообще срабатывает? я не вижу в нём никакого смысла и только потенциальный вред. iptables -vnL

Вообще, да. Но похоже что у него действительно адреса блокируются. Просто в tcpdump поступают пакеты с интерфейса, а не с iptables, поэтому он их видит.

Если так, то печаль. Нагрузка на CPU не снизилась :slight_smile: Но спасибо за разъяснения :slight_smile:

какая у вас нагрузка от флуда 10 пакетов/сек? у меня почти нулевая

100% на CPU. Одно ядро с 2.0 MHz

что в top? в iptables сколько правил?
iptables -S
iptables -S -t nat
iptables -S -t raw
iptables -S -t mangle
может их там у вас слишком много, поэтому даже малейший флуд долбит цп в 100%

У него там докер, который создает простыню из цепочек iptables. А в докере 3x-ui :laughing:

я не про докер, тут на форуме кто-то выкладывал скрипт который банит все ip из AS, с ним можно получить несколько тысяч правил с которыми нагрузка на цп очень сильно возрастает, может у него что-то подобное

симулировал syn flood на ноут 2008г (sysbench cpu run выдаёт 350 events per second).
на атакующем компе hping3 -i u100 -S -p 80 192.168.1.1 выдаёт около 5000 пакетов/сек, нагрузка на ЦП ноута не превышает 15%.
hping3 -i u10 -S -p 80 192.168.1.1 выдаёт 10000 пакетов/сек, нагрузка на цп ноута ровно 50%.
5000 пакетов/сек это далеко от рекордных 120 пакетов/сек которые тут выкладывали DDOS атака на VPS с VLESS+REALITY - #44 by 0x99

на самой днищенской впс которая у меня есть sysbench cpu run выдаёт 600 events per second

Краткосрочные пики до 100%, потом падение до 0%

1157 root 20 0 1257540 57696 22656 S 27.0 6.3 143:31.92 xray-li+

root@localhost:~# iptables -S
iptables -S -t nat
iptables -S -t raw
iptables -S -t mangle
-P INPUT ACCEPT
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A INPUT -i lo -j ACCEPT
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-N DOCKER
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
-P PREROUTING ACCEPT
-P OUTPUT ACCEPT
-A PREROUTING -s 181.191.0.0/16 -j DROP
-A PREROUTING -s 177.93.0.0/16 -j DROP
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT


root@localhost:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere

Chain FORWARD (policy DROP)
target     prot opt source               destination
DOCKER-USER  all  --  anywhere             anywhere
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Chain DOCKER (1 references)
target     prot opt source               destination

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-ISOLATION-STAGE-2 (1 references)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere
RETURN     all  --  anywhere             anywhere

Chain DOCKER-USER (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere