Iptables: Управление / конфигурирование: различия между версиями
Ross (обсуждение | вклад) Новая страница: «== Межсетевой экран iptables (Основы) == === 📌 Что такое iptables? === '''iptables''' — это классическая утилита командной строки, которая является стандартным интерфейсом для управления межсетевым экраном (брандмауэром) в Linux. Она управляет правилами фильтрации и маршр...» |
Ross (обсуждение | вклад) Нет описания правки |
||
| Строка 58: | Строка 58: | ||
==== Удаление правил ==== | ==== Удаление правил ==== | ||
<syntaxhighlight lang="bash"> | |||
# Удалить правило из цепочки INPUT по его порядковому номеру (например, правило №2) | |||
sudo iptables -D INPUT 2 | |||
# ОСТОРОЖНО: Полностью очистить (удалить) все правила в таблице filter! | |||
sudo iptables -F | |||
</syntaxhighlight> | |||
=== ⚠️ Важные особенности === | |||
# '''Порядок чтения:''' iptables читает правила в цепочке строго сверху вниз. Как только пакет совпадает с условием правила, применяется действие (ACCEPT или DROP), и дальнейшие правила для этого пакета ''не проверяются''. Поэтому более узкие разрешающие правила всегда должны стоять выше общих запрещающих (DROP). | |||
# '''Энергозависимость:''' Все правила, введенные через терминал, живут только в оперативной памяти и исчезают при перезагрузке ОС. Для их сохранения обязательно использование утилиты <code>iptables-persistent</code> (см. соответствующую статью базы знаний). | |||
# '''Скрытые правила Docker:''' Демон Docker активно вмешивается в работу iptables (в цепочки <code>FORWARD</code> и <code>DOCKER-USER</code>), создавая собственные правила для проброса портов к контейнерам. Если вы используете UFW или простые правила в <code>INPUT</code>, учтите, что проброшенные порты Docker могут быть доступны извне в обход ваших блокировок. | |||
Текущая версия от 07:13, 29 мая 2026
Межсетевой экран iptables (Основы)
📌 Что такое iptables?
iptables — это классическая утилита командной строки, которая является стандартным интерфейсом для управления межсетевым экраном (брандмауэром) в Linux. Она управляет правилами фильтрации и маршрутизации сетевых пакетов на уровне ядра (подсистема netfilter).
Примечание: В современных дистрибутивах (например, Ubuntu 22.04+) под капотом часто работает более новый движок nftables, но iptables сохраняется как удобная, стабильная и самая популярная оболочка для управления сетью.
🏗 Архитектура: Таблицы, Цепочки и Действия
Логика iptables строится на трёх основных понятиях. Пакет, попадая в сетевой интерфейс, проходит через определённый маршрут из таблиц и цепочек.
Основные Таблицы (Tables)
Таблицы определяют глобальную цель обработки пакета:
- filter (используется по умолчанию): Отвечает за безопасность — разрешить или заблокировать трафик.
- nat: Отвечает за маршрутизацию и трансляцию адресов (проброс портов, маскарад IP). Критически важна для работы VPN и Docker-контейнеров.
- mangle: Используется для специфического изменения заголовков пакетов (применяется редко в базовой настройке).
Основные Цепочки (Chains)
Внутри таблиц находятся цепочки. Они указывают, на каком этапе пути находится пакет:
INPUT— входящие пакеты, конечной целью которых является сам сервер (например, подключение по SSH к серверу).OUTPUT— исходящие пакеты, сгенерированные самим сервером и уходящие в сеть.FORWARD— транзитные пакеты, проходящие через сервер (например, трафик из VPN-туннеля, идущий в интернет, или трафик Docker-сети).
Действия (Targets)
Действие указывает, что сделать с пакетом, если он подошел под правило:
ACCEPT— пропустить пакет дальше.DROP— молча уничтожить пакет (рекомендуется для защиты от сканеров, так как атакующий не получает никакого ответа).REJECT— отбросить пакет, но отправить отправителю уведомление об ошибке (Connection refused).
🚀 Шпаргалка по командам
Просмотр текущих правил
# Показать правила основной таблицы (filter) с подробной статистикой пакетов.
# Ключ -n запрещает DNS-резолвинг, показывая чистые IP-адреса, что сильно ускоряет вывод.
sudo iptables -L -n -v
# Показать правила маршрутизации и проброса портов (таблица NAT)
sudo iptables -t nat -L -n -v
Управление правилами
# Разрешить входящий трафик на порт 22 (SSH) из любого места
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Разрешить весь трафик с определенного IP-адреса
sudo iptables -A INPUT -s 192.168.1.50 -j ACCEPT
# Заблокировать конкретный IP-адрес
sudo iptables -A INPUT -s 10.10.10.10 -j DROP
# Разрешить весь трафик на локальном интерфейсе (loopback) - необходимо для работы внутренних служб
sudo iptables -A INPUT -i lo -j ACCEPT
# Разрешить уже установленные соединения (обязательное правило, иначе сервер не сможет получать ответы на свои же запросы)
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Удаление правил
# Удалить правило из цепочки INPUT по его порядковому номеру (например, правило №2)
sudo iptables -D INPUT 2
# ОСТОРОЖНО: Полностью очистить (удалить) все правила в таблице filter!
sudo iptables -F
⚠️ Важные особенности
- Порядок чтения: iptables читает правила в цепочке строго сверху вниз. Как только пакет совпадает с условием правила, применяется действие (ACCEPT или DROP), и дальнейшие правила для этого пакета не проверяются. Поэтому более узкие разрешающие правила всегда должны стоять выше общих запрещающих (DROP).
- Энергозависимость: Все правила, введенные через терминал, живут только в оперативной памяти и исчезают при перезагрузке ОС. Для их сохранения обязательно использование утилиты
iptables-persistent(см. соответствующую статью базы знаний). - Скрытые правила Docker: Демон Docker активно вмешивается в работу iptables (в цепочки
FORWARDиDOCKER-USER), создавая собственные правила для проброса портов к контейнерам. Если вы используете UFW или простые правила вINPUT, учтите, что проброшенные порты Docker могут быть доступны извне в обход ваших блокировок.