Czy mógłby ktoś rzucić okiem na poniższe regułki iptables i doradzić, czy są one prawidłowe, może coś w nich można by poprawić? Jest to taki podstawowy firewall, którego zadaniem jest dopuszczenie ruchu http, https, MySQL oraz SSH (w tym wypadku tylko z określonych adresów IP).
Głównie zależy mi na regułkach z flagami TCP, czy nadal warto ich używać (szczególnie na najnowszych systemach z kernelem 4.x), może dodać jeszcze jakieś inne?
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# Block IPs
ipset create denyips hash:net
ipset add denyips 0.0.0.0/8
ipset add denyips 10.0.0.0/8
ipset add denyips 100.64.0.0/10
ipset add denyips 127.0.0.0/8
ipset add denyips 169.254.0.0/16
ipset add denyips 172.16.0.0/12
ipset add denyips 192.0.0.0/24
ipset add denyips 192.0.2.0/24
ipset add denyips 192.168.0.0/16
ipset add denyips 198.18.0.0/15
ipset add denyips 198.51.100.0/24
ipset add denyips 203.0.113.0/24
ipset add denyips 224.0.0.0/3
iptables -A INPUT -m set --match-set denyips src -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ALL FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ALL SYN,FIN,PSH,URG -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A INPUT -p icmp -m limit --limit 2/second --limit-burst 2 -j ACCEPT
IP_SRV=x.x.x.x
# SSH
ipset create allowips_ssh hash:net
ipset add allowips_ssh y.y.y.y
iptables -A INPUT -d $IP_SRV -p tcp --dport 22 -m set --match-set allowips_ssh src -j ACCEPT
# Web
iptables -A INPUT -d $IP_SRV -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -d $IP_SRV -p tcp --dport 443 -j ACCEPT
# MySQL
iptables -A INPUT -d $IP_SRV -p tcp --dport 3306 -j ACCEPT
Przy okazji może się komuś przyda wraz ze stosowaniem ipset'a.