Iptables — это межсетевой экран (файервол) для ОС на базе Linux. Он удобен и сравнительно прост в использовании, поэтому пользоваться им могут все, а не только опытные ИТ-специалисты.
Утилита отвечает за блокировку или пропуск сетевого трафика. При установке соединения с устройством iptables сверяется со списком правил, после чего принимает решение о действии в данном случае. Сетевой пакет может передаваться дальше или отклоняться.
Утилита присутствует практически во всех дистрибутивах Linux и настраивается в командной строке. Управление из командной строке — это не сложно, но нужно быть внимательным, особенно при удалённом SSH-подключении. Если ввести неверную команду, возникает риск блокировки доступа к удалённому серверу. В этом случае поменять настройки удастся только при физическом доступе к устройству.
Установка или добавление iptables выполняется путём ввода команды sudo apt-get install iptables
.
Типы правил
Существует три типа сетевых пакетов: входящие (отправленные на этот компьютер), исходящие (отправленные в сеть из этого компьютера) и проходящие (пересылаемые дальше). Фильтр iptables также делит пакеты на три цепочки, input, forward и output.
- Input. Обрабатываются входящие соединения и сетевые пакеты. Цепочка задействуется при попытке подключения к пользовательскому компьютеру по SSH или отправке сайтом контента через браузер.
- Output. Обрабатываются исходящие пакеты и соединения. Если выполнить пинг любого ресурса или зайти на любой сайт в браузере, iptables разрешит действие или запретит соединение, исходя из записанной цепочки правил.
- Forward. Обрабатываются проходящие соединения. Сетевые пакеты, которые проходят через компьютер и предназначены другому адресату, попадают в эту цепочку. Встречается, если использовать компьютер как маршрутизатор или при раздаче Wi-Fi.
Не забывайте, что пинг внешних хостов требует не только отправки пакетов (input), но и получения ответа (input). Двусторонняя коммуникация — важное условие работы многих протоколов. Поэтому настройка iptables должна учитывать возможность полноценной работы с сервером по SSH. Зачастую forward оказывается невостребованным.
Стоит упомянуть ещё два важных типа цепочек. Имеются в виду необходимая для первичной обработки и анализа абсолютно всех входящих пакетов цепочка Prerouting (сюда пакет попадает перед обработкой iptables), и завершающая работу с пакетами цепочка Postrouting (сюда после прохождения цепочки forward отправляются пакеты, которые нужно передать на другие узлы сети).
У каждого типа сетевых пакетов может быть набор правил, которые определяют, какое действие применить к конкретному пакету. Основными действиями являются:
- ACCEPT. Разрешить прохождение сетевого пакета дальше по цепочке правил;
- DROP. Удалить пакет;
- REJECT. Отклонить сетевой пакет, уведомив об этом отправителя;
- LOG. Запись о сетевом пакете в лог;
- QUEUE. Отправить сетевой пакет пользовательскому приложению.
Действия с соединениями
Перед настройкой фильтра проверьте, какие условия выполняются по умолчанию. Если соединение не подпадает под существующие правила, будут выполниться действия, заданные по умолчанию. Узнать уже сконфигурированные правила можно командой iptables -L
.
В идеале все три цепочки должны разрешать приём трафика. Это можно задать вручную так:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Можно запретить весь трафик, чтобы потом выборочно разрешить какой-то. Для этого используйте команды:
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
При перезапуске iptables все внесённые изменения пропадут. Сохраните изменения в цепочках правил, выполнив команду =sudo /sbin/iptables-save
для Ubuntu или =/sbin/service iptables save
для Red Hat/CentOS.
до 40% от каждого клиентаСтать партнёром
Таблицы iptables
Таблицы iptables имеют тот же набор цепочек i(nput, forward, output) и предназначены для выполнения модификации, фильтрации или других действий над сетевыми пакетами. Выделяют следующие таблицы:
- Raw. Для работы с пакетами, которые пока не прошли обработку;
- Mangle. Для модификации пакетов;
- Nat. Для поддержки работы NAT, если вы хотите использовать компьютер в качестве маршрутизатора;
- Filter. Используется по умолчанию для фильтрации пакетов.
Дополнительные настройки
Если посмотреть на синтаксис утилиты, можно заметить, что команда обычно имеет следующий вид:
$ iptables -t таблица действие цепочка дополнительные_параметры
Здесь «таблица» указывает таблицу, с которой нужно работать. «Действие» — указывает действие, которое нужно выполнить (например, создать/удалить правило). «Дополнительные параметры» описывают действие и правило, которое нужно выполнить. Какими бывают действия?
- -A. Добавить правило в цепочку;
- -С. Проверить все правила;
- -D. Удалить правило;
- -I. Вставить правило с нужным номером;
- -L. Вывести все правила в текущей цепочке;
- -S. Вывести все правила;
- -F. Очистить все правила;
- -N. Создать цепочку;
- -X. Удалить цепочку;
- -P. Установить действие по умолчанию.
Среди дополнительных настроек для правил выделим следующие:
- -p. Указать протокол, один из tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh;
- -s. Указать ip адрес устройства-отправителя пакета;
- -d. Указать ip адрес получателя;
- -i . Входной сетевой интерфейс;
- -o. Исходящий сетевой интерфейс;
- -j. Выбрать действие, если правило подошло.
В целом это всё, что нужно знать о настройке iptables в Linux-системах. Напоминаем, что без необходимости и достаточных знаний менять системные настройки опасно. Рекомендуем экспериментировать на виртуальной машине.