Вот кусок целиком, не помню где-то выдрал:
###[ syn-flood chain 4 detecting DOS attaks ]---------------------------------------
iptables -t mangle -N syn-flood
## Limit in 24 connections per sec, max allowed - 48
iptables -t mangle -A syn-flood -m limit --limit 24/s --limit-burst 48 -j RETURN
iptables -t mangle -A syn-flood \
-m limit --limit 10/s --limit-burst 10 -j LOG \
--log-prefix "IPT: DOS (dropped): "
iptables -t mangle -A syn-flood -j DROP
###[ end of syn-flood ]==============================================================
###[ hach_scan shain ]---------------------------------------------------------------
iptables -t filter -N hack_scan
## nmap -sS (Scan: SYN+ACK = no defense... )
## nmap -sX (Scan: SYN+ACK+FIN+RST [+PSH+URG] = not implemented in TCP)
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
--tcp-flags SYN,ACK,FIN,RST ALL \
-j LOG --log-prefix "IPT: Scan: SYN+ACK+FIN+RST: "
# -m limit --limit 10/minute --limit-burst 10 \
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
--tcp-flags SYN,ACK,FIN,RST ALL \
-j REJECT --reject-with tcp-reset
## nmap -sN (Scan: none of any flags = not implemented in TCP)
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
--tcp-flags SYN,ACK,FIN,RST NONE \
-m limit --limit 10/minute --limit-burst 10 \
-j LOG --log-prefix "IPT: Scan: empty flags: "
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
--tcp-flags SYN,ACK,FIN,RST NONE \
-j REJECT --reject-with tcp-reset
## nmap -sF (Scan: only FIN)
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
--tcp-flags SYN,ACK,FIN,RST FIN \
-m limit --limit 10/minute --limit-burst 10 \
-j LOG --log-prefix "IPT: Scan: only FIN: "
iptables -t filter -A hack_scan -p tcp -m state --state ! ESTABLISHED \
--tcp-flags SYN,ACK,FIN,RST FIN \
-j REJECT --reject-with tcp-reset
## NEW, not SYN
iptables -t filter -A hack_scan -p tcp ! --syn -m state --state NEW \
-m limit --limit 10/minute --limit-burst 10 \
-j LOG --log-prefix "IPT: NEW not SYN (rejected): "
iptables -t filter -A hack_scan -p tcp ! --syn -m state --state NEW \
-j REJECT --reject-with tcp-reset
###[ end of hach_scan chain ]==========================================================
### Check 4 DOS attack
iptables -t mangle -A PREROUTING -p tcp --syn -j syn-flood
### Check 4 port scanning
iptables -t filter -A INPUT -p ALL -j hack_scan
### Check 4 loopback spoofing
iptables -A INPUT -p ALL -i lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
iptables -A INPUT -p ALL -i ! lo -d 127.0.0.0/8 -j DROP
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.