Не успел установить VPS и настроить WEB сервер, как обнаружил, что огромное количество спамеров пытаются разослать через мой postfix всякую гадость. Плюс постоянно стараются подобрать пароль к SSH. А у меня сервер на Cloud хостинге, где плачу за все телодвижения, в том числе за совсем не нужные нагрузки.
Так порывшись в сети нашел следующие, на мой взгляд достаточные, настойки iptables.
1. Для начала создайте исполняемый файл:
/etc/network/if-up.d/00-firewall
2. Запишите в него:
#!/bin/sh
# Первым делом очистим существующую таблицу правил:
iptables -F# Добавляем первое правило которое позволит нам не потерять удаленный контроль на сервером (по умолчанию порт SSH – 22, у вас может быть другой):
iptables -A INPUT -p tcp -i eth0 —dport 22 -j ACCEPT# Прописываем политики по умолчанию:
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT# Разрешаем хождение трафика по localhost
iptables -A INPUT -i lo -j ACCEPT#Делаем защиту от Dos атак:
iptables -A INPUT -p tcp -m tcp —tcp-flags SYN,ACK,FIN,RST RST -m limit —limit 1/s -j ACCEPT# Разрешаем пакеты по протоколам tcp\udp создающие новые подключения (например у меня без этих правил некорректно работала админка Вордпресса и не открывался один из виртуальных сайтов).
iptables -A INPUT -p tcp -m state —state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state —state RELATED,ESTABLISHED -j ACCEPT#Разрешаем трафик для необходимых служб
# FTP
#iptables -A INPUT -i eth0 -p tcp —dport 21 -j ACCEPT#HTTP
iptables -A INPUT -i eth0 -p tcp —dport 80 -j ACCEPT#HTTPS
#iptables -A INPUT -i eth0 -p tcp —dport 443 -j ACCEPT#csync2 30865/tcp
#iptables -A INPUT -i eth0 -p tcp —dport 30865 -j ACCEPT#SMTP если будет нужно
# iptables -A INPUT -i eth0 -p tcp —dport 25 -j ACCEPT# DNS если есть такой
# iptables -A INPUT -i eth0 -p udp —sport 53 -j ACCEPT
# Пинги
#iptables -A INPUT -i eth0 -p icmp -m icmp —icmp-type 3 -j ACCEPT
#iptables -A INPUT -i eth0 -p icmp -m icmp —icmp-type 11 -j ACCEPT
#iptables -A INPUT -i eth0 -p icmp -m icmp —icmp-type 12 -j ACCEPT
iptables -A INPUT -p icmp —icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp —icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp —icmp-type 6 -j ACCEPT
iptables -A OUTPUT -p icmp —icmp-type 6 -j ACCEPT# Далее пропишем правила защищаюшее наш ssh порт от брутфорса (подбора паролей роботами):
iptables -A INPUT -p tcp —syn —dport 22 -m recent —name radiator —set
iptables -A INPUT -p tcp —syn —dport 22 -m recent —name radiator —update —seconds 30 —hitcount 3 -j DROP# Если вам необходимо установить полностью доверительные отношения между двумя серверами то делаем так:
#iptables -A INPUT -p tcp —source {ip-адрес удаленного сервера} -j ACCEPT
#iptables -A INPUT -p udp —source {ip-адрес удаленного сервера} -j ACCEPT
Теперь можете исполнить файл сразу, или перезагрузить систему и проверить настройки командой:
iptables –list
Статью написал: Лобачев Виталий по мативам www.itpad.ru
Вот не пойму одного, для чего автору iptables -A OUTPUT -p tcp -i eth0 –dport 22 -j ACCEPT, если iptables -P OUTPUT ACCEPT?
А вообще статья полезная. Спасибо )))
На случай если решите все же закрыть исходящие:
iptables -P OUTPUT DROP
а про ssh забудете 🙂