Настройка правил iptables в Linux

Основы Iptables

  • ACCEPT: разрешить передачу пакета.
  • DROP: запретить передачу пакета.
  • RETURN: пропустить текущую цепочку и перейти к следующему правилу в цепочке, которая ее вызвала.
  • INPUT – используется для контроля входящих пакетов. Можно разрешать или блокировать подключения по порту, протоколу или IP-адресу источника.
  • FORWARD – используется для фильтрации пакетов, приходящих на сервер, но перенаправляемых куда-либо еще.
  • OUTPUT – используется для фильтрации исходящих пакетов.

Пример настройки iptables


sudo apt-get update
sudo apt install -y iptables 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

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

sudo iptables -L -v --line-numbers

Установка политики FORWARD и OUTPUT в ACCEPT:

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

Создание цепочки WHITELIST:

sudo iptables -N WHITELIST

Разрешение трафика на локальном узле:

sudo iptables -I INPUT -i lo -j ACCEPT -m comment --comment 'Allowing local traffic'

Открыть порты 80 и 443:

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

Разрешить установленные и связанные соединения:

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

Добавить определенные правила в WHITELIST:

sudo iptables -A WHITELIST -s IP_SERVERZABBIX -p tcp --dport 10050 -m comment --comment "Monitoring Zabbix server" -j ACCEPT
sudo iptables -A WHITELIST -s ВАШ_IP -p tcp --dport 22 -m comment --comment "IP Jumpbox SSH" -j ACCEPT

Применить цепочку WHITELIST к INPUT:

sudo iptables -A INPUT -j WHITELIST

Установить политику по умолчанию INPUT в DROP:

sudo iptables -P INPUT DROP

Блокируем нулевые пакеты:

Нулевые пакеты (null packets) — это пакеты без установленного флага, часто используемые для сканирования.

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

Закрываемся от SYN-флуд атак:

Чтобы защититься от 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 ESTABLISHED,RELATED -j ACCEPT
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

Отображение текущих правил iptables:

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

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

Если вы еще не сохраняли настройки, и хотите вернуться к первоначальным настройкам. Используйте iptables-restore.

В Ubuntu/Debian

sudo iptables-restore < /etc/iptables.rules

В Centos/Redhat

iptables-restore < /etc/sysconfig/iptables

Вы также можете скачать bash файл с github

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