Обзор и практическое использование Iptables

    Команда Simple-Server
    03.06.2026
    13 мин

    Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.

    Кратко о задаче

    Как уже было упомянуто ранее, Iptables присутствует практически в любом дистрибутиве Linux, как в самых распространенных (Ubuntu, Debian, RHEL), так и в таких дистрибутивах, как openSUSE, Arch Linux, Gentoo и т.д. Для начала проверим, присутствует ли Iptables на сервере. Для этого необходимо вывести версию утилиты, выполнив команду:

    Если в ответе отобразилась версия, то Iptables уже присутствует в системе. Если же в ответ вернулось сообщение iptables: command not found, то утилиту необходимо установить вручную. Ниже описана установка Iptables с помощью пакетных менеджеров в различных дистрибутивах семейства Linux. Также Iptables можно скомпилировать и установить из исходного кода.

    Для дистрибутивов на основе APT (Ubuntu/Debian/Linux Mint/Kali Linux) необходимо выполнить команду:

    Все команды необходимо выполнить от имени пользователя root или от обычного пользователя, но с правами sudo.

    В своей работе Iptables использует механизм правил (rules). Правила контролируют входящий и исходящий трафики и состоят из цепочек, которые разрешают или блокируют трафик.

    Более подробный алгоритм работы Iptables описан ниже:

    1. Сетевые пакеты проходят через последовательность(и) цепочек;
    2. Когда сетевой пакет проходит через цепочку, к нему применяются все правила содержащиеся в текущей цепочки. В процессе прохождения сетевого пакета, происходит его сверка на соответствие ранее заданным критериям. Если пакет не соответствует критерию, то к нему применяется определенное действие. Под действием подразумевают какую-нибудь операцию, например, на запрет или разрешение трафика.

    При работе с Iptables можно столкнуться со следующими терминами:

    • Цепочка — последовательность или набор правил, которые определяют как будет обработан трафик;

    • Правила — определенные действия. Содержат критерии и цель;

    • Модуль — дополнительный функционал который добавляет новые опции в Iptables. Благодаря чему можно создавать более обширные и сложные правила для фильтрации трафика;

    • Таблица — это абстракция в Iptables, в которой хранятся цепочки правил. В Iptables присутствуют следующие таблицы: Security , Raw , NAT , Filter , Mangle. Описание каждой таблицы приведено ниже.

    • Таблица Filter — таблица по умолчанию. Использует 3 цепочки: OUTPUT, FORWARD, INPUT:

    Таблица Filter — таблица по умолчанию. Использует 3 цепочки: OUTPUT, FORWARD, INPUT:

    INPUTУправляет входящими соединениями. В качестве примера можно привести использование протокола SSH.
    FORWARDУправляет входящими соединениями, которые не поступают локально. Например, такая ситуация обычно происходит на маршрутизаторе.
    OUTPUTУправляет исходящими соединений. В качестве примера можно привести переход к какому-либо сайту при помощи браузера.

    Управляет входящими соединениями. В качестве примера можно привести использование протокола SSH.

    Управляет входящими соединениями, которые не поступают локально. Например, такая ситуация обычно происходит на маршрутизаторе.

    Управляет исходящими соединений. В качестве примера можно привести переход к какому-либо сайту при помощи браузера.

    • Таблица NAT. Использует 3 цепочки: PREROUTING, POSTROUTING, OUTPUT:

    Таблица NAT. Использует 3 цепочки: PREROUTING, POSTROUTING, OUTPUT:

    PREROUTINGОпределяет IP-адрес назначения пакета.
    POSTROUTINGИзменяет IP-адрес источника.
    OUTPUTЦепочка изменяет целевой адрес пакетов.

    Определяет IP-адрес назначения пакета.

    Изменяет IP-адрес источника.

    Цепочка изменяет целевой адрес пакетов.

    • Таблица Mangle предназначена для изменения IP-заголовков пакета.

    • Таблица Raw предназначена для предоставления механизма для маркировки пакетов, с целью отказа от отслеживания соединений.

    • Таблица Security предназначена для взаимодействия с различными механизмами безопасностями ОС, например с SELinux.

    Таблица Raw предназначена для предоставления механизма для маркировки пакетов, с целью отказа от отслеживания соединений.

    Таблица Security предназначена для взаимодействия с различными механизмами безопасностями ОС, например с SELinux.

    Правила, используемые в Iptables, предназначены для контроля входящего и исходящего сетевого трафика. Также с помощью правил можно настраивать проброс портов и создавать правила для разных протоколов.

    Правила состоят из критериев и цели. Критерии правил сопоставляются, а действия применяются к целевому объекту. Если критерий не удается сопоставить, то происходит обработка следующего правила. Решения, которые принимает Iptables, называют действиями. В таблице ниже приведен список основных действий с соединениями:

    ACCEPTОткрывает (разрешает) соединение.
    DROPЗакрывает соединение без отправки ответа клиенту.
    QUEUEОтправляет пакет в очередь для дальнейшего взаимодействия со сторонним приложением.
    RETURNВозвращает пакет на одно правило назад, прерывая обработку текущего правила.
    REJECTБлокирует соединение. В ответ будет отправлено сообщение об ошибке.
    DENYОтбрасывает входящее соединение. Отправка ответа не предусмотрена.
    ESTABLISHEDСоединение установлено так как поступил уже не первый пакет в рамках данного сеанса.

    Открывает (разрешает) соединение.

    Закрывает соединение без отправки ответа клиенту.

    Отправляет пакет в очередь для дальнейшего взаимодействия со сторонним приложением.

    Возвращает пакет на одно правило назад, прерывая обработку текущего правила.

    Блокирует соединение. В ответ будет отправлено сообщение об ошибке.

    Отбрасывает входящее соединение. Отправка ответа не предусмотрена.

    Соединение установлено так как поступил уже не первый пакет в рамках данного сеанса.

    Практическое применение Iptables

    Рассмотрим использование Iptables на практике. Все перечисленные ниже команды будут работать на любом Linux-дистрибутиве. Все команды Iptables необходимо выполнить от имени пользователя root или от имени обычного пользователя, но с правами sudo.

    Для того чтобы вывести текущую конфигурацию (включая все доступные правила) Iptables, достаточно выполнить одну команду:

    Дополнительно доступен более расширенный формат вывода, в котором отображается количество и размер обработанных пакетов в цепочках INPUT, FORWARD, OUTPUT, а также вывод IP-адреса и номеров портов в числовом формате:

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

    Также можно указать конкретную цепочку, чтобы отобразить правила только для данной цепочки. Например:

    iptables -L INPUT iptables -L FORWARD iptables -L OUTPUT

    При первом использование Iptables не создает и не хранит какие-либо цепочки правил, поэтому вывод команд выше будет пустым.

    Чтобы заблокировать требуемый IP-адрес, нужно добавить правило в цепочку INPUT. Также необходимо указать таблицу. В команде ниже имя таблицы задано явно. Если ключ t не используется, то правило попадает в таблицу по умолчанию — Filter. В качестве примера заблокируем IP-адрес 10.0.36.126:

    iptables -t filter -A INPUT -s 10.0.36.126 -j REJECT

    При блокировке конкретного IP-адреса были использованы такие опции, как:

    • t — указывает таблицу, для которой будет применимо правило;
    • A — указывает, в какую цепочку необходимо добавить правило. В данном примере указана цепочка INPUT;
    • s — указывает целевой объект (источник), к которому необходимо применить действие;
    • j — указывает действие, которое должно быть выполнено. В данном примере трафик будет отклонен (действие REJECT).

    Чтобы заблокировать всю подсеть сразу, ее необходимо указать в опции s:

    iptables -A INPUT -s 10.0.36.0/24 -j REJECT

    **** Также маску подсети можно задать в полном формате:

    iptables -A INPUT -s 10.0.36.0/255.255.255.0 -j REJECT

    При необходимости блокировки исходящего трафика на конкретный IP-адрес, используется цепочка OUTPUT и опция d:

    iptables -A OUTPUT -d 10.0.36.126 -j REJECT

    Производить блокировку можно по портам. Для этого используется опция dport, в которой указывается порт необходимой службы. Также вместо порта можно задать имя службы. Обязательным условием является указание конкретного протокола. В качестве примера заблокируем SSH-соединения с хоста 10.0.36.126 для протокола TCP:

    iptables -A INPUT -p tcp --dport ssh -s 10.0.36.126 -j REJECT

    Для протокола UDP команда следующая:

    iptables -A INPUT -p udp --dport ssh -s 10.0.36.126 -j REJECT

    Команда ниже также заблокирует SSH-соединения с хоста 10.0.36.126, но вместо имени используется порт сервиса SSH:

    iptables -A INPUT -p tcp --dport 22 -s 10.0.36.126 -j REJECT

    Для блокировки SSH-соединения с любого IP-адреса для протокола TCP необходимо выполнить команду:

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

    Для того чтобы открыть (разрешить) трафик для определенного IP-адреса, необходимо использовать действие ACCEPT. В примере ниже разрешаем весь трафик к серверу для клиента с IP-адресом 10.0.36.126:

    iptables -A INPUT -s 10.0.36.126 -j ACCEPT

    Чтобы разрешить трафик с определенного диапазона IP-адресов, например с 10.0.36.126 до 10.0.36.156, необходимо воспользоваться модулем iprange и опцией --src-range:

    iptables -A INPUT -m iprange --src-range 10.0.36.126-10.0.36.156 -j ACCEPT
    • iprange — модуль, предназначенный для работы с диапазоном IP-адресов.
    • --src-range — опция, которая задает диапазон IP-адресов отправителя.

    Для того чтобы выполнить обратную операцию (разрешить весь трафик от сервера к определенным диапазонам IP-адресов — с 10.0.36.126 до 10.0.36.156), необходимо воспользоваться опцией --dst-range:

    iptables -A OUTPUT -m iprange --dst-range 10.0.36.126-10.0.36.156 -j ACCEPT
    • --dst-range — опция, которая задает диапазон IP-адресов получателя.

    Для того чтобы открыть порт, необходимо задать протокол через опцию p. В качестве протокола поддерживаются такие значения, как tcp, udp и т.д. С полным списком поддерживаемых протоколов можно ознакомиться в файле /etc/protocols:

    Порт задается в опции dport. Как и при блокировке портов, можно использовать как числовые значения, так и имена сервисов. Для открытия используется действие ACCEPT.

    Откроем 22 порт по протоколу TCP для адреса 10.0.36.126:

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

    Для того чтобы открыть сразу несколько портов, используется модуль multiport и опция dports, где через запятую перечислены порты, которые должны быть открыты. Откроем порты 22, 80, 443 по протоколу TCP для адреса 10.0.36.126:

    iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -s 10.0.36.126 -j ACCEPT
    • multiport — модуль, предназначенный для работы с несколькими портами одновременно.
    • dports — опция для работы с несколькими портами. Не путать с опцией dport, которая поддерживает работу только с одним портом.

    Одна из популярных функций в Iptables — запрет на прохождение ICMP-трафика, который генерирует утилита ping. Для того чтобы запретить входящий ICMP-трафик, необходимо выполнить следующую команду:

    iptables -A INPUT -j DROP -p icmp --icmp-type echo-request

    **** При запуске команды ping команда выше не будет отображать ошибку. Если необходимо добавить сообщение об ошибке «Destination Port Unreachable», то в команде необходимо заменить действие DROP на REJECT:

    iptables -A INPUT -j REJECT -p icmp --icmp-type echo-request

    Чтобы разрешить ранее заблокированный трафик ICMP, необходимо выполнить команду:

    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

    Также стоит отметить следующее: если ICMP-трафик ранее был заблокирован при помощи команды:

    iptables -A INPUT -j DROP -p icmp --icmp-type echo-request

    а затем разрешен с помощью команды:

    iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

    то он всё равно будет заблокирован, так как правило блокировки ICMP трафика будет первым в цепочке INPUT.

    Запрет трафика по MAC-адресу

    Помимо использования IP-адресов, трафик можно заблокировать, используя MAC-адрес устройства. Ниже предоставлен пример блокировки трафика для устройства с MAC-адресом 00:0c:29:ed:a9:60:

    iptables -A INPUT -m mac --mac-source 00:0c:29:ed:a9:60 -j DROP
    • mac — модуль, предназначенный для работы с MAC-адресами устройств.
    • mac-source — опция, в которой задается MAC-адрес устройства.

    Разрешение трафика по MAC-адресу

    Чтобы разрешить трафик с определенного MAC-адреса, необходимо выполнить следующую команду:

    iptables -A INPUT -m mac --mac-source 00:0c:29:ed:a9:60 -j ACCEPT

    Блокировка по MAC-адресу с помощью Iptables будет работать только в том случае, если MAC-адреса расположены в одном и том же сегменте сети. Для этих целей лучше всего подойдет блокировка по IP-адресу.

    Разрешение трафика на интерфейсе обратной петли (Loopback)

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

    iptables -A INPUT -i lo -j ACCEPT

    Для исходящего трафика команда выглядит следующим образом:

    iptables -A OUTPUT -o lo -j ACCEPT

    Ограничение сетевого доступа по расписанию

    Одной из интересных функций которые присутствуют в Iptables, является временное ограничение или разрешение трафика до необходимых сервисов или портов. По сути, это означает использование расписания. Предположим, мы хотим разрешить входящий доступ по протоколу SSH, который будет доступен только с понедельника по пятницу с 9 утра до 6 вечера. Команда будет выглядеть следующим образом:

    iptables -A INPUT -p tcp --dport 22 -m time --timestart 09:00 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
    • time — модуль для работы с временем;
    • timestart — время, когда правило начнет работу;
    • timestop — время завершения работы правила;
    • weekdays — указываются дни недели, перечисленные через запятую. в которых будет работать заданное правило. Поддерживаются следующие значения: Mon, Tue, Wed, Thu, Fri, Sat, Sun. Также можно использовать цифры от 1 до 7.

    Сохранение правил в Iptables

    По умолчанию, правила, создаваемые пользователем не сохраняются автоматически. Это означает, что после перезагрузки или выключения сервера правила удаляются. Чтобы сохранять правила, необходимо установить пакет iptables-persistent. Для этого воспользуемся командой:

    apt -y install iptables-persistent

    В процессе установки появится два диалоговых окна, в которых система предложит сохранить текущие правила в файл /etc/iptables/rules.v4 для IPv4:

    и в файл /etc/iptables/rules.v6 для IPv6:

    Чтобы сохранить все правила для протокола IPv4, необходимо выполнить команду:

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

    Для протокола IPv6-правил команда будет следующей:

    ip6tables-save > /etc/iptables/rules.v6

    Данный метод обладает существенным преимуществом — сохраненные правила можно восстановить из файла. Это может пригодиться, например, при переносе правил на другой хост. Для того чтобы восстановить ранее сохраненные правила, необходимо выполнить команду:

    iptables-restore < /etc/iptables/rules.v4
    • /etc/iptables/rules.v4 — путь до файла с ранее сохраненными правилами.

    При выполнении данной команды на другом хосте необходимо также заранее перенести файл с правилами и только потом выполнять команду.

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

    Ранее созданные правила в Iptables можно удалять. Для этого можно воспользоваться несколькими способами.

    Удаление конкретного правила

    Первый способ основан на удалении конкретного правила из одной цепочки с использованием порядкового номера этого правила. Для отображения нумерации правил воспользуемся командой:

    iptables -L --line-numbers

    Как можно увидеть, в цепочке INPUT у нас есть 2 правила, которые открывают порты 80 и 443 по протоколу TCP для адресов 10.0.36.126 (правило под номером 1 ) и для 10.0.36.127 (правило под номером 2). Удалим правило под номером 2 с помощью команды:

    Повторно выведем список всех правил в системе:

    iptables -L --line-numbers

    Правило под номером 2 было успешно удалено.

    Удаление всех правил одной цепочки

    Также существует еще один способ который заключается в удалении сразу всех правил для конкретной цепочки. Например, для цепочки OUTPUT команда будет следующей:

    Существует также способ, позволяющий удалить правила из всех цепочек сразу. Для этого достаточно выполнить:

    При выполнении данной команды необходимо проявлять повышенную осторожность, так как можно удалить необходимые вам правила.


    Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.

    VPS для проекта

    VPS с root-доступом, NVMe и поддержкой 24/7 на Simple-Server.

    StarterVDS

    490₽

    в месяц

    1 ядро

    1 ГБ RAM

    20 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Безлимитный трафик
    Заказать VPS
    Рекомендуем

    PerformanceVDS

    1190₽

    в месяц

    2 ядра

    4 ГБ RAM

    60 ГБ NVMe

    • 1 IPv4
    • KVM
    • Root-доступ
    • Базовая DDoS-защита
    Заказать VPS

    Нужна другая конфигурация или чистый VPS без панели?

    Все тарифы VPS

    Похожие статьи, которые могут быть вам интересны