Iptables і динамічні правила (keep state), виконую установку, настройку, супровід серверів

Такого поняття як динамічні правила в iptables не існує. Правильно називати - відстеження стану keep state.

У Iptables існують такі типи стану (доступно, якщо модуль 'state' завантажений за допомогою '-m state'):

NEW - Всі пакети встановлюють нове з'єднання (Наприклад, запит на встановлення з'єднання)

ESTABLISHED - Всі пакети належать встановленому з'єднанню (Наприклад, GET відповідь web-сервера)

RELATED - Пакети, які не належать встановленому з'єднанню (тобто ті пакети, які є частиною нових з'єднань, які було ініційовано вже встановленим ESTABLISHED з'єднанням), але пов'язані з ним. (Наприклад - FTP в активному режимі використовує різні сполуки для передачі даних. Ці сполуки пов'язані.)

INVALID - Пакети, які не можуть бути з тих чи інших причин ідентифіковані. Наприклад ICMP помилки не належать існуючим з'єднанням

Тепер перейдемо до створення правил. Насамперед змінимо політики за замовчуванням:

iptables -P INPUT DROP
iptables -P OUTPUT DROP

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

І наостанок - правил відстежують стан:

iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED, RELATED -j ACCEPT

Цим ми створили повністю закритий фаєрвол. Тепер залишилося додавати дозволяють правила. Ось кілька прикладів:

- дозволяємо тільки вихідні пінг

iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

- дозволяємо доступ до сервера по ssh:

iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

А ось повний лістинг нашого брандмауера:

iptables -F
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT

Справа в тому, що при таких правилах фаєрвол не роз'єднує ESTABLISHED з'єднання. Якщо ви хочете примусово це зробити - кращий варіант:

iptables -I INPUT 1 -s 10.10.10.10 -m state --state ESTABLISHED, RELATED -j DROP

Якщо ви використовуєте ланцюжок FORWARD. то для неї будуть потрібні такі правила:

iptables -P FORWARD DROP
iptables -A FORWARD -i $ INET_IFACE -m state --state ESTABLISHED, RELATED -j ACCEPT
iptables -A FORWARD -i $ LAN_IFACE -m state --state NEW, ESTABLISHED, RELATED -j ACCEPT

Навігація по публікаціям

Схожі статті