Cisco ASA: Por que o NAT estático bloqueia o acesso através da VPN? [fechadas]

7

TL / DR

Configurei uma regra nat estática para poder usar meu endereço IP público da Internet para ssh diretamente em uma máquina dedicada na rede interna. Como resultado, não posso mais usar ssh na máquina dedicada, quando conectado através da VPN AnyConnect. Por quê? Como faço para corrigir isso?

Longa história:

Eu tenho um ASA 5512-X que eu me uso para terminar sessões de VPN de AnyConnect. Isso tem funcionado muito bem. As pessoas usam o AnyConnect para conectar-se ao ASA, obtêm endereços IP do pool de IPs designado e podem acessar tudo o que eu coloco nas listas de acesso.

Agora, tenho essa ideia de encaminhar diretamente a porta 22 para uma máquina dedicada em minha rede (eu só tenho interfaces internas e externas), para que eu possa fazer o SSH no meu endereço IP público e terminar na máquina dedicada, sem a necessidade de uma conexão VPN.

A configuração parecia bastante simples:

object network MyEndpoint
    host 10.0.0.1
    nat (inside, outside) static interface service tcp ssh ssh
access-list from_outside_inside extended permit tcp any object MyEndpoint eq ssh
access-group from_outside_inside in interface outside

e realmente funciona. Agora eu posso

ssh ssh.mydomain.com

e realmente obter uma sessão ssh na minha máquina dedicada. No entanto, esse sucesso tem um custo que ssh 10.0.0.1não funciona mais quando eu estou conectado à minha rede ASA / através do AnyConnect como costumava fazer antes de configurar o NAT estático.

Eu posso controlar deterministicamente o comportamento do ASA:

Quando não tenho a nat (inside,outside)linha na minha configuração,

  • ssh 10.0.0.1 funciona mas
  • ssh ssh.mydomain.com não funciona.

Quando tenho a nat (inside,outside)regra como parte da configuração, é o contrário:

  • ssh ssh.mydomain.com funciona mas
  • ssh 10.0.0.1 não funciona.

Para investigar eu estabeleci uma captura no ASA

capture MyEndpoint type raw-data interface inside
capture MyEndpoint type raw-data interface outside
capture MyEndpoint match tcp host 10.0.0.1 any

Quando eu me conecto pela primeira vez através do AnyConnect e tento ssh 10.0.0.1, a captura não mostra / captura nada, desde que a nat (inside,outside)regra esteja ativa. Além disso, minhas tentativas de conexão SSH nunca chegam ao servidor.

Claramente o ASA está comendo os pedidos de conexão que originam dos pontos finais conectados de AnyConnect, quando a natregra está ativa.

No começo, pensei em exigir alguma adição à lista de acesso, mas não consegui fazê-la funcionar dessa maneira. Em que interface o tráfego VPN entra no ASA de qualquer maneira? fora ou dentro? Suponho que, neste caso, não importe, porque estou usando um curinga ( any) para a fonte, que, na minha opinião, inclui também o tráfego VPN.

Então pensei que o ASA sempre aplicaria o nat, o que significa que o pacote que carrega o SYN-ACK seria natted para o meu IP externo que interrompe a conexão, pois estou me conectando a partir de um endereço VPN privado, não da Internet. Mas os SYNs nunca chegam ao servidor, portanto, não há SYN-ACKs.

Passei o dia todo entortando minha cabeça em torno do "novo" natcomando. Quando eu faço um show natno meu ASA eu recebo

Auto NAT Policies (Section 2)
1 (inside) to (outside) source static MyEndpoint interface   service tcp ssh ssh 
    translate_hits = 0, untranslate_hits = 0

Até onde cheguei hoje, isso apenas faz uma tradução de endereço de origem para deixar o tráfego. Não faço ideia de como / por que isso implica uma tradução de endereço de destino para o tráfego originado na Internet que chega ao ASA. Alguém pode me explicar por que o ASA está se comportando dessa maneira?

Editar 1: packet-tracer

Lendo as documentações, vim através do comando ASA packet-tracer. Quando eu faço

packet-tracer input inside tcp 10.100.0.2 31337 10.0.0.1 22

O ASA me diz que um fluxo seria criado e o pacote aceito. Quando eu faço

packet-tracer input outside tcp 10.100.0.2 31337 10.0.0.1 22

eu recebo

Phase: 6
Type: WEBVPN-SVC
Subtype: in
Result: DROP
Config:
Additional Information:

Result:
input-interface: outside
input-status: up
input-line-status: up
output-interface: inside
output-status: up
output-line-status: up
Action: drop
Drop-reason: (acl-drop) Flow is denied by configured rule

Então, acho que esse é um comportamento implicitamente desejado, exceto se você for eu.

Edit 2: Procurando por grampos de cabelo

Encontrei alguns artigos que acabaram me apontando para esse promissor, que continha as informações de que talvez eu precisasse de uma regra nat, de acordo com as linhas de

nat (outside,outside) \
    source static \
        client_vpn_pool client_vpn_pool \
    destination static \
        remote_office_net remote_office_net

mas não funcionou. Eu tenho um objeto de rede para minha sub-rede do cliente VPN e um objeto de rede para a sub-rede 10.0.0.1. A adaptação do modelo acima não produziu o resultado esperado.

Quando minha nat (inside,outside)regra está em vigor, o SSH não funciona, mas posso executar o ping 10.0.0.1. Quando adiciono uma nat (outside,ouside)regra, conforme sugerido pelo artigo, o ping para de funcionar. Eu também tentei versões da regra fora ou fora com objetos de rede para o host específico e apenas o intervalo do ip local poolusado para clientes VPN. Todos eles fazem o ping parar.

