openvpn mit Elternprozess beenden

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

openvpn mit Elternprozess beenden

Beitrag von king-crash » 20.06.2019 12:55:37

Hallo,

Um nur bei Bedarf einen VPN-Tunnel zu starten habe ich ein 2-Zeilen Miniskript, das ich vom Panel aus via sudo ausführe und welches mir das Ganze in einem Konsolenfenster auch anzeigt.
Das klappt auch wunderbar, Daten gehen durch und alle sind glücklich.
├─xfce4-terminal─┬─sudo───openvpn-100er───openvpn

5839 pts/2 00:00:00 openvpn-100er
5840 pts/2 00:00:00 openvpn
Wenn ich jetzt allerdings das Konsolenfenster einfach schließe, beendet sich openvpn nicht.
Hat jemand eine Idee wie ich eben das erreichen kann?

TomL

Re: openvpn mit Elternprozess beenden

Beitrag von TomL » 20.06.2019 16:48:39

king-crash hat geschrieben: ↑ zum Beitrag ↑
20.06.2019 12:55:37
Hat jemand eine Idee wie ich eben das erreichen kann?
Ja, nicht als Daemon starten, sondern einfach im Vordergrund... beim Schließen des Fensters wird dann auch die OpenVPN-Verbindung getrennt. Zeig mal die Befehlszeile, mit der OpenVPN gestartet wird.... dann sieht man, ob es daran gelegen hat.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: openvpn mit Elternprozess beenden

Beitrag von king-crash » 21.06.2019 09:00:51

openvpn --config 100er.conf

client
dev tap
proto udp
remote XXXXXXXXXXX
resolv-retry infinite
nobind
persist-key
persist-tun
ca 100er_cacert.pem
auth-user-pass 100er.pass
comp-lzo
Wie du dem ersten Post entnehmen kannst detached der openvpn Prozess im ersten Schritt nicht.

Benutzeravatar
MSfree
Beiträge: 10686
Registriert: 25.09.2007 19:59:30

Re: openvpn mit Elternprozess beenden

Beitrag von MSfree » 21.06.2019 09:13:24

king-crash hat geschrieben: ↑ zum Beitrag ↑
21.06.2019 09:00:51
Wie du dem ersten Post entnehmen kannst detached der openvpn Prozess im ersten Schritt nicht.
An welcher Stelle in deinem ersten Post ist der Beweis dafür, daß der Prozeß sich nicht "detached"?

Wie sieht der Inhalt von openvpn-100er aus?

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: openvpn mit Elternprozess beenden

Beitrag von king-crash » 21.06.2019 09:42:45

-> "├─xfce4-terminal─┬─sudo───openvpn-100er───openvpn"
Das ist die Ausgabe von pstree.
Den Inhalt habe ich direkt darunter gepostet.

TomL

Re: openvpn mit Elternprozess beenden

Beitrag von TomL » 21.06.2019 10:37:02

Wenn das weiter oben die conf für die Verbindung ist, sollte im Terminal während der Verbindung das Verbindungslog scrollen. Mit strg-c kann die Verbindung jederzeit unterbrochen werden. Kannst du das bestätigen?

Schau dir mit

Code: Alles auswählen

ps -aux | grep openvpn
vor und nach strg-c an, welche Prozesse wirklich laufen.

Und ich würde vielleicht htop installieren, ist ne tolle Unterstützung bei solcher Suche. Zuerst prüfen, ob es schon installiert ist, wenn nicht installieren:

Code: Alles auswählen

su -
dpkg -i htop
apt install htop
htop
Das kannst du in einem zweiten Terminal starten, mit F4 auf openvpn filtern und du siehst permanent, obs läuft oder nicht.

Btw, bitte verwende für Code-Auszüge die entsprechenden Code-Tags, damit man das Posting vernünftig lesen kann.... die stehen direkt neben den Zitate-Tags.

