up-pre skript und Openvpn

OP #3585613
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
OP #3586339
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
OP #3587036
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
#3587204
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.
OP #3587289
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
#3587339
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.
OP #3587570
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″
push “route 0.0.0.0 0.0.0.0″

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
#3587614
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. 
;)
OP #3587720
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
#3588888
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
OP #3589115
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
Gast #3589134
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren