*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK -j DROP # (1)
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN FIN,SYN -j DROP #
-A INPUT -p tcp -m tcp –tcp-flags SYN,RST SYN,RST -j DROP #
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP #резать пакеты с
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP #указанными флагами
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP #
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP #
-A INPUT -p tcp -m tcp –dport 113 -j DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state INVALID -j DROP
-A INPUT -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT # (2)
-A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT #
-A INPUT -s 111111111 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
-A INPUT -s 111111111 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
-A INPUT -s 111111111 -p tcp -m state –state NEW -m tcp –dport 10050 -j ACCEPT # доступ к zabbix
-A INPUT -s 111111111 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT # ssh
-A INPUT -s 111111111 -p tcp -m state –state NEW -m tcp –dport 10050 -j ACCEPT
-A INPUT -s 111111111 -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT # https
-A INPUT -s 111111111 -p tcp -m state –state NEW -j ACCEPT
-A INPUT -s 1111111111 -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
-A INPUT -s 1111111111 -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT
-A INPUT -s 1111111111 -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT
-A INPUT -s 111111111 -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
-A INPUT -s 1111111111 -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT
-A INPUT -s 1111111111 -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
-A INPUT -s 1111111111 -p tcp -m state –state NEW -m tcp –dport 9102 -j ACCEPT # опять zabbix
-A INPUT -p tcp -m state –state NEW -m tcp –dport 113 -j DROP # (3)ident
-A INPUT -p udp -m udp –dport 137 -j DROP # широковещательный адресс Microsoft, NetBIOS
-A INPUT -p udp -m udp –dport 138 -j DROP #
-A INPUT -p icmp -m icmp –icmp-type 8 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT # icmp 8 bit
-A INPUT -p tcp -m limit –limit 15/min -j LOG –log-prefix «iptables INPUT denied: » # лимит и
-A INPUT -p udp -m limit –limit 15/min -j LOG –log-prefix «iptables_all INPUT denied: » # логирование
-A OUTPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p tcp -m tcp –tcp-flags ACK PSH -j DROP
-A OUTPUT -m state –state INVALID -j DROP
-A OUTPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
-A OUTPUT -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT
-A OUTPUT -d */32 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
-A OUTPUT -p udp -m state –state NEW -m udp –dport 53 -j ACCEPT
-A OUTPUT -p udp -m state –state NEW -m udp –dport 514 -j ACCEPT #(4)
-A OUTPUT -d *** -p udp -m state –state NEW -m udp –dport 1514 -j ACCEPT #(5)
-A OUTPUT -p udp -m state –state NEW -m udp –dport 123 -j ACCEPT #(6)
-A OUTPUT -p tcp -m state –state NEW -m tcp –dport 25 -j ACCEPT
-A OUTPUT -p tcp -m state –state NEW -m tcp –dport 1521 -j ACCEPT
-A OUTPUT -p tcp -m state –state NEW -m tcp –dport 995 -j ACCEPT #(7)
-A OUTPUT -p tcp -m state –state NEW -m tcp –dport 10051 -j ACCEPT
-A OUTPUT -d 111111111 -p tcp -m state –state NEW -m tcp –dport 9103 -j ACCEPT
-A OUTPUT -p icmp -m icmp –icmp-type 8 -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m limit –limit 15/min -j LOG –log-prefix «iptables_tcp OUTPUT denied: »
-A OUTPUT -p udp -m limit –limit 15/min -j LOG –log-prefix «iptables_udp OUTPUT denied: »
COMMIT
Применяем настройки iptables-restore < /etc/firewall.rules
И пишем автозапуск, создаём файл firewall в корне /etc/network/if-pre-up.d/ Содержание:
#!/bin/bash
/sbin/iptables-restore < /etc/firewall.rules
1 - DROP TCP пакетов с данными флагами позволяет защититься от сканирования. (примечание. спросите почему не REJECT ? ведь отклонение тоже вроде как защищает ! А вот ничего подобного, отклонение принимает пакеты и отклоняет их, давая потенциальному взломщику/ботнету/конкуренту собрать фингерпринты с ваших портов и получить сведения о ваших сервисах в сети и что конкретно у вас фильтруется. так что лучше выставить значение DROP, тем самым «притвориться мёртвым», это затруднит сканирование и позволит немного запутать человека или бота на атакующем хосте)
2 - открываем доступ для внешней среды, разрешаем входящие для http и https
3 - с точки зрения безопасности, ident лучше отрубать, про identd можно будет написать отдельную статью, так как правильная настройка этого протокола сводится к массе подводных камней и особенностей, так как содержит парочку критических и средних уязвимостей
4 - разрешаем «исходящим» выполнять удалённые shell команды на нашем удалённом web-сервере
5 - разрешаем «жителям одной из нашей подсети» шифрованный порт для LOG-сервера OSSEC
6 - ntp он и в Африке ntp. куда же нам без него :)
7 - pop3 через ssl, «безопасная почта»
Вообще тут можно ещё многое написать, но я решил сделать пометки для более-менее важного. там где вы видите 11111111, нужно вписывать доверенные подсети своей локальной, либо удалённой среды, так как в разных подсетях работают разные службы, например саппорт и т.п.
Это конечно не совсем по стандарту PCI DSS, но позволяет не плохо защитить своей сервер в большой структуре.
Конфиг взят из одного «полубоевого веб-сервера» поэтому никаких остальных сведений и подробностей я вам о нём не скажу. Можете и не просить, ну разве что попытками соц.инженерии попытаться вытянуть