Переход с iptables на nftables. краткий справочник

Настройка iptables на Linux: Что такое iptables?

Iptables — утилита брандмауэра командной строки, которая использует цепную политику для разрешения или блокирования трафика. Когда соединение пытается установить себя в вашей системе, iptables ищет правило в своем списке, чтобы соответствовать ему. Если он не находит его, он прибегает к действию по умолчанию.

Iptables почти всегда поставляется с предустановленной версией на любом дистрибутиве Linux. Чтобы обновить / установить его, просто загрузите пакет iptables:

Есть GUI-альтернативы iptables, такие как Firestarter, но iptables не так уж и сложно, если вы выполните буквально несколько команд. Будьте предельно осторожными при настройке правил iptables, особенно если вы используете SSH’d на сервере, потому что одна неправильная команда может надолго заблокировать вас до тех пор, пока она не будет вручную зафиксирована на физической машине.

Как сохранить правила iptables?

Debian 7 / Wheezy

Устанавливаем пакет iptables-persistent

# apt-get install iptables-persistent

Сохраняем текущие правила iptables

# /etc/init.d/iptables-persistent save

Добавляем в автозагрузку

# update-rc.d iptables-persistent defaults

Debian 8 / Jessie

Устанавливаем пакет netfilter-persistent

# apt-get install netfilter-persistent iptables-persistent

Сохраняем текущие правила iptables

# netfilter-persistent save

Добавляем в автозагрузку

# systemctl enable netfilter-persisten

В некоторых случаях может появиться следующая ошибка при установке пакета netfilter-persistent

root@localhost:~# apt-get install iptables-persistent
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  netfilter-persistent
The following NEW packages will be installed:
  iptables-persistent netfilter-persistent
  
---cut---

