
Представляем программу сертификации The Linux Foundation
Вы наверняка помните из Части 1 – О Iptables этой серии LFCE (Linux Foundation Certified Engineer), что мы дали базовое описание того, что такое брандмауэр: механизм управления пакетами, поступающими и покидающими сеть. Под “управлением” мы на самом деле понимаем:
- Разрешение или блокирование определенных пакетов для входа или выхода из нашей сети.
- Перенаправление других пакетов из одной точки сети в другую.
на основе заранее определенных критериев.
В этой статье мы рассмотрим, как настроить базовую фильтрацию пакетов и настроить брандмауэр с помощью iptables, фронтенда для netfilter, который является встроенным модулем ядра, используемым для создания брандмауэра.
Обратите внимание, что создание брандмауэра – это обширная тема, и эта статья не претендует на то, чтобы быть всеобъемлющим руководством по пониманию всего, что касается этого вопроса, а скорее является отправной точкой для более глубокого изучения этой темы. Однако мы вернемся к этой теме в Части 10 этой серии, когда рассмотрим несколько конкретных случаев использования брандмауэра в Linux.
Вы можете представить брандмауэр как международный аэропорт, где пассажирские самолеты прилетают и улетают практически круглосуточно. Исходя из ряда условий, таких как действительность паспорта человека или его страна происхождения (чтобы привести несколько примеров), ему могут разрешить или запретить въезд или выезд из определенной страны.
В то же время, сотрудники аэропорта могут направлять людей из одного места аэропорта в другое, если это необходимо, например, когда им нужно пройти через таможенные услуги.
Мы можем найти аналогию с аэропортом полезной на протяжении остальной части этого учебника. Просто имейте в виду следующие отношения по мере продвижения:
- Лица = Пакеты
- Брандмауэр = Аэропорт
- Страна #1 = Сеть #1
- Страна #2 = Сеть #2
- Аэропортские правила, применяемые офицерами = правила брандмауэра
Iptables – Основы
На низком уровне, это сам ядро, которое “решает” что делать с пакетами на основе правил, сгруппированных в цепочки, или предложения. Эти цепочки определяют, какие действия следует предпринять, когда пакет соответствует критериям, указанным ими.
Первое действие, предпринятое iptables, будет состоять в том, чтобы решить, что делать с пакетом:
- Принять его (допустить проход в нашу сеть)?
- Отклонить его (не допустить доступ в нашу сеть)?
- Перенаправить его (в другую цепочку)?
Просто в случае, если вы задавались вопросом, почему этот инструмент называется iptables, это потому, что эти цепочки организованы в таблицы, причем фильтрующая таблица является самой известной и используется для реализации фильтрации пакетов с ее тремя основными цепочками:
1. Цепочка INPUT обрабатывает пакеты, поступающие в сеть, которые предназначены для локальных программ.
2. Цепь OUTPUT используется для анализа пакетов, исходящих из локальной сети и предназначенных для отправки наружу.
3. Цепь FORWARD обрабатывает пакеты, которые должны быть перенаправлены на другой адрес (как в случае с маршрутизатором).
Для каждой из этих цепей существует политика по умолчанию, которая определяет, что делать по умолчанию, когда пакеты не соответствуют ни одному из правил в цепи. Вы можете просмотреть созданные правила для каждой цепи и политику по умолчанию, запустив следующую команду:
# iptables -L
Доступные политики следующие:
- ACCEPT → пропускает пакет. Любой пакет, который не соответствует ни одному правилу в цепи, разрешается в сеть.
- DROP → тихо отбрасывает пакет. Любой пакет, который не соответствует ни одному правилу в цепи, предотвращается от входа в сеть.
- REJECT → отклоняет пакет и возвращает информативное сообщение. Эта политика не работает как политика по умолчанию. Вместо этого она предназначена для дополнения правил фильтрации пакетов.

