На сетевой машине 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-адресов. Чтобы сделать его постоянным, повторно запускайте каждую команду с добавленным - постоянным
.
Согласно firewalld.richlanguage
:
Источник source [not] address = "address [/ mask]"
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
должен быть создан отдельно.
Вы можете легко управлять с помощью расширенного правила.
Первый шаг
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'
Сначала установите и запустите службу firewalld
sudo yum install -y firewalld
sudo systemctl start firewalld
Затем откройте исходные IP-адреса 192.168.56.120 и 192.168.56.121.
При необходимости откройте ssh 22 для удаленной оболочки и используйте флаг [--permanent], чтобы сохранить изменения после перезагрузки системы.
sudo firewall-cmd --zone=public --permanent --add-service=ssh
sudo firewall-cmd --zone=public --permanent --add-source=192.168.56.120
sudo firewall-cmd --zone=public --permanent --add-source=192.168.56.121
Затем перезагрузите службу firewalld, чтобы активировать новую конфигурацию.
sudo systemctl reload firewalld
Вы также можете смешивать входящий адрес и порт назначения, используя богатые правила функцию firewall-cmd