Шпаргалка для тех кто не часто настраивает Iptables

 

Итоговая памятка по iptables на Ubuntu для VPN

1. Введение

iptables — инструмент для фильтрации и маршрутизации пакетов в Linux. Используется для:

  • Безопасного открытия портов для VPN
  • Пропуска VPN-трафика и форвардинга
  • Предотвращения утечек IP и DNS
  • Настройки NAT для выхода клиентов в интернет

Поддерживаемые VPN: Ocserv (OpenConnect), AmneziaWG (WireGuard), VLESS (Xray/VMess).

2. Основы iptables

2.1 Цепочки и таблицы

Тип Цепочка Назначение
Фильтрация INPUT Входящие пакеты
Фильтрация OUTPUT Исходящие пакеты
Фильтрация FORWARD Пересылаемые пакеты
NAT PREROUTING Изменение пакетов до маршрутизации
NAT POSTROUTING Маскарадинг исходящих пакетов

Таблицы: filter (по умолчанию), nat, mangle, raw, security.

2.2 Политики по умолчанию

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT

Блокируем всё входящее по умолчанию, разрешаем локальный трафик и исходящий.

2.3 Основные операторы

Оператор Описание
-A <цепочка> Добавить правило в конец
-I <цепочка> [номер] Вставить правило на позицию (по умолчанию начало)
-R <цепочка> <номер> Заменить правило по номеру
-D <цепочка> [номер/условия] Удалить правило по номеру или точному совпадению
-F <цепочка> Очистить цепочку
-X <цепочка> Удалить пользовательскую цепочку
-L [опции] Просмотр правил
-t <table> Указать таблицу (nat, mangle)

2.4 Фильтры и цели

Параметр Назначение
-p tcp|udp|icmp Протокол
–dport <port> Порт назначения
–sport <port> Порт источника
-s <IP/подсеть> IP источника
-d <IP/подсеть> IP назначения
-i <interface> Входящий интерфейс
-o <interface> Исходящий интерфейс
-m state –state <states> Состояние соединения (NEW, ESTABLISHED, RELATED)
-j ACCEPT|DROP|REJECT|MASQUERADE|LOG Действие

3. Настройка VPN-трафика

3.1 Ocserv (OpenConnect)

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -s 10.10.0.0/24 -j ACCEPT
sudo iptables -A FORWARD -d 10.10.0.0/24 -j ACCEPT

3.2 AmneziaWG (WireGuard)

sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -A FORWARD -o wg0 -j ACCEPT

3.3 VLESS (Xray)

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 443 -j ACCEPT
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

4. NAT / Маскарадинг

# Ocserv
sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE

# WireGuard
sudo iptables -t nat -A POSTROUTING -s 10.13.0.0/24 -o eth0 -j MASQUERADE

5. Защита от утечек DNS

# Разрешаем DNS только через VPN
sudo iptables -A OUTPUT -p udp --dport 53 -o tun0 -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -o wg0 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 53 -o tun0 -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 53 -o wg0 -j ACCEPT

# Блокируем DNS через основной интерфейс
sudo iptables -A OUTPUT -p udp --dport 53 -o eth0 -j DROP
sudo iptables -A OUTPUT -p tcp --dport 53 -o eth0 -j DROP

6. Логирование

sudo iptables -A INPUT -j LOG --log-prefix "iptables-drop: " --log-level 4
sudo iptables -A FORWARD -j LOG --log-prefix "iptables-forward-drop: " --log-level 4

7. Управление правилами (удаление и очистка)

7.1 Просмотр с номерами

sudo iptables -L -v -n --line-numbers

7.2 Удаление правил

  • По номеру: sudo iptables -D INPUT 3
  • По точному совпадению: sudo iptables -D INPUT -p tcp --dport 443 -j ACCEPT
  • Очистка цепочки: sudo iptables -F INPUT, sudo iptables -F FORWARD
  • Удаление пользовательской цепочки: sudo iptables -X MYCHAIN

8. Сохранение правил

sudo apt install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload

9. Примеры использования операторов

Команда Действие
iptables -A INPUT -p tcp –dport 443 -j ACCEPT Добавить правило в конец INPUT
iptables -I INPUT 1 -p tcp –dport 22 -j ACCEPT Вставить правило в начало INPUT
iptables -R INPUT 3 -p tcp –dport 80 -j DROP Заменить 3-е правило
iptables -D INPUT 2 Удалить 2-е правило
iptables -F FORWARD Очистить цепочку FORWARD

10. Рекомендации

  • Тестируйте правила через отдельную SSH-сессию
  • Используйте отдельные цепочки и подсети для разных VPN
  • Всегда указывайте правильные интерфейсы (tun0, wg0, eth0)
  • Используйте состояние соединения (ESTABLISHED,RELATED)
  • Логирование полезно на этапе отладки

Leave a Reply