2 min read

iptables: настройка фаервола с нуля и защита от базовых атак

iptables: настройка фаервола с нуля и защита от базовых атак

Один из первых вопросов при настройке нового сервера — как закрыть всё лишнее и открыть только то, что нужно. UFW проще в освоении, но iptables даёт полный контроль и стоит на каждом Linux без дополнительной установки.

Логика iptables простая: правила обрабатываются сверху вниз, первое совпадение — действие. Три основных действия: ACCEPT — пропустить, DROP — заблокировать, RETURN — вернуться в вызывающую цепочку. Три основных цепочки: INPUT — входящий трафик, OUTPUT — исходящий, FORWARD — транзитный (для маршрутизаторов и прокси).

Установка

sudo apt install -y iptables iptables-persistent

iptables-persistent нужен чтобы правила сохранялись после перезагрузки.

Рабочая конфигурация

Очищаем все существующие правила

sudo iptables -F
sudo iptables -X
sudo iptables -t nat -F
sudo iptables -t nat -X
sudo iptables -t mangle -F
sudo iptables -t mangle -X

Разрешаем FORWARD и OUTPUT

sudo iptables -P FORWARD ACCEPT
sudo iptables -P OUTPUT ACCEPT

Создаём цепочку WHITELIST

Отдельная цепочка для доверенных источников — удобнее чем смешивать всё в INPUT:

sudo iptables -N WHITELIST

Разрешаем локальный трафик и установленные соединения

sudo iptables -I INPUT -i lo -j ACCEPT -m comment --comment 'Allowing local traffic'
sudo iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT -m comment --comment 'Allowing established and related connections'

Без правила для ESTABLISHED,RELATED ответный трафик на исходящие соединения будет блокироваться — это распространённая ошибка при настройке с нуля.

Открываем порты 80 и 443

sudo iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT
sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT

Добавляем правила в WHITELIST

sudo iptables -A WHITELIST -s IP_ZABBIX -p tcp --dport 10050 -m comment --comment "Monitoring Zabbix" -j ACCEPT
sudo iptables -A WHITELIST -s YOUR_IP -p tcp --dport 22 -m comment --comment "SSH Jumpbox" -j ACCEPT

IP_ZABBIX и YOUR_IP — замени на реальные адреса. SSH открываем только с конкретного IP, не для всего мира.

Подключаем WHITELIST к INPUT и закрываем всё остальное

sudo iptables -A INPUT -j WHITELIST
sudo iptables -P INPUT DROP

Порядок важен: сначала добавляем разрешающие правила, потом меняем политику по умолчанию на DROP. Если сделать наоборот — отрежешь себя от сервера.

Защита от базовых атак

Null-пакеты

Пакеты без флагов используются для сканирования портов:

sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

SYN-флуд

Ограничиваем количество новых соединений с одного источника:

sudo iptables -A INPUT -p tcp --syn -m limit --limit 10/s --limit-burst 20 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP

--limit 10/s — не более 10 новых соединений в секунду. --limit-burst 20 — разрешает всплеск до 20 соединений, после чего лимит начинает работать.

Отброс инвалидных пакетов

sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

Сохраняем правила

sudo iptables-save > /etc/iptables/rules.v4
sudo netfilter-persistent save
sudo netfilter-persistent reload

Просмотр текущих правил

sudo iptables -L INPUT --line-numbers
sudo iptables -L WHITELIST --line-numbers
sudo iptables -S

Восстановление

Если правила ещё не сохранены и нужно откатиться:

# Ubuntu/Debian
sudo iptables-restore < /etc/iptables.rules

# CentOS/RedHat
iptables-restore < /etc/sysconfig/iptables

Готовый скрипт

Если не хочешь настраивать вручную — я собрал bash-скрипт с этой конфигурацией:

git clone https://github.com/Shipssv83/Iptables-ruls.git
sudo chmod +x iptables-ruls.sh
sudo ./iptables-ruls.sh

Если настраиваешь безопасность серверной инфраструктуры и нужна помощь — пиши на [email protected] или заходи на 1it.pro.

Связаться с нами
Telegram
WhatsApp
Email