Firewall и анти-DDoS
Iptables/nftables, hashlimit, ipset, XDP, fail2ban.
3.1 hashlimit + xt_recent (лимитируем подключения к 443) — дословно 30.06.26
apt-get update
DEBIAN_FRONTEND=noninteractive apt-get install -y iptables-persistent
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m recent --name blocked --rcheck --seconds 600 -j DROP
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -m hashlimit \
--hashlimit-upto 10/minute --hashlimit-burst 60 \
--hashlimit-mode srcip --hashlimit-name mtproto_limit -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --name blocked --set -j DROP
netfilter-persistent saveВайтлист: iptables -I INPUT 1 -s 1.1.1.1 -p tcp --dport 443 -j ACCEPT
пруф; чек банов cat /proc/net/xt_recent/blocked; сброс echo / > /proc/net/xt_recent/blocked; время бана — в --rcheck --seconds
пруф.
3.2 Geo-block на ipset — дословно 10.05.26
#!/bin/bash
apt update
apt install -y ipset curl
command -v ipset >/dev/null 2>&1 || { echo "ipset не установлен!"; exit 1; }
ipset create geo_block hash:net maxelem 200000 -exist
MY_IP="YOUR_IP"
iptables -I INPUT -s $MY_IP -j ACCEPT
ipset flush geo_block
COUNTRIES="br za mx bd in ar co cn ve ec pk uz tn"
for country in $COUNTRIES; do
curl -s https://www.ipdeny.com/ipblocks/data/countries/${country}.zone | while read ip; do
ipset add geo_block $ip -exist
done
done
iptables -I INPUT -m set --match-set geo_block src -j DROP- Геоблок на ноду «только мобильные операторы» через UFW+ipset: ASN список мобильных РФ/БГ/КЗ в заметке пруф.
- Дефолт анти-DDoS: геоблок — «сразу блекхоллить не РФ»; при этом selectel/timeweb/yandex к ноде не могут подключиться — аккуратно пруф; геоблок не спасает от спуфа src пруф.
- Ограничение ноды только мобильными: дроп Wi-Fi с allowlist мобильных ASN, блоклист по traffic-guard, мягкая блокировка с задержкой 30 сек 10.05.26.
3.3 Анти-скан скрипт (ban сканеров nmap/zmap) — дословно 07.05.26
apt install ipset iptables-persistent netfilter-persistent -y
ipset create autoban hash:net maxelem 65536
wget https://raw.githubusercontent.com/tread-lightly/CyberOK_Skipa_ips/refs/heads/main/lists/skipa_cidr.txt
while read subnet; do
ipset add autoban $subnet
done < skipa_cidr.txt
iptables -I INPUT -m set --match-set autoban src -j DROP
iptables -I FORWARD -m set --match-set autoban src -j DROP
ipset save > /etc/ipset.conf
iptables-save > /etc/iptables/rules.v4- Сканеры РКН/ГРЧЦ: censys ASN долбит вебхуки пруф; топ сканеров — CMU_GRCHC (AS61280), GIR_SER-NET (AS207713) пруф; traffic-guard банит подсети ГРЧЦ/РКН («Атак отбито: 26023 за полтора суток») пруф; список IP сканеров: github.com/tread-lightly/CyberOK_Skipa_ips пруф.
- UFW-закрытие почтовых портов на нодах (спам через ноду, IP в блэклистах) пруф:
ufw deny out 25/tcp && ufw deny out 465/tcp && ufw deny out 587/tcp && ufw deny out 110/tcp && ufw deny out 995/tcp && ufw deny out 143/tcp && ufw deny out 993/tcp && ufw deny in 25/tcp && ufw deny in 465/tcp && ufw deny in 587/tcp && ufw deny in 110/tcp && ufw deny in 995/tcp && ufw deny in 143/tcp && ufw deny in 993/tcpsudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -m string --algo bm --string "POST" -j DROP- Блок QUIC/UDP 443 (правило xray) 02.07.26:
{ "port": 443, "type": "field", "network": "udp", "outboundTag": "block" }«Браузеры лезут по QUIC; заблокируешь QUIC → откат на TCP/HTTP2: стабильнее, роутинг точнее. Минус: отключается HTTP/3» пруф; контраргумент: по UDP ютуб быстрее пруф.
- youtubeUnblock на ру-ноде 10.11.25:
cd /opt && git clone https://github.com/Waujito/youtubeUnblock.git && cd /opt/youtubeUnblock
sudo apt install autoconf automake autotools-dev libtool pkg-config
sudo modprobe nfnetlink_queue
sudo iptables -t mangle -N YOUTUBEUNBLOCK
sudo iptables -t mangle -A YOUTUBEUNBLOCK -p tcp --dport 443 -m connbytes --connbytes-dir original --connbytes-mode packets --connbytes 0:19 -j NFQUEUE --queue-num 537 --queue-bypass
sudo iptables -t mangle -A YOUTUBEUNBLOCK -p udp -m connbytes --connbytes-dir original --connbytes-mode packets --connbytes 0:8 -j NFQUEUE --queue-num 537 --queue-bypass
sudo iptables -t mangle -A POSTROUTING -j YOUTUBEUNBLOCK
sudo iptables -I OUTPUT -m mark --mark 32768/32768 -j ACCEPT
make && sudo systemctl start youtubeUnblock3.4 XDP
- XDP-фильтр на ноде: все порты кроме 443/22/1488 DROP; 443 — только RU ISP; 22 — только свой IP; 1488 (порт нода-панель) — только IP панели. Режим native лучший, generic лучше nftables/iptables; зависит от ядра и сетевухи. Для UDP — SYN cookies; против спуфинга source IP XDP особо не помог 29.07.26.
- Массовая классификация ASN (AS1–AS216475, 4 млрд IP отсканировано): правило «из РФ ISP/MOB — ALLOW, остальное DROP»; для экспатов — обратная логика на отдельных нодах 29.07.26.
- На ноды анти-DDoS бесполезен — «достаточно панели (и кабинета) с анти-DDoS» пруф; DROP не-РФ XDP бесполезен против залива/спуфа пруф.
- Спуфинг: TCP SYN не требует своего IP в source; провайдер без BCP 38 позволяет подмену; сервер никогда не установит соединение со спуф-IP; XDP «все РФ ESTABLISH, остальное DROP» валится от спуфа пруф. Амплитудные атаки зарезаны провайдерами: NTP monlist, DNS ANY, SNMP, Chargen/QOTD/SSDP, Memcached — остались прямые SYN/ACK/RST спуфинг и UDP флуд 11.08.26.
3.5 fail2ban / crowdsec / traffic-guard / анти-DDoS-продукты
- fail2ban: «за 6 часов забанил 100 айпишников» — норм для панели; SSH-порт менять, вход по ключу пруф. Решала v3.045 Fail2Ban 2.0: дерево статуса, синхронизация с UFW, Geo-Block ipset в before.rules (экономия CPU) пруф.
- CrowdSec:
apt crowdsec + firewall-bouncer-iptables, вайтлист/etc/crowdsec/parsers/s02-enrich/whitelist.yaml, занимает 8080 (менять) пруф; CrowdSec > fail2ban, но панель некрасивая пруф; CrowdSec на всех серверах пруф; multi-server конфиги: github.com/thegrayfoxxx/configs (crowdsec, Traffic Guard списки черезcscli decisions import) пруф. - TrafficGuard (dotX12): блокировка IP сканеров на уровне iptables до сервисов; авто-инсталлер DonMatteoVPN/TrafficGuard-auto → команда
rknpidorпруф; списки github.com/shadow-netlab/traffic-guard-lists пруф. - nDPI + Suricata скрипт (закрытый код!): L1 nDPI режет P2P, L2 Suricata ловит трекеры; 12 нод, DROP ~1 млрд пакетов за 2 недели пруф; критика — зашифрованный shell пруф.
- Цены защиты (дословно) 07.08.26:
Ddos-Guard - от 48к руб/мес
Stormwall - от 80$
Mitelis - от 25$
Turtle - от 10$
Alibaba - freeМеханика защиты mitelis.net: SYN-auth, атака 143k RPS → пик 5.78M RPS, TCP RST challenge + adaptive defense (включается через 15 сек) пруф; TCP RST challenge работает до HTTP, у юзеров сайт открывается со второй попытки пруф.
- DDoS-факты: SYN-flood фаерволом не отразить, если пакетов больше, чем канал — только транзитная скрабка пруф; средняя атака ~10 Гбит при 17к онлайне пруф; «Иван» 31.07: 2×50 Гбит на UDP 443, спуфинг с миллионами IP пруф; выше 100 Гбит/с не выстоять, какая бы защита ни была пруф; ботнет 20 Гбит TCP SYN flood с 220k адресов пруф; типовая ёмкость ботнет-защиты сабки до 8 Тб, pletx приняла L7 на 1.5 Тбит/с пруф; «дедик+защита от хостера+миксование впсок» — рабочая защита; дефолт-метод атаки TCP SYN flood пруф.
- Механика атаки через сим-пулы (Т2): авиарежим → новый IP, 2 запроса с IP, релоуд; ~200k pps; сбор IP не завершающих handshake + жалоба в abuse оператора (бан симок) пруф.