update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
A dependency job for netfilter-persistent.service failed. See 'journalctl -xn' for details.
invoke-rc.d: initscript netfilter-persistent, action "start" failed.
dpkg: error processing package netfilter-persistent (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of iptables-persistent:
 iptables-persistent depends on netfilter-persistent (= 1.0.3); however:
  Package netfilter-persistent is not configured yet.

dpkg: error processing package iptables-persistent (--configure):
 dependency problems - leaving unconfigured
Processing triggers for systemd (215-17+deb8u3) ...
Errors were encountered while processing:
 netfilter-persistent
 iptables-persistent
E: Sub-process /usr/bin/dpkg returned an error code (1)

Workaround — закомментировать в /etc/modules строку acpiphp и перезагрузить машину.

root@localhost:~# cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.

loop
# acpiphp

Ключи iptables и примеры их использования

Для работы с таблицами (iptables -t)

Напоминаю, все правила в netfilter распределены по таблицам. Чтобы работать с конкретной таблицей, необходимо использовать ключ -t.

Ключ Описание
-t filter Таблица по умолчанию. С ней работаем, если упускаем ключ -t. Встроены три цепочки — INPUT (входящие), OUTPUT (исходящие) и FORWARD (проходящие пакеты)
-t nat Для пакетов, устанавливающий новое соединение. По умолчанию, встроены три цепочки — PREROUTING (изменение входящих), OUTPUT (изменение локальных пакетов перед отправкой) и POSTROUTING (изменение всех исходящих).
-t mangle Для изменения пакетов. Цепочки — INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING.
-t raw Для создания исключений в слежении за соединениями. Цепочки: PREROUTING, OUTPUT.

Команды

Нижеперечисленные ключи определяют действия, которые выполняет утилита iptables.

Ключ Описание и примеры
-A Добавление правила в конец списка:iptables -A INPUT -s 192.168.0.15 -j DROP
запретить входящие с 192.168.0.15.
-D Удаление правила:iptables -D INPUT 10
удалить правило в цепочке INPUT с номером 10.
-I Вставка правила в определенную часть списка:iptables -I INPUT 5 -s 192.168.0.15 -j DROP
вставить правило 5-м по списку.
-R Замена правила.iptables -R OUTPUT 5 -s 192.168.0.15 -j ACCEPT
заменить наше 5-е правило с запрещающего на разрешающее. 
-F Сброс правил в цепочке.iptables -F INPUT
-Z Обнуление статистики.iptables -Z INPUT
-N Создание цепочки.iptables -N CHAINNEW
-X Удаление цепочки.iptables -X CHAINNEW
-P Определение правила по умолчанию.iptables -P INPUT DROP
-E Переименовывание цепочки.iptables -E CHAINNEW CHAINOLD

Условия

Данные ключи определяют условия правила.

Ключ Описание и примеры
-p Сетевой протокол. Допустимые варианты — TCP, UDP, ICMP или ALL.iptables -A INPUT -p tcp -j ACCEPT
разрешить все входящие tcp-соединения.
-s Адрес источника — имя хоста, IP-адрес или подсеть в нотации CIDR.iptables -A INPUT -s 192.168.0.50 -j DROP
запретить входящие с узла 192.168.0.50
-d Адрес назначения. Принцип использования аналогичен предыдущему ключу -s.iptables -A OUTPUT -d 192.168.0.50 -j DROP
запретить исходящие на узел 192.168.0.50
-i Сетевой адаптер, через который приходят пакеты (INPUT).iptables -A INPUT -i eth2 -j DROP
запретить входящие для Ethernet-интерфейса eth2.
-o Сетевой адаптер, с которого уходят пакеты (OUTPUT).iptables -A OUTPUT -o eth3 -j ACCEPT
разрешить исходящие с Ethernet-интерфейса eth3.
—dport Порт назначения.iptables -A INPUT -p tcp —dport 80 -j ACCEPT
разрешить входящие на порт 80.
—sport Порт источника.iptables -A INPUT -p tcp —sport 1023 -j DROP
запретить входящие с порта 1023.

Перечисленные ключи также поддерживают конструкцию с использованием знака !. Он инвертирует условие, например,iptables -A INPUT -s ! 192.168.0.50 -j DROP
запретит соединение всем хостам, кроме 192.168.0.50.

Действия

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

Таблица Действие Описание
filter ACCEPT Разрешает пакет.
DROP Запрещает пакет.
REJECT Запрещает с отправкой сообщения источнику.
nat MASQUERADE Для исходящих пакетов заменяет IP-адрес источника на адрес интерфейса, с которого уходит пакет.
SNAT Аналогично MASQUERADE, но с указанием конкретного сетевого интерфейса, чей адрес будет использоваться для подмены. 
DNAT Подмена адреса для входящих пакетов.
REDIRECT Перенаправляет запрос на другой порт той же самой системы.
mangle TOS Видоизменение поля TOS (приоритезация трафика).
DSCP Изменение DSCP (тоже приоритезация трафика).
TTL Изменение TTL (время жизни пакета).
HL Аналогично TTL, но для IPv6.
MARK Маркировка пакета. Используется для последующей фильтрации или шейпинга.
CONNMARK Маркировка соединения.
TCPMSS Изменение значения MTU.

Маскарадинг (или маскирование)

Маскарадинг — это метод обработки пакетов, при котором пакеты передаются через некоторую машину, работающую как шлюз. Эта машина при пересылке пакетов помечает их, чтобы знать, какой машине в сети вернуть полученный ответ. Таким образом, несколько машин из внутренней сети могут обращаться к внешней сети, а извне это будет выглядеть так, как будто обращения идут от той самой машины, являющейся шлюзом. Маскарадинг связан в первую очередь с NAT (Network Address Translation), пакеты при трансляции адресов маскируются, чтобы ответ вернулся именно к источнику запроса.
Например, у нас есть некоторая локальная сеть с адресами 192.168.0.0/24, в этой сети есть шлюз с адресом 192.168.0.1, имеющий два сетевых интерфейса, eth0 и eth1. eth0 — внешний, подключенный к провайдеру, например, с адресом 192.168.100.25, eth1 — внутренний, подключенный к локальной сети, тот самый, на котором адрес 192.168.0.1. Необходимо обеспечить работу всех клиентов из локальной сети в сети Интернет таким образом, чтобы это было для них прозрачно.
В таком случае в первую очередь необходимо включить форвардинг пакетов между сетевыми интерфейсами шлюза, чтобы пропускать трафик из внутренней сети наружу. Есть два варианта, как это можно сделать. Первый — раскомментировать в файле /etc/sysctl.conf строчку

net.ipv4.ip_forward=1

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

echo "1" >/proc/sys/net/ipv4/ip_forward

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

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d ! 192.168.0.0/24 -j MASQUERADE

Это правило после обработки пакетов осуществит маскирование, если пакеты из внутренней сети направлены куда-то в другую подсеть. Если нам нужно маскировать пакеты для конкретной подсети, к примеру, из одной локальной подсети (192.168.2.0/24) в другую (192.168.0.0/24), то мы можем создать следующее правило:

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d 192.168.0.0/24 -j MASQUERADE

AUTHORS

Marc Boucher made Rusty abandon ipnatctl by lobbying for a generic packet
selection framework in iptables, then wrote the mangle table, the owner match,
the mark stuff, and ran around doing cool stuff everywhere.

James Morris wrote the TOS target, and tos match.

Jozsef Kadlecsik wrote the REJECT target.

Harald Welte wrote the ULOG and NFQUEUE target, the new libiptc, as well as the TTL, DSCP, ECN matches and targets.

The Netfilter Core Team is: Jozsef Kadlecsik, Pablo Neira Ayuso,
Eric Leblond, Florian Westphal and Arturo Borrero Gonzalez.
Emeritus Core Team members are: Marc
Boucher, Martin Josefsson, Yasuyuki Kozakai, James Morris, Harald Welte and
Rusty Russell.

Man page originally written by Herve Eychenne <[email protected]>.

Установка iptables

На самом деле фаервол у нас на сервере уже стоит и работает, просто нет никаких правил, все открыто. Установить нам нужно будет дополнительные утилиты управления, без которых конфигурировать iptables невозможно. Например, нельзя будет перезапустить фаервол:

# systemctl restart iptables.service
Failed to issue method call: Unit iptables.service failed to load: No such file or directory.

Или добавить в автозапуск не получится:

# systemctl enable iptables.service
Failed to issue method call: No such file or directory

Чтобы подобных ошибок не было, установим необходимый пакет с утилитами:

# yum -y install iptables-services

Теперь можно добавить iptables в автозагрузку и запустить:

# systemctl enable iptables.service
# systemctl start iptables.service

SYNOPSIS

iptables-ttable-A-C-Dchainrule-specification

ip6tables [-t table] {-A|-C|-D}
chain rule-specification

iptables [-t table] -I chain [rulenum] rule-specification

iptables [-t table] -R chain rulenum rule-specification

iptables [-t table] -D chain rulenum

iptables [-t table] -S [chain [rulenum]]

iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options…]

iptables [-t table] -N chain

iptables [-t table] -X [chain]

iptables [-t table] -P chain target

iptables [-t table] -E old-chain-name new-chain-name

rule-specification = [matches…] [target]

match = -m matchname [per-match-options]

target = -j targetname [per-target-options]
 

О состояниях соединения

Существует множество протоколов, которым требуется двусторонняя коммуникация. К примеру, пользователю понадобилось поработать с SSH-соединением, ему придется внести правило сразу и в Output, и в Input.

Что делать, если юзер хочет предоставить разрешение исключительно входящему соединению? В этом случае поможет состояние соединения. Оно даст возможность пользователю описать любую двустороннюю коммуникацию, в которой разрешено подключение заданного направления.

Разрешим соединение типа SSH, приходящее через хост 120.120.120.120. Система будет отправлять данные по этому протоколу только, если сессия установлена.

Как сохранить изменения в конфигурации файрвола

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

Для Убунту команда выглядит так:

Для Red Hat и CentOS:

Либо

Дополнительно

Чтобы вывести сконфигурированное ранее правило:

Чтобы просмотреть данные о входящих/исходящих пакетах и трафике, достаточно добавить ключ –v.

Данные об имени хоста, протоколах, сетях появятся в цифровом виде, если дописать в команду –n.

Разом удалить все имеющиеся установленные правила возможно командой:

