Пример настройки iptables для защиты веб-сервера

iptables – штатная утилита командной строки в Linux, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра) netfilter для ядер версий 2.4 и 2.6. При грамотной настройке iptables сервер можно считать относительно защищенным от внешних угроз. В этой статье мы рассмотрим пример конфигурации iptables для защиты стандартного веб-сервера.
Итак, представим себе простой веб-сервер. Рабочими портами при этом являются: tcp 20, 21, 22, 25, 80, 110, 143, 443; udp 53.
Напишем скрипт конфигурации iptables:

#!/bin/sh
### Скрипт конфигурации IPTables ###
# Очищаем предыдущие записи
iptables -F
# Установка политик по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# Разрешаем локальный интерфейс
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
# Защита от спуфинга
iptables -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset
# Защита от попытки открыть входящее соединение TCP не через SYN
iptables -I INPUT -m conntrack --ctstate NEW -p tcp! --syn -j DROP
# Закрываемся от кривого icmp
iptables -I INPUT -p icmp -f -j DROP
# REL, ESTB allow
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT
# Разрешаем рабочие порты
iptables -A INPUT -p tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Разрешение главных типов протокола ICMP
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 11 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
# Защита сервера SSH от брутфорса
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name dmitro --set
iptables -A INPUT -p tcp --syn --dport 22 -m recent --name dmitro --update --seconds 30 --hitcount 3 -j DROP
# Просмотр
iptables -L --line-number
echo
echo «Adding DONE, maybe OK»
echo «Saving to rc, PSE wait!»
service iptables save
echo
service iptables restart
echo «Done»
 
Скрипт был написан для CentOS, однако написанные в нем правила будут справедливы для любого дистрибутива (кроме команд сохранения правил и перезагрузки брандмауэра).

Нет комментариев