Установка и настройка фаервола iptables

oke

Администратор
Команда форума
#1
iptables - известный и широко распространенный фаервол под Linux. В статье я расскажу как его установить себе на сервер.

Устанавливаем iptables из репозитория Debian/Ubuntu:

aptitude install iptables-persistent xtables-addons-dkms

И так, в системе уже присутствует главный из списка необходимых инструмент — iptables. Но этого недостаточно. Также понадобятся фильтр tarpit и iptables-persistent, чтобы загружать правила при старте системы. Во время установки persistent будет задано два вопроса о сохранении текущих правил. Можно ответить «Да» и тогда в папке /etc/iptables/rules/ будут созданы нужные файлы с правилами, которые мы отредактируем.

Пример правил:

*filter
# Разрешить весь локальный (lo0) трафик и отбрасывать весь трафик на сеть 127/8, который не идет через lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# Разрешить все установленные изнутри подключения
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешить весь исходящий трафик
-A OUTPUT -j ACCEPT

# Открываем порт для доступа к базе MySQL сервера
-A INPUT -s 80.77.0.0 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

# Разрешить HTTP и HTTPS подключения отовсюду на сервер
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p tcp --dport 1500 -j ACCEPT

# pop3, pop3s:
-A INPUT -p tcp --dport 110 -j ACCEPT
-A INPUT -p tcp --dport 995 -j ACCEPT

# imap , imaps:
-A INPUT -p tcp --dport 143 -j ACCEPT
-A INPUT -p tcp --dport 993 -j ACCEPT
-A INPUT -p tcp --dport 25 -j ACCEPT
-A INPUT -p tcp --dport 465 -j ACCEPT

#Открываем порт для DNS
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT

# Открывает порт сервера CS 1.6
-A INPUT -p udp --dport 27015 -j ACCEPT
-A INPUT -p udp --dport 27016 -j ACCEPT
-A INPUT -p udp --dport 27017 -j ACCEPT

# Разрешить подключения по SSH
# Номер порта --dport такой же как в /etc/ssh/sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# Защита сервера SSH от брутфорса
-A INPUT -p tcp --syn --dport 22 -m recent --name dmitro --set
-A INPUT -p tcp --syn --dport 22 -m recent --name dmitro --update --seconds 30 --hitcount 3 -j DROP

# Простая защита от DoS-атаки
-A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

# Защита от спуфинга
-I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset

# Защита от попытки открыть входящее соединение TCP не через SYN
-I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP

# Закрываемся от кривого icmp
-I INPUT -p icmp -f -j DROP

# Разрешить пинг
# заметьте, что блокирование других типов icmp трафика нежелательно
# удалите -m icmp --icmp-type 8 отсюда чтобы разрешить все виды icmp:
# https://security.stackexchange.com/questions/22711
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# логировать неудачные попытки доступа (доступен через команду 'dmesg')
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# Отбрасывать все входящие пакеты. по умолчанию все разрешается, что не хорошо:
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT