Nftables
Перейти до навігації
Перейти до пошуку
Зміст
- 1 nft DDoS Protection for VPS
- 1.1 1: Drop invalid packets
- 1.2 2: Drop TCP packets that are new and are not SYN
- 1.3 3: Drop SYN packets with suspicious MSS value
- 1.4 4: Block packets with bogus TCP flags
- 1.5 5: Block spoofed packets
- 1.6 6: Drop ICMP (you usually don't need this protocol)
- 1.7 7: Drop fragments in all chains
- 1.8 8: Limit connections per source IP
- 1.9 9: Limit RST packets
- 1.10 10: Limit new TCP connections per second per source IP
- 1.11 11: Use SYNPROXY on all ports (disables connection limiting rule)
- 1.12 SSH brute-force protection
- 1.13 Protection against port scanning
nft DDoS Protection for VPS
1: Drop invalid packets
table ip filter {
chain prerouting {
type filter hook prerouting priority 0; policy accept;
# Це правило видаляє пакети, що мають некоректний стан з'єднання, що визначається модулем `conntrack` як `INVALID`. Такі пакети можуть бути ознакою атаки або помилки в мережі.
ct state invalid drop comment "Drop invalid packets"
}
}
2: Drop TCP packets that are new and are not SYN
table ip filter {
chain prerouting {
type filter hook prerouting priority 0; policy accept;
# Це правило видаляє нові TCP пакети, які не мають прапора SYN. Це допомагає захиститися від певних типів атак, таких як спуфінг TCP з'єднань.
tcp flags & (syn | ack | fin | rst) != syn ct state new drop comment "Drop TCP packets that are new and are not SYN"
}
}
3: Drop SYN packets with suspicious MSS value
table ip filter {
chain prerouting {
type filter hook prerouting priority 0; policy accept;
# Це правило видаляє нові SYN пакети з підозрілим значенням MSS (Maximum Segment Size). Це захист від деяких видів атак, які використовують некоректні MSS значення.
tcp flags syn ct state new tcp option maxseg size != 536-65535 drop comment "Drop SYN packets with suspicious MSS value"
}
}
4: Block packets with bogus TCP flags
table ip filter {
chain prerouting {
type filter hook prerouting priority 0; policy accept;
# Цей набір правил видаляє TCP пакети з некоректними або підозрілими комбінаціями прапорів, що допомагає захиститися від різних типів атак.
tcp flags fin,syn,rst,psh,ack,urg == 0x00 drop comment "Block packets with bogus TCP flags"
tcp flags fin,syn == fin,syn drop
tcp flags syn,rst == syn,rst drop
tcp flags syn,fin == syn,fin drop
tcp flags fin,rst == fin,rst drop
tcp flags fin,ack == fin drop
tcp flags ack,urg == urg drop
tcp flags ack,fin == fin drop
tcp flags ack,psh == psh drop
tcp flags all == all drop
tcp flags all == 0x00 drop
tcp flags all == fin,psh,urg drop
tcp flags all == syn,fin,psh,urg drop
tcp flags all == syn,rst,ack,fin,urg drop
}
}
5: Block spoofed packets
table ip filter {
chain prerouting {
type filter hook prerouting priority 0; policy accept;
# Цей набір правил видаляє пакети з підробленими IP-адресами, які не повинні з'являтися в Інтернеті. Це допомагає захиститися від IP-спуфінгу.
ip saddr 224.0.0.0/3 drop comment "Block spoofed packets"
ip saddr 169.254.0.0/16 drop
ip saddr 172.16.0.0/12 drop
ip saddr 192.0.2.0/24 drop
ip saddr 192.168.0.0/16 drop
ip saddr 10.0.0.0/8 drop
ip saddr 0.0.0.0/8 drop
ip saddr 240.0.0.0/5 drop
ip saddr 127.0.0.0/8 ip daddr != 127.0.0.0/8 drop
}
}
6: Drop ICMP (you usually don't need this protocol)
table ip filter {
chain prerouting {
type filter hook prerouting priority 0; policy accept;
# Це правило видаляє всі ICMP пакети. Хоча це може допомогти зменшити поверхню атаки, варто бути обережним, оскільки ICMP використовується для важливих мережевих функцій, таких як діагностика.
ip protocol icmp drop comment "Drop ICMP"
}
}
7: Drop fragments in all chains
table ip filter {
chain prerouting {
type filter hook prerouting priority 0; policy accept;
# Це правило видаляє фрагментовані пакети. Фрагментація іноді використовується в атаках для обходу фільтрації пакетів.
ip frag-off & 0x1fff != 0 drop comment "Drop fragments in all chains"
}
}
8: Limit connections per source IP
table ip filter {
chain input {
type filter hook input priority 0; policy accept;
# Це правило обмежує кількість з'єднань з однієї IP-адреси до 111. Це допомагає захиститися від DoS-атак.
ip protocol tcp ct count over 111 reject with tcp reset comment "Limit connections per source IP"
}
}
9: Limit RST packets
table ip filter {
chain input {
type filter hook input priority 0; policy accept;
# Ці правила обмежують кількість RST пакетів, що можуть бути відправлені за секунду. Це захищає від RST-флуду, який може розривати TCP-з'єднання.
limit rate 2/second burst 2 tcp flags rst accept comment "Limit RST packets"
tcp flags rst drop
}
}
10: Limit new TCP connections per second per source IP
table ip filter {
chain input {
type filter hook input priority 0; policy accept;
# Ці правила обмежують кількість нових TCP-з'єднань, які можуть бути встановлені за секунду з однієї IP-адреси. Це допомагає захиститися від спроб перевантаження сервера новими з'єднаннями.
limit rate 60/second burst 20 tcp flags syn ct state new accept comment "Limit new TCP connections per second per source IP"
tcp flags syn ct state new drop
}
}
11: Use SYNPROXY on all ports (disables connection limiting rule)
table ip filter {
chain raw_prerouting {
type filter hook prerouting priority -300; policy accept;
# Ці правила використовують SYNPROXY для захисту від SYN-флуду. SYNPROXY обробляє SYN-запити перед передачею їх на сервер.
tcp flags syn ct state new synproxy
}
chain input {
type filter hook input priority 0; policy accept;
# Це правило видаляє пакети, що мають некоректний стан з'єднання, що визначається модулем `conntrack` як `INVALID`. Такі пакети можуть бути ознакою атаки або помилки в мережі.
ct state invalid drop comment "Drop invalid packets"
}
}
SSH brute-force protection
table ip filter {
chain input {
type filter hook input priority 0; policy accept;
# Ці правила захищають від грубої сили атаки на SSH, обмежуючи кількість нових з'єднань до 10 за 60 секунд.
tcp dport ssh ct state new recent name ssh_brute force set
tcp dport ssh ct state new recent name ssh_brute force update seconds 60 hitcount 10 drop comment "SSH brute-force protection"
}
}
Protection against port scanning
table ip filter {
chain port_scanning {
type filter hook input priority 0; policy accept;
# Ці правила захищають від сканування портів, обмежуючи кількість RST пакетів.
tcp flags rst limit rate 1/second burst 2 return comment "Protection against port scanning"
drop
}
chain input {
type filter hook input priority 0; policy accept;
jump port_scanning
}
}