Вопрос или проблема
Мой вопрос заключается в том, как я могу сохранить текущую конфигурацию 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 настроена следующим образом:
- Убедитесь, что у вас нет других активных зон, которые могли бы влиять на политику.
- Обновите правила в вашей текущей зоне public:
firewall-cmd --zone=public --set-target=DROP
Это устанавливает поведение зоны public таким образом, что она будет сбрасывать все соединения, которые не соответствуют явно установленным правилам.
- После внесения изменений, перезапустите firewalld для применения правил:
firewall-cmd --reload
Рекомендации
- Проверьте активные службы и открытые порты, чтобы не закрыть необходимые ресурсы:
firewall-cmd --list-all
- Не забывайте регулярно проверять вашу конфигурацию и тестировать её с помощью сетевых инструментов, таких как
nmap
илиtelnet
, чтобы убедиться, что все необходимые соединения работают как ожидается. - В случае, если вы не уверены в изменениях, создайте резервную копию текущей конфигурации перед внесением изменений:
firewall-cmd --zone=public --list-all > ~/current-firewall-config.txt
Заключение
Теперь, имея на руках указания по конфигурации firewalld, вы должны быть в состоянии настроить его так, чтобы он по умолчанию сбрасывал все соединения, кроме тех, что были явно разрешены в вашей конфигурации. Обратите внимание, что firewalld и iptables могут работать по-разному, и лучше сосредоточиться на firewalld при принятии решений о безопасности сети.