🖥️
Horvitz
Обо мне
  • Содержание
  • DevOps
    • Docker и Docker Compose
    • Ansible
    • Terraform
  • WEB
    • Nginx
  • Linux
    • Удобный терминал
    • IPtables
  • windows
    • Winget
  • VCS
    • Шпаргалка Git
    • Установка и настройка Gitlab EE
    • Установка и настройка Gitlab Runner
  • Мониторинг
    • Grafana
  • Артефакты
    • Nexus Sonatype
Powered by GitBook
On this page
  • 1. Введение
  • Что такое iptables
  • Основные функции и применение
  • 2. Общий синтаксис команды
  • Формат команды
  • Описание ключевых параметров
  • 3. Таблицы и цепочки
  • Описание таблиц
  • 4. Основные операции
  • Добавление, удаление и изменение правил
  • Очистка цепочек
  • Установка политики по умолчанию (-P)
  • Создание и удаление пользовательских цепочек
  • 5. Фильтрация пакетов
  • Фильтрация по протоколу
  • Фильтрация по IP-адресу
  • Фильтрация по порту
  • Фильтрация по состоянию соединения
  • 6. Цели (-j target)
  • Основные цели
  • NAT и манипуляция с адресами
  • Логирование и маркировка
  • Другие цели
  • 7. Примеры конфигураций
  • Простой брандмауэр
  • NAT и проброс портов
  • Прозрачный прокси
  • Ограничение скорости соединений
  • Логирование попыток подключения
  • 8. Управление правилами
  • Просмотр текущих правил
  • Сохранение и загрузка конфигурации
  • 9. Дополнительные утилиты и альтернативы
  • ip6tables
  • nftables
  • GUI-инструменты для управления брандмауэром
  • 10. Заключение
  • Итоговое резюме
  • Полезные ссылки

Was this helpful?

Edit on GitHub
  1. Linux

IPtables

Документация по iptables

1. Введение

Что такое iptables

iptables — это утилита командной строки для управления сетевыми пакетами в Linux. Она взаимодействует с подсистемой ядра netfilter и позволяет контролировать входящий, исходящий и проходящий через систему трафик.

iptables работает по принципу набора правил, организованных в таблицы и цепочки. Каждое правило определяет, что делать с пакетом на основе его параметров (IP-адрес, порт, протокол, состояние соединения и т. д.).

Основные функции и применение

🔹 Фильтрация трафика (брандмауэр)

  • Блокировка нежелательных подключений.

  • Разрешение доступа только определённым сервисам.

  • Ограничение соединений по частоте (анти-DDoS).

🔹 NAT (трансляция сетевых адресов)

  • Подмена IP-адресов для скрытия локальной сети.

  • Проброс портов (Port Forwarding) для доступа к внутренним сервисам.

  • Балансировка нагрузки через SNAT/DNAT.

🔹 Логирование и мониторинг

  • Запись информации о попытках подключения.

  • Анализ сетевой активности для обнаружения атак.

🔹 Маршрутизация и манипуляция с пакетами

  • Изменение приоритета трафика.

  • Перенаправление запросов на другие сервера.

  • Прозрачный прокси через REDIRECT.

iptables активно используется в серверах, маршрутизаторах, VPN-шлюзах и встраиваемых устройствах для управления сетевой безопасностью и маршрутизацией.

2. Общий синтаксис команды

Формат команды

iptables [-t <таблица>] <действие> <цепочка> [опции] -j <цель>

Где:

  • -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. Пример:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100

-A (Append)

Добавляет правило в конец указанной цепочки. Пример:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

-D (Delete)

Удаляет правило. Можно указать либо параметры правила, либо его номер (iptables -L --line-numbers). Пример:

iptables -D INPUT -p tcp --dport 22 -j ACCEPT
iptables -D INPUT 3  # Удалить третье правило в INPUT

-I (Insert)

Вставляет правило в указанную позицию (по умолчанию в начало). Пример:

