iptables permite acesso ao meu site pessoal quando estou dentro da minha LAN, mas bloqueia o acesso quando estou fora

iptables permite acesso ao meu site pessoal quando estou dentro da minha LAN, mas bloqueia o acesso quando estou fora

Estou usando um proxy transparente para encaminhar solicitações de uma origem (cliente) para um destino (servidor). Eu uso iptables para fazer o bit transparente funcionar... ou seja: faz com que o ip do cliente apareça no destino mesmo que a solicitação tenha passado pelo proxy intermediário... na verdade se chama SSLH.https://github.com/yrutschle/sslh

Aqui estão as regras:

iptables -w -t mangle -N SSLH
iptables -w -t mangle -A PREROUTING -p tcp -m socket --transparent -j SSLH
iptables -w -t mangle -A OUTPUT --protocol tcp --out-interface eth0 -m multiport --sport 80,443,4480 --jump SSLH
iptables -w -t mangle -A SSLH --jump MARK --set-mark 0x1
iptables -w -t mangle -A SSLH --jump ACCEPT
ip rule add fwmark 0x1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

Estou executando um site no Apache na mesma máquina que o proxy, é um Pi que está dentro da minha LAN doméstica.

Quando tento acessar um site nesse apache e a solicitação vem de fora da LAN ... como se eu me conectasse a um ponto de acesso wi-fi no meu telefone, a página aparece no navegador NO ENTANTO, se eu me conectar à minha rede wi-fi LAN e tentar abro a mesma página, recebo um tempo limite ... A MENOS que eu desabilite essas regras de iptables ... mas quando faço isso, solicitações originadas fora do tempo limite da LAN.

Para possivelmente complicar um pouco as coisas, também uso o dnsmasq rodando no mesmo Pi para simular o NAT Loopback para que eu possa acessar o site de dentro da minha própria LAN usando seu nome de domínio e não apenas o endereço IP local.

Se eu apenas usar o endereço IP local do servidor web, ele ainda não funcionará de qualquer maneira... a menos que eu

Preciso modificar as regras do iptables para que uma solicitação da web como esta:

https://www.example.com/test.html

A página abrirá se eu estiver fora ou dentro da minha LAN?

Obrigado,

Flexível

Responder1

Eu tenho uma solução que funciona.

Minha pergunta foi...

Preciso modificar as regras do iptables para que uma solicitação da web como esta:
https://www.example.com/test.html
A página abrirá se eu estiver fora ou dentro da minha LAN?

Minhas regras do iptables parecem estar bloqueando solicitações de conexão originadas de dentro da minha LAN. Ainda não sei por que isso acontece exatamente, exceto que devem ser as regras do iptables fazendo isso porque as solicitações originadas fora da LAN funcionam bem com as regras em vigor e as solicitações originadas de fora ou de dentro funcionam quando as regras estão completamente desativadas.

Tive a ideia de adicionar regras para ACEITAR o tráfego de entrada e saída de todos os ips na minha LAN local. O servidor DHCP no meu roteador atribui ips aos dispositivos na minha LAN no intervalo 192.168.1.1 a 192.168.1.200

Ao especificar 192.168.1.0/24 posso me referir a TODOS os ips nesse intervalo.

Então estas são as regras que uso agora:

iptables -t mangle -N SSLH
iptables -t mangle -A INPUT -p tcp -s 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A OUTPUT -p tcp -d 192.168.1.0/24 -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket --transparent -j SSLH
iptables -t mangle -A OUTPUT -p tcp --out-interface eth0 -m multiport --sport 80,443,4480 -j SSLH
iptables -t mangle -A SSLH -j MARK --set-mark 0x1
iptables -t mangle -A SSLH -j ACCEPT
ip rule add fwmark 0x1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

E tenho o prazer de dizer que um URL comohttps://www.example.com/que aponta para uma página da web no meu servidor apache pessoal em um Pi na minha LAN agora abre a página da web se eu estiver solicitando a página de dentro ou de fora da minha LAN.

Para descobrir por que minhas regras originais estavam bloqueando solicitações originadas na minha LAN, tentei alterar:

iptables -t mangle -A PREROUTING -p tcp -m socket --transparent -j SSLH

Para:

iptables -t mangle -A PREROUTING -p tcp -j SSLH

Porque a correspondência de soquete transparente ignora soquetes não transparentes, o que seria uma solicitação que não passa por sslh. Mas o tráfego de endereços IP locais ainda estava bloqueado.

Esta regra é a provável culpada... ela envia todos os pacotes de saída do meu servidor web (porta 443) para a cadeia SSLH definida pelo usuário. Todos os pacotes nesta cadeia são marcados e, com a ajuda das regras posteriores, são roteados para a interface de loopback para processamento pelo proxy sslh.

iptables -t mangle -A OUTPUT -p tcp --out-interface eth0 -m multiport --sport 80,443,4480 -j SSLH

Mas quando esses pacotes estavam "entrando" e não passaram pelo proxy sslh para chegar ao seu destino em primeiro lugar, então quando eles estão "saindo" e são roteados para a interface de loopback para serem processados ​​​​pelo sslh, eu acho não sabe o que fazer com eles e eles simplesmente estão perdidos. Neste caso, esses pacotes foram necessários para fazer uma página da web aparecer no navegador do cliente, portanto, o tempo limite do site.

Saúde,

Flexível

informação relacionada