191028
Санкт-Петербург
Литейный пр., д. 26, Лит. А

+7 (812) 403-06-99

700
300

ООО «ИТГЛОБАЛКОМ ЛАБС»

Вступление

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

К этому фаерволу существуют разные обвязки, которые используются для более «удобной» настройки. В ubuntu есть ufw, в centos — firewalld, с другими не знаком. Лично я не вижу никакого удобства в использовании этих инструментов. Я привык настраивать линуксовый фаервол по-старинке, как научился в самом начале работы. Мне кажется это наиболее простым и удобным способом, которым я с вами и поделюсь. Суть его сводится к тому, что создается скрипт с правилами фаервола. Этот скрипт можно легко редактировать под свои нужды и переносить с сервера на сервер.

Автозагрузка правил iptables

1. Загрузка правил с помощью скрипта

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

Сохранить набор правил межсетевого экрана с помощью команды:

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

Заметим — в сети есть много вариантов места размещения скрипта на локальной машине, но я считаю именно размещение в папке if-pre-up.d наиболее верным, так как при этом скрипт будет выполнятся перед включением сетевого интерфейса. Добавляем в данный файл следующий скрипт:

Сохраняем файл iptables Ctrl+O. Выходим из editor Ctrl+X. Устанавливаем необходимые права для созданного файла:

Перезагружаем компьютер и проверяем результат для таблицы filter с помощью команды:

Для обеспечения безопасности необходимо, чтобы конфигурация iptables применялась до запуска сетевых интерфейсов, сетевых служб и маршрутизации. Если данные условия не будут соблюдены — появляется окно уязвимости между загрузкой операционной системы и правил защиты межсетевого экрана. Для реализации такого варианта защиты можно использовать пакет iptables-persistent.

2. Автозагрузка правил iptables-persistent

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

Этот пакет впервые стал доступен в Debian (Squeeze) и Ubuntu (Lucid). Используемые этим пакетом правила iptables хранятся в следующих директориях:

  • /etc/iptables/rules.v4 для набора правил протокола IPv4;
  • /etc/iptables/rules.v6 для набора правил протокола IPv6.

Но они должны быть сохранены в понятном утилите iptables-persistent виде.

Требования к формату данных файлах не задокументированны, что создает некоторые сложности для создания этих файлов вручную. Их можно создать с помощью dpkg-reconfigure:

Или можно использовать iptables-save и ip6tables-save:

Утилита netfilter-persistent тоже позволяет управлять автозагрузкой правил. Вот её синтаксис:

sudo netfilter-persistent

Где может принимать следующие значения:

  • start — вызывает все плагины с параметром start, для загрузки правил в netfilter;
  • stop — если настроена конфигурация сброса настроек Netfilter при остановке плагина, сбрасывает все настройки firewall на значения по умолчанию. Иначе просто выдает предупреждение;
  • flush — плагины вызываются с параметром flush, что приводит к сбросу правил межсетевого экрана на значения по умолчанию;
  • save — вызывает плагины с параметром save, позволяя сохранить значения правил брандмауэра в файлы на диске;
  • reload — не задокументированный параметр, возникали случаи когда параметр start не срабатывал, помогал вызов этого параметра для загрузки правил из файла на диске;

Значит, чтобы сохранить правила мы можем вызвать следующую команду:

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

Замечание После установки netfilter-persistent система при использовании iptables и формата хранения файлов, связанного с ним, начинает при работе выдавать предупреждение

Это связано с наличием новой утилиты настройки и редактирования правил Netfilter — nftables, для миграцию на эту утилиту старых правил iptables можно использовать автоматический транслятор правил iptables-translate. Но это уже тема для отдельной статьи.

Удаление правил по цепочке и номеру

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

Эта команда добавляет номер строки для каждой строки таблицы правил в столбце с заголовком .

Когда вы знаете, какое правило нужно удалить, запомните цепочку и номер строки правила. Затем запустите команду , указав далее цепочку и номер правила.

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

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

Общие правила брандмауэра в iptables

Ниже перечислены примеры общих правил брандмауэра.
Принять все пакеты ESTABLISHED и RELATED:

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