Btw2, wenn das wirklich oben die Client-conf ist, halte ich diese Konfiguration für ziemlich Sicherheitkritisch. Ich glaube, dass eine Pubkey-SSH-Verbindung sogar sicherer wäre. Ich würde mich gerade auch wegen der Verwendungvon "sudo" auf diese Weise garantiert nicht über unbekannte Accesspoints nach Hause verbinden. Jm2c.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: openvpn mit Elternprozess beenden

Beitrag von king-crash » 21.06.2019 15:01:07

Wenn das weiter oben die conf für die Verbindung ist, sollte im Terminal während der Verbindung das Verbindungslog scrollen. Mit strg-c kann die Verbindung jederzeit unterbrochen werden. Kannst du das bestätigen?
Ja.

->"ps -aux | grep openvpn"
openvpn läuft.

Code: Alles auswählen

root      2353  0.0  0.0  50864  3672 pts/0    Ss+  13:19   0:00 sudo /usr/bin/openvpn-100er
root      2357  0.0  0.0   4280   736 pts/0    S+   13:19   0:00 /bin/sh /usr/bin/openvpn-100er
root      2358  0.0  0.0  46404  6500 pts/0    S+   13:19   0:00 openvpn --config 100er.conf
root      2378  0.0  0.0  14320   992 pts/2    S+   13:19   0:00 grep openvpn
Fenster wurde geschlossen.

Code: Alles auswählen

root      2358  0.0  0.0  46144  6496 ?        S    13:19   0:00 openvpn --config 100er.conf
root      2392  0.0  0.0  14320  1012 pts/2    S+   13:19   0:00 grep openvpn
Eigentlich hätte ich erwartet openvpn bekommt beim schließen SIGHUP gesendet und beendet sich ebenso.

Der Tunnel wird zu einem Bekannten aufgebaut die config stammt nicht von mir, ich habe mich damit nicht nähers befasst. Wo genau siehst du Sicherheitsprobleme?

TomL

Re: openvpn mit Elternprozess beenden

Beitrag von TomL » 21.06.2019 16:52:43

Ich schätze, die Antwort ist einfach.... :D ... vielleicht kommst Du selber drauf... bei mir laufen zwei Instanzen (als Daemon, was aber egal ist), und das sieht so aus:

Code: Alles auswählen

ps -aux | grep openvpn
vpnuser    868  0.0  0.0  48164   836 ?        Ss   Mai02   0:50 /usr/sbin/openvpn --daemon --config /etc/openvpn/server_udp.conf
vpnuser    983  0.0  0.0  48272  3396 ?        Ss   Mai02   0:44 /usr/sbin/openvpn --daemon --config /etc/openvpn/server_tcp.conf
thomas   14788  0.0  0.0  12780   940 pts/0    S+   16:20   0:00 grep openvpn
Du müsstest jetzt nur herausfinden, wer oder wodurch die weitere Instanz gestartet wird. Ich vermute über...
/etc/default/openvpn->AUTOSTART="all",
... was Du mal prüfen solltest.
king-crash hat geschrieben: ↑ zum Beitrag ↑
21.06.2019 15:01:07
Der Tunnel wird zu einem Bekannten aufgebaut die config stammt nicht von mir, ich habe mich damit nicht nähers befasst. Wo genau siehst du Sicherheitsprobleme?
Tja, das ist schwierig zu beantworten... auf den ersten Blick halte ich die ganze Konfiguration für ein enormes Sicherheitsrisiko oder besser gesagt, für eine Konfiguration ohne Sicherheit... ob es das aber auch wirklich ist, hängt im wesentlich davon ab, wann Du von wo, was und wie oft mit welchem Ziel vorhast und wie (permanent?) der Server auf Verbindungen wartet.

Es sind mehrere Punkte in der Conf, die der verantwortliche Admin konkret erklären können sollte, warum die hier gewählt wurden und warum die bei dem Szenario kein Sicherheitsrisiko darstellen. Ich betrachte das jetzt nur aus meiner subjektiven Perspektive, weil ich mich primär mit meinem Laptop an unbekannten und damit für meine Hardware potentiell gefährlichen Accesspoints anmelde, um mich dann via OpenVPN zu meinem Server nachhause zu verbinden.. was also bestimmte sehr strenge Anforderungen an die Sicherheit beinhaltet.

Also folgende Fragen?
1. Warum Bridging (tap-Device) und kein für On-The-Fly-Verbindungen besseres und performanteres Routing (tun-Device)?
2. Warum nur die unsichere CA und PWD-Auth, was m.M.n. überhaupt keine Sicherheit bietet?
3. Warum keine TLS-Veschlüsselung mit einem zugriffgeschützten Keyfile für den Verbindungsaufbau?
4. Warum keine zugriffsgeschützten Key-Files für eine sichere Verschlüsselung?
5. Wo sind in der Conf überhaupt die Key-Files angegeben oder wurde darauf verzichtet?

Um Deine Konfiguration nachzuvollziehen, müsste man viel mehr Informationen haben, ohne die kann man nur raten.....aber bei einer Aussage bleibe ich: Wenn Du die Konfiguration nicht erklären und den Aufbau begründen kannst, ist die Sicherheit ein Zufallsprodukt. In dem Fall würde ich tatsächlich auf eine einfacher zu handhabende Pubkey-SSH-Verbindung auf einem Phantasie-Port zurückgreifen, bei der die lokale Keyfile-Verwendung Password-gesichert ist. Der Phantasie-Port dezimiert nachhaltig das Rauschen auf der Leitung.

Wenns Dich interessiert, kann ich Dir mal nen Link senden, wo ich ich meinen Aufbau beschrieben habe.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: openvpn mit Elternprozess beenden

Beitrag von king-crash » 21.06.2019 17:19:35

Du missverstehst. Es laufen zu keinem Zeitpunkt zwei Instanzen.
Ich drösel das mal auf:

Der sudo Befehl.

Code: Alles auswählen

root      2353  0.0  0.0  50864  3672 pts/0    Ss+  13:19   0:00 sudo /usr/bin/openvpn-100er
Das Miniskript:

Code: Alles auswählen

root      2357  0.0  0.0   4280   736 pts/0    S+   13:19   0:00 /bin/sh /usr/bin/openvpn-100er
Openvpn:

Code: Alles auswählen

root      2358  0.0  0.0  46404  6500 pts/0    S+   13:19   0:00 openvpn --config 100er.conf
grep wegen der suche :-)

Code: Alles auswählen

root      2378  0.0  0.0  14320   992 pts/2    S+   13:19   0:00 grep openvpn
Also immer nur ein openvpn, das auch nicht beendet wird

TomL

Re: openvpn mit Elternprozess beenden

Beitrag von TomL » 21.06.2019 19:38:27

Du kannst das einfach prüfen... direkt nach einem Reboot des Systems...ohne das Du zuvor etwas gestartet hast.... zeige bitte mal diese Ausgabe:

Code: Alles auswählen

ps -aux | grep openvpn

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: openvpn mit Elternprozess beenden

Beitrag von king-crash » 22.06.2019 09:27:13

Direkt nach dem booten läuft noch eine andere Instanz die ich um Verwirrungen vorzubeugen ausgeschaltet hatte.
Ich verwende jetzt mal "ps xao pid,ppid,args | grep openvpn" um das zu verdeutlichen.
1. Nach dem Booten von Systemd gestartet:

Code: Alles auswählen

  592     1 /usr/sbin/openvpn --suppress-timestamps --nobind --config ge
 2307  2067 grep openvpn
2. Den anderen VPN im Terminal gestartet:

Code: Alles auswählen

  592     1 /usr/sbin/openvpn --suppress-timestamps --nobind --config ge
 2316  2054 sudo /usr/bin/openvpn-100er
 2320  2316 /bin/sh /usr/bin/openvpn-100er
 2321  2320 openvpn --config 100er.conf
 2342  2067 grep openvpn
3. Das Fenster geschlossen:

Code: Alles auswählen

  592     1 /usr/sbin/openvpn --suppress-timestamps --nobind --config ge
 2321     1 openvpn --config 100er.conf
 2354  2067 grep openvpn
1. PID 592 wird von Anfang an via systemd gestartet (PPID = 1). Sonst gibt es nichts interessantes.
2. Der eigentliche openvpn Prozess hat die PID 2321. Die PIDs 2320 und 2316 sind seine Eltern, einmal Skript und einmal sudo.
3. Skript und sudo sind beendet Es gibt aber noch 592 (ist ok) und 2321 (neeeeeeein). Letzterer hat jetzt allerdings PPID 1 und ist offensichtlich detached.

TomL

Re: openvpn mit Elternprozess beenden

Beitrag von TomL » 22.06.2019 11:38:25

Kannst Du bitte mal den ganzen Startprozess für diese Instanz zeigen, also alles was dazu gehört... Scripte, Units, Starter, Befehle, in der tatsächlich ablaufenden Reihenfolge... also vollständig. Irgendeinen Grund muss es ja haben... vielleicht sieht man es da.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: openvpn mit Elternprozess beenden

Beitrag von king-crash » 22.06.2019 13:32:01

Ich glaube ich habe das Problem gefunden.
Aus der Doku:
SIGHUP — Hard restart
Bei SIGHUP beendet sich openvpn also nicht wie die meisten anderen Programme, sondern startet intern neu.
Mal schauen ob ich in dem Skript einen handler zum umbiegen schreiben kann.

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: openvpn mit Elternprozess beenden

Beitrag von king-crash » 22.06.2019 14:20:29

Hier die Lösung.

Code: Alles auswählen

#!/bin/sh
kill_ovpn()
        {
        echo "schluss"
        kill $OPENVPN_PID
        exit
        }
trap 'kill_ovpn' 1 15
cd /etc/openvpn/cfg/
openvpn --config 100er.conf &
OPENVPN_PID=$!
while :
do
        sleep 1
done

TomL

Re: openvpn mit Elternprozess beenden

Beitrag von TomL » 22.06.2019 14:44:54

Warum startest Du es nicht einfach mit einer Service-Unit? Das wäre doch viel einfacher und man spart sich dieses ganze Heckmeck

Code: Alles auswählen

cat /etc/systemd/system/openvpn@.service

Code: Alles auswählen

[Unit]
Description=openvpn@%I.service   Start a OpenVPN-Daemon

[Service]
Type=forking
PIDFile=/var/run/openvpn/%I.pid

ExecStartPre=/bin/mkdir -p /var/run/openvpn
ExecStart=/usr/local/sbin/openvpn --daemon --writepid /var/run/openvpn/%I.pid --status /var/run/openvpn/%I.status 60 --config /etc/openvpn/%I.conf

KillMode=process

[Install]
WantedBy=multi-user.target
Gestartet und gestoppt wirds einfach mit systemctl:

Code: Alles auswählen

systemctl start openvpn@100er.service
systemctl stop openvpn@100er.service

Benutzeravatar
king-crash
Beiträge: 720
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: openvpn mit Elternprozess beenden

Beitrag von king-crash » 23.06.2019 12:19:38

Ich benutze diese Instanz nur gelegentlich und da ist es bequemer ich starte das vom Panel und schließe im Anschluss das Fenster wieder.
Kleine Korrektur zum Skript

Code: Alles auswählen

#!/bin/sh
kill_ovpn()
        {
        while sleep 1; do /bin/kill $OPENVPN_PID || break; done
        exit
        }
trap 'kill_ovpn' 1 15
cd /etc/openvpn/cfg/
openvpn --config 100er.conf &
OPENVPN_PID=$!
while :
do
        sleep 1
done

Antworten