Брандмауэр (или фаервол) — один из самых важных инструментов для настройки операционной системы и сетей, который помогает защитить систему от несанкционированного доступа извне. Фаервол фильтрует входящий трафик: принимает легитимные запросы и блокирует потенциально опасные. Существует множество брандмауэров, в число которых входит и Iptables.
Эта утилита позволяет контролировать прохождение сетевых пакетов, чтобы обеспечить безопасность и надежность системы.
В статье мы расскажем об iptables: опишем структуру и принцип работы, процедуру установки и приведем примеры наиболее популярных правил.
Что такое Iptables
Iptables — это инструмент командной строки Linux, который предназначен для управления пакетными фильтрами ядра Netfilter. Iptables позволяет настраивать правила файервола (firewall) и контролирует прохождение сетевых пакетов на уровне ядра операционной системы.
История развития iptables началась в конце девяностых годов и связана с эволюцией механизмов межсетевых экранов в ядрах Linux. До появления iptables существовало несколько предшественников, включая ipchains и ipfwadm, которые постепенно уступили место iptables.
История появления iptables
До середины девяностых годов в Linux использовались механизмы брандмауэра, основанные на пространстве ядра, называемые ipfwadm. Однако ipfwadm был сложен в конфигурировании и масштабировании. Это привело к появлению ipchains.
Ipchains была представлена разработчиком Расти Расселом в 1998 году. Обновленная система позволяла применять цепочки правил и стала первой попыткой создать полноценный механизм управления сетевыми пакетами в Linux. Несмотря на преимущества, ipchains имела ряд ограничений, таких как отсутствие поддержки NAT и сложность работы с большими наборами правил.
После этого разработчики учли недостатки предыдущих версий и предложили новую идею — iptables. Этот проект начал развиваться в 1999 году. В его основу легла идея модульности и разделения функций на уровни — эти уровни впоследствии были названы таблицами. Это позволило расширить функционал утилиты и упростить ее поддержку.
Основное нововведение iptables заключалось в концепции таблиц и цепочек. Это помогло повысить производительность и сделать настройку межсетевых экранов значительно удобнее. Теперь администратор может создавать собственные правила фильтрации, преобразования адресов и другие действия в отдельных цепочках, расположенных в трех основных таблицах, — о них мы расскажем в следующем блоке.
Также с 2014-2015 года активно развивается nftables, который выступает полноценной заменой Iptables и по умолчанию включен в новые дистрибутивы Linux. Однако Iptables остается актуальным — при необходимости его можно включить на новых версиях ОС.

Как устроена Iptables
Iptables включает в себя три основных компонента:
- Таблицы
- Цепочки
- Правила
Рассмотрим каждый из них подробнее.
Таблицы (Tables)
Каждая таблица в Iptables имеет свое назначение в зависимости от задачи, которую нужно выполнить. Чаще всего используются пять основных таблиц:
- filter — для фильтрации трафика. В этой таблице принимается решение: разрешить доставку пакета или отклонить его.
- nat — для преобразования IP-адресов и номеров портов. Эта таблица применяется, если нужно изменить адресацию или перенаправить пакет на другой порт.
- mangle — для изменения полей заголовков IPv4-пакетов. Таблица mangle используется, если нужно:
- назначить приоритет и его уровень,
- изменить значение TTL,
- добавить метки и многое другое.
- raw — для маркировки пакетов перед передачей их системе отслеживания соединений.
- security — для настройки правил мандатного контроля доступом. Также она используется для работы механизма SELinux.
Цепочки (Chains)
Цепочки в контексте Iptables — это наборы правил обработки пакетов. Каждая таблица (которые мы описали выше) состоит из цепочек.
Какие правила обработки пакетов существуют:
- INPUT для обработки входящих пакетов;
- OUTPUT для контроля исходящих пакетов;
- FORWARD для управления пакетами, которые поступают в систему транзитом;
- PREROUTING обрабатывает пакет перед его маршрутизацией;
- POSTROUTING обрабатывает пакет после его маршрутизации.
Каждая таблица включает в себя разные комбинации цепочек. Например, последовательность цепочек в трех основных таблицах выглядит так:
| filter | nat | mangle | raw | security |
|---|---|---|---|---|
| INPUT FORWARD OUTPUT |
PREROUTING POSTROUTING |
PREROUTING INPUT FORWARD OUTPUT POSTROUTING |
PREROUTING OUTPUT |
INPUT FORWARD OUTPUT |
Правила (Rules)
Правило в iptables — это инструкция, которая определяет порядок действий над сетевыми пакетами. Эти инструкции используются для фильтрации, трансляции и обработки пакетов по заданным условиям.

