Настройка iptables в Ubuntu Linux: правила, команды, примеры
Одно из самых распространенных и эффективных решений для защиты инфраструктуры Linux — утилита iptables. Она позволяет тонко настроить встроенный брандмауэр и играет важную роль в управлении сетевым трафиком. В этой статье подробно вникнем в суть работы iptables и научимся применять основные команды.

Что такое iptables
Iptables — утилита командной строки, которая позволяет настраивать брандмауэр Netfilter, встроенный в ядро Linux. Благодаря этому инструменту каждый входящий и исходящий пакет данных проверяется согласно преднастроенным правилам. По результатам проверки брандмауэр решает, пропускать трафик или блокировать.

Что дает использование iptables:
глубокий уровень контроля над трафиком;
высокую производительность за счет работы в ядре;
гибкость при создании правил фильтрации под конкретные задачи;
возможность блокировки, перенаправления и фильтрации IP-адресов, портов и протоколов;
поддержку Stateful-фильтрации с учетом состояния соединений.
Iptables позволяет выполнять не только банальную фильтрацию, но и более сложные сетевые задачи. Например, «раздавать» интернет-соединение компьютерам в локальной сети (masquerading) или «пробрасывать» порты. Проще говоря, утилита помогает обеспечить полный контроль над трафиком.
Процессы iptablesУстановка и подготовка к работе с iptables
Перед началом работы убедитесь, что iptables уже установлен в системе. Если нет — установите актуальную версию.
Проверка установки iptables
Для проверки используют команду iptables --version, которая выводит текущую версию утилиты. Дополнительно можно выполнить which iptables, чтобы проверить путь к бинарному файлу. Если команда возвращает строку с расположением исполняемого файла, значит утилита есть и готова к работе. В большинстве современных дистрибутивов Linux iptables предустановлена по умолчанию.
Установка iptables на Ubuntu
Обновите список пакетов:
Установите пакет iptables:
Правила iptables теряются после перезагрузки системы. Чтобы сохранить их и автоматически восстанавливать при запуске, установите дополнительный пакет:
При установке система предложит сохранить текущие пустые или настроенные правила. Тогда они не будут теряться при перезагрузках.
После установки можете повторить команду sudo iptables --version для подтверждения.
Основные концепции iptables
Начнем с таблиц. Существует пять видов:
filter — применяется для классической фильтрации пакетов. Это таблица, которая отвечает за контроль доступа. Именно здесь задаются правила для разрешения или блокировки трафика.
nat — отвечает за изменение сетевых адресов и портов, используется для маршрутизации, перенаправления трафика и проброса портов.
mangle — позволяет изменять параметры пакетов, например, метки, TTL и другие атрибуты. Применяется, когда нужны тонкие настройки обработки трафика.
raw — обрабатывает трафик до применения других таблиц. Используется для исключения пакетов из соединений, отслеживаемых системой Netfilter.
security — утверждает правила управления доступом (SELinux/MAC).
Краткое описание всех существующих таблиц:
Таблица | Назначение | Где обычно применяется |
filter | Основная фильтрация пакетов | Контроль доступа, брандмауэр |
nat | Изменение сетевых адресов и портов | NAT, проброс портов, маршрутизация |
mangle | Изменение параметров пакетов | Маркировка пакетов, QoS, изменение TTL |
raw | Исключение пакетов из отслеживания | Ранняя обработка трафика, тонкая оптимизация |
security | Установка меток безопасности (например, SELinux) | Принудительный контроль доступа (Mandatory Access Control - MAC) в системах типа SELinux |
Таблица filter:
Цепочка | Назначение |
INPUT | Контроль входящих соединений |
OUTPUT | Контроль исходящих соединений |
FORWARD | Обработка маршрутизируемых пакетов |
Таблица nat:
Цепочка | Назначение |
PREROUTING | Изменение адреса до маршрутизации |
POSTROUTING | Изменение адреса после маршрутизации |
OUTPUT | Применяется к исходящему трафику от локального процесса (используется реже, чем PREROUTING и POSTROUTING) |
Таблица mangle:
Цепочка | Назначение |
PREROUTING | Изменение пакетов до маршрутизации |
POSTROUTING | Изменение пакетов после маршрутизации |
INPUT | Изменение атрибутов входящих пакетов |
OUTPUT | Изменение атрибутов исходящих пакетов |
FORWARD | Изменение параметров транзитных пакетов |
Таблица raw:
Цепочка | Назначение |
INPUT | Применение политик безопасности к пакетам, поступающим на сам хост |
OUTPUT | Применение политик безопасности к пакетам, исходящим от самого хоста |
FORWARD | Применение политик безопасности к пакетам, которые проходят через хост (маршрутизируются) |
Перейдем к цепочкам. Цепочки — это упорядоченные списки правил, которые последовательно применяются для каждого пакета данных. Пакет проходит через одну или несколько цепочек в зависимости от его направления. В зависимости от направления трафика (входящего, исходящего или транзитного) и типа таблицы будет свой порядок обработки.
Цепочки iptablesЕсть стандартные встроенные цепочки и пользовательские, которые создаются администратором. В таблице — описание стандартных.
Цепочка | Обрабатываемый трафик | Описание |
INPUT | Входящие пакеты | Разрешение/блокировка доступа к сервисам на хосте |
OUTPUT | Исходящие пакеты | Контроль трафика, который отправляется системой наружу |
FORWARD | Транзитные пакеты, проходящие через хост | Контроль трафика в случаях, когда хост выступает маршрутизатором |
Правила и действия
Правило (rule) — это инструкция для брандмауэра. Она подсказывает инструменту фильтрации, что делать с сетевым пакетом, если он соответствует заданным условиям.
Примеры условий:
IP-адрес отправителя или получателя;
используемый протокол (TCP, UDP, ICMP);
номер порта;
интерфейс (eth0, wlan0);
направление (входящий/исходящий/транзитный);
состояние соединения.
Примеры правил в цепочкеДействие (target) определяет, как Netfilter будет обрабатывать пакеты, которые прошли проверку в правилах.
Действие | Описание | Результат |
ACCEPT | Принять пакет — разрешить пройти через цепочку или брандмауэр | Пакет продолжит движение к месту назначения |
DROP | Отбросить пакет — удаление без отправки уведомления отправителю | Отправитель не узнает о судьбе пакета — соединение просто зависнет |
REJECT | Отклонить пакет — удаление с отправкой отправителю уведомления об ошибке (например, ICMP-сообщение «Destination Unreachable») | Отправитель немедленно получает уведомление о блокировке пакета |
RETURN | Вернуть пакет — прекращение обработки пакета в текущей цепочке (встроенной или пользовательской) и возврат управления в вызывающую цепочку | Выход из пользовательских цепочек |
JUMP (Переход) | Перенаправление пакета из текущей цепочки в пользовательскую цепочку для дальнейшей обработки | Пакет переходит к обработке другим набором правил |
Порядок применение правил и действий:
Пакет обрабатывается, начиная с первого правила в цепочке и переходит к следующему, пока не будет найдено соответствие.
Если пакет соответствует всем условиям какого-либо правила, к нему применяется релевантное действие.
После применения терминального действия (ACCEPT, DROP, REJECT) обработка пакета в данной цепочке прекращается. Дальнейшие правила игнорируются.
Если пакет доходит до конца цепочки и не соответствует ни одному из правил, к нему применяется политика по умолчанию (Policy). Для безопасности это почти всегда DROP — блокировка всего, что явно не разрешено.
Концепция iptablesСинтаксис и основные команды iptables
Чтобы управлять брандмауэром, нужно четко указывать, что делать, где делать и для каких пакетов. Разберемся, какие команды применять.
Основной синтаксис правил и структура команд для работы с iptable
Общий синтаксис команды iptables такой:
Компонент | Назначение | Примеры |
sudo iptables | Вызывает утилиту с правами суперпользователя | sudo iptables -L |
-t [ТАБЛИЦА] | Указывает, в какой таблице работать. Если вы не назвали таблицу, по умолчанию будет использоваться filter | -t nat, -t filter |
-[ОПЕРАЦИЯ] | Указывает, что делать с правилом: добавить, удалить, просмотреть и т.д | -A (добавить), -D (удалить), -L (просмотреть) |
[ЦЕПОЧКА] | Обозначает цепочку, к которой применяется указанная операция | INPUT, FORWARD |
[УСЛОВИЯ] | Указывает условия соответствия пакета определенным параметрам, например, IP-адресу, порту, протоколу, состоянию | -p tcp, --dport 22, -s 192.168.1.1 |
-j [ДЕЙСТВИЕ] | Обозначает, что делать с пакетом, если он соответствует конкретным условиям | -j ACCEPT, -j DROP, -j REJECT |
Часто используемые команды
Есть команды для просмотра, добавления, удаления, очищения и сохранения правил в iptables. Разберем все основные.
Просмотр правил (-L)
sudo iptables -L | Показывает содержимое таблицы filter | Показывает правила цепочек INPUT, OUTPUT, FORWARD |
sudo iptables -L -v -n | Показывает правила, выводит количество пакетов и байтов, при этом не преобразовывая IP-адреса и порты в имена | Показывает, сколько пакетов и байтов обработано каждым правилом |
sudo iptables -t nat -L | Показывает правила в конкретной таблице | Показывает цепочки PREROUTING, POSTROUTING и правила NAT |
Добавление и удаление правил. Правила могут добавляться в окончание цепочки (-A) либо в конкретный номер строки (-I).
Добавить в конец | -A (Append) | Добавляет правило в самый конец цепочки |
Добавить по номеру | -I (Insert) | Вставляет правило в начало цепочки (или в позицию NUMBER при указании номера строки) |
Удалить по спецификации | -D (Delete) | Удаляет правило, если оно полностью указано и совпадает с существующим |
Удалить по номеру | -D (Delete) | Удаляет правило, если указан номер его строки |
Очистка правил и применение политик по умолчанию
Очистить все правила | -F (Flush) | Удаляет все правила из всех цепочек. С этой командой обращайтесь осторожно, чтобы случайно не потерять нужные настройки |
Установить политику | -P (Policy) | Устанавливает политику по умолчанию для цепочки. То есть обозначает, что делать с пакетами, которые не соответствуют ни одному правилу |
Сохранение правил. Чтобы настроенные с помощью iptables правила не терялись при перезагрузке системы, их нужно явно сохранить.
Установка сохранения | sudo apt install iptables-persistent | Устанавливает службу, которая автоматически сохраняет и восстанавливает правила |
Сохранить сейчас (IPv4) | sudo netfilter-persistent save (или sudo iptables-save > /etc/iptables/rules.v4) | Записывает текущие активные правила в постоянный файл конфигурации |
Просмотреть файл | cat /etc/iptables/rules.v4 | Проверяет, что правила корректно сохранены |
Примеры настройки iptables
Давайте от теории перейдем к практике и рассмотрим конкретные примеры применения правил и команд.
Как заблокировать или разрешить IP-адрес
Если нужно заблокировать входящие соединения с конкретного IP, команда будет выглядеть примерно так:
Это правило добавляется в цепочку INPUT. Оно заставит отбросить весь трафик, поступающий с указанного IP-адреса. Правило подходит для блокировки сомнительного или заведомо опасного источника.
Пример команды, разрешающей доступ с определенного IP:
Эта команда сделает так, что трафик с конкретного IP-адреса будет проходить без ограничений. Она используется для выделения узлов, в которых вы уверены.
Пример команды для блокировки доступа к определенному порту:
Она запрещает подключение по SSH от указанного IP. Применяется, если нужно повысить уровень безопасности внутри сети.
Как открыть и закрыть определенные порты
Можно с помощью DROP закрыть все, а затем открыть только то, что нужно. Это не очень гибкий, но наиболее безопасный подход. Если он вам не подходит, пользуйтесь отдельными командами.
Команда, чтобы разрешить входящий HTTP:
Открывает доступ к веб-серверу по порту 80 для всех пользователей.
Как разрешить HTTPS:
Позволяет всем пользователям подключаться к защищенному веб-сервису.
Пример разрешения SSH:
Открывает удаленный доступ к серверу. Нежелательно делать это для всех пользователей, поэтому для безопасности настройте ограничения.
Чтобы закрыть порт 80, выполните команду:
Команда запрещает подключение к веб-сервису. Подойдет для отключения или блокировки сервисов, которые редко используются или не используются вообще.
Как управлять ICMP-трафиком (Ping)
Управление ICMP-трафиком означает использование утилиты для проверки соединений в сетях на основе TCP/IP. Принцип такой — компьютер отправляет ICMP-сообщение Echo-Request, указывая IP-адрес узла, достижимость которого нужно проверить. Узел, получивший запрос, формирует и отправляет эхо-ответ (Echo-Reply). Такие операции можно разрешить или запретить.
Пропустить ICMP echo-request можно так:
Разрешает откликаться на ping. Это полезно для диагностики сетевых проблем.
Заблокировать echo-request:
Эта команда делает так, что сервер перестает отвечать на ping. Это поможет усложнить злоумышленниками задачу по сетевой разведке.
Можно разрешить ping только из локальной сети:
Благодаря команде узлы можно «прощупывать» только из корпоративной сети. Злоумышленникам доступ будет закрыт.
Как управлять трафиком по MAC-адресу
MAC-фильтрация может работать только на уровне Ethernet. К внешнему трафику она не применяется.
Как разрешить доступ по MAC:
Команда используется в локальных сетях и разрешает трафик от устройства с конкретным MAC-адресом.
Команда для запрета по MAC:
Команда в основном применяется для блокировки незарегистрированных устройств.
Как настроить NAT
Можно настроить маскарадинг (masquerading) — процесс, в котором адрес отправителя во внутренней сети будет динамически подменяться на адрес во внешней сети. Команда:
MASQUERADE определяет IP-адрес исходящего интерфейса для каждого пакета (более нагружает систему), в то время как SNAT использует зафиксированный адрес из опции --to-source (быстрее).
Пример команды для проброса порта 8080 на 80 веб-сервера:
Команда позволяет направлять внешний трафик на внутренний сервер. Она полезна, если нужно для опубликовать наружу внутренние ресурсы.
Как пробросить SSH на другой сервер:
Команда делает внутренний SSH доступным через внешний порт.
Чтобы было проще ориентироваться в примерах команд, воспользуйтесь сводной таблицей.
Категория | Что делает | Команда iptables | Когда и зачем нужна |
Блокировка IP | Блокирует входящий трафик от указанного IP | Блокирует входящий трафик от указанного IP | Используется для запрета нежелательных источников |
Разрешение IP | Разрешает трафик от указанного IP | iptables -A INPUT -s 192.168.1.50 -j ACCEPT | Добавляет доверенный узел в список разрешенных |
Блокировка IP по порту | Блокирует SSH от IP | iptables -A INPUT -p tcp --dport 22 -s 192.168.1.50 -j DROP | Улучшает безопасность SSH |
Открытие HTTP | Разрешает доступ к веб-серверу | iptables -A INPUT -p tcp --dport 80 -j ACCEPT | Делает сайт доступным |
Открытие HTTPS | Разрешает защищенный доступ | iptables -A INPUT -p tcp --dport 443 -j ACCEPT | Дает доступ к веб-сайту по протоколу TLS |
Открытие SSH | Разрешает удаленный доступ | iptables -A INPUT -p tcp --dport 22 -j ACCEPT | Позволяет администрировать сервер |
Закрытие HTTP | Запрещает доступ к порту 80 | iptables -A INPUT -p tcp --dport 80 -j DROP | Деактивирует веб-сервис |
Разрешение Ping | Разрешает ICMP echo-request | iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT | Позволяет проводить диагностику сети |
Запрет Ping | Запрещает ICMP echo-request | iptables -A INPUT -p icmp --icmp-type echo-request -j DROP | Не дает серверу отвечать на ping |
Разрешение Ping из внутренней сети | Разрешает ICMP только из подсети | iptables -A INPUT -p icmp -s 192.168.1.0/24 -j ACCEPT | Позволяет провести диагностику внутри LAN |
Разрешение MAC | Разрешает устройство по MAC-адресу | iptables -A INPUT -m mac --mac-source AA:BB:CC:DD:EE:FF -j ACCEPT | Используется внутри локальной сети |
Запрет MAC | Блокирует устройство по MAC-адресу | iptables -A INPUT -m mac --mac-source AA:BB:CC:DD:EE:FF -j DROP | Блокирует физическое устройство |
Маскарадинг | Позволяет с внутренних адресов выходить в интернет | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE | Используется при настройке интернет-шлюза |
Проброс веб-порта | Пробрасывает порт 8080 на внутренний 80 | iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.100:80 | Позволяет публиковать внутренние ресурсы |
Проброс SSH | Пробрасывает порт 2222 на внутренний 22 | iptables -t nat -A PREROUTING -p tcp --dport 2222 -j DNAT --to 192.168.1.200:22 | Обеспечивает доступ к SSH на другом сервере |

