Поиск по сайту:

Как настроить брандмауэр Iptables для включения удаленного доступа к службам в Linux. Часть 8


Представляем программу сертификации Linux Foundation

Как вы помните, в Части 1 «Об Iptables» серии LFCE (Сертифицированный инженер Linux Foundation) мы давали базовое описание того, что такое межсетевой экран: механизм управления пакеты, входящие и выходящие из сети. Под «управлением» мы на самом деле подразумеваем:

  1. Разрешить или запретить определенным пакетам входить в нашу сеть или выходить из нее.
  2. Для пересылки других пакетов из одной точки сети в другую.

на основе заранее определенных критериев.

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

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

Вы можете представить брандмауэр как международный аэропорт, куда пассажирские самолеты прилетают и улетают почти круглосуточно. На основании ряда условий, таких как срок действия паспорта человека или его/ее страна происхождения (приведем несколько примеров), ему или ей может быть разрешено или не разрешено въезд или выезд из определенной страны.

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

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

  1. Лица=Пакеты
  2. Брандмауэр=Аэропорт
  3. Страна №1=Сеть №1
  4. Страна №2=Сеть №2
  5. Правила аэропорта, соблюдаемые офицерами=правила брандмауэра

Iptables – основы

На низком уровне само ядро «решает», что делать с пакетами на основе правил, сгруппированных в цепочки или предложения. Эти цепочки определяют, какие действия следует предпринять, когда пакет соответствует указанным ими критериям.

Первое действие, которое предпримет iptables, будет заключаться в решении, что делать с пакетом:

  1. Принять это (пропустить в нашу сеть)?
  2. Отклонить его (запретить ему доступ к нашей сети)?
  3. Переслать его (в другую цепочку)?

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

1. Цепочка INPUT обрабатывает поступающие в сеть пакеты, предназначенные для локальных программ.

2. Цепочка OUTPUT используется для анализа пакетов, исходящих из локальной сети, которые должны быть отправлены наружу.

3. Цепочка FORWARD обрабатывает пакеты, которые должны быть перенаправлены в другой пункт назначения (как в случае с маршрутизатором).

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

iptables -L

Доступны следующие политики:

  1. ACCEPT → пропускает пакет. Любой пакет, не соответствующий каким-либо правилам в цепочке, допускается в сеть.
  2. DROP → тихо удаляет пакет. Любой пакет, который не соответствует каким-либо правилам в цепочке, не попадает в сеть.
  3. REJECT → отклоняет пакет и возвращает информационное сообщение. В частности, эта политика не работает в качестве политики по умолчанию. Вместо этого он предназначен для дополнения правил фильтрации пакетов.

Когда дело доходит до принятия решения о том, какую политику вы будете внедрять, вам необходимо рассмотреть плюсы и минусы каждого подхода, как описано выше. Обратите внимание, что не существует единого подхода. -все решение.

Добавление правил

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

iptables -A chain_name criteria -j target

где,

  1. -A означает Append (добавление текущего правила в конец цепочки).
  2. chain_name — это INPUT, OUTPUT или FORWARD.
  3. target — это действие или политика, применяемая в этом случае (ACCEPT, REJECT или DROP).
  4. критерии — это набор условий, на соответствие которым должны проверяться пакеты. Он состоит как минимум из одного (скорее всего, из нескольких) из следующих флагов. Опции внутри скобок, разделенные вертикальной чертой, эквивалентны друг другу. Остальное представляет собой дополнительные переключатели:
[--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.

Наша среда тестирования

Давайте объединим все это в 3 классических примера, используя для первых двух следующую тестовую среду:

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):

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

Чтобы эти изменения сохранялись при загрузке:

Ubuntu: установите пакет iptables-persistent, который загрузит правила, сохраненные в файле /etc/iptables/rules.v4.

apt-get install iptables-persistent

CentOS: добавьте следующие две строки в файл /etc/sysconfig/iptables-config.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: список разрешенных портов, протоколов, адресов и т. д. (через запятую) в /etc/sysconfig/SuSEfirewall2.

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

Заключение

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

Тем из вас, кто является поклонником брандмауэров, имейте в виду, что мы вернемся к этой теме с более конкретными приложениями в Части 10 этой серии LFCE.

Не стесняйтесь, дайте мне знать, если у вас есть какие-либо вопросы или комментарии.