Когда дело доходит до выбора политики, которую вы реализуете, вам нужно учитывать плюсы и минусы каждого подхода, как объяснено выше – обратите внимание, что нет универсального решения.
Добавление правил
Чтобы добавить правило в брандмауэр, вызовите команду iptables следующим образом:
# iptables -A chain_name criteria -j target
где,
- -A означает Append (добавить текущее правило в конец цепи).
- chain_name – это либо INPUT, OUTPUT, либо FORWARD.
- target – это действие или политика, которые следует применять в данном случае (ACCEPT, REJECT или DROP).
- criteria – набор условий, по которым пакеты должны быть проверены. Он состоит как минимум из одного (скорее всего нескольких) из следующих флагов. Опции в квадратных скобках, разделенные вертикальной чертой, эквивалентны друг другу. Остальное представляет собой необязательные переключатели:
[--protocol | -p] protocol: specifies the protocol involved in a rule. [--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated. [--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined. [--source | -s] address[/mask]: represents the source address or network/mask. [--destination | -d] address[/mask]: represents the destination address or network/mask. [--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID. [--in-interface | -i] interface: specifies the input interface of the packet. [--out-interface | -o] interface: the output interface. [--jump | -j] target: what to do when the packet matches the rule.
Наша тестовая среда
Давайте рассмотрим три классических примера, используя следующую тестовую среду для первых двух:
Firewall: Debian Wheezy 7.5 Hostname: dev2.gabrielcanepa.com IP Address: 192.168.0.15
Source: CentOS 7 Hostname: dev1.gabrielcanepa.com IP Address: 192.168.0.17
И это для последнего примера
NFSv4 server and firewall: Debian Wheezy 7.5 Hostname: debian IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 Hostname: dev2.gabrielcanepa.com IP Address: 192.168.0.15
ПРИМЕР 1: Анализ различий между политиками DROP и REJECT
Сначала мы определим политику DROP для входящих пингов на нашем брандмауэре. То есть icmp-пакеты будут тихо отбрасываться.
# ping -c 3 192.168.0.15
# iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Прежде чем перейти к части REJECT, мы очистим все правила из цепочки INPUT, чтобы убедиться, что наши пакеты будут проверены этим новым правилом:
# iptables -F INPUT # iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
# ping -c 3 192.168.0.15

ПРИМЕР 2: Отключение/включение входа ssh с dev2 на dev1
Мы будем иметь дело с цепочкой OUTPUT, так как мы обрабатываем исходящий трафик:
# iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

ПРИМЕР 3: Разрешение/предотвращение монтирования NFS-клиентов (из 192.168.0.0/24) для монтирования NFS4-дисков
Запустите следующие команды на сервере NFSv4 / брандмауэре, чтобы закрыть порты 2049 и 111 для всех видов трафика:
# iptables -F # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Теперь давайте откроем эти порты и посмотрим, что произойдет.
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT # iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Как видите, мы смогли монтировать диск NFSv4 после открытия трафика.
Вставка, добавление и удаление правил
В предыдущих примерах мы показали, как добавлять правила в цепочки INPUT и OUTPUT. Если мы захотим вставить их в заранее определенное положение, мы должны использовать переключатель -I (прописная i).
Нужно помнить, что правила будут оцениваться одно за другим, и что оценка прекращается (или прыгает), когда совпадает политика DROP или ACCEPT. Поэтому вам может потребоваться перемещать правила вверх или вниз в списке цепочек по мере необходимости.
Мы используем тривиальный пример, чтобы продемонстрировать это:

Давайте поместим следующее правило,
# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT
на позицию 2) в цепочке INPUT (перемещая предыдущее #2 как #3)

Используя настройку выше, трафик будет проверяться на то, направлен ли он на порт 80, прежде чем проверять порт 2049.
В качестве альтернативы, вы можете удалить правило и изменить цель оставшихся правил на REJECT (используя переключатель -R</diy16):
# iptables -D INPUT 1 # iptables -nL -v --line-numbers # iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT # iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Наконец, но не менее важно, нужно помнить, что для того чтобы правила брандмауэра были постоянными, их нужно сохранить в файл, а затем автоматически восстановить при загрузке (используя предпочтительный метод на ваш выбор или доступный для вашего дистрибутива).
Сохранение правил брандмауэра:
# iptables-save > /etc/iptables/rules.v4 [On Ubuntu] # iptables-save > /etc/sysconfig/iptables [On CentOS / OpenSUSE]
Восстановление правил:
# iptables-restore < /etc/iptables/rules.v4 [On Ubuntu] # iptables-restore < /etc/sysconfig/iptables [On CentOS / OpenSUSE]
Здесь мы можем увидеть аналогичную процедуру (сохранение и восстановление правил брандмауэра вручную) с использованием фиктивного файла под названием iptables.dump вместо показанного выше по умолчанию.
# iptables-save > iptables.dump

Чтобы сделать эти изменения постоянными после перезагрузки:
Убунту: Установите пакет iptables-persistent, который загрузит правила, сохраненные в файле /etc/iptables/rules.v4.
# apt-get install iptables-persistent
CentOS: Добавьте следующие 2 строки в файл /etc/sysconfig/iptables-config.
IPTABLES_SAVE_ON_STOP="yes" IPTABLES_SAVE_ON_RESTART="yes"
OpenSUSE: Укажите разрешенные порты, протоколы, адреса и так далее (разделенные запятыми) в файле /etc/sysconfig/SuSEfirewall2.
Для получения дополнительной информации обратитесь к самому файлу, который содержит много комментариев.
Вывод
Приведенные в этой статье примеры, хотя и не охватывают всех возможностей iptables, служат для иллюстрации того, как включать и отключать входящий или исходящий трафик.
Для тех из вас, кто увлекается брандмауэрами, имейте в виду, что мы еще вернемся к этой теме с более конкретными приложениями в Части 10 этой серии LFCE.
Не стесняйтесь сообщить мне, если у вас есть вопросы или комментарии.
Source:
https://www.tecmint.com/configure-iptables-firewall/