Acessando portas em IP público de dentro de uma cadeia do FreeBSD

6

Em uma instalação do FreeBSD 10, eu tenho uma cadeia executando o servidor da web nginx publicamente acessível e outra cadeia para o servidor Java backend baseado no Jetty. Cada jail tem seu próprio endereço IP interno 127.0.1.x anexado à interface de loopback lo1. Tudo isso está configurado para ser executado com o firewall pf, que redireciona o tráfego de entrada para a cadeia nginx e a partir daí para a cadeia Jetty. A configuração básica de pf é mostrada abaixo.

Agora, gostaria de ter um repositório Git acessível externamente via https. Isso já está configurado e funciona bem, mas apenas acessando-o externamente. Da cadeia Jetty, nenhuma conexão é possível. No entanto, gostaria de acessar o repositório Git da minha cadeia de backend do Jetty por meio do endereço IP público.

Eu tentei algo como a seguinte linha para ativar isso no pf sem sucesso:

rdr pass proto tcp from $ip_jetty to $ip_public port https -> $ip_nginx

Minha configuração de firewall pf é a seguinte:

ip_public = "6.7.8.9"
if_external = "igb0"
net_jails = "127.0.1.0/24"
ip_nginx = "127.0.1.1"
ip_jetty = "127.0.1.10"

# Allow traffic from jails to outside world, enabled by network address translation
nat pass on $if_external from $net_jails to any -> $ip_public

# Redirect incoming web traffic to nginx jail
rdr pass on $if_external proto tcp from any to $ip_public port { http, https } -> $ip_nginx

# Allow outgoing connections
pass out all

# Allow nginx access to Jetty backend
pass in on lo1 proto tcp from $ip_nginx to $ip_jetty port 8080
    
por Martin Dirichs 24.03.2016 / 12:09

2 respostas

1

Para responder a minha própria pergunta, consegui que funcionasse usando a seguinte configuração de firewall:

# Allow dynaserv jail to access git on https port of web jail
pass in on lo1 proto tcp from $ip_jetty to $ip_nginx port https

Além disso, no arquivo / etc / hosts da jaula Jetty, adicionei o endereço IP interno da Nginx Jail:

127.0.1.1               git.mycompany.com

Desta forma, o tráfego é encaminhado através da interface de loopback lo1 interna em vez do dispositivo de rede externo. Isso não é exatamente o que eu queria ter no meu post original, mas isso também funciona bem, uma vez configurado.

Se alguém ainda tiver uma ideia de como resolver a questão da maneira pretendida (usando o dispositivo de rede externo), ainda estou interessado em uma resposta.

    
por 23.08.2017 / 15:31
1

Eu sei que já faz um tempo desde que isso foi perguntado, mas aqui vai:

O que você está descrevendo no OP é conhecido como "Hairpin NAT". Em vez de adicionar carga desnecessária no seu gateway, o que você quer fazer é deixar a PF lidar com toda a tradução. Acredito que a resposta que você procura está listada no primeiro comentário da resposta principal aqui: link .

Basicamente, o PF não faz isso da caixa, mas você pode fazê-lo da seguinte maneira (onde, eu acredito, $ hairpin_int é um novo vNIC. Seu /etc/rc.conf teria algo como cloned_interfaces="lo1 hp1"):

no nat on $int_if proto tcp from $int_if to $int_net
nat on $int_if proto tcp from $int_net to $hairpin_int port $hairpin_ports -> $int_if
rdr on $int_if proto tcp from $int_net to $ext_if port $hairpin_ports -> $hairpin_int
    
por 05.08.2018 / 21:45