Firewalld по умолчанию блокирует и позволяет существующие правила, которые уже применены.

Вопрос или проблема

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

У меня такая конфигурация файрвола:

[root@server ~]$ firewall-cmd --get-default-zone
public

[root@server ~]$ firewall-cmd --list-all
public (активно)
  target: default
  icmp-block-inversion: нет
  interfaces: ens192
  sources:
  services: ssh dhcpv6-client
  ports: 123/udp 514/tcp 514/udp 5514/udp 5514/tcp 9200/tcp 9300/tcp 5044/tcp 53/udp 443/tcp 5000/tcp 55000/tcp 1516/tcp 1515/tcp 1514/tcp
  protocols:
  masquerade: да
  forward-ports: port=514:proto=udp:toport=5514:toaddr=
        port=514:proto=tcp:toport=5514:toaddr=
  source-ports:
  icmp-blocks:
  rich rules:

Как мне использовать те правила, которые я настроил, и при этом по умолчанию отключать все? Потому что если я выполняю iptables -L, то вижу, что политика по умолчанию – ACCEPT:

Цепь INPUT (политика ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  anywhere             anywhere
INPUT_direct  all  --  anywhere             anywhere
INPUT_ZONES_SOURCE  all  --  anywhere             anywhere
INPUT_ZONES  all  --  anywhere             anywhere
DROP       all  --  anywhere             anywhere             ctstate INVALID
REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited

Из документации:

public

Для использования в общественных местах. Вы не доверяете другим компьютерам в сетях и не хотите, чтобы они навредили вашему компьютеру. Только выбранные входящие соединения принимаются.

Это означает, что вы уже не допускаете всё, что не разрешено явно. Вы можете увидеть это и из строки:

target: default

Цель по умолчанию – REJECT, что зашито в firewalld.

При использовании firewalld/firewall-cmd забудьте про iptables, если вы используете недавнюю версию Enterprise Linux (8 и выше)

Вывод команды iptables не имеет значения и будет сбивать вас с толку, как это сбивало меня в начале.

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

Один ответ, который я нашел очень полезным, это этот: https://serverfault.com/a/680789/50874

Ответ или решение

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

Этап 1: Понимание текущей конфигурации firewalld

Согласно вашему запросу, текущая зона по умолчанию – public, и в ней уже имеют место служебные порты и службы:

services: ssh dhcpv6-client
ports: 
  123/udp 
  514/tcp 
  514/udp 
  ...

Как указано в документации firewalld, зона public предназначена для использования в общественных местах, где вы не доверяете другим компьютерам в сети. И это как раз то, что вы хотите.

Этап 2: Проверка политики и ее настройка

Ваш вывод из iptables показывает, что политика по умолчанию – ACCEPT для ввода:

Chain INPUT (policy ACCEPT)
...

Это может быть источником путаницы, так как firewalld и iptables управляют правилами разными способами. Для firewalld не нужно беспокоиться о настройках iptables, так как firewalld управляет собственными правилами на более высоком уровне.

Этап 3: Настройка firewalld

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

  1. Убедитесь, что у вас нет других активных зон, которые могли бы влиять на политику.
  2. Обновите правила в вашей текущей зоне public:
firewall-cmd --zone=public --set-target=DROP

Это устанавливает поведение зоны public таким образом, что она будет сбрасывать все соединения, которые не соответствуют явно установленным правилам.

  1. После внесения изменений, перезапустите firewalld для применения правил:
firewall-cmd --reload

Рекомендации

  • Проверьте активные службы и открытые порты, чтобы не закрыть необходимые ресурсы:
firewall-cmd --list-all
  • Не забывайте регулярно проверять вашу конфигурацию и тестировать её с помощью сетевых инструментов, таких как nmap или telnet, чтобы убедиться, что все необходимые соединения работают как ожидается.
  • В случае, если вы не уверены в изменениях, создайте резервную копию текущей конфигурации перед внесением изменений:
firewall-cmd --zone=public --list-all > ~/current-firewall-config.txt

Заключение

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

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

Капча загружается...