Вопрос или проблема
Я пытаюсь использовать Firewalld для ограничения доступа к/из сервера Linux
Окружение
- сервер Linux имеет один сетевой интерфейс:
ens160
Требования
- Разрешить доступ только машинам с IP-адресами
192.168.3.0/24
к этому серверу Linux с помощью SSH и ICMP - Никакие другие IP-адреса или службы не должны иметь доступ к этому серверу Linux
Сделанные настройки
sudo firewall-cmd --set-default-zone=internal
sudo firewall-cmd --zone=internal --add-interface=ens160 --permanent
sudo firewall-cmd --permanent --zone=internal --add-rich-rule="rule family="ipv4" \
source address="192.168.3.0/24" service name="ssh" accept"
sudo firewall-cmd --zone=internal --add-icmp-block={echo-request,echo-reply} \
--permanent
sudo firewall-cmd --permanent --zone=internal --add-rich-rule="rule family="ipv4" \
source address="192.168.3.0/24" icmp-type name="echo-request" accept"
sudo firewall-cmd --permanent --zone=internal --add-rich-rule="rule family="ipv4" \
source address="192.168.3.0/24" icmp-type name="echo-reply" accept"
Статус конфигурации
user@server:~$ sudo firewall-cmd --list-all
internal (активно)
target: default
icmp-block-inversion: нет
interfaces: ens160
sources:
services:
ports:
protocols:
masquerade: нет
forward-ports:
source-ports:
icmp-blocks: echo-reply echo-request
rich rules:
rule family="ipv4" source address="192.168.3.0/24" service name="ssh" accept
rule family="ipv4" source address="192.168.3.0/24" icmp-type name="echo-request" accept
rule family="ipv4" source address="192.168.3.0/24" icmp-type name="echo-reply" accept
Результаты проверки
Работает с SSH:
- IP-адреса, отличные от
192.168.3.0/24
, не могут использовать SSH для подключения к серверу Linux.
Похоже, что это не работает с ICMP:
- IP-адреса 192.168.3.0/24 не могут пинговать сервер Linux
Я понимаю, что проблема, вероятно, заключается в “icmp-blocks: echo-reply echo-request
“, который блокирует весь ICMP-трафик, а также в двух правилах riche для icmp. Я много гуглил и просто не смог найти правильное решение.
Может кто-нибудь помочь мне с этим? Буду признателен.
Я понимаю, что это старый пост, но я прохожу свой собственный процесс обучения firewalld и подумал, что это может помочь другим, кто столкнется с этим вопросом.
Я нашёл команды из оригинального поста полезными, и думаю, что причина, по которой это не сработало, может быть в том, что icmp-block-inversion
все еще установлен на no
, также возможно, что --reload
не был выполнен, следующие команды должны это исправить:
$ sudo firewall-cmd --permanent --zone=internal --add-icmp-block-inversion
$ sudo firewall-cmd --reload
Мне любопытно относительно комментария, что “Rich rules aren’t a good way to do this …“, почему?
Моя конкретная задача заключается в том, чтобы предотвратить всех хостов от использования ping
, и да, я знаю, что это не добавляет много безопасности, но ты попробуй объяснить это руководителям безопасности, вздох.
Тем не менее, я обнаружил, что когда сервер Oracle пытается инициировать резервное копирование, сервер NetBackup по какой-то причине использует ping
, и резервное копирование завершается неудачей, потому что его блокируют. Поэтому я внес следующие изменения в зону, которые, похоже, работают (адрес .0.50 – это сервер NB):
$ sudo firewall-cmd --permanent --zone=internal --add-icmp-block-inversion
$ sudo firewall-cmd --permanent --zone=internal --add-rich-rule="family="ipv4" source address="192.168.0.50/32" icmp-type name="echo-request" accept"
$ sudo firewall-cmd --permanent --zone=internal --add-rich-rule="family="ipv4" source address="192.168.0.50/32" icmp-type name="echo-reply" accept"
$ sudo firewall-cmd --reload
Я не заблуждаюсь ли, потому что ссылка в комментарии о rich rules, кажется, подразумевает наличие уникальной зоны только для сервера NetBackup, но интерфейс, который он пытается ping
, является производственным, используемым для всего остального доступа, который разрешен.
Надеюсь, это имеет смысл, и я приветствую любые комментарии или предложения.
С уважением,
Ник
Ответ или решение
Чтобы настроить Firewalld на ограничение доступа к вашему серверу под управлением Linux таким образом, чтобы только машины с IP-адресами в диапазоне 192.168.3.0/24
могли осуществлять подключения по SSH и ICMP, необходимо внести несколько изменений в конфигурацию брандмауэра.
Пошаговая настройка
-
Установите зону по умолчанию на
internal
:sudo firewall-cmd --set-default-zone=internal
-
Добавьте интерфейс
ens160
в зонуinternal
:sudo firewall-cmd --zone=internal --add-interface=ens160 --permanent
-
Разрешите SSH для источников из диапазона
192.168.3.0/24
:sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.3.0/24" service name="ssh" accept'
-
Блокируйте ICMP-пакеты, включая
echo-request
иecho-reply
:sudo firewall-cmd --permanent --zone=internal --add-icmp-block={echo-request,echo-reply}
-
Разрешите ICMP (ping) для источников из диапазона
192.168.3.0/24
:sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.3.0/24" icmp-type name="echo-request" accept' sudo firewall-cmd --permanent --zone=internal --add-rich-rule='rule family="ipv4" source address="192.168.3.0/24" icmp-type name="echo-reply" accept'
-
Включите инверсию блокировки ICMP:
Ваша проблема с ICMP может быть связана с тем, чтоicmp-block-inversion
установлен вno
. Убедитесь, что инверсия включена:sudo firewall-cmd --permanent --zone=internal --add-icmp-block-inversion
-
Примените изменения:
После внесения всех изменений важно перезагрузить конфигурацию Firewalld:sudo firewall-cmd --reload
Проверка статуса конфигурации
После выполнения команд проверьте текущую конфигурацию брандмауэра:
sudo firewall-cmd --list-all
Убедитесь, что в выводе присутствуют ваши правила, включая icmp-blocks
и правила, разрешающие SSH и ICMP для указанного диапазона.
Дополнительные соображения
-
Rich rules (богатые правила): Они позволяют более гибко настраивать правила, но могут быть менее производительными по сравнению с предопределенными правилами, так как анализа требует больше ресурсов. Однако они отлично подходят для специфических сценариев, таких как ваш.
-
Советы по безопасности: Имейте в виду, что ICMP может быть полезным для диагностики, и иногда блокировка всех ICMP-пакетов может повлечь за собой затруднения в сетевом администрировании. Убедитесь, что блокировка соответствует требованиям безопасности вашей сети.
Следуя вышеописанным шагам, вы сможете настроить Firewalld так, чтобы он ограничивал доступ к серверу только для определенных IP-адресов, при этом разрешая необходимый трафик.