Permitir somente tráfego de saída IPSEC para uma porta (usando IPTABLE?)

1

Problema:

Eu tenho uma situação em que o servidor IPSEC e o servidor de destino (digamos servidor http) são a mesma máquina e preciso permitir SOMENTE o tráfego vindo do servidor IPSEC para ter acesso à porta onde meu aplicativo está em execução e bloquear todos os outros nessa porta.

Mais detalhes:

  • A configuração é semelhante a: (host A) < ---- IPSEC VPN TUNNEL - > (Host B (Linux), onde o aplicativo é executado na porta XXXX).
  • Não há nenhum gateway ou firewall IPSEC adicional envolvido.
  • O host B tem endereço IP público (estático).
  • O host A inicia a conexão e o túnel VPN é estabelecido.
  • Quando eu registrei o tráfego chegando à porta XXXX após a decriptografia ipsec, ele se parecia com qualquer pacote normal e tinha src definido como 'endereço IP do host A' e dst definido como 'endereço IP do host B' e como o pacote é direcionado para Host B, as regras de POSTROUTING não se aplicariam a ele após o processamento de ipsec.

Por enquanto, adicionei a regra no iptables para aceitar todo o tráfego na porta XXXX:

-A INPUT -p tcp --dportar XXXX -s 0.0.0.0/0 -j ACCEPT

Enquanto isso faz com que as coisas se movam, a porta XXXX está aberta para o mundo e isso é perigoso.

Alguma ideia de como posso trabalhar com as regras de configuração do ipsec ou de iptables ou de qualquer outra maneira de atingir o objetivo onde SÓ o tráfego que sai do ponto final do ipsec tem acesso a XXXX?

Poucos pensamentos em minha mente:

  • É possível identificar os pacotes TCP que deixam o ponto final IPSEC e ter uma regra no iptables para permitir que apenas esses pacotes atinjam a porta XXXX?
  • É possível ter alguma configuração iptable / ipsec para pular as regras INPUT após o processamento ipsec? Dessa forma, eu posso ter a regra iptable para descartar todos os pacotes para a porta XXXX e os pacotes que saem do ipsec não serão afetados.
  • Pode-se criar uma interface virtual no host B e rotear o tráfego IPSEC por meio disso e permitir o acesso à porta XXXX somente a partir dessa interface virtual?
  • No pior dos casos, acabarei tendo o servidor ipsec (Host B) e o servidor de aplicativos (Host C) sendo executados em máquinas diferentes e permitindo tráfego para a porta XXXX no Host C APENAS do Host B.

Eu tentei a solução @ Com iptables , os pacotes de correspondência chegaram por meio do túnel IPSEC , mas não funcionou, já que a política mencionada se aplica aos pacotes que chegam ao IPSEC, não ao pacote que sai do IPSEC?

Deixe-me saber se eu perdi algum detalhe ou qualquer informação adicional que você precisa, qualquer ajuda / sugestões seria muito apreciada.

    
por Phani 18.09.2014 / 06:36

2 respostas

0

O IPSec força a proteção de qualquer tráfego proveniente das sub-redes do outro lado. Se você estiver usando o openswan, por exemplo, os rightsubnets (e, às vezes, o leftsubnets) indicarão qualquer comunicação vinda do outro lado, de modo que você possa permitir apenas o tráfego proveniente dessas sub-redes.

Se você tiver clientes RW conectados de vários IPs, há plug-ins para o ppp, como o script ip-up e ip-down, que você pode usar para permitir ou não certas portas para determinados IPs.

    
por 18.09.2014 / 11:39
0

Obrigado pelas sugestões. Acabou por estar relacionado com o funcionamento do IPSEC VPN em dispositivos iOS (Apple).

Em dispositivos iOS, ao ativar a VPN ipsec, a regra é adicionada automaticamente na tabela de rotas para enviar o tráfego IPSEC server / peer diretamente ao gateway para evitar loop (o pacote é criptografado novamente) e o restante do tráfego é enviado para ipsec primeiro túnel para obter criptografado e depois para o servidor ipsec.

E no meu caso, o servidor IPSEC e o servidor de destino (onde o tráfego é direcionado) são da mesma máquina (resolvidos para o mesmo endereço IP), portanto, quando o tráfego é enviado ao servidor de destino (porta XXXX), em vez de ficando criptografado no túnel IPSEC, ele foi enviado diretamente para o servidor devido à regra especial sem ser encapsulado no pacote ipsec. Então, quando esses pacotes chegaram no servidor, eles não foram reconhecidos como pacotes ipsec e esse foi o problema.

Como não consegui evitar que o cliente iOS enviasse o tráfego para a porta XXXX (embora sem o encapsulamento ipsec), tive que encontrar uma maneira de permitir que apenas esse dispositivo tivesse acesso à porta XXXX e não ao mundo inteiro. Então, o que acabei fazendo foi ter meu próprio script updesc ipsec no servidor ipsec que adiciona uma regra de cadeia INPUT dinamicamente para permitir o tráfego do endereço IP do cliente estabelecido para a porta XXXX na conexão vpn e remover a regra na desconexão da VPN. Desta forma, apenas os clientes conectados VPN terão acesso à porta XXXX.

    
por 30.09.2014 / 13:44