Я бы сделал это, добавив источники в зону. Сначала проверьте, какие источники существуют для вашей зоны:
firewall-cmd --permanent --zone=public --list-sources
Если их нет, вы можете начать добавлять их, это ваш «белый список»
firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32
(Это добавляет целый /24
и один IP, так что у вас есть ссылка как для подсети, так и для одного IP)
Установите диапазон портов, которые вы хотите открыть:
firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp
Это только порты с 1 по 22. Вы можете расширить это, если хотите.
Теперь перезагрузите то, что вы сделали.
firewall-cmd --reload
И проверь свою работу:
firewall-cmd --zone=public --list-all
Дополнительное примечание / редакционная статья: Это не имеет значения, но мне нравится «доверенная» зона для белого списка IP-адресов в firewalld. Вы можете сделать дополнительную оценку, прочитав предложения Redhat по выбору зоны .
Смотрите также:
Если вы хотите, чтобы DROP
пакеты выходили за пределы этого источника, вот пример для удаления тех пакетов, которые /24
я использовал в качестве примера ранее, вы можете использовать богатые правила для этого , я считаю. Это концептуально, я не проверял это (кроме того, чтобы увидеть, что centos 7 принимает команду), но должно быть достаточно легко сделать pcap и посмотреть, будет ли он вести себя так, как вы ожидаете
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'
Даже если ответ был принят и одобрен, я не считаю его правильным. Я не могу найти четкого объяснения в документации, но из реализованного поведения это выглядит так:
Таким образом, ответ будет:
Например, предполагая, что зона по умолчанию является общедоступной и не имеет открытых портов, добавьте источник и диапазон портов в «рабочую» зону:
Теперь проверьте активные зоны (зона по умолчанию всегда активна):
ты получишь:
поэтому правила «рабочей» зоны будут применяться к конкретной подсети. У вас будет диапазон открытых портов для «белого списка» = подсети в соответствии с запросом. И, конечно, используйте
--permanent
опцию в--add-xxx
выражениях, чтобы поведение оставалось неизменным.В свою очередь любые порты или сервисы, которые вы имеете в «публичной» (по умолчанию) зоне, будут применяться ко всем интерфейсам и адресам источника.
Та же система работает для интерфейсов. Скажем, добавив интерфейс «ens3» в «рабочую» зону:
Вы будете использовать правила зоны «работа» для любых запросов от конкретного интерфейса - более грубый селектор, чем «источник».
источник
sources
белый список. Причина была в том, что для зоны был назначен интерфейс.public
зоны, если таковые имеются (эти сервисы будут доступны для всех адресов, поскольку интерфейсы назначеныpublic
зоне по умолчанию). Или измените зону по умолчанию на другую:block
илиdrop
(это обычная практика). Или изменитеpublic
цель зоны на%%REJECT%%
илиDROP
.Отказ от ответственности: я на самом деле не пробовал то, что я предлагаю, здесь, но это довольно близко к последней настройке firewalld, которую я сделал, поэтому я ухожу от этого. Firewalld предоставляет вам несколько предварительно сконфигурированных зон, как раз для этой цели. Есть один, называемый «отбрасывать», который отбрасывает все входящее, и один, называемый «доверенным», который разрешает любое соединение (т. Е. Вам даже не нужно открывать отдельные порты, я думаю). Хитрость заключается в том, чтобы получить правильную зону для запуска того, что вы хотите.
Firewalld будет применять правила для зоны на основе следующего приоритета:
Итак, во-первых, вы хотите привязать ваши доверенные IP-адреса к «доверенной» зоне:
Затем либо установите зону по умолчанию «drop», либо привяжите к ней свой интерфейс:
и затем изменения вступят в силу (предупреждение: это может привести к разрыву соединения, если вы делаете это по сети и не добавляете свой IP-адрес источника в доверенную зону):
Конечно, вы также можете просто временно протестировать их, пропустив «--permanent» (и тогда вам не нужно --reload, либо).
источник
block
также может быть использован (вместоdrop
), если вы хотите сказать другим хостам, что вы не разговариваете с ними ....Я управляю своими брандмауэрами таким образом. Вот мой предпочтительный метод, чтобы выполнить то, что вы хотите.
Вы увидите, что ваша зона по умолчанию является общедоступной, и включены службы dhcpv6-client и ssh. Мы не хотим никаких общественных услуг, верно? Только белые IP-адреса разрешены. Итак, давайте удалим две государственные службы.
Теперь давайте внесем в белый список конкретный IP-адрес, который предоставляет доступ к любому порту.
Теперь давайте внесем в белый список другой IP-адрес, который нам нужен только для доступа по SSH, http и https. Других портов нет.
Если вы подключаетесь через SSH, обязательно авторизуйте свой IP, прежде чем применять новый набор правил. Когда будете готовы применить новые правила.
источник
Вы можете легко управлять с помощью Rich Rule.
Первый шаг
Второй шаг - добавьте богатое правило
Весь порт доступен для 192.168.2.2, как только вы добавите расширенное правило и заблокируете каждый порт из другого источника.
Если вы добавите какой-либо порт или службу с помощью приведенной ниже команды, она будет доступна для всех источников.
Если вы хотите открыть конкретный порт для конкретного Ip, чем приведенная ниже команда
источник
Главный ответ от dougBTV неправильный. Я не могу ответить на его ответ, потому что у меня еще нет необходимых точек повторения, поэтому я объясню здесь:
Он использует зону по умолчанию "public". Он связывает сети с этой зоной, а затем открывает порты в этой зоне. Но в конфигурации по умолчанию весь трафик проходит через зону по умолчанию, а не только в исходные сети, к которым вы привязаны. Так что его команды --add-source не имеют значения, и его команды --add-port теперь позволили всему миру получить доступ к этим портам.
Второй ответ Нормунда Калнберзиньша правильный. Вы хотите создать отдельную зону, привязать свою сеть / IP-адреса к этой зоне и открыть порты в этой зоне.
Кроме того, вы можете оставить все в зоне по умолчанию и использовать богатые правила firewalld, чтобы разрешить доступ с определенных IP:
Это разрешает весь трафик с 192.168.2.2 на все порты, и поскольку я не указал зону, она будет применена к зоне по умолчанию "public" (используйте --get-default-zone, чтобы проверить, какая у вас зона по умолчанию, и - get-active-zone, чтобы увидеть, какие зоны используются в данный момент).
Чтобы разрешить доступ с этого IP только к определенному порту, я бы сделал:
Рекомендуется запускать эти команды без --permanent (или, для краткости, --perm), который влияет на текущий запущенный брандмауэр. После проверки того, что ваше правило работает, запустите его снова с добавленным параметром --perm, чтобы его запомнили при последующих перезагрузках firewalld.
источник
Просто чтобы добавить к Нормунду ответ:
Чтобы заблокировать весь другой трафик:
Предупреждение: если вы получаете доступ с удаленного компьютера, это может отключить сеанс входа в систему. Если вы неправильно настроили IP-адрес рабочей зоны, вы не сможете подключиться к вашему серверу.
Чтобы перезагрузить брандмауэр:
Я не мог понять, как добавить два разных IP-адреса с помощью --add-rich-rule.
источник
ipset
подобныйfirewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
add, с помощью которогоfirewall-cmd --ipset=blacklist --add-entry=192.168.1.4
вы сможете использоватьfirewall-cmd --add-rich-rule='rule source ipset=blacklist drop'
Я удивлен, что ответы в доверенной зоне не являются выбранным ответом. В доверенной зоне по умолчанию "target: ACCEPT", а остальные - "target: default". Несмотря на то, что это действительно не имеет значения, он, по-видимому, является предполагаемым методом из-за его имени и целевого значения по умолчанию.
Как быстро заблокировать ящик, чтобы только вы могли получить к нему доступ:
После перечисления всех зон вы должны увидеть что-то вроде этого:
Примечание: я удалил строки с нулевым / отсутствующим значением. Важно то, что доверенные и уволенные оба (активны), и у дропа есть ваш общедоступный интерфейс.
Что это делает с iptables для демонстрации:
источник