Bem-vindo à Comunidade UBNT

Aplicar regras de firewall e roteamento ao tráfego do próprio EdgeRouter

Bom dia senhores,

Gostaria de saber se é possível atribuir regras de firewall para tráfego gerado no próprio EdgeRouter.

Tenho um ER com dois links de internet que estabelece duas conexões com OpenVPN e eu gostaria de forçar cada conexão por um link exclusivamente.

Já criei duas tabelas de rota, as regras de firewall que aplicam a modificação baseado na porta de destino (se destino porta X, aplica tabela 1, se porta de destino Y, aplica tabela 2).

A regra funciona perfeitamente para o tráfego encaminhado pelo ER, mas quando é originado dele, nada funciona.

Alguma ideia?

Obrigado.
Rotulado:

Comentários

  • R4V3RR4V3R 8479 Pontos
    Olá @rfranzen, seja bem vindo à comunidade.
    Provavelmente é possível fazer usando regras de firewall, mas teria que ser as regras de "firewall modify", só não sei dizer ao certo aonde estas deveriam ser aplicadas, mas isso é algo meio complexo, nem consigo visualizar a coisa toda.
    Uma forma muito mais simples seria usar regras de roteamento para fazer isso, mas neste caso você poderia usar apenas os endereços de destino, não as portas específicas.
  • Olá R4V3R,

    Então, as regras funcionam perfeitamente, porém para quem está atrás do ER. Para o tráfego originado nele mesmo ele não aplica nenhum filtro.

    Se olharmos as opções que temos para aplicar as regras de firewall (IN, OUT e LOCAL):
    - IN trata o tráfego que entra e é encaminhado pelo ER;
    - OUT trata o tráfego que foi encaminhado e está saindo do ER;
    - LOCAL trata o tráfego que vem de fora e o destino é o próprio ER.

    Portanto não existe uma opção de aplicar qualquer regra de firewall ao tráfego local.

    Sobre as regras de roteamento, pode me dar um exemplo de como eu direciono o tráfego do ER com destino ao IP x.x.x.x para a interface ethX sem que haja um failover ?

    Obrigado !
  • R4V3RR4V3R 8479 Pontos
    OUT quer dizer saída, essa opção deve servir tanto para tráfego passando pelo roteador, como também originado por ele, o problema é que ela seria aplicada após o roteamento e provavelmente não adiantaria encaminhar determinado tráfego para uma tabela que tem saída uma interface diferente, provavelmente o tráfego seria descartado.
    Você está usando a função load-balance do roteador? Caso positivo, basta que você adicione uma regra antes da regra de balanceamento(com número menor) para que esta seja aplicada antes. Dê uma olhada no exemplo abaixo:

    usuario@erl-redcon# show firewall modify LAN_IN 
     rule 1 {
         action modify
         destination {
             group {
                 address-group ADDRv4_eth0
             }
         }
         modify {
             table main
         }
     }
     rule 2 {
         action modify
         destination {
             group {
                 address-group ADDRv4_eth0.101
             }
         }
         modify {
             table main
         }
     }
     rule 3 {
         action modify
         destination {
             group {
                 address-group ADDRv4_eth0.102
             }
         }
         modify {
             table main
         }
     }
     rule 10 {
         action modify
         modify {
             lb-group failover
         }
         protocol icmp
     }
     rule 11 {
         action modify
         destination {
             group {
                 port-group PORTAS_SSL
             }
         }
         modify {
             lb-group failover
         }
         protocol tcp
     }
     rule 20 {
         action modify
         modify {
             lb-group balance
         }
     }

    As regras 1, 2 e 3, são as primeiras e dizem que todo tráfego destinado aos endereços IP das interfaces do próprio roteador, devem utilizar a tabela de roteamento "main". Você pode alterar essas regras da maneira que quiser.
    Nas demais regras, neste caso, eu tenho dois grupos de "load-balance", um que balanceia de fato as conexões, e outro que faz apenas failover, porque não quero que todo o tráfego seja dividido por múltiplos links, isso gera problemas. Então as regras, 10 e 11 fazem exatamente isso, jogando o tráfego ICMP e HTTPS para o grupo de failover apenas, e por fim, a regra 20 balanceia o tráfego entre os dois links que tenho conectados.
  • R4V3R, obrigado por sacrificar seu tempo para me dar uma ajuda...

    No meu caso, o problema de utilizar regras de load-balance é que em caso de falha, o tráfego será direcionado para o segundo link, e no ambiente em questão isso não pode acontecer.

    Vou explicar melhor para ilustrar o caso:
    Um ER com duas WAN's e dois clientes OpenVPN. Cada OpenVPN deve conectar através de uma WAN; O objetivo é para o caso de queda, o OSPF ajuste a rota e os usuários não fiquem sem o acesso a VPN...  (sim, os 2~3 minutos que a VPN ficaria fora apenas via load-balance não são toleráveis pelo cliente)...

    Voltando às configurações, já havia feito algo parecido, porém utilizando as tabelas de rota e as regras de modify para determinar qual rota utilizar baseado no destino. Mas o tráfego gerado pelo ER não é afetado por nenhuma regra de firewall que é criada em nenhuma interface. Fiz testes de dropar o tráfego para um determinado IP; quem está atrás do ER é afetado pela regra, mas o ER passa tranquilamente...

    Enfim, já andei pesquisando e pelo Vyatta é possível criar estes roteamentos baseados em regra a nível de sistema (policy route), que no EdgeOS foi removido...

    Enfim... acho que não é possível fazer tal configuração no ER...
  • R4V3RR4V3R 8479 Pontos
    De fato, agora facilitou bastante, pelo menos entendi o que exatamente você está querendo fazer, eu apenas mencionei  função load-balance porque você falou em failover e eu pensei que estivesse usando esse recurso, mas pra esse caso, o tempo de convergência do OSPF vai ser bem mais baixo, com certeza.
    Neste caso, tem duas opções, se o endereço IP de destino dos dois túneis for diferente, você pode fazer com roteamento estático, moleza, só criar uma regra para cada IP indicando o next-hop, caso seja fixo, ou então a interface de saída.
    Caso o endereço IP seja o mesmo, creio que seja possível apenas especificar o endeço IP de origem das conexões dentro das configurações do OpenVPN para cada túnel, mas neste caso só iria funcionar para endereços IP externos estáticos, obviamente.
    set interfaces openvpn vtun1 local-host (IP WAN1)
    set interfaces openvpn vtun2 local-host (IP WAN2)
    Desta forma o tráfego seria gerado já com o endereço IP correto e encaminhado pela sua respectiva interface de rede.
  • Bom dia R4V3R,

    Acho que vou ter que partir para a opção de colocar mais um IP no meu servidor VPN... 

    O parâmetro local-host do openvpn tem um pequeno probleminha...
    "OpenVPN configuration error: Cannot specify "local-address" or "remote-address" in client-server or bridge mode."

    Se por acaso eu conseguir outra solução, posto aqui as conclusões...

    Mais uma vez obrigado!
  • R4V3RR4V3R 8479 Pontos
    Mas não é a opção local-address, essa é para especificar o endereço IP do túnel. A opção que cito acima é a local-host, que especifica o endereço IP externo da máquina com o qual você quer que o serviço do OpenVPN fique atrelado.
  • R4V3R, desculpe... realmente fiz o teste errado... :S

    Mas de qualquer forma, o parâmetro local-host também não pode ser usado em client mode...
  • R4V3RR4V3R 8479 Pontos
    Bom, se for possível iniciar a conexão pela outra ponta, sempre irá funcionar, até porque no EdgeRouter você possui dois endereços IP externos, então basta a outra ponta iniciar um túnel em cada um destes IPs. Depende de como você está configurando, claro, mas se for um tunnel site-to-site, não faz muita diferença quem inicia a conexão.
  • R4V3RR4V3R 8479 Pontos
    @rfranzen, infelizmente não é possível aplicar regras de firewall ao tráfego gerado localmente, confirmei isso com o @UBNT-ancheng no fórum americano. A única maneira seria manualmente inserindo regras no iptables, o que seria bem complicado...
  • R4v3R, mais uma vez obrigado pela ajuda e desculpe a demora em responder...

    A solução realmente foi colocar mais um IP no servidor VPN e criar uma rota estática para cada IP sair por um link. Assim funcionou 100%.

    Uma pena que o ER não tenha a opção de aplicar regras ao tráfego local. O leque de utilização e possibilidades seria multiplicado...

    Enfim, obrigado pela ajuda!
Entre ou Registre-se para fazer um comentário.