Учебник по iptables: как настроить таблицы фильтров в ядрах Linux

Фильтрация пакетов является важнейшим компонентом концепции безопасности всех компьютерных систем в сети. Контроль и управление входящим и исходящим трафиком — часто в составе межсетевого экрана — призван обеспечить отправку и получение только пакетов данных, не содержащих вредоносных программ и спама. В ядро Linux пакетный фильтр интегрирован по умолчанию, поскольку он обеспечивается модулями программного пакета Netfilter. Однако для его настройки требуется дополнительная программа. Для ядер Linux 2.4 и 2.6 требуется бесплатная программа iptables, которая также была разработана командой проекта Netfilter.

В качестве администратора iptables используется для настройки, изменения или удаления правил, при этом настройки будут потеряны при перезагрузке системы. Инструменты программы, iptables-save и iptables-restore, используются для сохранения и восстановления ранее настроенных наборов правил. С помощью так называемого скрипта init это делается автоматически даже в процессе загрузки. iptables ограничен протоколом IPv4, в то время как для других протоколов существуют соответствующие варианты, такие как ip6tables для IPv6 или ebtables для пакетов Ethernet, которые также содержатся в модуле ядра.

В следующем руководстве по iptables мы представим основные функции и опции программы пакетного фильтра. Затем мы объясним конфигурацию таблиц на различных примерах.

Как работает iptables

iptables обычно поставляется предустановленным в Linux. Если это не так, или если вы хотите убедиться, что используете текущую версию программного обеспечения, вы также можете использовать менеджер пакетов вашего дистрибутива для его обновления или установки. Просто введите в терминал следующую команду:

sudo apt-get install iptables

Существуют различные графические интерфейсы для iptables, например, Webmin, в то время как работа с программой через командные строки относительно несложна и быстро осваивается.

iptables требует расширенных системных привилегий и поэтому может выполняться только от имени root или с соответствующими правами администратора. Таблицы, загружаемые программой и предварительно сгенерированные ядром, содержат цепочки и правила, определяющие, как должны обрабатываться входящие и исходящие пакеты данных. Эти пакеты передаются от правила к правилу внутри цепочки, при этом каждое правило может вызвать действие (jump target) или изменение в другой цепочке (goto chain).

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

  • ACCEPT: пакет принимается
  • DROP: пакет отклоняется
  • QUEUE: перемещение пакета в пользовательские процессы; требуется обработчик очереди, который направляет пакет в приложение
  • RETURN: пакет возвращается в предыдущую цепочку, если это цепочка, определенная пользователем. В стандартных цепочках выполняется политика цепочки (без конфигурации по умолчанию: ACCEPT).

Стандартные цепочки, упомянутые в действии RETURN, указаны в таблице фильтров iptables. Это три цепочки: INPUT, FORWARD и OUTPUT. Первая занимается пакетами, которые должны быть доставлены в систему, в то время как вторая цепочка обрабатывает входящие пакеты данных, предназначенные для пересылки. Цепочка OUTPUT, с другой стороны, контролирует трафик данных, генерируемый вашим компьютером. В дополнение к таблице фильтров существует таблица NAT для перевода сетевых адресов, а также таблица MANGLE для манипулирования пакетами. Подробный обзор функций программы пакетного фильтра можно получить на странице man, доступ к которой можно получить в любое время с помощью команды :

man iptables

Кроме того, на сайте netfilter.org вы можете найти множество руководств по работе с iptables на разных языках.

Как создавать и управлять собственными правилами фильтрации

На данном этапе руководства по iptables мы рассмотрим таблицу фильтров и наборы правил. В таблице ниже приведены отдельные команды для создания и управления цепочками. Для регулирования трафика данных вы можете либо создать свою собственную цепочку, либо воспользоваться тремя стандартными цепочками INPUT, OUTPUT и FORWARD. Это наиболее важные параметры конфигурации:

Команды Iptables Пример Объяснение
-N «имя цепочки» sudo iptables -N test Создает новую цепочку с именем «test».
-X «имя цепочки» sudo iptables -X test Удаляет пустую цепочку с именем «test»; не работает со стандартными цепочками INPUT, OUTPUT и FORWARD.
-L «»имя цепочки» sudo iptables -L test Перечисляет правила цепочки с именем «test».
-F «имя цепочки» sudo iptables -F test Удаляет правила цепочки с именем «test».
-P «имя цепочки» «действие» sudo iptables -P INPUT ACCEPT Устанавливает политику для цепочки. В примере пакет автоматически принимается, если правила фильтрации цепочки INPUT не вступают в силу.
-A «имя цепочки» «правило» sudo iptables -A test -s 127.0.0.1 -j DROP Прикрепляет новое правило к выбранной цепочке. В примере новое правило, добавленное к цепочке «test», показывает, что пакеты данных с IP-адреса 127.0.0.1 должны быть отклонены.
-D «имя цепочки» «правило» sudo iptables -D test -s 127.0.0.1 -j DROP Удаляет указанное правило выбранной цепочки.
-I «имя цепочки» «позиция» «Regel» sudo iptables -I test 1 -s 127.0.0.1 -j DROP Добавляет новое правило к выбранной позиции в цепочке. В примере это позиция 1.
-D «имя цепочки» «позиция» sudo iptables -D test 1 Удаляет правило выбранной цепочки, указывая позицию этого правила; в данном примере также используется позиция 1.

Как iptables с правилами фильтрации способствует защите системы

Теперь мы продемонстрируем вам возможности iptables, настроив элементарный брандмауэр. Поскольку три стандартные цепочки INPUT, OUTPUT и FORWARD уже имеют предопределенные правила, сначала их нужно удалить, в зависимости от дистрибутива:

sudo iptables -F

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

sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

На следующем шаге активируйте (ACCEPT) локальный хост (lo) для входящего (-i) и исходящего (-o) трафика данных, расширив цепочки INPUT и OUTPUT с помощью соответствующего правила (-A):

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

Затем разрешите исходящие HTTP и HTTPS соединения (порт 80 и порт 443) для общих TCP портов 1024 до 65535:

sudo iptables -A OUTPUT -o eth0 -p tcp --dport 80 --sport 1024:65535 -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -p tcp --dport 443 --sport 1024:65535 -j ACCEPT

На последнем этапе примите все входящие и исходящие пакеты данных, принадлежащие существующему соединению (—state ESTABLISHED) или относящиеся к существующему соединению (—state RELATED):

sudo iptables -A INPUT -i eth0 -m state -state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -o eth0 -m state -state RELATED,ESTABLISHED -j ACCEPT

Поскольку правила, созданные с помощью iptables, непостоянны и сохраняются только до выключения компьютера, следует использовать iptables-save, чтобы убедиться, что файл .rules сохранен в соответствующем каталоге iptables. Соответствующая команда для систем Ubuntu:

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

Введите команду,

sudo iptables-restore < /etc/iptables/iptables.rules

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

Для получения дополнительной информации о сетевых фильтрах и iptables, мы рекомендуем взглянуть на учебник iptables ‘Linux Firewall Tutorial: Основы таблиц, цепочек, правил IPTables».

Оцените статью
cdelat.ru
Добавить комментарий