iptables -I INPUT 1 -p icmp -j ACCEPT

-F (Flush)

Очищает все правила в цепочке (или во всех цепочках, если без аргумента). Пример:

iptables -F INPUT  # Очистить только INPUT
iptables -F        # Очистить все цепочки

-P (Policy)

Устанавливает политику по умолчанию для цепочки. Пример:

iptables -P INPUT DROP  # Запретить весь входящий трафик

-N (New Chain)

Создаёт новую пользовательскую цепочку. Пример:

iptables -N MYCHAIN

-X (Delete Chain)

Удаляет пустую пользовательскую цепочку. Пример:

iptables -X MYCHAIN

3. Таблицы и цепочки

Описание таблиц

В iptables есть несколько таблиц, каждая из которых отвечает за определённые типы обработки пакетов.

1. filter — Фильтрация трафика (по умолчанию)

Используется для разрешения или блокировки пакетов. Это основная таблица брандмауэра. Цепочки:

  • INPUT — обработка пакетов, адресованных локальному хосту.

  • OUTPUT — обработка пакетов, исходящих с локального хоста.

  • FORWARD — обработка пакетов, проходящих через систему (маршрутизация).

Пример:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # Разрешить SSH

2. nat — Трансляция сетевых адресов (NAT)

Используется для изменения IP-адресов и портов в пакетах. Цепочки:

  • PREROUTING — изменение адреса пакета перед маршрутизацией.

  • POSTROUTING — изменение адреса после маршрутизации.

  • OUTPUT — изменение исходящих пакетов (редко используется).

Пример:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.100

3. mangle — Изменение пакетов

Используется для модификации заголовков пакетов (QoS, TTL, маркировка). Цепочки:

  • PREROUTING — изменение пакета до маршрутизации.

  • POSTROUTING — изменение перед отправкой.

  • INPUT — изменение входящих пакетов.

  • OUTPUT — изменение исходящих пакетов.

  • FORWARD — изменение транзитных пакетов.

Пример:

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1

4. raw — Обход механизмов отслеживания соединений

Используется для исключения пакетов из отслеживания соединений (conntrack). Цепочки:

  • PREROUTING — изменение входящих пакетов до обработки.

  • OUTPUT — изменение исходящих пакетов до обработки.

Пример:

iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK

5. security — Политики безопасности SELinux

Используется для установки меток SELinux на пакеты. Цепочки:

  • INPUT — обработка входящих пакетов.

  • OUTPUT — обработка исходящих пакетов.

  • FORWARD — обработка пересылаемых пакетов.

Пример:

iptables -t security -A INPUT -p tcp --dport 22 -j DROP

4. Основные операции

Добавление, удаление и изменение правил

Добавление правила (-A, -I)

  • -A (--append) — добавляет правило в конец цепочки.

  • -I (--insert) — вставляет правило в указанную позицию (по умолчанию в начало).

Примеры:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # Разрешить SSH
iptables -I INPUT 1 -p icmp -j DROP  # Блокировать ICMP (ping), вставляя в начало цепочки

Удаление правила (-D)

  • Можно указать параметры правила или его номер (iptables -L --line-numbers).

Примеры:

iptables -D INPUT -p tcp --dport 22 -j ACCEPT  # Удалить правило по параметрам
iptables -D INPUT 2  # Удалить второе правило в цепочке INPUT

Замена правила (-R)

  • -R (--replace) заменяет правило в указанной позиции.

Пример:

iptables -R INPUT 2 -p tcp --dport 22 -j DROP  # Заменить второе правило, блокируя SSH

Очистка цепочек

Удаление всех правил (-F)

  • -F (--flush) очищает указанную цепочку или все цепочки сразу.

Примеры:

iptables -F INPUT  # Очистить только INPUT
iptables -F        # Очистить все цепочки

Удаление всех непривязанных цепочек (-X)

  • -X удаляет пустые пользовательские цепочки.

Пример:

iptables -X