Editar 3: Não importa

Está funcionando agora. Eu literalmente não mudei nada. Eu apenas fui para a cama. Eu acho que houve algum estado interno no ASA que causou esse comportamento e o tempo limite expirou enquanto eu estava dormindo.

Ainda existe o que quando eu uso o packet-tracer input [inside|outside] tcp <my vpn ip> 31337 10.0.0.1 22packet-tracer sempre diz que o pacote seria descartado.

Quando eu coloco packet-tracer input insideele falha em:

Phase: 6
Type: WEBVPN-SVC
Subtype: in
Result: DROP
Config:
Additional Information:

[...]
Drop-reason: (acl-drop) Flow is denied by configured rule

e quando eu coloco packet-tracer input outsideele falha em:

Phase: 6
Type: NAT
Subtype: rpf-check
Result: DROP
Config:
object network MyEndpoint
 nat (inside,outside) static interface service tcp ssh ssh 
Additional Information:

[...]
Drop-reason: (acl-drop) Flow is denied by configured rule

No entanto, a partir de hoje, o ping e o SSH de / para o meu laptop conectado à VPN para o MyEndpoint (também conhecido como 10.0.0.1) funcionam como um encanto. Como essa coisa ASA funciona ???

user1129682
fonte
Olá, você pode ficar online no Chat? Eu tenho o mesmo ASA e seria bom falar sobre isso, mas não neste tópico, porque isso é offtopic ;-) Seria muito bom!
SystemCookie
É isso? Eu estava pensando se o Superusuário poderia ter sido o melhor lugar, mas aqui discutimos principalmente sistemas operacionais e este site tem muitas perguntas sobre ASAs ... Eu gostaria de falar sobre isso, mas realmente não posso. Posso lhe enviar uma mensagem em alguns dias?
User1129682
Não, sua postagem está completamente correta. Quero dizer, conversar em uma pergunta é offtopic ;-) Sim, você pode me enviar uma mensagem - se você clicar no chat, enviarei os dados onde você pode me encontrar e podemos
ler
Alguma resposta o ajudou? Nesse caso, você deve aceitar a resposta para que a pergunta não apareça para sempre, procurando uma resposta. Como alternativa, você pode fornecer e aceitar sua própria resposta.
Ron Maupin
" Está funcionando agora. Eu literalmente não mudei nada. Acabei de ir para a cama. Acho que havia algum estado interno no ASA que causou esse comportamento e que atingiu o tempo limite enquanto eu dormia. " aceite-o para que a pergunta não fique sempre aparecendo, procurando uma resposta.
Ron Maupin

Respostas:

1

Assim, se eu entendi corretamente, você não pode acessar a interface interna do seu ASA via SSH quando conectado via VPN? Você tentou emitir o seguinte comando no ASA:

acesso de gerenciamento dentro

Se o seu túnel VPN termina em uma interface, mas você deseja gerenciar o ASA acessando uma interface diferente, é necessário identificar essa interface como uma interface de acesso de gerenciamento.

user34227
fonte
Não, não há nada de errado em acessar o ASA. Quando conectado via VPN, não consigo ssh no servidor Linux (vamos chamá-lo de Rudolph) que faz parte da minha rede interna e configurei o NAT estático para. Tudo o resto funciona muito bem. Eu posso usar o ssh no Rudolph a partir de qualquer outro computador na rede interna. Eu posso acessar o Rudolph pela Internet. Mas não consigo fazer ssh no Rudolph quando conectado via VPN. No entanto, posso executar ping em Rudolph quando conectado via VPN. Eu também management-access insidedefini.
User1129682
@ user1129682, parece que você só precisa permitir o SSH na VPN. Apenas modifique a configuração ASA para permitir o SSH da interface do túnel para a interface interna.
Ron Maupin
@RonMaupin, qual é a interface do túnel? (ponteiros para doc são muito bem para mim)
user1129682
@ user1129682, é o que você criou para sua VPN no ASA.
Ron Maupin
@RonMaupin eu não fiz. Encontrei a caixa em seu estado atual e ninguém está disposto a afirmar que as pessoas que a montaram sequer existiram. Mas, aparentemente, o ASA está em uso produtivo ... Você quer dizer a interface na qual o webvpn está ativado? Eu tenho enabled outsidee enabled inside. Além disso, ele está funcionando agora (consulte Editar 3) sem nenhuma configuração adicional.
User1129682
1

Informamos que, ao acessar a VPN SSL baseada na Web, o NAT e PAT são restritos no CISCO ASA. Além disso, o fluxo de tráfego deve ser especificado usando ACLs bidirecionais, permitindo conexões de retorno de um host de segurança inferior para um host de segurança superior, mesmo que já exista uma conexão estabelecida do host de nível superior para o host de nível inferior (não é mais com estado) )

Espero que este seja o motivo pelo qual o NAT configurado não funcionou.

O comando "sysopt connection permission-vpn" é usado no ASA para permitir o tráfego da VPN, independentemente das listas de acesso (política isenta ao permitir todo o tráfego da VPN); no entanto, você pode usar os filtros e as políticas da VPN para restringir o tráfego.

Supondo que o comando esteja ativo no seu firewall e o atributo de valor dns-server não esteja configurado corretamente nas suas políticas de VPN.

Fico feliz em ver que funcionou para você sem alterações.

Jey
fonte