Wie kann ich überprüfen, ob ein OpenVPN-Server einen Remote-Port überwacht, ohne den OpenVPN-Client zu verwenden?


39

Ich muss überprüfen, ob ein OpenVPN-Server (UDP) auf einem bestimmten Host-Port verfügbar ist.

Ich besitze nur einen einfachen Windows XP-Computer ohne OpenVPN-Client (und ohne die Möglichkeit, ihn zu installieren) und ohne die für die Verbindung zum Server erforderlichen Schlüssel. Ich verfüge lediglich über die üblichen WinXP-Befehlszeilentools, einen Browser und PuTTY.

Wenn ich so etwas wie einen SMTP- oder POP3-Server testen würde, würde ich Telnet verwenden und sehen, ob es reagiert, aber wie geht das mit OpenVPN (UDP)?


Wenn openvpn über TCP ausgeführt wird, können Sie auch telnet
rvs

OpenVPN läuft über UDP
Ivan

2
Können Sie erläutern, warum Sie dies von einem veralteten Windows-System aus und nicht von einem echten Überwachungssystem aus lösen möchten?
Alex Holst

2
Wenn der UDP-OpenVPN-Server die (empfohlene) tls-authKonfigurationsoption verwendet, ist dies UNMÖGLICH (wenn Sie nicht mindestens den äußeren Wrapper-Schlüssel haben)! Jedes Paket mit einer falschen HMAC-Signatur wird ohne Antwort vom Server verworfen.
Alex Stragies

Antworten:


50

Hier ist ein Shell-Einzeiler:

echo -e "\x38\x01\x00\x00\x00\x00\x00\x00\x00" | 
   timeout 10 nc -u openvpnserver.com 1194 | cat -v

Wenn es auf der anderen Seite ein OpenVPN gibt, wird es ausgegeben

@$M-^HM--LdM-t|M-^X^@^@^@^@^@@$M-^HM--LdM-t|M-^X^@^@^@^@^@@$M-^HM--LdM-t|M-^X...

Andernfalls wird es nur nach 10 Sekunden stumm geschaltet und es wird eine Zeitüberschreitung angezeigt.

HINWEIS: Dies funktioniert nur, wenn die tls-authKonfigurationsoption nicht aktiviert ist. Andernfalls weist der Server Nachrichten mit falschem HMAC zurück.


1
Ich bekomme etwas anderes, aber ich bekomme etwas. Vielen Dank.
Artfulrobot

7
Nur um das Offensichtliche zu verdeutlichen: Dies gilt für Linux / Unix, nicht für Windows. Und es erfordert Netcat (in einigen Distributionen nicht standardmäßig installiert). Wenn Ihre Linux-Distribution nicht über den Befehl "timeout" verfügt, verwenden Sie einfach den Parameter "-w" von netcat, z. B. "nc -w 10 -u openvpnserver.com 1194".
MV.

1
Das ist verdammt geil.
Dmourati

2
Dies funktioniert im OP-Szenario nicht, wenn der Server die tls-authKonfigurationsoption zum Verwerfen von Paketen mit falschem HMAC-Sig verwendet.
Alex Stragies

2
Ich finde Piping zu od -x -N 14statt cat -vist viel nützlicher, weil Sie a) den tatsächlichen binären Inhalt anstelle von ASCII-Müll sehen und b) jede Ausgabezeile sofort empfangen können, wenn der Server jedes Handshake-Paket sendet und es sofort nach dem ersten anhält. -N 14weil das Handshake-Paket 14 Bytes lang ist und sich nur wiederholt.
BaseZen

5

Entschuldigung, wenn ich mit meiner Antwort etwas zu spät komme;)
Senden Sie ein udp-Paket mit folgendem Inhalt:
$ 38 $ 01 $ 00 $ 00 $ 00 $ 00 $ 00 $ 00
Der Server muss etwas antworten.
Sie können udp-Pakete mit Python wie folgt fälschen:

import socket
senddata= "\x38\x01\x00\x00\x00\x00\x00\x00\x00"

def checkserver(ip,port):
   print('Checking %s:%s' %(ip,port)) 
   sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
   sock.settimeout(5) # in seconds
   sock.connect((ip, port))
   print("Sending request...")
   sock.send(senddata)
   try:
      dta=sock.recv(100)
      print("Server reply: %s" %(dta))
   except:
      print("Server not responding")
   sock.close()
   print("###########################################################")

def main():
   checkserver("addr.of.server1",1194)
   checkserver("addr.of.server2",1195)

if __name__ == "__main__":
   main()

1
Wie Loics Antwort sagt, funktioniert das nicht tls-auth.
Tedder42

1
Für Python 3 verursacht Zeile 10 ein Problem. Ersetzen Sie "sock.send (senddata)" durch "sock.send (senddata.encode ())" und es wird funktionieren.
NDB

2

Sie können versuchen, Folgendes in der CLI auszuführen

#netstat -ltnup

Dies sollte alle Prozesse auflisten, die auf Ihrem Server / System empfangsbereit sind. Grep nach der gewünschten Portnummer

#netstat -ltnup | grep 1194

OP hat nur Windows XP-Tools.
User9517 unterstützt GoFundMonica

1
@Iain: Das OP hatte PuTTY, so dass möglicherweise SSH auf dem Server ausgeführt werden kann. In diesem Fall ist diese sehr einfache Überprüfung ein nützlicher erster Schritt.
21.

2

Für alle Benutzer, die versuchen, einen tls-authaktivierten Server zu überwachen , können Sie das Python-Skript hier verwenden: https://github.com/liquidat/nagios-icinga-openvpn

Die Ausgabe ist für die Verwendung in Nagios oder Icinga formatiert, kann jedoch von jedem / jeder ausgeführt werden, vorausgesetzt, Sie haben Python und die tls-Schlüsseldatei verfügbar.

Wenn Sie beispielsweise SHA256als Digest verwenden, verwenden Sie Folgendes:

python check-openvpn.py -p 1194 --tls-auth ta.key --digest SHA256 vpn-server.example.com

Hinweis: --tls-auth-inverseAbhängig vom key-directionWert des Servers müssen Sie möglicherweise hinzufügen .


0

Wenn Sie einen Teil der gültigen Interaktion zwischen OpenVPN-Client und OpenVPN-Server erhalten, können Sie die ersten Pakete mit etwas wie netcat modellieren, wie von TiZon vorgeschlagen.

Grundsätzlich möchten Sie genug von einem gültigen ersten Paket haben, damit der Server mindestens mit einer Fehlermeldung antwortet. Es muss also nicht perfekt sein, sondern nur gut genug.

Ich habe versucht, http://pcapr.net aufzurufen , habe dort jedoch kein OpenVPN-Beispiel gesehen. Wenn jemand anderes behauptet, der Dienst sei in Betrieb, könnten Sie ihn möglicherweise dazu bringen, einen Teil der Transaktion zu übernehmen.


-5

Wenn Sie OpenVPN auf einem TCP-Listen eingerichtet haben, ist es so einfach wie

telnet vpnserver 1194

Angenommen, 1194 ist der Port, den Sie abhören

Dies sollte Ihnen eine Art Antwort geben, um zu zeigen, dass der OpenVPN-Server lauscht


Bist du 100% sicher? Wenn ich das tue, erhalte ich nach einigem Warten die Meldung "Verbindung zum Host auf Port 1194 konnte nicht hergestellt werden: Verbindung fehlgeschlagen". Soll ein Client nicht zuerst etwas sagen, bevor ein OpenVPN-Server antwortet?
Ivan

6
Beachten Sie, dass OpenVPN standardmäßig nur UDP ist und Telnet TCP verwenden soll.
Ivan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.