Введение в команду firewalld и firewall-cmd в Linux

Задача

Изучить основные концепции firewalld и способы взаимодействия с ним с помощью утилиты firewall-cmd

Требования

Полномочия root

Введение

Начиная с версии 7 Rhel и CentOS и версии 18 Fedora, firewalld является системой брандмауэра по умолчанию.

Одной из его отличительных черт является его модульность: он работает над концепцией зон — zones

В этом уроке мы узнаем больше об этом и о том, как с ним работать, используя утилиту firewall-cmd.

Брандмауэр на основе зон

Firewalld — это брандмауэр на основе зоны: каждая зона может быть настроена так, чтобы принимать или отклонять некоторые службы или порты и, следовательно, с другим уровнем безопасности.

Зоны могут быть связаны с одним или несколькими сетевыми интерфейсами.

Обычно firewalld поставляется с набором предварительно сконфигурированных зон: чтобы перечислять эти зоны и, в общем, взаимодействовать с брандмауэром, мы будем использовать утилиту firewall-cmd.

Я работаю в системе Fedora 27, давайте посмотрим, какие существуют доступные зоны:

$ firewall-cmd --get-zones
FedoraServer FedoraWorkstation block dmz drop external home internal public trusted work

Как вы можете увидеть, приведенная выше команда возвращает список всех доступных интерфейсов в моей системе.

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

Затем каждый интерфейс настраивается с некоторыми исключениями, в зависимости от служб, которые должны быть разрешены.

Если мы хотим получить список всех сервисов, связанных с зоной, мы можем запустить firewall-cmd с параметром —get-services.

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

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens5f5
  sources:
  services: ssh mdns dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Команда вернула сводку состояния зоны (в данном случае по умолчанию «public»).

Среди прочего вы можете четко видеть, какие сетевые интерфейсы связаны с этой зоной (в данном случае — ens5f5) и какие услуги разрешены (ssh, mdns, dhcpv6-client).

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

Например, чтобы получить информацию о external мы будем запустим:

# firewall-cmd --zone=external --list-all
external
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh
  ports:
  protocols:
  masquerade: yes
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Настройки зон

Как говорилось ранее, при использовании инструмента firewall-cmd, если зона не указана, ссылаются на зону по умолчанию.

Возможно, мы захотим изменить зону по умолчанию.

Скажем, например, мы хотим установить внешнюю зону external как значение по умолчанию:

# firewall-cmd --set-default=external

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

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

Например: служба ssh будет включать в себя TCP-порт 22, тогда как служба samba будет понимать набор портов 139 и 445 TCP и 137 и 138 UDP.

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

Предположим, что мы хотим добавить службу samba во внешнюю зону, все, что нам надо сделать, это:

# firwall-cmd --zone=external --add-service=samba
success

Демон Firewalld ответил успешно, это означает, что добавление службы выполнено.

Чтобы проверить это, давайте проверим сервисы зоны:

$ sudo firewall-cmd --zone=external --list-services
ssh samba

Как вы можете видеть, мы использовали опцию -list-services для этой задачи.

Результат команды явно означает, что служба samba была добавлена в зону. Тем не менее, модификации, сделанные таким образом, являются временными и не выдержат перезагрузки firewalld-демона. Давайте проверим это.

Сначала мы перезагружаем службу:

 # firewall-cmd --reload

Затем мы снова проверяем сервисы, разрешенные во внешней зоне external:

# firewall-cmd --zone=external --list-services
ssh

Как вы можете увидеть, единственной службой, разрешенной во внешней зоне, является ssh.

Чтобы сделать постоянную модификацию зоны, мы должны использовать опцию -perantent:

 # firewall-cmd --permanent --zone=external --add-service=samba

Для внесения изменений в постоянные изменения потребуется перезагрузка брандмауэра.

Если мы хотим сделать обратную операцию дабы удалить сервис из зоны, мы выполним:

 # firewall-cmd --permanent --zone=external --remove-service=samba

Синтаксис очень интуитивно понятен и не нуждается в дальнейших объяснениях.

Но что, если мы хотим добавить определенный порт вместо службы? Синтаксис слегка изменится:

 # firewall-cmd --permanent --zone=external --add-port=139/tcp

Чтобы убедиться, что порт добавлен в зону:

# firewall-cmd --zone=external --list-ports
139/tcp

Операция прошла успешно.

Точно так же, чтобы удалить порт:

# firewall-cmd --permanent --zone=external --remove-port=139/tcp

Создание пользовательской зоны

До сих пор мы посмотрели, как изменять существующие зоны.

Также можно создать несколько новых, и это так же просто.

Предположим, мы хотим создать пользовательскую зону под названием linuxconfig:

# firewall-cmd --permanent --new-zone=linuxconfig

Создана новая пустая зона: по умолчанию в ней не разрешены службы или порты.

Также можно создать зону, загрузив файл конфигурации:

# firewall-cmd --permanent --new-zone-from-file=file --name=linuxconfig

Где file — это путь к файлу, содержащему определение зоны.

Обратите внимание, что при создании или удалении зоны параметр -permanent является обязательным: ошибка будет отображена, если он не указан.

Свяжите зону с интерфейсом

Создание зоны — это только первый шаг: теперь мы должны связать ее с сетевым интерфейсом.

Предположим, мы хотим использовать нашу новую созданную зону, связывая ее с интерфейсом ethernet через ens5f5: вот команда, которая позволяет нам выполнить задачу:

# firewall-cmd --permanent --zone=linuxconfig --add-interface=ens5f5

если мы запрашиваем зону на назначенные ей интерфейсы, мы должны увидеть:

# firewall-cmd --zone=linuxconfig --list-interfaces
ens5f5

Удаление интерфейса из зоны так же просто:

# firewall-cmd --remove-interface=ens5f5 --zone=linuxconfig

Углубленные правила | Rich rules

В определенных ситуациях нам может потребоваться создать более сложное правило, а не просто разрешить некоторые порты или службы в зоне.

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

Для этого нужны — Rich rules.

Правило в основном состоит из двух частей: в первом мы указываем условия, которые должны выполняться для применяемого правила, а во втором — действие, которое должно выполняться: принимать, сбрасывать или отклонять — acceptdrop, ,reject.

Предположим, мы хотим заблокировать трафик с компьютера с ip 192.168.0.37 в локальной сети: вот как мы будем составлять наше правило:

# firewall-cmd --zone=linuxconfig --add-rich-rule="rule \
    family="ipv4" \
    source address=192.168.0.37 \
    service name=ssh \
    reject \

Чтобы добавить правило, мы использовали опцию -add-rich-rule, описывающую правило в качестве аргумента.

Правило начинается с ключевого слова правила. В family мы указали, что правило применяется только к ipv4-пакетам: если это ключевое слово не указано, правило применяется как к ipv4, так и к ipv6.

Затем мы предоставили исходный адрес, который получает пакеты для запуска правила с адресом источника.

С помощью service мы указали тип сервиса для правила, в данном случае ssh.

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

Если мы попытаемся установить соединение ssh с машиной с 192.168.0.37 ip, мы получим:

ssh 192.168.0.35
ssh: connect to host 192.168.0.35 port 22: Connection refused

Вы можете посмотреть документацию по firewalld, чтобы увидеть весь диапазон доступных параметров и опций.

panic mode

Panice mode- это режим, который следует использовать только в ситуациях, когда есть серьезные проблемы с сетевой средой.

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

Он может быть включен таким образом:

# firewall-cmd --panic-on

Чтобы выйти из этого режима:

# firewall-cmd --panic-off

Можно даже запросить его статус, выполнив:

# firewall-cmd --query-panic

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40