Contents
Введение
iptables
иногда может быть пугающей вещью. Как это было со мной когда-то. Я просто подумал, что простым решением было использовать firewalld
или ufw
. Я не мог ошибиться больше.
Дело в том, что брандмауэр лучше всего делать с помощью его основного инструмента: iptables
.
Итак, что такое iptables
?
В операционной системе Linux брандмауэр обеспечивается с помощью файлов netfilter
. Это модуль ядра, который решает, каким пакетам разрешено входить или выходить наружу.
iptables
являются просто интерфейсом для netfilter
. Эти два часто можно рассматривать как одно и то же. Лучше было бы думать об этом как о задней части и передней части.

Что еще за брандмауэр?
Чтобы охватить основы, брандмауэр — это идея решения, какие пакеты могут входить и выходить из системы.
Пакеты в Интернете (или любой другой сети в этом отношении) передаются с использованием портов. У нас есть зарезервированные системой порты для известных сервисов, таких как NGINX или Apache (80/443).
У нас также есть порты, которые использует сам пользователь. Например, когда вы написали веб-приложение, работающее на порту 8000.
Решение о том, какому порту разрешено обмениваться данными с внешним миром (или даже с локальным хостом), является обязанностью брандмауэра. Вы бы приказали ему принять, отклонить или отбросить пакет. С пакетом могут происходить и другие вещи, но давайте не будем усложнять.
Зачем использовать iptables?
Теперь, когда вы знаете, что такое брандмауэр и iptables, давайте посмотрим, как мы можем их использовать. В основном люди выбирали простое решение с использованием firewalld
or ufw
, как и я, до того, как я познакомился с красивым и элегантным iptables
.
firewalld
и ufw
просты, и это делает их популярными. Но простота также снижает гибкость и полноту функций, с которыми вы столкнетесь, когда решите работать с iptables
.
Сами по себе firewalld
и ufw
позволяют только принять или отклонить пакет. Но с пакетом можно сделать гораздо больше. NAT, ведение журнала и переадресация — это лишь некоторые из них.
Итак, вот список причин, по которым стоит использовать iptables
и не пугаться их сложности:
- Это полнофункциональный инструмент, предоставляющий вам все, что вам нужно
- Вы получаете больше гибкости в отношении того, что вы хотите с пакетом
- С ним весело работать, и вы не можете узнать об этом, не используя его.
- Это очень круто и, вероятно, заставит вас чувствовать себя супер круто
- Вы бы чувствовали себя хакером или гигантским гиком. Поверь мне, я был там.

архитектура iptables
iptables
состоит из различных компонентов, которые обсуждаются ниже:
- chains : Всего 5 цепочек
iptables
и каждая отвечает за определенную задачу. Эти цепочки: предварительная маршрутизация, ввод, переадресация, вывод и постмаршрутизация. Как следует из их названия, они несут ответственность за пакеты либо сразу после их поступления, если они предназначены для локального сокета, либо непосредственно перед маршрутизацией во внешний мир. Мы обсудим это ниже. - таблицы : Опять же, разные таблицы отвечают за разные задачи. Список содержит filter, nat, mangle, raw и security. Первые два используются чаще всего. Фильтр отвечает за фильтрацию и ограничение пакетов на/с нашего компьютера. Nat отвечает за преобразование сетевых адресов. Мы также обсудим эти термины ниже.
- target : Цели указывают, куда должен идти пакет. Это решается с помощью либо
iptables'
собственных целей:ACCEPT
,DROP
, илиRETURN
, либо целей расширений, которых на данный момент 39, и наиболее популярными из них являютсяDNAT
,LOG
,MASQUERADE
,REJECT
,SNAT
,TRACE
иTTL
. Цели делятся на терминирующие и нетерминирующие. Это как раз то, что следует из названия. Завершающие цели завершают обход правила, и пакеты будут останавливаться там, но не завершающие цели каким-то образом касаются пакета, и после этого обход правила продолжится.
цепочки iptables
Как было сказано выше, каждая цепочка отвечает за определенную задачу. Итак, давайте копнем немного глубже.
- Prerouting : эта цепочка решает, что происходит с пакетом, как только он достигает сетевого интерфейса. У нас есть разные варианты, такие как изменение пакета (вероятно, для NAT), отбрасывание пакета или вообще ничего не делать, позволяя ему проскользнуть и обрабатываться в другом месте по пути.
- Ввод : это одна из популярных цепочек, поскольку она почти всегда содержит строгие правила, чтобы злоумышленники в Интернете не нанесли вред нашему компьютеру. Если вы хотите открыть/заблокировать порт, сделайте это здесь.
- Forward : эта цепочка отвечает за пересылку пакетов. Что и предполагает название. Мы можем захотеть рассматривать компьютер как маршрутизатор, и здесь могут применяться некоторые правила для выполнения этой работы.
- Вывод : эта цепочка отвечает за весь ваш просмотр веб-страниц среди многих других. Вы не можете отправить ни одного пакета без разрешения этой цепочки. У вас есть много вариантов, хотите ли вы разрешить порту обмениваться данными или нет. Это лучшее место для ограничения исходящего трафика, если вы не уверены, через какой порт взаимодействует каждое приложение. (Небольшой совет: используйте команду
ss -tulpen
). - Постмаршрутизация : в этой цепочке пакеты оставляют свой след последними, прежде чем покинуть наш компьютер. Это используется для маршрутизации среди многих других задач, просто чтобы убедиться, что пакеты обрабатываются так, как мы хотим.
Большинство ваших случаев использования на регулярной основе будут связаны с цепочкой ввода и вывода. С небольшими модификациями других цепей, которые в большинстве случаев не являются повседневными потребностями.
iptables таблицы
Хотя в названии есть рифма, вам не понадобится много этого предмета в повседневной жизни. Ваш основной вариант использования большую часть времени находится на filter
столе. Это таблица по умолчанию, и вам не понадобится какой-либо переключатель для ее активации. При этом, если вы не укажете какую-либо таблицу, filter
она будет использоваться по умолчанию. Так что имейте это в виду и продолжайте ниже, где я объясняю каждую таблицу.
- Фильтр : это таблица, которую чаще всего используют в повседневной жизни. Вот почему это таблица по умолчанию. В этой таблице вы решите, разрешен ли пакет в/из вашего компьютера. Если вы хотите заблокировать порт, чтобы ничего не получать, это ваша остановка.
- Nat : Эта таблица является второй по популярности и отвечает за создание нового соединения. Что является сокращением для преобразования сетевых адресов. И если вы не знакомы с этим термином, не волнуйтесь. Ниже я приведу пример.
- Mangle : Только для специализированных пакетов. Эта таблица предназначена для изменения чего-либо внутри пакета перед входом или выходом.
- Raw : эта таблица имеет дело с необработанными пакетами, как следует из названия. В основном это для отслеживания состояния соединения. Мы увидим примеры этого ниже, когда мы хотим разрешить успешные пакеты из SSH-соединения.
- Безопасность : отвечает за безопасность вашего компьютера после таблицы фильтров. Который состоит из SELinux . Если вы не знакомы с этим термином, это очень сильный инструмент безопасности в современных дистрибутивах Linux.

Когда начать?
Для начала просто отключите другие утилиты брандмауэра, чтобы осталась только одна действующая конфигурация — iptables
.
Для этого воспользуйтесь одним из следующих способов:
- Если вы работаете на машине с Debian, используйте
systemctl disable --now ufw
. - Если вы работаете на машине Redhad, используйте
systemctl disable --now firewalld
.
После этого вы можете приступить к настройке брандмауэра через iptables
.
Как пользоваться iptables?
Остальная часть этой статьи представляет собой таблицу того, как выполнять задачу в iptables
. Убедитесь, что вы запускаете их как super user
.
- Чтобы просмотреть текущую конфигурацию:
iptables -L -n -v --номера строк
-L
для списка.
-n
для числового вывода (отключить разрешение имен; приводит к более высокой производительности).
-v
для подробных (требуется больше информации).
- Чтобы каждый отдельный пакет не входил/выходил из вашей системы. Из соображений безопасности обязательно сделайте это, чтобы никакие другие явно указанные вами пакеты не передавались.
iptables -P УДАЛЕНИЕ ВХОДА
iptables -P УДАЛЕНИЕ ВЫХОДА
iptables -P УДАЛЕНИЕ ВПЕРЕД
-P
для политики. Существуют различные политики, такие как упомянутые выше.
- Чтобы пакеты внутри вашего loopback-интерфейса проходили без проблем.
iptables -A ВХОД -i lo -j ПРИНЯТЬ
iptables -A ВЫВОД -o lo -j ПРИНЯТЬ
-A
для доп. Вы также можете вставлять, удалять или обновлять с помощью различных переключателей.
-i
для интерфейса ввода. Интерфейс, на который приходят пакеты.
-o
для выходного интерфейса. Интерфейс, через который проходят пакеты.
-j
для прыжка. Вы можете принять, отклонить, отбросить, зарегистрировать и т. д. с пакетом.
- Чтобы разрешить DNS и DHCP-пакетам входить и выходить из вашего компьютера.
iptables -A ВХОД -p udp --dport 67 -j ПРИНЯТЬ
iptables -A ВХОД -p tcp --dport 67 -j ПРИНЯТЬ
iptables -A ВЫВОД -p udp --dport 53 -j ПРИНЯТЬ
iptables -A ВЫВОД -p tcp - -dport 53 -j ПРИНЯТЬ
iptables -A ВЫВОД -p udp --dport 68 -j ПРИНЯТЬ
iptables -A ВЫВОД -p tcp --dport 68 -j ПРИНЯТЬ
-p
для протокола. Можно использовать различные протоколы, такие как tcp
, udp
, gre
и так далее. Обычно DNS и DHCP обмениваются данными через протокол UDP , но для больших пакетов используется TCP , поэтому я также упомянул эти правила.
--dport
для порта назначения. Вы также можете использовать --sport
для исходного порта.
- Чтобы открыть соединение SSH, когда ваш компьютер является клиентом, вы должны добавить два правила в обоих направлениях.
iptables -A ВЫВОД -p tcp --dport 22 -j ПРИНЯТЬ
iptables -A ВХОД -m conntrack --ctstate СВЯЗАННО, УСТАНОВЛЕНО -j ПРИНЯТЬ
-m
это переключатель для использования расширения iptables. Вы можете узнать больше о различных расширениях, используя man iptables-extension
. Другим примером этих расширений является limit
ограничение количества пакетов правилом.
Соединения SSH не бывают только в одном направлении. Вместо этого вы должны отправить пакет на порт назначения 22, и пакеты будут поступать на ваш компьютер в состоянии RELATED и ESTABLISHED. Средство отслеживания подключений различает это за вас, и вам не нужно об этом беспокоиться.
- Разрешить SSH-соединение, когда ваш компьютер является сервером.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate СВЯЗАННО, УСТАНОВЛЕНО -j ACCEPT
Это направление противоположно предыдущему правилу, которое открывает пакеты до 22 и отправляет успешные пакеты, имеющие состояние RELATED и ESTABLISHED, обратно клиенту.
- Если вы хотите иметь возможность пинговать другие компьютеры и позволить другим компьютерам пинговать ваш, вы должны разрешить
icmp
пакеты.
iptables -A ВХОД -p icmp -j ПРИНЯТЬ
iptables -A ВЫВОД -p icmp -j ПРИНЯТЬ
- Если вы хотите иметь возможность просматривать веб-страницы, это то, что вы должны сделать.
iptables -A ВЫВОД -p tcp --dport 80 -j ПРИНЯТЬ
iptables -A ВЫВОД -p tcp --dport 443 -j ПРИНЯТЬ
Это откроет трафик HTTP и HTTPS для выхода из вашей системы.
- Вы определенно захотите зарегистрировать остальные пакеты, которые не приняты, чтобы у вас было визуальное представление о том, что происходит. Это также поможет вам, если вы захотите открыть порт в будущем.
iptables -N LOGGING
iptables -A INPUT -j LOGGING
iptables -A OUTPUT -j LOGGING
iptables -A FORWARD -j LOGGING
iptables -A LOGGING -j LOG --log-level error --log-prefix "iptables-dropped: "
iptables -A РЕГИСТРАЦИЯ -j DROP
Первая строка создает новую цепочку. И в следующих 3 строках мы будем пересылать каждый пакет во вновь созданную цепочку.
Не нужно быть гением, чтобы сообразить, что последние 2 строки регистрируют пакет, а затем отбрасывают его.
--log-prefix
является аргументом LOG
цели, о котором вы можете узнать больше в man iptables-extension
.
--log-level
также является аргументом для LOG
цели, который указывает, насколько подробным мы хотим получить журнал. error
это довольно хороший уровень журнала, поскольку нас интересуют только неразрешенные пакеты.
Разница между DROP и REJECT заключается в том, что DROP не уведомляет отправителя об отброшенном пакете, тогда как REJECT явно уведомляет отправителя.
Когда вы отправляете пакет REJECT
получателю, отправитель получит connection reset by peer
.
- Если вы хотите применить NAT к своим iptables, в зависимости от того, хотите ли вы применить его к входящим или исходящим соединениям, или к тому, является ли IP-адрес вашего компьютера статическим или динамическим, вы можете использовать следующие правила.
iptables -t nat -A OUTPUT -p tcp --dport 22 --назначение 192.168.40.40 -j DNAT --назначение 123.123.123.123:4040
После приведенной выше команды каждый исходящий трафик с вашего компьютера, направляющийся на IP-адрес 192.168.40.40, порт 22, будет отправляться на IP-адрес 123.123.123.123, порт 4040. Это позволяет NAT в сети назначения быть доступным из-за пределов этой сети. .
NAT или преобразование сетевых адресов — это наличие частного IP-адреса внутри сети, который не может быть доступен извне, если только внутри маршрутизатора не задействована конфигурация. Подробнее об этом можно прочитать здесь .
--destination
флаг будет фильтровать пакеты на основе IP-адреса назначения. Это, конечно, очевидно, но стоит упомянуть.
Чтобы отменить фильтр, используйте восклицательный знак.
Вы всегда можете отменить правило, поставив перед ним !
. Например ! --source 192.168.40.40
, будет действовать для любого исходного адреса, отличного от 192.168.40.40.
iptables -t nat -A POSTROUTING -p tcp --dport 80 -j SNAT --to-source 10.0.0.56:8000-8010
После применения приведенного выше правила каждый пакет для любого IP-адреса назначения и с портом 80 изменит исходный адрес на 10.0.0.56:8000–8010, что представляет собой диапазон портов, указанный дефисом. Это позволяет NAT внутри текущей сети вашего компьютера быть доступным из внешнего мира (из Интернета). Возможно, IP-адрес вашего маршрутизатора (точки доступа) — 10.0.0.56, и вы хотите, чтобы пакеты благополучно возвращались к своему источнику.
iptables -A FORWARD -i wlan0 -j ПРИНЯТЬ
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Кредит на этот ответ . Это MASQUERADE
лучше всего подходит, когда вам нужно перенаправить каждый трафик с определенного интерфейса через ваш компьютер без каких-либо изменений внутри пакета . Конечно, вам потребуется установить следующий параметр ядра, прежде чем делать вышеописанное:
sysctl net.ipv4.ip_forward=1
Чтобы ваш компьютер мог маршрутизировать пакеты. Приведенная выше команда является только конфигурацией времени выполнения, и если вам нужна постоянство при перезагрузке, вы должны сделать следующее.
эхо net.ipv4.ip_forward = 1 > /etc/sysctl.d/30-ip-forward.conf
На этом наше приключение по iptables
джунглям подошло к концу. Это инструмент с подавляющим большинством функций, и я бы сказал, что я даже не поцарапал поверхность. Но приведенные выше команды являются наиболее часто используемыми, и вы будете время от времени использовать ту или другую.
Внимательно прочитайте руководство, так как в нем есть хорошие идеи:
man iptables
man iptables-расширение
Вывод
В этой статье я попытался демистифицировать все тонкости iptables
, инструмента для управления брандмауэром в Linux. Большинство других инструментов, таких как firewalld
и ufw
, достаточно просты, чтобы помочь вам в течение дня, но за простоту приходится платить. Вы не получите большой гибкости в обработке правил, которые вы считаете подходящими.
Я также показал вам пару примеров того, как вы можете управлять этим, наряду с четким объяснением каждой команды. Мой вам совет: освойте этот инструмент, так как он очень пригодится.
И напоследок:
#1) Уважайте частную жизнь других.
2) Думайте, прежде чем печатать.
3) С большой силой приходит большая ответственность.
Надеюсь, вам понравилась эта статья, и вы узнали что-то новое из нее.