Intro und andere Optionen
Es ist ungefähr 5,5 Jahre her, also überlasse ich diese Antwort meistens den Leuten und versuche, die gleichen Probleme mit dem modernen Cisco Anyconnect 4.x zu lösen. In meinem Fall hat Anyconnect den Datenverkehr in den lokalen Kubernetes-Cluster verpackt, der von Minikube unter macOS aufgerufen wurde.
Methoden wie _ZN27CInterfaceRouteMonitorLinux20routeCallbackHandlerEv
oder __ZN25CInterfaceRouteMonitorMac20routeCallbackHandlerEv
beschrieben in:
Scheint nicht mehr zu funktionieren. Außerdem beziehen sich viele Anleitungen auf das Beheben der OS X-Firewall, die in früheren Versionen vom ipfw
Dienstprogramm wie hier dargestellt wurde , sodass sie irrelevant sind.
Patchen von vpnagentd
Im Jahr 2019 kämpfen wir immer noch mit beiden Problemen, da Unternehmen Split-Routing vermeiden und unangemessene Firewall-Regeln aufstellen. Hier das Update.
Sie müssen den Aufruf der Methode CHostConfigMgr::StartInterfaceAndRouteMonitoring()
in vpnagentd
Binärform patchen
, die sich in meiner Version unter befindet 0x09cbf6
. Es ist ein einfacher jmp qword
Befehl, der niemals an diesen Ort zurückgegeben wird, also nop
kann Single genug sein. Es könnte sich jedoch lohnen, den Befehl mit 6 nop
s vollständig zu löschen .
Hier das Python-Skript, das diese Prozedur für Sie automatisieren kann, jedoch kann Ihnen jedes Demontage-Dienstprogramm dort helfen. In meinen ursprünglichen Recherchen und Hacks habe ich verwendet, radare2
was sehr praktisch für Leute ist, die solche Aktionen nicht täglich ausführen:
#!/usr/bin/python3
MAGIC_OFFSET = "0x09cbf6"
MAGIC_BYTE = 144
def eff_anyconnect(file):
print("Opening {} to patch it".format(file))
with open(file, "rb+") as f:
print("Going to {}".format(MAGIC_OFFSET))
print("Current command to call method for watching our routing table")
f.seek(int(MAGIC_OFFSET, 16))
print(hex(int.from_bytes(f.read(6), "big")))
f.seek(int(MAGIC_OFFSET, 16))
f.write(bytes([MAGIC_BYTE]))
print("NOP any longer:")
f.seek(int(MAGIC_OFFSET, 16))
print(hex(int.from_bytes(f.read(6), "big")))
eff_anyconnect("/your/path/to/cisco/bin/vpnagentd")
Im nächsten Schritt sollten Sie nach dem Patchen der Binärdatei den aktuellen vpnagent
Prozess beenden und die Verbindung zu Ihrem VPN wiederherstellen. Möglicherweise sind die gewünschten Routen weiterhin betroffen, aber der obige Hack entsperrt die Routing-Tabelle, sodass Sie Routen überschreiben können.
Routen
Ich würde vorschlagen -static
, solche hinzuzufügen , die von AnyConnect überhaupt nicht gestört werden, während nicht statische noch von getunnelten dupliziert werden. Ich habe hier keine gute Lösung, für meinen Fall war eine einzige statische Route ausreichend:
sudo route -n delete $(minikube ip)
sudo route -n add $(minikube ip) -interface bridge100 -static
Firewall
Letzter Firewall-Schritt. Das ist ziemlich einfach. Sie müssen überprüfen, welche Regeln nur AnyConnect-Tags verweigern oder zulassen. In meinem Fall wurde alles blockiert, was nicht markiert ist. Deshalb habe ich eine Datei mit folgenden Einträgen erstellt:
nat on utun1 proto {tcp, udp, icmp} from 192.168.64.0/24 to any -> utun1
pass in log on bridge0 inet all flags S/SA keep state tag cisco_anyconnect_vpn_pass
pass in log on bridge100 inet all flags S/SA keep state tag cisco_anyconnect_vpn_pass
Beachten Sie Folgendes:
utun1
ist Ihre AnyConnect-Schnittstelle
bridge0
und bridge100
sind Ihre Minikube / Docker-Brücken. Aus irgendeinem Grund benennt AnyConnect Bridges um.
192.168.64.0/24
ist dein Minikube-Subnetz.
Dann renne:
sudo pfctl -e enable packet-filtering
sudo pfctl -f <your_file_with_rules> -v
Von nun an sollten Sie bis zur nächsten erneuten Verbindung in Bezug auf Routen und Firewall gut sein.