IPtables
Документация по iptables
1. Введение
Что такое iptables
iptablesiptables — это утилита командной строки для управления сетевыми пакетами в Linux. Она взаимодействует с подсистемой ядра netfilter и позволяет контролировать входящий, исходящий и проходящий через систему трафик.
iptables работает по принципу набора правил, организованных в таблицы и цепочки. Каждое правило определяет, что делать с пакетом на основе его параметров (IP-адрес, порт, протокол, состояние соединения и т. д.).
Основные функции и применение
🔹 Фильтрация трафика (брандмауэр)
Блокировка нежелательных подключений.
Разрешение доступа только определённым сервисам.
Ограничение соединений по частоте (анти-DDoS).
🔹 NAT (трансляция сетевых адресов)
Подмена IP-адресов для скрытия локальной сети.
Проброс портов (Port Forwarding) для доступа к внутренним сервисам.
Балансировка нагрузки через
SNAT/DNAT.
🔹 Логирование и мониторинг
Запись информации о попытках подключения.
Анализ сетевой активности для обнаружения атак.
🔹 Маршрутизация и манипуляция с пакетами
Изменение приоритета трафика.
Перенаправление запросов на другие сервера.
Прозрачный прокси через
REDIRECT.
iptables активно используется в серверах, маршрутизаторах, VPN-шлюзах и встраиваемых устройствах для управления сетевой безопасностью и маршрутизацией.
2. Общий синтаксис команды
Формат команды
Где:
-t <таблица>— выбор таблицы (filter,nat,mangle,raw,security).<действие>— операция над цепочкой или правилом (-A,-D,-I,-F,-P,-N,-X).<цепочка>— выбор цепочки (INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING).[опции]— дополнительные условия (-p,-s,--dportи др.).-j <цель>— действие с пакетом (ACCEPT,DROP,REJECT,LOG,DNAT,SNAT,MASQUERADE).
Описание ключевых параметров
-t <таблица>
Указывает таблицу, в которой выполняется действие. По умолчанию используется filter.
Пример:
-A (Append)
Добавляет правило в конец указанной цепочки. Пример:
-D (Delete)
Удаляет правило. Можно указать либо параметры правила, либо его номер (iptables -L --line-numbers).
Пример:
-I (Insert)
Вставляет правило в указанную позицию (по умолчанию в начало). Пример:
-F (Flush)
Очищает все правила в цепочке (или во всех цепочках, если без аргумента). Пример:
-P (Policy)
Устанавливает политику по умолчанию для цепочки. Пример:
-N (New Chain)
Создаёт новую пользовательскую цепочку. Пример:
-X (Delete Chain)
Удаляет пустую пользовательскую цепочку. Пример:
3. Таблицы и цепочки
Описание таблиц
В iptables есть несколько таблиц, каждая из которых отвечает за определённые типы обработки пакетов.
1. filter — Фильтрация трафика (по умолчанию)
filter — Фильтрация трафика (по умолчанию)Используется для разрешения или блокировки пакетов. Это основная таблица брандмауэра. Цепочки:
INPUT— обработка пакетов, адресованных локальному хосту.OUTPUT— обработка пакетов, исходящих с локального хоста.FORWARD— обработка пакетов, проходящих через систему (маршрутизация).
Пример:
2. nat — Трансляция сетевых адресов (NAT)
nat — Трансляция сетевых адресов (NAT)Используется для изменения IP-адресов и портов в пакетах. Цепочки:
PREROUTING— изменение адреса пакета перед маршрутизацией.POSTROUTING— изменение адреса после маршрутизации.OUTPUT— изменение исходящих пакетов (редко используется).
Пример:
3. mangle — Изменение пакетов
mangle — Изменение пакетовИспользуется для модификации заголовков пакетов (QoS, TTL, маркировка). Цепочки:
PREROUTING— изменение пакета до маршрутизации.POSTROUTING— изменение перед отправкой.INPUT— изменение входящих пакетов.OUTPUT— изменение исходящих пакетов.FORWARD— изменение транзитных пакетов.
Пример:
4. raw — Обход механизмов отслеживания соединений
raw — Обход механизмов отслеживания соединенийИспользуется для исключения пакетов из отслеживания соединений (conntrack).
Цепочки:
PREROUTING— изменение входящих пакетов до обработки.OUTPUT— изменение исходящих пакетов до обработки.
Пример:
5. security — Политики безопасности SELinux
security — Политики безопасности SELinuxИспользуется для установки меток SELinux на пакеты. Цепочки:
INPUT— обработка входящих пакетов.OUTPUT— обработка исходящих пакетов.FORWARD— обработка пересылаемых пакетов.
Пример:
4. Основные операции
Добавление, удаление и изменение правил
Добавление правила (-A, -I)
-A, -I)-A(--append) — добавляет правило в конец цепочки.-I(--insert) — вставляет правило в указанную позицию (по умолчанию в начало).
Примеры:
Удаление правила (-D)
-D)Можно указать параметры правила или его номер (
iptables -L --line-numbers).
Примеры:
Замена правила (-R)
-R)-R(--replace) заменяет правило в указанной позиции.
Пример:
Очистка цепочек
Удаление всех правил (-F)
-F)-F(--flush) очищает указанную цепочку или все цепочки сразу.
Примеры:
Удаление всех непривязанных цепочек (-X)
-X)-Xудаляет пустые пользовательские цепочки.
Пример:
Установка политики по умолчанию (-P)
-P)-P(--policy) задаёт правило по умолчанию для цепочки.
Примеры:
Создание и удаление пользовательских цепочек
Создание цепочки (-N)
-N)-N(--new-chain) создаёт пользовательскую цепочку.
Пример:
Применение пользовательской цепочки
Можно перенаправлять пакеты в неё через
-j.
Пример:
Удаление пользовательской цепочки (-X)
-X)Цепочка должна быть пустой (без правил).
Пример:
5. Фильтрация пакетов
Фильтрация по протоколу
Параметр:
-p <протокол>Описание: Указывает, какой протокол (например,
tcp,udp,icmp,all) используется для фильтрации пакетов.Пример:
Фильтрация по IP-адресу
Параметры:
-s <ip-адрес>— фильтрация по источнику-d <ip-адрес>— фильтрация по адресу назначения
Описание: Ограничивает действие правила только для пакетов с указанным IP-адресом источника или назначения.
Пример:
Фильтрация по порту
Параметры:
--sport <порт>— порт источника--dport <порт>— порт назначения
Описание: Применяется для фильтрации TCP/UDP-пакетов по номерам портов.
Пример:
Фильтрация по состоянию соединения
Параметр:
-m state --state <состояние>Описание: Используется для фильтрации пакетов по состоянию соединения. Возможные состояния:
NEW— новое соединениеESTABLISHED— уже установленные соединенияRELATED— связанные с уже установленными соединениямиINVALID— недопустимые пакеты
Пример:
6. Цели (-j target)
-j target)Цель (target) определяет, что делать с пакетом, если он соответствует правилу.
Основные цели
ACCEPT — Разрешить пакет
Пакет пропускается через брандмауэр. Пример:
DROP — Отбросить пакет
Пакет просто удаляется без уведомления отправителя. Пример:
REJECT — Отклонить пакет с уведомлением
Отправителю приходит сообщение о невозможности доставки. Пример:
NAT и манипуляция с адресами
MASQUERADE — Замена исходного IP (для динамических IP)
Применяется в POSTROUTING для скрытия локальных адресов при доступе в интернет.
Пример:
SNAT (Source NAT) — Подмена исходного IP (для статических IP)
Пример:
DNAT (Destination NAT) — Перенаправление на другой IP
Пример (проброс порта 80 на внутренний сервер):
REDIRECT — Перенаправление на локальную машину
Часто используется для прозрачного проксирования. Пример (перенаправление HTTP на локальный прокси-сервер):
Логирование и маркировка
LOG — Запись информации о пакете в логи
Пример:
MARK — Установка метки пакета
Используется для QoS и маршрутизации (ip rule).
Пример:
Другие цели
QUEUE — Передача пакета в пространство пользователя (например, для обработки
nfqueue).RETURN — Завершение обработки и переход к следующему правилу в родительской цепочке.
TOS — Изменение поля TOS (тип сервиса) в заголовке IP.
7. Примеры конфигураций
Простой брандмауэр
Запрещаем весь входящий трафик, разрешаем только нужные соединения.
NAT и проброс портов
Перенаправляем внешний порт 80 на внутренний сервер 192.168.1.100:8080.
Для замены IP-адреса источника (SNAT вместо MASQUERADE, если внешний IP статический):
Прозрачный прокси
Перенаправляем весь HTTP-трафик (порт 80) на локальный прокси-сервер (порт 3128).
Ограничение скорости соединений
Запрещаем больше 10 новых соединений с одного IP за 60 секунд.
Логирование попыток подключения
Логируем все попытки подключения на 22-й порт (SSH).
Если нужно блокировать после логирования:
8. Управление правилами
Просмотр текущих правил
1. Просмотр всех правил в цепочках
Для отображения всех правил в таблице filter по умолчанию:
Вывод будет отображать все цепочки и их правила. Для отображения более детальной информации (например, с номерами строк):
2. Просмотр правил с номерами строк
Для удобства удаления или изменения правил можно использовать номера строк:
3. Просмотр правил в конкретной таблице
Для отображения правил в таблице nat:
4. Вывод подробной информации о правилах
Для более детализированного вывода можно добавить флаг -v (verbose):
5. Просмотр статистики
Для получения статистики по каждому правилу (с количеством совпадений и байт):
Сохранение и загрузка конфигурации
1. Сохранение текущей конфигурации
Для сохранения текущих правил в файл (на примере Ubuntu/Debian):
Для CentOS/RHEL можно использовать:
2. Загрузка сохранённой конфигурации
Для загрузки сохранённых правил из файла:
Для автоматической загрузки конфигурации при старте системы на Ubuntu/Debian используйте пакет iptables-persistent. Установите его:
На CentOS/RHEL конфигурация будет загружаться автоматически, если файл правил сохранён с помощью service iptables save.
3. Автоматическое сохранение и восстановление с помощью systemd
Если у вас настроен systemd, можно использовать следующий метод для автоматического сохранения:
и для восстановления:
9. Дополнительные утилиты и альтернативы
ip6tables
ip6tables — это утилита для настройки брандмауэра в системах, использующих IPv6. Синтаксис команд аналогичен iptables, но предназначен для работы с IPv6-адресами и протоколами.
Основные команды для ip6tables:
ip6tables:Добавление правила для IPv6:
Просмотр текущих правил:
Сохранение правил для
ip6tables: Для сохранения правил используйте:Загрузка правил:
nftables
nftables — это современная замена для iptables, ip6tables, arptables и ebtables. Он предоставляет единую и более гибкую платформу для настройки фильтрации пакетов, NAT и других механизмов обработки трафика. nftables используется в качестве стандартной утилиты в новых версиях Linux (начиная с ядра 3.13).
Основные команды для nftables:
nftables:Просмотр правил:
Добавление простого правила для фильтрации TCP-пакетов:
Сохранение текущих правил:
Загрузка правил:
Преимущества nftables:
Унифицированный синтаксис для IPv4, IPv6 и ARP.
Поддержка более гибких фильтров и обработки трафика.
Меньше настроек и конфигураций по сравнению с
iptables.Лучше масштабируемость и производительность.
GUI-инструменты для управления брандмауэром
1. UFW (Uncomplicated Firewall)
UFW — это удобный инструмент для управления брандмауэром на базе iptables в Linux, предназначенный для упрощения настройки брандмауэра, особенно для начинающих пользователей.
Основные команды:
Включение/выключение:
Разрешение порта:
Блокировка порта:
Просмотр текущих правил:
2. FirewallD
FirewallD — это динамическая система управления брандмауэром, которая использует nftables или iptables в качестве движка. Она предоставляет интерфейс командной строки и поддержку различных уровней безопасности.
Основные команды:
Включение/выключение:
Разрешение порта:
Просмотр активных правил:
Перезагрузка для применения изменений:
3. GUFW (Graphical User Interface for UFW)
GUFW — это графический интерфейс для UFW, позволяющий пользователям управлять настройками брандмауэра через визуальный интерфейс. Он прост в использовании и позволяет быстро настроить базовые правила фильтрации пакетов.
10. Заключение
Итоговое резюме
iptables — мощная и гибкая утилита для управления брандмауэром в Linux, которая предоставляет широкие возможности для фильтрации пакетов, настройки NAT, защиты от нежелательного трафика и повышения безопасности системы. Мы рассмотрели основные команды, таблицы и цепочки, фильтрацию пакетов по различным параметрам, цели (actions), а также способы управления правилами и их сохранения.
Для более современных систем, рекомендуется использовать nftables, который объединяет функции iptables, ip6tables и других утилит в одном инструменте, обеспечивая более гибкое управление трафиком.
Если нужно простое решение для управления брандмауэром, можно использовать такие утилиты, как UFW и FirewallD, которые предлагают интуитивно понятный интерфейс для настройки правил.
Полезные ссылки
Официальная документация
iptables:Документация по
nftables:Руководство по
UFW:Документация по
FirewallD:Руководство по настройке брандмауэра на Linux:
https://www.digitalocean.com/community/tutorials — Примеры настройки безопасности и брандмауэров на Linux.
Last updated