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

Перенаправление портов на основе доменного имени через pf

У нас есть общедоступный 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-адреса будут подставлены в правило.

Источник: https://www.openbsd.org/faq/pf/filter.html