firewalld, разрешающий только SSH с определенного IP, который является частью другой зоны

1055
scaarup

Моя цель - предоставить ldap каждому клиенту 172.26.143.0/24, но SSH должен быть доступен только для 172.26.143.3. Я пробовал со следующим:

# This is where eth0 is and no services/ports are assigned to this zone: firewall-cmd --set-default-zone=drop firewall-cmd --zone=internal --add-source=172.26.143.0/24 --permanent firewall-cmd --zone=internal --add-service=ldap --permanent firewall-cmd --zone=trusted --add-source=172.26.143.3 --permanent firewall-cmd --zone=trusted --add-service=ssh --permanent firewall-cmd --reload 

С этой конфигурацией 172.26.143.3 не может SSH к этому хосту. Только если я добавлю ssh-сервис в zone = internal, чего я не хочу. Как я могу сделать это?

0
Похоже, вам следует переместить доверенную зону в отдельную подсеть. Тогда вы будете иметь административную подсеть, если вам когда-нибудь понадобится более одного административного ПК, а не полагаться на один магический IP-адрес. Это также решило бы вашу непосредственную проблему зонирования. Aeyoun 6 лет назад 0

1 ответ на вопрос

1
scttfrdmn

Конкретный ответ - создать расширенное правило (я полагаю, и прямое правило будет работать), так как они оба оцениваются перед источниками и интерфейсами.

firewall-cmd --permanent --zone=trusted --add-rich-rule='rule family=ipv4 source address=172.26.143.3 accept' 

Почему это не работает, потому что определения источника во внутренней и доверенной зонах перекрываются. Это слабость / раздражение / ошибка (?) Firewalld, где наложение источника не допускается. Это работает, но это зависит от порядка, в котором firewalld оценивает зоны, когда происходит такое перекрытие. Я не смотрел на код, но в некоторых объяснениях говорится, что при наложении зоны оцениваются в алфавитном порядке, а в других местах это основано на порядке, в котором были определены правила. В любом случае, в вашем примере внутренняя зона собирает трафик SSH и отбрасывает его.

Похожие вопросы