Каждое правило включает в себя два основных компонента:
- Условия, которые определяют критерии отбора пакетов. Например, можно настроить фильтрацию:
- по IP-адресам источников,
- по номерам портов,
- по IP-адресам назначения,
- по маршруту пакета и другим критериям.
- Действие — оно описывает, что должно произойти с пакетом, который подходит под условия. Действия могут быть стандартными или специальными.
Под стандартными подразумеваются базовые операции с пакетами, например:
- ACCEPT (принять),
- DROP (удалить),
- REJECT (отклонить) и многие другие.
Специальные действия расширяют функциональность благодаря дополнительным модулям ядра. С их помощью можно выполнять более сложные операции, такие как:
- LOG (записать информацию о пакете в журнал);
- MARK (присвоить пакету специальную метку);
- QUEUE (передать пакет в пространство пользователя для обработки подходящим приложением);
- TOS (изменить поле «Type Of Service» в заголовке пакета);
- MASQUERADE (выполнить динамическое преобразование IP-адресов).
Установка Iptables
Iptables можно установить на ОС семейства Linux, если ядро операционной системы имеет версию 2.4 и выше. В качестве примера процедура установки будет описана для трех популярных операционных систем:
- Ubuntu
- Debian
- CentOS
Прежде чем установить Iptables, необходимо подключиться к серверу по протоколу SSH. Затем следуйте инструкции для вашей операционной системы.
В некоторых дистрибутивах Linux утилита Iptables присутствует по умолчанию. В этом можно убедиться, выполнив следующую команду:
iptables -V
В выводе отобразится версия утилиты. Однако, если Iptables не установлена, следуйте инструкции для вашей операционной системы.

Ubuntu и Debian
Обновите пакеты:
sudo apt update && sudo apt upgrade
Установите Iptables с помощью одной из команд:
sudo apt install iptables
Также для корректной работы может понадобиться настройка поддержки старых правил и интерфейса ядра с новыми дистрибутивами Linux. Для этого поочередно выполните команды:
sudo apt install iptables-nftsudo apt install iptables-legacy
CentOS
Обновите пакеты:
sudo dnf update && sudo yum upgrade
Установите Iptables с помощью одной из команд:
sudo dnf install iptables
Также для корректной работы может понадобиться настройка поддержки старых правил и интерфейса ядра с новыми дистрибутивами Linux. Для этого поочередно выполните команды:
sudo dnf install iptables-nftsudo dnf install iptables-legacy

Правила Iptables: синтаксис и примеры
Команда для создания правила в Iptables имеет следующий синтаксис:
iptables [-t table_name] [-A chain] rule target
Где:
- table_name — название таблицы, в которую нужно добавить правило. Если в правиле не указана конкретная таблица, оно будет применено ко всем таблицам;
- -A — опция добавления нового правила;
- chain — название цепочки, в которую нужно добавить правило;
- rule — одно или несколько условий, по которым проверяются пакеты;
- target — действие для выполнения, если пакет соответствует заданным критериями.
Ниже мы рассмотрим примеры настройки правил Iptables по категориям.
Фильтрация
| Команда | Правило |
|---|---|
| sudo iptables -P INPUT ACCEPT | Разрешить все входящие пакеты |
| sudo iptables -P INPUT DROP | Запретить все входящие пакеты |
| sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT | Открыть порт SSH |
| sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT | Открыть порт для протокола HTTP |
| sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT | Открыть порт для протокола HTTPS |
| sudo iptables -A INPUT -s 123.123.123.123 -j DROP | Запретить доступ по конкретному IP (вместо 123.123.123.123 укажите IP-адрес, для которого нужно ограничить доступ) |
| sudo iptables -A INPUT -s 123.123.123.123 -j ACCEPT | Разрешить доступ только IP-адресам из белого списка (вместо 123.123.123.123 укажите IP-адрес из белого списка) |
| sudo iptables -A INPUT -m addrtype --dst-type BROADCAST -j DROP | Заблокировать широковещательные сообщения |
| sudo iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 50 -j REJECT | Ограничить число одновременных подключений с одного IP. Здесь: 80 — порт, для которого нужно ограничить подключение; 50 — количество максимально возможных подключений |
Управление состоянием соединений и ограничение скорости
| Команда | Правило |
|---|---|
| sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT | Принять установленные соединения |
| sudo iptables -A INPUT -m conntrack --ctstate NEW -j DROP | Отказаться от приема новых соединений |
| sudo iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m limit --limit 3/min -j ACCEPT | Ограничить количество запросов по SSH |
Преобразование адресов (NAT)
| Команда | Правило |
|---|---|
| sudo iptables -t nat -A POSTROUTING -o wan_iface -j MASQUERADE | Переадресовать исходящие пакеты |
| sudo iptables -t nat -A PREROUTING -p tcp --dport 123 -j DNAT --to 123.123.123.123:321 | Перевести порты (DNAT). Здесь: 123 — внешний порт, 123.123.123.123:321 — внутренний IP и внутренний порт |
Маркеры и журналирование пакетов
| Команда | Правило |
|---|---|
| sudo iptables -A FORWARD -d 123.123.123.123 -j MARK --set-mark 1 | Маркировать пакеты, которые идут на конкретный IP. Вместо 123.123.123.123 укажите IP-адрес, на который нужно отправлять маркированные пакеты |
| sudo iptables -A INPUT -p tcp --dport 123 -j LOG --log-prefix ""Blocked access attempt:"" | Логировать попытки подключения к закрытому порту. Вместо 123 укажите закрытый порт |
Удаление правил
| Команда | Правило |
|---|---|
| sudo iptables -F | Обнулить существующие правила |
| sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT | Удалить конкретное правило. В этом примере показано удаление правила по открытию 22 порта |
Утилиту iptables можно настроить не только на домашнем ПК или рабочей станции — она также поддерживается и на удаленных серверах. Например, в Рег.облаке предоставляются готовые облачные решения с операционной системой на выбор. Для заказа доступны ОС последних версий, а это значит, что установка iptables не потребуется: к настройке правил можно приступить сразу после создания сервера.