Моя цель - предоставить 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, чего я не хочу. Как я могу сделать это?

1 ответ1

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .