Итоговая памятка по iptables на Ubuntu для VPN
1. Введение
iptables — инструмент для фильтрации и маршрутизации пакетов в Linux. Используется для:
- Безопасного открытия портов для VPN
- Пропуска VPN-трафика и форвардинга
- Предотвращения утечек IP и DNS
- Настройки NAT для выхода клиентов в интернет
2. Основы iptables
2.1 Цепочки и таблицы
| Тип | Цепочка | Назначение |
|---|---|---|
| Фильтрация | INPUT | Входящие пакеты |
| Фильтрация | OUTPUT | Исходящие пакеты |
| Фильтрация | FORWARD | Пересылаемые пакеты |
| NAT | PREROUTING | Изменение пакетов до маршрутизации |
| NAT | POSTROUTING | Маскарадинг исходящих пакетов |
Таблицы: filter (по умолчанию), nat, mangle, raw, security.
2.2 Основные операторы
| Оператор | Описание |
|---|---|
| -A <цепочка> | Добавить правило в конец |
| -I <цепочка> [номер] | Вставить правило в строку, остальные правила сместятся |
| -R <цепочка> <номер> | Заменить правило в конкретной строке |
| -D <цепочка> [номер/условия] | Удалить правило по номеру строки или точному совпадению |
| -F <цепочка> | Очистить цепочку |
| -X <цепочка> | Удалить пользовательскую цепочку |
| -L [опции] | Просмотр правил |
| -t <table> | Указать таблицу (nat, mangle) |
2.3 Фильтры и цели
| Параметр | Назначение |
|---|---|
| -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. Примеры использования операторов
| Команда | Действие |
|---|---|
| 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 |
4. Примеры ввода правил
4.1 Базовые правила для доступа сервера в Интернет
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
Блокируем входящий и пересылаемый потоки, открываем исходящий поток, разрешаем входящий трафик в ответ на исходящие запросы.
4.2 Ппроброс SSH от уникального IP адреса
iptables -A INPUT -s 80.80.80.80 -p tcp --dport 22 -j ACCEPT
4.4 Настройка NAT / Маскарадинга для подсети VPN
sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE
4.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
4.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
5. Управление, редактирование правил
5.1 Просмотр правил с номерами
Правила доступаsudo iptables -L -v -n --line-numbersNATsudo iptables -t nat -L -v -n
5.2 Удаление правил
По номеру, NAT: sudo iptables -t nat -D POSTROUTING 1
По номеру, правило доступа: sudo iptables -D INPUT 1
По точному совпадению: sudo iptables -D INPUT -p tcp --dport 443 -j ACCEPT
Очистка цепочки:sudo iptables -F INPUT,sudo iptables -F FORWARD
Удаление пользовательской цепочки: sudo iptables -X MYCHAIN
5.3 Сохранение правил
sudo apt install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload
6. Рекомендации
- Тестируйте правила через отдельную SSH-сессию
- Используйте отдельные цепочки и подсети для разных VPN
- Всегда указывайте правильные интерфейсы (tun0, wg0, eth0)
- Используйте состояние соединения (ESTABLISHED,RELATED)
- Логирование полезно на этапе отладки