TL / DR
Ich habe eine statische Nat-Regel eingerichtet, damit ich meine öffentliche Internet-IP-Adresse verwenden kann, um direkt in einen dedizierten Computer im internen Netzwerk zu ssh. Infolgedessen kann ich nicht mehr auf den dedizierten Computer zugreifen, wenn eine Verbindung über AnyConnect VPN besteht. Warum? Wie behebe ich das?
Lange Geschichte:
Ich habe einen ASA 5512-X, mit dem ich AnyConnect-VPN-Sitzungen beenden kann. Das hat sehr gut funktioniert. Die Benutzer verwenden AnyConnect, um eine Verbindung zum ASA herzustellen, IP-Adressen aus dem speziell zugewiesenen IP-Pool abzurufen und auf alles zuzugreifen, was ich in die Zugriffslisten aufgenommen habe.
Jetzt habe ich die Idee, Port 22 direkt an einen dedizierten Computer in meinem Netzwerk weiterzuleiten (ich habe nur interne und externe Schnittstellen), damit ich SSH in meine öffentliche IP-Adresse eingeben und auf dem dedizierten Computer landen kann, ohne dass dies erforderlich ist eine VPN-Verbindung.
Das Setup schien einfach zu sein:
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
und es funktioniert tatsächlich. Jetzt kann ich
ssh ssh.mydomain.com
und tatsächlich eine SSH-Sitzung auf meinem dedizierten Computer erhalten. Dieser Erfolg geht jedoch zu ssh 10.0.0.1
Lasten der Kosten, die nicht mehr funktionieren, wenn ich wie früher über AnyConnect mit meinem ASA / Netzwerk verbunden bin, bevor ich statisches NAT einrichte.
Ich kann das Verhalten der ASA deterministisch steuern:
Wenn ich nicht über die nat (inside,outside)
Linie in meiner Konfiguration,
ssh 10.0.0.1
funktioniert aberssh ssh.mydomain.com
funktioniert nicht.
Wenn ich habe die nat (inside,outside)
Regel als Teil der Konfiguration ist es umgekehrt:
ssh ssh.mydomain.com
funktioniert aberssh 10.0.0.1
funktioniert nicht.
Zur Untersuchung habe ich eine Erfassung auf der ASA eingerichtet
capture MyEndpoint type raw-data interface inside
capture MyEndpoint type raw-data interface outside
capture MyEndpoint match tcp host 10.0.0.1 any
Wenn ich mich zuerst über AnyConnect verbinde und es dann versuche ssh 10.0.0.1
, zeigt / erfasst das Capture nichts, solange die nat (inside,outside)
Regel aktiv ist. Außerdem erreichen meine SSH-Verbindungsversuche niemals den Server.
Es ist klar, dass der ASA die Verbindungsanforderungen von AnyConnect-verbundenen Endpunkten verarbeitet, wenn die nat
Regel aktiv ist.
Zuerst dachte ich, ich brauche eine Ergänzung zur Zugriffsliste, aber ich konnte es nicht so machen. Auf welcher Schnittstelle gelangt der VPN-Verkehr überhaupt in den ASA? außen oder innen? Ich nehme an, dass dies in diesem Fall keine Rolle spielt, da ich einen Platzhalter ( any
) für die Quelle verwende, der meiner Meinung nach auch VPN-Verkehr enthält.
Dann dachte ich, der ASA würde immer das nat anwenden, was bedeutet, dass das Paket, das das SYN-ACK trägt, an meine externe IP-Adresse angeschlossen wird, wodurch die Verbindung unterbrochen wird, da ich eine Verbindung von einer privaten VPN-Adresse herstelle, nicht vom Internet. Die SYNs gelangen jedoch nie zum Server, daher gibt es keine SYN-ACKs.
Ich verbrachte den ganzen Tag damit, meinen Kopf um den "neuen" nat
Befehl zu drehen . Wenn ich einen show nat
auf meinem ASA mache, bekomme ich
Auto NAT Policies (Section 2)
1 (inside) to (outside) source static MyEndpoint interface service tcp ssh ssh
translate_hits = 0, untranslate_hits = 0
Soweit ich heute gekommen bin, wird nur eine Quelladressübersetzung durchgeführt, um den Verkehr zu verlassen. Ich habe keine Ahnung, wie / warum dies eine Übersetzung der Zieladresse für Datenverkehr aus dem Internet impliziert, der bei der ASA ankommt. Kann mir jemand erklären, warum sich die ASA so verhält?
Bearbeiten 1: packet-tracer
Beim Lesen der Dokumentationen stieß ich auf den ASA-Befehl packet-tracer
. Wenn ich es tue
packet-tracer input inside tcp 10.100.0.2 31337 10.0.0.1 22
Der ASA teilt mir mit, dass ein Datenfluss erstellt und das Paket akzeptiert wird. Wenn ich es tue
packet-tracer input outside tcp 10.100.0.2 31337 10.0.0.1 22
Ich bekomme
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
Ich denke, dies ist ein implizit gewünschtes Verhalten, außer wenn Sie ich sind.
Edit 2: Suche nach Haarnadeln
Ich fand einige Artikel, die mich schließlich auf diesen vielversprechenden hinwiesen, der die Informationen enthielt , für die ich möglicherweise eine natürliche Regel benötige
nat (outside,outside) \
source static \
client_vpn_pool client_vpn_pool \
destination static \
remote_office_net remote_office_net
aber es hat nicht funktioniert. Ich habe ein Netzwerkobjekt für mein VPN-Client-Subnetz und ein Netzwerkobjekt für das Subnetz 10.0.0.1. Das Anpassen der obigen Vorlage ergab nicht das erwartete Ergebnis.
Wenn meine nat (inside,outside)
Regel vorhanden ist, funktioniert SSH nicht, aber ich kann 10.0.0.1 problemlos anpingen. Wenn ich eine nat (outside,ouside)
Regel hinzufüge, wie im Artikel vorgeschlagen, funktioniert der Ping nicht mehr. Ich habe auch Versionen der externen Regel mit Netzwerkobjekten für den jeweiligen Host und nur dem Bereich der ip local pool
für VPN-Clients verwendeten versucht. Sie alle lassen den Ping einfach aufhören.
Edit 3: Macht nichts
Es funktioniert jetzt. Ich habe buchstäblich nichts geändert. Ich bin gerade ins Bett gegangen. Ich denke, es gab einen internen Zustand in der ASA, der dieses Verhalten verursacht hat, und es trat eine Zeitüberschreitung auf, während ich schlief.
Es gibt immer noch die Sache, dass, wenn ich packet-tracer input [inside|outside] tcp <my vpn ip> 31337 10.0.0.1 22
Packet-Tracer benutze, immer gesagt wird, dass das Paket verworfen werden würde.
Wenn ich packet-tracer input inside
es sage, schlägt es fehl bei:
Phase: 6
Type: WEBVPN-SVC
Subtype: in
Result: DROP
Config:
Additional Information:
[...]
Drop-reason: (acl-drop) Flow is denied by configured rule
und wenn ich packet-tracer input outside
es sage, schlägt es fehl bei:
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
Ab heute funktioniert Ping und SSH von / zu meinem mit VPN verbundenen Laptop zu MyEndpoint (auch bekannt als 10.0.0.1) wie ein Zauber. Wie funktioniert diese ASA-Sache ???