Блокировать все, кроме нескольких 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'
Другие вопросы по тегам