У нас есть общедоступный IP-адрес на машине (machine1), на которой запущен брандмауэр pf. У нас есть несколько машин за этим брандмауэром в локальной сети.
На машине2 в локальной сети у нас есть служба, работающая на порту 443. Чтобы сделать эту службу доступной за пределами локальной сети (Интернета), мы перенаправляем через pf на машину1.
rdr on $ext_if proto tcp from any to $ext_addr port 443 -> SOMEIP port 443
Теперь у меня есть машина 3 в локальной сети, также имеющая службу, работающую на порту 443.
У нас настроены доменные имена, такие как machine2.example.com и machine3.example.com, оба указывают на общедоступный IP-адрес на машине1.
Есть ли способ сделать pf «осведомленным о доменном имени», чтобы разобраться, на какую машину со службой на 443 маршрутизировать? Изменение портов на любых машинах в локальной сети недопустимо.
Хотя я не думаю, что iptables может фильтровать запросы по домену, это звучит как идеальная работа для nginx
. Если вы можете установить его на pfSense, вы можете настроить его как прокси для других серверов на основе различных конфигураций домена / IP. При необходимости он даже может действовать как балансировщик нагрузки, и вам не нужно настраивать брандмауэр.
В качестве альтернативы вы можете настроить отдельный прокси-сервер nginx на одной из виртуальных машин. Затем ваш брандмауэр перенаправит весь трафик на порты 80 и 443 на эту виртуальную машину, которая затем будет использовать nginx для прокси-запросов к определенным виртуальным машинам. Его также можно настроить на любой из существующих виртуальных машин.
На основе документации для OpenBSD PF поддерживаются полностью определенные доменные имена.
Документация для src_addr, dst_addr
упоминает это:
Полное доменное имя, которое будет разрешено через DNS при загрузке набора правил. Все полученные IP-адреса будут подставлены в правило.