Установка политики по умолчанию (-P)

  • -P (--policy) задаёт правило по умолчанию для цепочки.

Примеры:

iptables -P INPUT DROP   # По умолчанию блокировать весь входящий трафик
iptables -P FORWARD DROP # Блокировать пересылаемый трафик
iptables -P OUTPUT ACCEPT # Разрешить весь исходящий трафик

Создание и удаление пользовательских цепочек

Создание цепочки (-N)

  • -N (--new-chain) создаёт пользовательскую цепочку.

Пример:

iptables -N MYCHAIN

Применение пользовательской цепочки

  • Можно перенаправлять пакеты в неё через -j.

Пример:

iptables -A INPUT -p tcp --dport 8080 -j MYCHAIN

Удаление пользовательской цепочки (-X)

  • Цепочка должна быть пустой (без правил).

Пример:

iptables -F MYCHAIN  # Очистить цепочку
iptables -X MYCHAIN  # Удалить цепочку

5. Фильтрация пакетов

Фильтрация по протоколу

  • Параметр: -p <протокол>

  • Описание: Указывает, какой протокол (например, tcp, udp, icmp, all) используется для фильтрации пакетов.

  • Пример:

    iptables -A INPUT -p tcp -j ACCEPT  # Пропускаем TCP-пакеты

Фильтрация по IP-адресу

  • Параметры:

    • -s <ip-адрес> — фильтрация по источнику

    • -d <ip-адрес> — фильтрация по адресу назначения

  • Описание: Ограничивает действие правила только для пакетов с указанным IP-адресом источника или назначения.

  • Пример:

    iptables -A INPUT -s 192.168.1.100 -j DROP  # Блокируем трафик с IP 192.168.1.100
    iptables -A OUTPUT -d 10.0.0.5 -j ACCEPT     # Разрешаем выходящий трафик к 10.0.0.5

Фильтрация по порту

  • Параметры:

    • --sport <порт> — порт источника

    • --dport <порт> — порт назначения

  • Описание: Применяется для фильтрации TCP/UDP-пакетов по номерам портов.

  • Пример:

    iptables -A INPUT -p tcp --dport 80 -j ACCEPT   # Разрешаем HTTP (порт 80)
    iptables -A OUTPUT -p udp --sport 53 -j ACCEPT   # Разрешаем исходящий трафик с порта 53 (DNS)

Фильтрация по состоянию соединения

  • Параметр: -m state --state <состояние>

  • Описание: Используется для фильтрации пакетов по состоянию соединения. Возможные состояния:

    • NEW — новое соединение

    • ESTABLISHED — уже установленные соединения

    • RELATED — связанные с уже установленными соединениями

    • INVALID — недопустимые пакеты

  • Пример:

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

6. Цели (-j target)

Цель (target) определяет, что делать с пакетом, если он соответствует правилу.

Основные цели

ACCEPT — Разрешить пакет

Пакет пропускается через брандмауэр. Пример:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # Разрешить SSH

DROP — Отбросить пакет

Пакет просто удаляется без уведомления отправителя. Пример:

iptables -A INPUT -p icmp -j DROP  # Блокировать ICMP (ping)

REJECT — Отклонить пакет с уведомлением

Отправителю приходит сообщение о невозможности доставки. Пример:

iptables -A INPUT -p tcp --dport 80 -j REJECT

NAT и манипуляция с адресами

MASQUERADE — Замена исходного IP (для динамических IP)

Применяется в POSTROUTING для скрытия локальных адресов при доступе в интернет. Пример:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

SNAT (Source NAT) — Подмена исходного IP (для статических IP)

Пример:

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.5

DNAT (Destination NAT) — Перенаправление на другой IP

Пример (проброс порта 80 на внутренний сервер):

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80

REDIRECT — Перенаправление на локальную машину

Часто используется для прозрачного проксирования. Пример (перенаправление HTTP на локальный прокси-сервер):

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128

Логирование и маркировка

LOG — Запись информации о пакете в логи

Пример:

iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: "

MARK — Установка метки пакета

Используется для QoS и маршрутизации (ip rule). Пример:

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 1

Другие цели

  • QUEUE — Передача пакета в пространство пользователя (например, для обработки nfqueue).

  • RETURN — Завершение обработки и переход к следующему правилу в родительской цепочке.

  • TOS — Изменение поля TOS (тип сервиса) в заголовке IP.

7. Примеры конфигураций

Простой брандмауэр

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

iptables -P INPUT DROP   # Блокируем всё входящее
iptables -P FORWARD DROP # Блокируем пересылаемый трафик
iptables -P OUTPUT ACCEPT # Разрешаем исходящий трафик

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  # Разрешаем существующие соединения
iptables -A INPUT -p tcp --dport 22 -j ACCEPT  # Разрешаем SSH
iptables -A INPUT -p tcp --dport 80 -j ACCEPT  # Разрешаем HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Разрешаем HTTPS

iptables -A INPUT -p icmp -j ACCEPT  # Разрешаем ping

NAT и проброс портов

Перенаправляем внешний порт 80 на внутренний сервер 192.168.1.100:8080.

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080
iptables -t nat -A POSTROUTING -j MASQUERADE

Для замены IP-адреса источника (SNAT вместо MASQUERADE, если внешний IP статический):

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.5

Прозрачный прокси

Перенаправляем весь HTTP-трафик (порт 80) на локальный прокси-сервер (порт 3128).

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3128

Ограничение скорости соединений

Запрещаем больше 10 новых соединений с одного IP за 60 секунд.

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name SSH -j DROP

Логирование попыток подключения

Логируем все попытки подключения на 22-й порт (SSH).

iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: "

Если нужно блокировать после логирования:

iptables -A INPUT -p tcp --dport 22 -j DROP

8. Управление правилами

Просмотр текущих правил

1. Просмотр всех правил в цепочках

Для отображения всех правил в таблице filter по умолчанию:

iptables -L

Вывод будет отображать все цепочки и их правила. Для отображения более детальной информации (например, с номерами строк):

iptables -L --line-numbers

2. Просмотр правил с номерами строк

Для удобства удаления или изменения правил можно использовать номера строк:

iptables -L -n --line-numbers

3. Просмотр правил в конкретной таблице

Для отображения правил в таблице nat:

iptables -t nat -L

4. Вывод подробной информации о правилах

Для более детализированного вывода можно добавить флаг -v (verbose):

iptables -L -v

5. Просмотр статистики

Для получения статистики по каждому правилу (с количеством совпадений и байт):

iptables -L -v -n

Сохранение и загрузка конфигурации

1. Сохранение текущей конфигурации

Для сохранения текущих правил в файл (на примере Ubuntu/Debian):

sudo iptables-save > /etc/iptables/rules.v4

Для CentOS/RHEL можно использовать:

sudo service iptables save

2. Загрузка сохранённой конфигурации

Для загрузки сохранённых правил из файла:

sudo iptables-restore < /etc/iptables/rules.v4

Для автоматической загрузки конфигурации при старте системы на Ubuntu/Debian используйте пакет iptables-persistent. Установите его:

sudo apt-get install iptables-persistent

На CentOS/RHEL конфигурация будет загружаться автоматически, если файл правил сохранён с помощью service iptables save.

3. Автоматическое сохранение и восстановление с помощью systemd

Если у вас настроен systemd, можно использовать следующий метод для автоматического сохранения:

sudo systemctl enable iptables

и для восстановления:

sudo systemctl restart iptables

9. Дополнительные утилиты и альтернативы

ip6tables

ip6tables — это утилита для настройки брандмауэра в системах, использующих IPv6. Синтаксис команд аналогичен iptables, но предназначен для работы с IPv6-адресами и протоколами.

Основные команды для ip6tables:

  • Добавление правила для IPv6:

    ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT  # Разрешить SSH для IPv6
  • Просмотр текущих правил:

    ip6tables -L
  • Сохранение правил для ip6tables: Для сохранения правил используйте:

    sudo ip6tables-save > /etc/iptables/rules.v6
  • Загрузка правил:

    sudo ip6tables-restore < /etc/iptables/rules.v6

nftables

nftables — это современная замена для iptables, ip6tables, arptables и ebtables. Он предоставляет единую и более гибкую платформу для настройки фильтрации пакетов, NAT и других механизмов обработки трафика. nftables используется в качестве стандартной утилиты в новых версиях Linux (начиная с ядра 3.13).

Основные команды для nftables:

  • Просмотр правил:

    nft list ruleset
  • Добавление простого правила для фильтрации TCP-пакетов:

    nft add rule ip filter input tcp dport 22 accept
  • Сохранение текущих правил:

    nft list ruleset > /etc/nftables.conf
  • Загрузка правил:

    nft -f /etc/nftables.conf

Преимущества nftables:

  • Унифицированный синтаксис для IPv4, IPv6 и ARP.

  • Поддержка более гибких фильтров и обработки трафика.

  • Меньше настроек и конфигураций по сравнению с iptables.

  • Лучше масштабируемость и производительность.


GUI-инструменты для управления брандмауэром

1. UFW (Uncomplicated Firewall)

UFW — это удобный инструмент для управления брандмауэром на базе iptables в Linux, предназначенный для упрощения настройки брандмауэра, особенно для начинающих пользователей.

Основные команды:

  • Включение/выключение:

    sudo ufw enable
    sudo ufw disable
  • Разрешение порта:

    sudo ufw allow 22/tcp  # Разрешить SSH
  • Блокировка порта:

    sudo ufw deny 80/tcp  # Заблокировать HTTP
  • Просмотр текущих правил:

    sudo ufw status verbose

2. FirewallD

FirewallD — это динамическая система управления брандмауэром, которая использует nftables или iptables в качестве движка. Она предоставляет интерфейс командной строки и поддержку различных уровней безопасности.

Основные команды:

  • Включение/выключение:

    sudo systemctl start firewalld
    sudo systemctl stop firewalld
  • Разрешение порта:

    sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
  • Просмотр активных правил:

    sudo firewall-cmd --list-all
  • Перезагрузка для применения изменений:

    sudo firewall-cmd --reload

3. GUFW (Graphical User Interface for UFW)

GUFW — это графический интерфейс для UFW, позволяющий пользователям управлять настройками брандмауэра через визуальный интерфейс. Он прост в использовании и позволяет быстро настроить базовые правила фильтрации пакетов.

10. Заключение

Итоговое резюме

iptables — мощная и гибкая утилита для управления брандмауэром в Linux, которая предоставляет широкие возможности для фильтрации пакетов, настройки NAT, защиты от нежелательного трафика и повышения безопасности системы. Мы рассмотрели основные команды, таблицы и цепочки, фильтрацию пакетов по различным параметрам, цели (actions), а также способы управления правилами и их сохранения. Для более современных систем, рекомендуется использовать nftables, который объединяет функции iptables, ip6tables и других утилит в одном инструменте, обеспечивая более гибкое управление трафиком.

Если нужно простое решение для управления брандмауэром, можно использовать такие утилиты, как UFW и FirewallD, которые предлагают интуитивно понятный интерфейс для настройки правил.

Полезные ссылки

  1. Официальная документация iptables:

  2. Документация по nftables:

  3. Руководство по UFW:

  4. Документация по FirewallD:

  5. Руководство по настройке брандмауэра на Linux:

PreviousУдобный терминалNextWinget

Last updated 2 months ago

Was this helpful?

— Примеры настройки безопасности и брандмауэров на Linux.

https://ipset.netfilter.org/iptables-manpages.html
https://wiki.nftables.org/
https://help.ubuntu.com/community/UFW
https://firewalld.org/documentation/
https://linux.die.net/man/8/iptables
https://www.digitalocean.com/community/tutorials