Instância de acesso por trás do ELB através do servidor OpenVPN

2

Eu quero redirecionar o tráfego através de um servidor openvpn apenas para alguns domínios específicos (dev.mydomain.com, admin.mydomain.com, jira.mydomain.com, etc) que são hospedados em algumas máquinas ec2 e estão atrasados alguns ELBs (cada um com 2 AZs - por isso tem 2 IPs públicos) e os domínios são gerenciados pela rota53.

Na minha configuração do servidor vpn eu tenho

push "route 54.72.xxx.xyz 255.255.255.255 10.8.0.1 1" # dev.mydomain.com
push "route 54.72.xxx.xyz 255.255.255.255 10.8.0.1 1" # 2nd IP for dev.mydomain.com
....

para cada domínio. Infelizmente, esses IPs de ELB da AWS estão mudando de tempos em tempos e eu preciso atualizar a configuração do meu servidor manualmente.

Você conhece uma solução para isso?

    
por Razvan Tudorica 08.10.2018 / 18:38

1 resposta

2

Existem duas maneiras principais de resolver isso:

  1. Mantenha acesso público a dev , administrador , jira e apenas direcione o tráfego pela VPN. Isso é o que você parece estar fazendo agora. Você terá que reavaliar os nomes de host para IPs, pois os IPs ocasionalmente mudam como você sabe.

    • Uma maneira é atualizar a configuração do servidor push route linhas de tempos em tempos , por exemplo usando cron .

      Em seu openvpn.conf no servidor adicione uma linha que fará com que ele leia a configuração adicional de um arquivo separado:

      dev tun
      server ...
      config /etc/openvpn/elb-routes.inc # <- This file gets updated automatically
      

      Em seguida, crie um trabalho cron que execute este script a cada hora:

      #!/bin/bash -e
      
      # Resolve each of the ELB_HOSTNAMES below and update the server config
      
      ELB_HOSTNAMES="dev.mydomain.com admin.mydomain.com jira.mydomain.com"
      for ELB_HOSTNAME in ${ELB_HOSTNAMES}; do
          for ELB_IP in $(host -t A ${ELB_HOSTNAME} | awk '/has address/{print $NF}'); do
          echo "push \"route ${ELB_IP} 255.255.255.255 vpn_gateway 1\""
          done
      done > /etc/openvpn/elb-routes.inc
      
      systemctl reload openvpn.service
      

      Ele atualizará a lista de rotas push em /etc/openvpn/elb-routes.inc com os IPs mais recentes dos ELBs para que você sempre obtenha as rotas corretas.

      Você pode ir ainda mais extravagante e conectar este script no Evento CloudWatch que é criado toda vez que o IP do ELB é alterado para que seja atualizado imediatamente:)

    • Outra opção é fazer o nome do host ELB ao IP resolvendo no cliente . Para fazer isso remova o comando push route da configuração do servidor e crie as rotas dinamicamente quando o cliente se conectar.

      Para isso, crie um script openvpn up no cliente que será chamado toda vez que você se conectar à VPN:

      script-security 2
      up /etc/openvpn/up.sh
      

      Em seguida, em /etc/openvpn/up.sh você pode resolver os IPs atuais dos seus ELBs e criar as rotas apropriadas:

      #!/bin/bash
      # Resolve each of the ELB_HOSTNAMES below and insert route through the VPN
      
      ELB_HOSTNAMES="dev.mydomain.com admin.mydomain.com jira.mydomain.com"
      for ELB_HOSTNAME in ${ELB_HOSTNAMES}; do
          for ELB_IP in $(host -t A ${ELB_HOSTNAME} | awk '/has address/{print $NF}'); do
              ip route add $ELB_IP via $route_vpn_gateway dev $dev
          done
      done
      

      Note que você precisará do comando host dos pacotes bind9-host (Ubuntu) ou bind-utils (Fedora).

      Agora, toda vez que você abrir sua conexão OpenVPN, ele executará esse script, resolverá os nomes de host e executará comandos como este:

      # IPs for dev.mydomain.com ...
      ip route add 52.65.12.34 via $route_vpn_gateway dev $dev
      ip route add 13.211.56.78 via $route_vpn_gateway dev $dev
      

      Para mais informações sobre scripts up / down do OpenVPN , verifique a página de manual do OpenVPN , ou seja, seções para --up , --script-security e Environmental variables .

  2. Outra opção melhor e IMO é restringir o acesso a dev , administrador , jira a VPN somente e não permita acesso sem VPN.

    Isso não é o que você está pedindo na pergunta, mas pode ser uma boa opção para aumentar a segurança - ninguém sem a VPN conseguirá acessar esses hosts restritos.

    Para isso, basta alterar os ELBs para o Esquema: interno - que dará a eles apenas endereços IP privados (por exemplo, do intervalo 172.31.0.0/16) e supondo que sua VPN esteja configurada para rotear todos os tráfego para 172.31.0.0/16 de seus clientes, você terá acesso somente a dev , admin , jira pela VPN.

Espero que um desses métodos funcione para você:)

    
por 09.10.2018 / 00:00