Абе, пичове, нали с правилото:
-A INPUT -i eth0 -p tcp --syn -m limit --limit 25/s --limit-burst 35 -j ACCEPT
разрешава конекции по протокол TCP с честота 25 в секунда, без да е указано на кой порт става това.
Не виждам къде в таблицата се указва достъп по SSH и до MySQL сървъра само от конкретно IP.
За да се постигне желания ефект (заедно със защита от syn-flood), таблицата трябва да изглежда примерно така:
-----------------------------------------------
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
*filter
:FORWARD DROP [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
:syn-food - [0:0]
# Enable full access from my home IP
-A INPUT -s xx.xx.xx.xx/32 -i eth0 -j ACCEPT
-A INPUT -p all -s localhost -i eth0 -j DROP
-A INPUT -p all -s localhost -i eth1 -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type echo-request -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type echo-reply -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type time-exceeded -j ACCEPT
-A INPUT -i eth0 -p icmp -m icmp --icmp-type destination-unreachable -j ACCEPT
# PROTECTION SYN flood
-A INPUT -i eth0 -p tcp -m tcp --dport 25 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 80 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 110 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 2120 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 909 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --dport 30000:30024 --syn -j syn-food
-A INPUT -i eth0 -p tcp -m tcp --syn -j REJECT
-A syn-food -m limit --limit 25/s --limit-burst 35 -j ACCEPT
# PROTECTION port scanner
-A INPUT -i eth0 -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 3/s --limit-burst 5 -j ACCEPT
# PROTECTION Ping of Death
-A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 3 -j ACCEPT
# Drop hijackers !!!
-A INPUT -i eth0 -s 81.169.186.45/32 -j DROP
-A INPUT -i eth0 -s 84.170.202.66/32 -j DROP
-A INPUT -i eth0 -s 203.172.213.122/32 -j DROP
-A INPUT -i eth0 -s 194.242.112.72/32 -j ACCEPT
-A INPUT -i eth0 -s 212.241.246.148/32 -j ACCEPT
-A INPUT -i eth0 -s 204.13.82.60/32 -j DROP
-A INPUT -i eth0 -s 85.140.156.23/32 -j DROP
-A INPUT -i eth0 -s 213.234.30.79/32 -j DROP
-A INPUT -i eth0 -s 87.106.12.174/28 -j DROP
-A INPUT -i eth0 -s 213.91.242.188/32 -j DROP
-A INPUT -i eth0 -s 87.126.147.86/32 -j DROP
-A INPUT -i eth0 -s 217.160.23.161/32 -j DROP
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
-----------------------------------------------
По принцип може и без реда:
-A INPUT -i eth0 -p tcp -m tcp --syn -j REJECT
но без него при сканиране ще бъде открито, че всички останали портове са филтрирани, докато така ще се върне ICMP съобщение: destination port unreachable.
P.S. Сега видях, че съм именовал веригата за ограничаване на SYN пакетите syn-food, а не syn-flood (не че е от значение, но някак си храната няма място тук
), но ме мързи да го поправям
Best wishes!
Alex