Назад | Перейти на главную страницу

Логика и приоритет зон firewalld в Linux

Я пытаюсь понять логику зон firewalld Linux и способ их оценки.

  1. Насколько я понимаю, зона определяется как список интерфейсов и диапазонов IP-адресов, к которым могут применяться правила разрешения / запрета. Это верно? Для зоны, которая включает интерфейс и дополнительный диапазон IP-адресов. Будут ли службы, разрешенные для этой зоны, разрешены для диапазона IP-адресов, даже если трафик будет достигать машины с IP-адресов в этом диапазоне, но через другой интерфейс?

  2. В каком порядке оцениваются зоны? Что будет с входящим трафиком, совпадающим с двумя (возможно, противоречащими) зонами? Например, зона «Z1», которая разрешает доступ nfs к машине с заданного интерфейса, и зона «Z2», которая запрещает весь входящий трафик с IP-адреса. Что произойдет с трафиком NFS, который достигает машины через интерфейс, определенный в «Z1», но с IP-адреса, определенного в «Z2»?

  1. Зона - это просто уровень абстракции, основанный на netfilter. На языке netfilter правила свой набор цепочек, которые дают вам ощущение конечного пользователя firewalld, что ваши пакеты находятся в какой-то «зоне». Вы всегда можете проверить точное поведение зоны:

    iptables -L

  2. Порядок, в котором совпадают пакеты firewalld:

    • прямые правила
    • маршрутизация в зоны на основе IP-адреса источника
    • маршрутизация в зоны на основе интерфейсных пакетов, поступающих из

Это в основном означает, что если конечный пункт назначения пакетов не определяется прямыми правилами, они войдут в некоторую зону. Сначала firewalld пытается маршрутизировать их на основе IP-адреса источника. Если совпадений нет, firewalld попытается направить их на основе интерфейса, в который они вошли. Если и это не удастся, они войдут в зону по умолчанию. Если у вас есть больше зон, установленных с исходным IP-адресом, и эти диапазоны IP-адресов перекрывают зону, какое исходное правило было добавлено первым, победит, потому что его правило будет сначала проверено на соответствие.

Примеры:

давайте иметь систему с интерфейсами:

  • eth0 с IP-адресом 192.168.0.1/24
  • eth1 с IP-адресом 192.168.100.1/24

Настройка Firewalld 1:

firewall-cmd --zone=home --add-interface=eth0
firewall-cmd --zone=internal --add-source=192.168.0.0/16

Пакеты, приходящие с адреса 192.168.0.2 через eth0, будут маршрутизироваться во внутреннюю зону.

Настройка Firewalld 2:

firewall-cmd --zone=internal --add-source=192.168.0.0/16
firewall-cmd --zone=home --add-source=192.168.0.2/32

Пакеты, приходящие из 192.168.0.2, снова будут маршрутизироваться во внутреннюю зону. Это работает так, потому что firewalld добавляет правила источника для зон маршрутизации одну за другой, чтобы мы запускали связанные команды.