Я пытаюсь создать простой pf.conf, который включает NAT, разрешающий трафик из сети со всех систем на выбранной серии портов. В моей базовой конфигурации у меня есть внутренний сервер, на котором размещены HTTP / HTTPS, который будет доступен извне через IP-адрес с NAT. Изнутри я хотел бы, чтобы клиенты покидали сеть только по DNS / HTTP / HTTPS.
int_if="eth0"
ext_if="eth1"
localnet=$int_if:network
nat on $ext_if from $localnet to any -> ($ext_if)
comp1="172.16.0.1"
rdr on $ext_if proto tcp from any -> $comp1 port http
rdr on $ext_if proto tcp from any -> $comp1 port https
client_out_tcp = "{ http, https}"
client_out_udp = "{ 53 }"
pass inet proto tcp from $localnet to port $client_out_tcp
pass inet proto tcp from $localnet to port $client_out_udp
С этой конфигурацией мой сервер связывается с правильными портами, как я спроектировал, однако мои клиенты всегда могут покинуть сеть, несмотря ни на что.
Это потому, что вы по умолчанию не блокируете исходящий трафик в своей локальной сети.
Попробуйте использовать что-нибудь в этом роде:
block out from $localnet to any
pass inet proto tcp from $localnet to port $client_out_tcp
pass inet proto tcp from $localnet to port $client_out_udp