Разрешать соединения HTTP и HTTPS из любого места:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

Разрешить доступ к порту 21 только с определенного IP-адреса (например, 192.168.1.123) и блокировать доступ со всех других IP-адресов на сервер (например, IP-адрес сервера 192.168.1.100):

iptables -A INPUT -s 192.168.1.123 -d 192.168.1.100 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -d 192.168.1.100 -p tcp -m tcp --dport 21 -j DROP
iptables-save

Блокировать IP-адрес (например, 192.168.1.21):

iptables -A INPUT -s 192.168.1.21 -j DROP

Заблокируйте диапазон IP и отклоните все пакеты (например, 192.168.1.0/24):

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

Чтобы заблокировать исходящий трафик на порт (например, порт 123), используйте:

iptables -A OUTPUT -p tcp --dport 123 -j DROP

Проверка открыт ли порт

Когда мы настроили все правила, закрывающие и открывающие порты, нам необходимо проверить корректность примененных настроек. Для этого можно использовать приложение telnet. Telnet — приложение, позволяющее установить двунаправленное соединение между двумя компьютерами с помощью протокола telnet. В рамках нашей задачи попытка установления соединения между двумя машинами в сети используется как тест правил Netfilter. Выполняем команду следующего вида:

$ telnet ip-адрес порт

Например:

В данной команде будет проверен 443 порт у машины с ip-адресом 192.168.1.5. Если на порту 443 на удаленной машине разрешено входящее соединение и правила на локальной машине разрешают исходящее соединение на порту 443, то получим сообщение:

Или неожиданно можем получить приглашение доступа к данной машине, если на этом порте ожидает подключения серверная часть telnet.

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

Примечание: Чтобы получить результаты необходимо подождать довольно продолжительное время, чтобы telnet получил результат попытки соединения по указанному порту.

Журналирование

Цель позволяет при срабатывании правила добавлять информацию о пакете в журнал. В отличие от прочих целей, вроде или , при срабатывании цели пакет продолжает продвижение по цепочке. Поэтому, например, чтобы включить журналирование всех отброшенных пакетов, необходимо перед каждым -правилом добавить аналогичное -правило. Правда, это не очень выгодно с точки зрения эффективности и удобства, и вместо этого лучше создать отдельную цепочку :

# iptables -N logdrop

Добавьте в неё следующие правила:

# iptables -A logdrop -m limit --limit 5/m --limit-burst 10 -j LOG
# iptables -A logdrop -j DROP

Опции и объяснены разделе.

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

# iptables -A INPUT -m conntrack --ctstate INVALID -j logdrop

Ограничение скорости логирования

Цепочка из предыдущего раздела использует модуль , который помогает предотвратить разрастание журнала и избежать ненужных операций записи на диск. Если этого не сделать, то неправильно настроенная служба, которая пытается установить соединение, или просто злоумышленник, могут привести к исчерпанию свободного места на диске (как минимум в разделе ) из-за добавления чрезмерного количества записей в журнал.

Модуль limit подключается опцией . Опцией задаётся средняя скорость журналирования, а опцией — начальная. В примере цепочки выше команда

# iptables -A logdrop -m limit --limit 5/m --limit-burst 10 -j LOG

добавляет правило, которое логирует все проходящие через него пакеты. Первые 10 пакетов будут добавлены в журнал, но затем скорость логирования не будет превышать 5 пакетов в минуту. Если значение какое-то время не нарушается, то снова «разблокируется», т.е. журналирование автоматически вернётся к нормальному режиму.

В журнале systemd логированные пакеты отображаются как сообщения ядра.

# journalctl -k --grep="IN=.*OUT=.*"

syslog-ng

Если вы используете syslog-ng, то в файле можно настроить место хранения логов iptables. Замените:

filter f_everything { level(debug..emerg) and not facility(auth, authpriv); };

на

filter f_everything { level(debug..emerg) and not facility(auth, authpriv) and not filter(f_iptables); };

После этого вывод iptables больше не будет отправляться в .

