Firewall Iptables

0

Atualmente, estou trabalhando no roteador linux e não posso firewallizá-lo da maneira que gostaria.

O roteador tem três interfaces - WAN, que é sub-rede privada de banda larga móvel 172.18.15.0/24 que é salvar e tem dispositivo 172.18.15.2 Sub-rede privada 10.0.0.0/24 em que não confio. A WAN é para acessá-lo via OpenVPN e é o gateway padrão dos roteadores.

Os IPs do roteador são 172.18.15.1 e 10.0.0.1 . No iptables, tenho a regra DNAT para encaminhar a porta 80 tráfego de 10.0.0.1 para 172.18.15.2 MASQUERADE no caminho de volta.

Esta parte funciona bem.

Qual é a minha preocupação é que quando alguém da sub-rede privada escolhe 10.0.0.1 como seu gateway padrão ou cria uma rota para 172.18.15.0/24 via 10.0.0.1 , ele também expõe 172.18.15.2 . Eu gostaria de parar esse comportamento, então a única maneira de acessar o 172.18.15.2 web é através do endereço 10.0.0.1 .

Se eu cancelar o encaminhamento, cancelo o DNAT também, o que é um problema.

Uma maneira que vem a mim é instalar o apache e criar um proxy reverso. No entanto, não tenho certeza se é o caminho certo e correto.

Obrigado por sugestões!

EDITAR:

172.18.15.2 é um dispositivo simples. Pode ter apenas seu próprio endereço e endereço do gateway, neste caso 172.18.15.1 . Ele está respondendo porque eu configurei em /etc/sysctl.conf net.ipv4.ip_forwarf=1

Aqui está o despejo de iptables-save -c
enp1s0 é interface para 10.0.0.0/24
enp2s0 é a interface para 172.18.15.0/24
wwx582c80139263 é a interface para o gateway de banda larga móvel

# Generated by iptables-save v1.6.0 on Mon Apr 16 08:27:45 2018
*filter
:INPUT ACCEPT [840:388180]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [643:92809]
[0:0] -A INPUT -d 10.0.0.0/24 -p tcp -m tcp --dport 80 -j ACCEPT
[0:0] -A INPUT -d 10.0.0.0/24 -p tcp -j DROP
COMMIT
# Completed on Mon Apr 16 08:27:45 2018
# Generated by iptables-save v1.6.0 on Mon Apr 16 08:27:45 2018
*nat
:PREROUTING ACCEPT [10:648]
:INPUT ACCEPT [10:648]
:OUTPUT ACCEPT [11:770]
:POSTROUTING ACCEPT [11:770]
[0:0] -A PREROUTING -i enp1s0 -p tcp -m tcp --dport 80 -j DNAT --to- 
destination 172.18.15.2:80
[0:0] -A POSTROUTING -s 172.18.15.0/24 -j MASQUERADE
[0:0] -A POSTROUTING -o wwx582c80139263 -j MASQUERADE
COMMIT
# Completed on Mon Apr 16 08:27:45 2018
    
por Filip Rak 15.04.2018 / 22:19

1 resposta

0

Usar um proxy reverso (que deve inserir um cabeçalho X-Forwarded-For para fins de registro) e remover o encaminhamento de rede seria uma solução limpa. A solução abaixo, deve ser claramente entendida para evitar efeitos inesperados com outras mudanças de regras do iptables.

Isso disse ...

O problema

    Os nós de
  • LAN 10.0.0.0/24 não usam o Roteador como um roteador, pelo menos para não alcançar 172.18.15.0/24 . Alguns fazem assim mesmo.
  • O roteador fornece serviços localizados em 172.18.15.0/24 ( 172.18.15.2:80 ) para 10.0.0.0/24 nós, usando DNAT e encaminhamento.
  • quando os pacotes chegam à cadeia de filtro / FORWARD, não há como distinguir se eles foram inicialmente destinados a 10.0.0.1 e depois a DNAT ou se foram enviados diretamente para 172.18.15.2 (o que deve ser proibido).

A solução

Portanto, a classificação deve ser feita antes que o NAT aconteça: na tabela mangle, como pode ser visto neste Fluxo de pacotes no Netfilter e General Networking esquemático. Esta regra única é suficiente para lidar com isso:

iptables -t mangle -A PREROUTING -s 10.0.0.0/24 -d 172.18.15.0/24 -j DROP

Mas, geralmente, para um melhor gerenciamento, deve haver uma separação de funções: mangle para alterar (não descartar) ou marcar aqui e a tabela de filtros (o padrão) para filtrar e soltar. Isso é possível usando uma marca na etapa mangle e combinando essa marca para soltar na etapa de filtro. Então isso é equivalente:

iptables -t mangle -A PREROUTING -s 10.0.0.0/24 -d 172.18.15.0/24 -j MARK --set-mark 1
iptables -A FORWARD -m mark --mark 1 -j DROP

(e para ser realmente completo: iptables -A INPUT -m mark --mark 1 -j DROP para impedir o acesso a 172.18.15.1 )

Qualquer método é equivalente. É claro que se for realmente apenas o dispositivo 172.18.15.2 que precisa ser protegido, basta substituir -d 172.18.15.0/24 por -d 172.18.15.2 .

ATUALIZAÇÃO: um método mais fácil baseado no conntrack (que já está em uso por causa do NAT) pode ser usado: consultando conntrack saber se o pacote foi realmente DNATed e largá-lo se não. Então isso simplifica as coisas, porque isso é apenas uma regra, e simplesmente na cadeia filter / FORWARD. Então, como um terceiro método, em vez das regras acima:

iptables -A FORWARD -s 10.0.0.0/24 -d 172.18.15.0/24 -m conntrack ! --ctstate DNAT -j DROP

Além disso, a linha a seguir é inútil e pode ser removida. PREROUTING alterou o destino com DNAT, portanto, o fluxo nunca chega a INPUT, mas passa pela cadeia FORWARD:

[0:0] -A INPUT -d 10.0.0.0/24 -p tcp -m tcp --dport 80 -j ACCEPT
    
por 16.04.2018 / 14:08