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

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

У нас есть публичный IP на машине (machine1), на которой запущен брандмауэр pf. У нас есть несколько машин за этим брандмауэром в локальной сети.

На машине 2 в локальной сети у нас есть служба, работающая на порту 443. Чтобы сделать эту службу доступной за пределами локальной сети (Интернета), мы перенаправляем через pf на машину 1.

rdr on $ext_if proto tcp from any to $ext_addr port 443 -> SOMEIP port 443

Теперь у меня есть machine3 в локальной сети, на которой также запущена служба на порту 443.

У нас есть доменные имена, такие как machine2.example.com и machine3.example.com, оба из которых указывают на публичный IP-адрес на machine1.

Есть ли способ сделать pf "осведомленным о доменном имени", чтобы определить, на какую машину с сервисом на 443 направлять? Изменение портов на любых машинах в локальной сети не должно быть вариантом.

решение1

На основании документации OpenBSD PF поддерживаются полностью квалифицированные доменные имена.

В документации src_addr, dst_addrупоминается следующее:

Полное доменное имя, которое будет разрешено через DNS при загрузке набора правил. Все полученные IP-адреса будут подставлены в правило.`

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

решение2

Хотя я не думаю, что iptables способен фильтровать запросы по домену, это звучит как идеальная работа для nginx. Если вы можете установить его на pfSense, вы можете настроить его как прокси для других серверов на основе различных конфигураций домена/IP. Он даже может действовать как балансировщик нагрузки, если это необходимо, и вам не нужно будет настраивать свой брандмауэр.

В качестве альтернативы вы можете настроить отдельный прокси-сервер nginx на одной из виртуальных машин. Затем ваш брандмауэр будет перенаправлять весь трафик на порты 80 и 443 на эту виртуальную машину, которая затем будет использовать nginx для проксирования запросов на определенные виртуальные машины. Его также можно настроить на любой из существующих виртуальных машин.

Связанный контент