Блокировать все, кроме нескольких ips с помощью firewalld
На сетевой машине с 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
я намеревался, что если источник не указан в списке, он не должен иметь доступ к какой-либо службе или порту
5 ответов
Богатые правила не нужны вообще.
Если вы хотите ограничить зону определенным набором 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
прилагается.
Сначала установите и запустите службу 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
Вы также можете смешивать входящий адрес и порт назначения, используя функцию расширенных правил брандмауэра-cmd.
Согласно firewalld.richlanguage
:
Источник источника [не] 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
должен быть создан отдельно.
Вы можете легко управлять с помощью 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'
запретить все подключаться
firewall-cmd --permanent --zone=drop --change-interface=eth0
принять специальное подключение
firewall-cmd --permanent --zone=home --add-source=192.168.1.1/32
or
firewall-cmd --permanent --zone=drop --add-rich-rule='rule family="ipv4" source address="192.168.1.1/32" accept'