На сетевой машине Linux я хотел бы ограничить набор адресов в «общедоступной» зоне (концепция firewalld), которым разрешен доступ к ней. Таким образом, конечный результат будет заключаться в том, что никакая другая машина не сможет получить доступ к любому порту или протоколу, кроме явно разрешенных, типа смеси
--add-rich-rule='rule family="ipv4" source not address="192.168.56.120" drop'
--add-rich-rule='rule family="ipv4" source not address="192.168.56.105" drop'
Проблема, приведенная выше, заключается в том, что это не настоящий список, он будет блокировать все, поскольку, если его один адрес заблокирован, поскольку он не совпадает с другим, генерируя случайный эффект «отбросить все», как я могу «разблокировать» конкретный не непрерывный набор? принимает ли источник список адресов? Я пока ничего не вижу в документах или результатах Google.
РЕДАКТИРОВАТЬ: я только что создал это:
# firewall-cmd --zone=encrypt --list-all
encrypt (active)
interfaces: eth1
sources: 192.168.56.120
services: ssh
ports: 6000/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
Но я все еще могу подключиться к порту 6000 из .123
Мое намерение состояло в том, что если источник не указан в списке, он не сможет получить доступ к какой-либо службе или порту
Богатые правила вовсе не нужны.
Если вы хотите ограничить зону определенным набором IP-адресов, просто определите эти IP-адреса как источники для самой зоны (и удалите все определения интерфейса, которые могут присутствовать, поскольку они переопределяют исходные IP-адреса).
Однако вы, вероятно, не захотите делать это с «общедоступной» зоной, поскольку семантически это означает, что общедоступные службы должны быть открыты для всего мира.
Вместо этого попробуйте использовать другую зону, например «внутреннюю», для наиболее надежных IP-адресов для доступа к потенциально конфиденциальным службам, таким как sshd. (Вы также можете создавать свои собственные зоны.)
Предупреждение: не путайте специальную «доверенную» зону с обычной «внутренней» зоной. Любые источники, добавленные в «доверенную» зону, будут разрешены на всех портах; добавление сервисов в «доверенную» зону разрешено, но не имеет смысла.
firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh
Результатом этого будет «внутренняя» зона, которая разрешает доступ к ssh, но только с двух заданных IP-адресов. Чтобы сделать его постоянным, повторно запускайте каждую команду с --permanent
добавлен или лучше, используя firewall-cmd --runtime-to-permanent
.
Согласно firewalld.richlanguage
:
Источник источник [не] адрес = "адрес [/ маска]"
With the source address the origin of a connection attempt can be limited to the source address. An address is either a single IP address, or a network IP address. The address has to match the rule family (IPv4/IPv6). Subnet mask is expressed in either
dot-decimal (/x.x.x.x) or prefix (/x) notations for IPv4, and in prefix notation (/x) for IPv6 network addresses. It is possible to invert the sense of an address by adding not before address. All but the specified address will match then.
Укажите сетевую маску для адреса, чтобы разрешить непрерывные блоки.
Помимо этого, вы можете попробовать создать ipset
для несмежного списка разрешенных IP-адресов.
Например, в /etc/firewalld/direct.xml
:
<?xml version="1.0" encoding="utf-8"?>
<direct>
<rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set whitelist src -j ACCEPT</rule>
</direct>
Настоящий ipset
должен создаваться отдельно.
Вы можете легко управлять с помощью Rich Rule.
Первый шаг
firewall-cmd --permanent --set-default-zone=home
firewall-cmd --permanent --zone=drop --change-interface=eth0
Второй шаг - добавить расширенное правило
firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept'
Весь порт доступен для 192.168.2.2 после того, как вы добавите расширенное правило и заблокируете каждый порт из другого источника.
Если вы добавите какой-либо порт или службу с помощью команды ниже, они будут доступны для всех источников.
firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-port=8080
Если вы хотите открыть определенный порт для определенного IP-адреса, чем команда ниже
firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'