Если необходимо задать произвольный файл для хранения журнала iptables (вместо ), то измените значение пути в параметре (в том же файле ():

destination d_iptables { file("/var/log/iptables.log"); };

Ubuntu и CentOS

В современных операционных системах Ubuntu и CentOS по умолчанию нет iptables. Необходимо его установить или пользоваться более новыми утилитами.

В CentOS

В качестве штатной программы управления брандмауэром используется firewall-cmd. Подробнее читайте инструкцию Как настроить firewalld в CentOS.

Если необходимо пользоваться iptables, устанавливаем пакет с утилитой:

yum install iptables-services

Отключаем firewalld:

systemctl stop firewalld

systemctl disable firewalld 

Разрешаем и запускаем iptables:

systemctl enable iptables

systemctl start iptables

В Ubuntu

Для управления брандмауэром теперь используется ufw.

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

apt-get install iptables-persistent

Отключаем ufw:

ufw disable

Сохранение правил (permanent)

По умолчанию, все правила перестают работать после перезапуска сети или компьютера. Для сохранения правил после перезагрузки есть несколько способов настройки.

Способ 1. iptables-save (универсальный)

Сохраняем правила в файл:

iptables-save > /etc/iptables.rules

Открываем настройки сети:

vi /etc/network/interfaces

и добавляем строку:

pre-up iptables-restore < /etc/iptables.rules

Способ 2. iptables-persistent (Debian/Ubuntu)

Ставим пакет iptables-persistent:

apt-get install iptables-persistent

Для сохранения правил вводим команду:

netfilter-persistent save

Способ 3. service iptables (CentOS)

Работает в старых версиях Linux и CentOS. Необходима установка пакета:

yum install iptables-services

apt-get install iptables-services

* первая команда для CentOS, вторая — для Ubuntu.

Сохраняем правила командой:

service iptables save

* правила будут сохранены в файл /etc/sysconfig/iptables.

Чтобы правила восстанавливались автоматически при старте компьютера, разрешаем автозапуск сервиса.

а) в более новых версиях Linux:

systemctl enable iptables

б) в версиях постарше:

chkconfig iptables on

update-rc.d iptables defaults

* первая команда для CentOS, вторая для Ubuntu.

Ассоциативные массивы

   Старый инструмент IP set разрешал делать различные типы групп объектов, но не умел соотносить объекты с разрешениями — невозможно было в одном правиле допустить один объект, но запретить иной.
   В правилах nftables можно ссылаться не на отдельный критерий и решение, а на ассоциативные массивы из них. Синтаксис таких ассоциативных массивов: vmap { объект : разрешение, …}. Здесь vmap — это опция, которая указывает, что последует именно массив из объектов и разрешений, а { ключ : значение, …} — общий синтаксис ассоциативных массивов.
Например, в одном правиле мы можем разрешить зашифрованные варианты SMTP (SMTPS и SMTP/STARTTLS), но запретить обычный на порте 25.
     
   Мы также можем определить именованный ассоциативный массив (например, banlist) и сослаться на него в правиле с помощью опции vmap @banlist. Именованный массив может быть и пустым, с расчетом на динамическое редактирование.
   Это очень упрощает работу скриптов вроде fail2ban, поскольку массив можно динамически редактировать средствами nftables.
     

   В IP set был встроенный набор типов, но не было возможности создать свои, поэтому разработчики добавили многочисленные варианты вроде hash:ip,port, пытаясь покрыть все возможные случаи. В nftables больше нет такой проблемы — элементы ассоциативных массивов могут быть произвольных типов.
   Например, мы можем одним правилом NAT прокинуть порт 80 на адрес 10.0.0.10, а порт 25 — на адрес 10.0.0.20.
 

   
   Даже если синтаксис nftables кажется тебе менее читаемым, в качестве компенсации он позволяет обойтись меньшим числом правил.

Перечисление правил по спецификации

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

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

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

Если вы хотите ограничить вывод конкретной цепочкой (, , и т. д.), вы можете указать название цепочки сразу после опции . Например, для отображения всех спецификаций правил в цепочке необходимо запустить следующую команду:

Теперь давайте рассмотрим альтернативный способ просмотра действующих правил Iptables в форме таблицы правил.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: