Forum: PC Hard- und Software up-pre skript und Openvpn


von Pier S. (bigpier)


Lesenswert?

Hallo ich möchte ein Skript ausführen wenn sich ein Client auf meinen 
Openvpn Server anmeldet.zb eine Mail versenden
Ich habe zwar ergoogelt das das gehen sollte aber leider weiß ich nicht 
wie!
Ich habe einen Ubuntu Server laufen.
Wenn mir jemand einen Tipp geben könnte wäre ich sehr dankbar!

Lg Peter

von TestX .. (xaos)


Lesenswert?

dann gib doch mal bei google zB sowas in der art ein "openvpn server 
hooks"
und schon findet man etwas wie "--route-up <script>"

von Pier S. (bigpier)


Lesenswert?

Andi D. schrieb:
> dann gib doch mal bei google zB sowas in der art ein "openvpn server
> hooks"
> und schon findet man etwas wie "--route-up <script>"

Entweder bin ich zu doof oder du hast ein anderes Google!
Ich finde leider nichts über diese Skripts.

Vielen Dank

Peter

von __tom (Gast)


Lesenswert?

Pier S. schrieb:
> Hallo ich möchte ein Skript ausführen wenn sich ein Client auf meinen
> Openvpn Server anmeldet

Man könnte "learn-address" dazu verwenden, das führt das angegebene 
Script aus wenn sich ein Client verbindet.

von Marek W. (ma_wa)


Lesenswert?

https://openvpn.net/index.php/open-source/documentation/manuals/65-openvpn-20x-manpage.html

bitttteeeee schöööönnnn.
Damit du am WE was schönes zum Lesen hast.

von Pier S. (bigpier)


Lesenswert?

Ja Danke ich werde mir die Doku durchlesen!

Lg
Peter

von Pier S. (bigpier)


Lesenswert?

Ich habe mir die obige Doku durchgelesen,
bin aber nicht wirklich weiter gekommen!
Hat jemand ein Beispiel für ein Skript das ausgeführt wird wenn der 
Tunnel aufgebaut wurde?
Vor allem wüsste ich gern wo ich das Skript ablegen muß
und wie genau das Skript aufgebaut sein soll!
Vielen Dank für Eure Hilfe
Peter

von Pier S. (bigpier)


Lesenswert?

So jetzt habe ich einen kleinen Erfolg zu vermelden.
Ich habe jetzt ein Skript erstellt das Mails erfolgreich verschickt und 
habe auch den Aufruf in der Client.conf  hinbekommen.
Leider bekomme ich noch eine Fehler im Log der wie folgt lautet!

Sun Mar 23 17:55:05 2014 test.up OpenVPN 1500 1544 10.98.1.6 10.98.1.5 
init
Sun Mar 23 17:55:05 2014 WARNING: External program may not be called 
unless '--script-security 2' or higher is enabled.  Use 
'--script-security 3 system' for backward compatibility with 2.1_rc8 and 
earlier.  See --help text or man page for detailed info.
Sun Mar 23 17:55:05 2014 WARNING: Failed running command (--up/--down): 
external program did not execute -- returned error code -1
Sun Mar 23 17:55:05 2014 Exiting

Was mache ich falsch?

Lg
Peter

von Marek W. (ma_wa)


Lesenswert?

Sehr schön.
Freut mich, das du so weit gekommen bist.
Ich gehe einmal davon aus, dass dein Script arbeitet aber nicht bei der 
Einwahl mittels openVPN ausgelöst wird.

Leider muss ich gestehen, das ich die entsprechende Option nicht in der 
von mir verlinkten Manpage finden kann. Es kann also sein, dass dieses 
Problem versionsabhängig ist.

Hier ein Auszug aus meiner Manpage:

1
--script-security level [method]
2
              This  directive  offers  policy-level control over OpenVPN's usage of external programs and scripts.  Lower level values are more restric‐
3
              tive, higher values are more permissive.  Settings for level:
4
5
              0 -- Strictly no calling of external programs.
6
              1 -- (Default) Only call built-in executables such as ifconfig, ip, route, or netsh.
7
              2 -- Allow calling of built-in executables and user-defined scripts.
8
              3 -- Allow passwords to be passed to scripts via environmental variables (potentially unsafe).
9
10
              The method parameter indicates how OpenVPN should call external commands and scripts.  Settings for method:
11
12
              execve -- (default) Use execve() function on Unix family OSes and CreateProcess() on Windows.
13
              system -- Use system() function (deprecated and less safe since the external program command line is subject to shell expansion).
14
15
              The --script-security option was introduced in OpenVPN 2.1_rc9.  For configuration file compatibility with previous OpenVPN versions, use:
16
              --script-security 3 system

Du solltest die auf deinem System mittels ..
1
 man openvpn
... auch selber aufrufen können und danach kannst du mit 
"/--script-security" danach suchen lassen.

Pier S. schrieb:
> Sun Mar 23 17:55:05 2014 WARNING: External program may not be called
> unless '--script-security 2' or higher is enabled.  Use
> '--script-security 3 system' for backward compatibility with 2.1_rc8 and
> earlier.  See --help text or man page for detailed info.

Diese Meldung soll dir sagen, dass der Dienst mit der Script-Security=1 
ausgeführt wird. In diesem Fall können nur bestimmte Systemprogramme 
ausgeführt werden. Es gibt jetzt für dich zwei Möglichkeiten:

1.) Da Ubuntu debian style ist, gibt es die Datei 
"/etc/default/openvpn/". Hier kannst du bei den OPTARGS die passende 
Option einfügen und den Dienst neu starten.

1
 This is the configuration file for /etc/init.d/openvpn
2
3
#
4
# Start only these VPNs automatically via init script.
5
# Allowed values are "all", "none" or space separated list of
6
# names of the VPNs. If empty, "all" is assumed.
7
#
8
AUTOSTART="all"
9
#
10
# Refresh interval (in seconds) of default status files
11
# located in /var/run/openvpn.$NAME.status
12
# Defaults to 10, 0 disables status file generation
13
#
14
#STATUSREFRESH=10
15
#STATUSREFRESH=0
16
# Optional arguments to openvpn's command line
17
OPTARGS="--script-security 2"

2.) Füge in der Serverconfig ...
SCRIPT-SECURITY 2
... ein. Kann aber auch fehlschlagen, also einfach einmal testen.


Ich hoffe jetzt klappt auch noch der Rest, viel Spaß noch am Gerät.

von Pier S. (bigpier)


Lesenswert?

Hallo Walther,
einen großen Dank für Deine Hilfe!
Leider bringt Dein Vorschlag nicht den Erfolg!
Habe beide Tipps ausprobiert!
hier nochmals der Log.

Sun Mar 23 20:55:54 2014 test.up OpenVPN 1500 1544 10.98.1.6 10.98.1.5 
init
Sun Mar 23 20:55:54 2014 WARNING: External program may not be called 
unless '--script-security 2' or higher is enabled.  Use 
'--script-security 3 system' for backward compatibility with 2.1_rc8 and 
earlier.  See --help text or man page for detailed info.
Sun Mar 23 20:55:54 2014 WARNING: Failed running command (--up/--down): 
external program did not execute -- returned error code -1
Sun Mar 23 20:55:54 2014 Exiting


Sind die Rechte von meinem Skript in Ordnung mit dem Befehl ls -l kommt 
folgendes raus.
-rwx--x--x 1 root root   92 Mar 23 21:08 test.up

Bin leider auf diesem Bereich sehr schwach!

Vielen Dank

Peter

: Bearbeitet durch User
von Marek W. (ma_wa)


Lesenswert?

Das kommt jetzt darauf an, als welcher Benutzer das Script läuft.

Das Werkeug ps -xu liefert mir hier folgende Info:
1
root     14192  0.0  0.0   4928  3060 pts/1    S+    2013   4:11 openvpn rw20.ovpn
Hier läuft der Dienst als root, bei anderen Installationen kann es aber 
auch der Benutzer openvpn sein.


Pier S. schrieb:
> -rwx--x--x 1 root root   92 Mar 23 21:08 test.up

Hier kann nur der Benutzer root das Script ausführen. Ggf die 
Berechtigung wie folgt anpassen oder den richtigen Eigentümer setzten.

-rwxr-xr-x 1 root root   92 Mar 23 21:08 test.up

Ein weiteres Problem kann sein, dass das Script nicht gefunden werden 
kann. Hier bitte den absoluten Pfad in der Config verwenden.

Nach jeder Änderung den Dienst mit:

service openvpn restart
oder
"/etc/init.d/openvpn restart" neu starten.

Ggf. einmal die Serverconfig hier posten.

: Bearbeitet durch User
von Pier S. (bigpier)


Lesenswert?

Guten Morgen,
bekomme es einfach nicht hin!
Habe versucht deine Tipps anzuwenden bin mir aber nicht sicher ob ich es 
richtig gemacht habe!
habe diesen Befehl verwendet chmod a+w test.up


-rwx-wx-wx 1 root root   92 Mar 23 21:08 test.up
habe auch in der client.conf den Pfad eingetragen.

Ich schicke Dir auch noch das Server.conf



port 443
proto tcp-server
dev tun0
ca keys/test/ca.crt
cert keys/test/servertest.crt
key keys/test/servertest.key
dh keys/test/dh2048.pem
server 10.98.1.0 255.255.255.0
crl-verify keys/test/crl.pem
cipher BF-CBC
user nobody
group nogroup
status servers/serverMy/logs/openvpn-status.log
log-append servers/serverMy/logs/openvpn.log
verb 6
mute 20
max-clients 100
management 127.0.0.1 2000
keepalive 10 120
client-config-dir /etc/openvpn/servers/serverMy/ccd
client-to-client
comp-lzo
persist-key
persist-tun
ccd-exclusive

route 10.198.1.0 255.255.255.0
route 10.99.10.0 255.255.255.0
push "route 192.168.20.0 255.255.255.0"
route 10.99.11.0 255.255.255.0
push "route 10.99.99.0 255.255.255.0"
route 10.99.1.0 255.255.255.0
route 10.99.2.0 255.255.255.0
route 10.99.3.0 255.255.255.0
push “route-metric 512&#8243;
push “route 0.0.0.0 0.0.0.0&#8243;

Hier das Client.conf
client
proto tcp-client
dev tun
ca ca.crt
dh dh2048.pem
cert pier.crt
key pier.key
remote xxx.xxx.xxx.xxx.xxx
verb 2
mute 20
keepalive 10 120
comp-lzo
persist-key
persist-tun
float
resolv-retry infinite
nobind
up etc/openvpn/clients/serverMy/pier/test.up




Danke für Deine Hilfe
Peter

: Bearbeitet durch User
von Marek W. (ma_wa)


Lesenswert?

Guten Morgen

Pier S. schrieb:
> up etc/openvpn/clients/serverMy/pier/test.up

Alle Pfade bitte absolut angeben mit "/" davor.
"/etc/openvpn/clients/serverMy/pier/test.up"

Ich sehe gerade, das du das Script auf dem Client ausführen möchtest, 
dann solltest du folgendes in die ClientConf eintragen

script-security 2

Sieht sonst ganz gut aus, ich schaue da einmal drüber, wenn ich mehr 
Zeit habe. Aber immerhin mit Zertifikaten, Respekt. So etwas beim ersten 
Mal ist verdammt gut. Da sollte das Script doch keine Hürde mehr sein. 
;)

von Pier S. (bigpier)


Lesenswert?

Marek Walther schrieb:
> Ich sehe gerade, das du das Script auf dem Client ausführen möchtest,
> dann solltest du folgendes in die ClientConf eintragen


Ja das war mein Plan!
Mir kommt jetzt ein Zweifel ob ich das ganze richtig verstanden habe.
Ich habe das Script auf dem Server abgelegt und den Aufruf  in das 
client.conf eingetragen.

ist das so richtig oder muß ich den Aufruf ins Server.conf eintragen?

Vielen lieben Dank für Deine Geduld

Peter

von Marek W. (ma_wa)


Lesenswert?

Wenn das Script nach dem Verbindungsaufbau auf dem Client ausgeführt 
werden soll, dann muss:
-> das Script auf dem Client hinterlegt sein
-> das Script in der Config des Clients eingetragen sein

Wenn das Script nach dem Verbindungsaufbau auf dem Server ausgeführt 
werden soll, dann muss:
-> das Script auf dem Server hinterlegt sein
-> das Script in der Config des Server eingetragen sein

von Pier S. (bigpier)


Lesenswert?

Halli Walther,
Danke noch mal!
Es funktioniert jetzt!
Das problem ist nur das wenn ich das Skript auf dem Server ausführe ich 
nicht erkenne wer sich angemeldet hat und wer online ist!
da die aktion nur beim ersten client ausgefürt wird!
Auf dem clirnt hingegen ist die einrichtung müsamer!
Danke
und dchönen Tag

von randy (Gast)


Lesenswert?

guten morgen,

schau dir mal die exportierten variablen an:

[code]
Environmental Variables
Once set, a variable is persisted indefinitely until it is reset by a 
new value or a restart,....

common_name
    The X509 common name of an authenticated client. Set prior to 
execution of --client-connect, --client-disconnect, and 
--auth-user-pass-verify scripts.

username
    The username provided by a connecting client. Set prior to 
--auth-user-pass-verify script execution only when the via-env modifier 
is specified.
[code]

https://openvpn.net/index.php/open-source/documentation/manuals/65-openvpn-20x-manpage.html

da braucht man natuerlich entweder pro client ein eigenes certificate 
mit dem jeweils richtigen common name (CN) oder seperate usernames. 
alternativ
ein art "DDNS" script, der client schickt dem server seinen hostname...

-- randy

von Pier S. (bigpier)


Lesenswert?

Hallo,
Ich habe pro Client ein eigenes Certifikat!
habe aber nicht verstanden wie ich das event auslösen kann wenn sich ein 
client anmeldet.
Vielen dank für deine Gedult

Peter

von Pier S. (bigpier)


Lesenswert?

So jetzt habe ich das Ganze so laufen wie ich es mir am Anfang gewünscht 
habe!
Ein großes Dankeschön an Walther!

Wenn jemand Interesse an der Lösung hat bitte Melden!
Vielen Dank an alle

Lg Peter

von huber-andreas (Gast)


Lesenswert?

Hallo,

dein Beitrag ist zwar schon fast ein Jahr alt, aber müch würde es 
trotzdem interesieren, wie du es zum laufen gebraucht hast.

Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.