it-swarm-eu.dev

Jak spustím skript po úspěšném připojení OpenVPN?

Jak mohu přiřadit skript k OpenVPN, aby se spustil, když se VPN úspěšně připojí?

52
Oxwivi

network-manager-openvpn neposkytuje takovou funkci, musíte použít openvpn přímo.

Složit --script-security 2 --up /path/to/your/script při připojení. Pokud používáte konfigurační soubor umístěný na /etc/openvpn/, připojte další řádky ke svému konfiguračnímu souboru:

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

Z OpenVPN manpage :

--script-security level [method] 
 Tato směrnice nabízí kontrolu na úrovni politiky nad použitím 
 externích programů a skriptů OpenVPN. Hodnoty nižší úrovně jsou restriktivnější 
, Vyšší hodnoty tolerantnější. Nastavení úrovně 
: 
 
 0 - striktně žádné vyvolání externích programů. 
 1  výchozí) Volejte pouze vestavitelné spustitelné soubory, jako je ifconfig, 
 ip, route nebo netsh. 
  2 - Povolit volání vestavěných spustitelných souborů a uživatelem definovaných 
 skriptů! 
 3 - Povolit předávání hesel skriptům prostřednictvím proměnných prostředí 
 (Potenciálně nebezpečných). 
 --Up cmd 
 Příkaz Shell se spouští po úspěšném otevření zařízení TUN/TAP (před 
 - změna uživatelského UID). Skript nahoru je užitečný pro specifikaci 
 Trasovacích příkazů, které směrují IP provoz určený pro soukromé 
 Podsítě, které existují na druhém konci VPN připojení, do 
 Tunelu. 
 Pořadí skriptů 
 --Up Provedeno po vazbě soketu TCP/UDP a otevřeném TUN/TAP. 
 - down Provedeno po uzavření TCP/UDP a TUN/TAP. 

Existuje více událostí pro spuštění skriptu, ty lze najít na --- (manuální stránka .

Vytvořit /etc/openvpn/up.sh a udělte mu oprávnění ke spuštění (řekněme 755 nebo 700). Příklad obsahu pro přidání adresy a trasy IPv6 (zobrazený pro vzdělávací účely, nekopírujte ji přímo):

#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

Tento skript up je spuštěn jako root. Pokud jste nezadali nastavení User a Group, OpenVPN bude také spouštět skripty jako down jako root.

65
Lekensteyn

K otázce: "Jak mohu přiřadit skript k OpenVPN, aby se spustil, když se VPN úspěšně připojí?" Chci zdůraznit, že Lekensteyn poskytla vynikající odpověď . Ale v době, kdy byla jeho odpověď složena, postrádalo trochu jasnosti ohledně toho, jak by měly být poskytovány argumenty příkazového řádku openvpn pro spuštění openvpn na počítači ubuntu, zejména tak, aby po restartování fungoval stejně.


Argumenty příkazového řádku Openvpn na Ubuntu:

Samozřejmě je možné spustit openvpn z příkazového řádku s libovolnými dostupnými právními možnostmi. Ale na stroji Ubuntu, pokud chce někdo po restartu spustit openvpn se stejnými argumenty příkazového řádku, měli by zvážit úpravu souboru /etc/default/openvpn. Zkontrolujte následující řádky:

# Optional arguments to openvpn's command line
OPTARGS="" 

Z manuálové stránky openvpn komunity na --script-security

--script-security level 
 Tato směrnice nabízí na úrovni politiky kontrolu nad používáním externích 
 programů a skriptů OpenVPN. Hodnoty nižší úrovně jsou přísnější, vyšší hodnoty 
 Jsou přípustnější. Nastavení úrovně: 
 0 - striktně žádné volání externích programů. 
 1 - (výchozí) Volejte pouze vestavitelné spustitelné soubory, jako jsou ifconfig, ip, route, 
 Nebo netsh. 
 2 - Povolit volání vestavěných spustitelných souborů a skriptů definovaných uživatelem. 
 3 - Povolit předávání hesel skriptům prostřednictvím proměnných prostředí 
 (Potenciálně nebezpečné). 
 
 Vydání OpenVPN před verzí v2.3 také podporovala příznak metody, který uvedl, jak má 
 OpenVPN volat externí příkazy a skripty. Mohlo by to být buď 
 Nebo systém. Od verze OpenVPN v2.3 tento příznak již není přijímán. Ve většině prostředí * nix 
 Byl přístup execve () používán bez problémů. 
 
 Některé direktivy jako --up umožňují předávání voleb externímu skriptu. 
 V těchto případech se ujistěte, že název skriptu neobsahuje žádné mezery, nebo se konfigurační analyzátor 
 Bude dusit, protože nemůže určit, kde končí název skriptu 
 A začnou volby skriptu. 

V kombinaci se zkrácenou částí na --up

 - nahoru cmd 
 Spusťte příkaz cmd po úspěšném otevření zařízení TUN/TAP (změna UID před uživatelem). 
 cmd sestává z cesty ke skriptu (nebo spustitelnému programu) , volitelně následované 
 argumenty. Cesta a argumenty mohou být uvozovky s jednoduchým nebo dvojitým uvozováním a/nebo 
 Unikající pomocí zpětného lomítka a měly by být odděleny jedním nebo více mezerami.

Příklad:

Na mém počítači s serverem openpvn.conf mám na svém /etc/default/openvpn file:

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

Nat.sh mimochodem nastavuje překlad síťových adres pro směrování provozu v soukromé síti z klientů openvpn na veřejný internet; což je dobré, když nedůvěřujete veřejnému přístupovému bodu WIFI.


Kromě povolení restartu podle očekávání po restartu, když /etc/openvpn/[client or server].conf a /etc/default/openvpn soubory jsou správně nakonfigurovány, openvpn lze spustit nebo zastavit pomocí:

Sudo service openvpn start
Sudo service openvpn stop

Další užitečné možnosti dostupné pro service openvpn zahrnout cond-restart,force-reload,reload, restart,soft-restart, start, status, stop.

5
Keith Reynolds

Protože to je docela staré vlákno, nejsem si jistý, jestli je to stále zajímavé. Pokud chcete i nadále používat NetworkManager pro připojení k VPN, můžete přidat jednoduché pravidlo udev:

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

To by mělo spustit jakýkoli skript po vytvoření VPN.

4
Thomas

K řešení tohoto problému jsem narazil na odpověď ve svém výzkumu a zjistil jsem, že nejlepším řešením je (pomocí serveru openvpn):

Vytvořte skript, který se má spustit:

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

Do konfigurace openvpn přidejte následující řádky (obvykle /etc/openvpn/server.conf). Ve výše uvedené odpovědi byl použit nahoru a dolů, které se používají při spuštění serveru (restartování). Direktiva client-connect (a client-disconnect) se používá, když se klient připojuje (odpojuje).

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>
1
CozC

Zde je konfigurace pro OpenVPN, aby se po úspěšném připojení odeslala pošta:

  1. Vytvořte adresář

    mkdir /mailOpenVPN
    
  2. Zajistěte, aby byl přístupný po celém světě

    chmod 777 /mailOpenVPN
    
  3. vim /etc/openvpn/up.sh

    #! /bin/sh
    python3 /mailOpenVPN/sendMail.py $X509_0_CN $trusted_ip $ifconfig_pool_remote_ip
    
  4. Udělat up.sh spustitelný

    chmod +x /etc/openvpn/up.sh
    
  5. Přidat /etc/openvpn/server.conf

    script-security 2
    client-connect /etc/openvpn/up.sh
    
  6. Restartujte službu OpenVPN

    service openvpn restart
    
  7. vim /mailOpenVPN/sendMail.py

    import sys
    import smtplib
    import datetime
    
    
    smtp_user = "SENDER MAIL"
    smtp_pass = "PASS"
    recipients = "DEST MAIL"
    smtp_server = "smtp.gmail.com" # This is in my case, because sender is gmail
    
    try:
      now = str(datetime.datetime.now())
      subject = "New connection to home VPN"
      msg = "Hello chief,\n\n"
      msg += "New connection detected:\n"
      msg += "User: " + str(sys.argv[1]) + "\n"
      msg += "Public IP: " + str(sys.argv[2]) + "\n"
      msg += "Assigned IP: " + str(sys.argv[3]) + "\n"
      msg += "Timestamp: " + str(now) + "\n\n"
      msg += "Best regards,\n"
      msg += "Your humble Pi"
    
      sender = "OpenVPN Home"
      message = "From: OpenVPN Home\nSubject: {0}\n\n{1}".format(subject, msg)
    
      server = smtplib.SMTP_SSL(smtp_server, 465)
      server.ehlo()
      server.login(smtp_user, smtp_pass)
      server.sendmail(sender, recipients, message)
      server.close()
    except:
      pass
    
1
Eusebiu Rizescu