Расширенные настройки и советы по безопасности
Логирование в iptables критически важно для мониторинга, диагностики проблем и обнаружения попыток атак. По умолчанию логи попадают в kernel buffer (читаются через dmesg), а затем syslog daemon перенаправляет их на основе конфигурации /etc/syslog.conf или rsyslog.conf. Реально логи обычно пишутся в /var/log/kern.log на Ubuntu/Debian-системах.
Действие LOG не блокирует и не разрешает пакеты — оно просто записывает информацию и передает пакет дальше по цепочке. Поставьте его перед правилом DROP или REJECT.
Варианты действия:
-j LOG указывает на необходимость логирования;
--log-prefix"text" добавляет префикс к сообщению журнала, что упрощает поиск и фильтрацию записей.
--log-level 7 указывает уровень серьезности (7 = debug, часто используется для iptables).
Пример:
Чтобы посмотреть записи в системном журнале, можно использовать grep. Пример:
Использование state и limit
Для управления состоянием соединений и ограничения частоты можно применять расширенные матчи Conntrack (Connection Tracking). Рассказываем про два основных.
Расширенный матч state
Для отслеживания состояния каждого сетевого соединения подойдет расширенный матч state, который использует подсистему ядра Linux Conntrack.
Состояние | Описание | Применение |
NEW | Пакет начинает новое соединение. Например, первый пакет SYN | Используется для разрешения новых соединений по определенному порту |
ESTABLISHED | Пакет является частью установленного двустороннего соединения | Разрешает весь входящий трафик, который является ответом на исходящие запросы сервера |
RELATED | Пакет начинает новое соединение, но связан с уже существующим. Например, канал данных FTP | Используется нечасто, но важен для некоторых протоколов |
INVALID | Пакет не может быть идентифицирован или имеет ошибки | Обычно отбрасывается: -m state --state INVALID -j DROP |
Пример:
Здесь правило ESTABLISHED позволяет серверу безопасно получать ответы на исходящие запросы без открытия разных портов.
Расширенный матч limit
Модуль limit обычно используется для защиты от DDoS-атак и ограничения частоты логирования либо принятия новых соединений. С его помощью также удается предотвращать перегрузку сервера.
Варианты:
--limit rate. Максимальное количество совпадений в секунду/минуту (например, 5/minute);
--limit-burst number. Максимальное количество совпадений, разрешенных в начальном потоке (burst).
Пример для ограничения новых SSH-соединений:
Это правило разрешает три новые попытки SSH-соединения в минуту. Это защитит от DDoS-атаки и простого брутфорса. Но не заблокирует легитимного пользователя, если тот случайно превысил лимит ввода учетных данных.
Заключение
Грамотная настройка iptables — фундаментальный шаг по обеспечению безопасности вашего Linux-сервера. Этот инструмент выступает в роли первой линии обороны, позволяя создавать строгие наборы правил для работы брандмауэра и защищать сервер от базовых атак и несанкционированного доступа.
Однако важно понимать, что iptables имеет ограничения при столкновении с крупномасштабными DDoS-атаками. Встроенный брандмауэр Linux не способен фильтровать атаки на уровне ISP — трафик атаки все равно достигнет вашего сервера. В этом случае рекомендуется использовать специализированные облачные решения, такие как Curator Anti-DDoS от Cloud.ru, которые фильтруют трафик на уровне сетевых узлов и автоматически отсекают вредоносные запросы.
