Здравствуйте.Перечитав много информации на эту тему в интернете удалось составить набор правил для веб сервера. Хочется услышать ваши замечания и советы.
Наиболее не уверен в блоке Deny synflood, а именно в этих tcp-flags, видел примеры где их позволяют с лимитом в 1 секунду, поэтому не знаю как будет правильно.
Также есть сомнение по Deny DoS http|s, видел реализации с использованием limit - limit-burst, тут также не знаю как лучше будет.
Сами правила:
#!/bin/bash
#Clear all#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
#Deny all#
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#Allow local interface#
iptables -A INPUT -i lo -j ACCEPT
#Blacklist#
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -a INPUT -s 192.0.0.1/24 -j DROP
iptables -A INPUT -s 169.254.0.0/16 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -d 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/5 -j DROP
iptables -A INPUT -d 240.0.0.0/5 -j DROP
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -d 0.0.0.0/8 -j DROP
iptables -A INPUT -d 239.255.255.0/24 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
#Whitelist#
iptables -A INPUT -s 1.2.3.4 -j ACCEPT
#Deny invalid#
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
#Deny synflood#
iptables -A INPUT -p tcp -m tcp --tcp-flags ALL ACK,RST,SYN,FIN -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 SYN,RST SYN,RST -j DROP
iptables -A INPUT -m state --state NEW -p tcp -m tcp --syn -m recent --name SYNFLOOD --set
iptables -A INPUT -m state --state NEW -p tcp -m tcp --syn -m recent --name SYNFLOOD --update --seconds 1 --hitcount 60 -j DROP
#Deny tcp without syn#
iptables -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
#Deny ICMP#
iptables -I INPUT -p icmp -f -j DROP
#Deny SFTP brut#
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --name SFTP_BRUTE --set
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --name SFTP_BRUTE --update --seconds 30 --hitcount 3 -j DROP
#Deny DoS http|s#
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 15 --hitcount 20 -j DROP
iptables -I INPUT -p tcp --dport 443 -m state --state NEW -m recent --update --seconds 15 --hitcount 20 -j DROP
#Allow rel, estb#
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#Rules#
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
#Allow logs#
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 6
iptables -A LOGGING -j DROP
Также вопрос как их использовать, раньше делал файлик .sh и запускал, также добавлял его в
/etc/rc.local для автозапуска. Сегодня узнал о iptables save, iptables restart, как теперь всё это использовать?