{"id":2174,"date":"2019-03-08T09:35:32","date_gmt":"2019-03-08T07:35:32","guid":{"rendered":"http:\/\/blog.sfsoft.it\/?p=2174"},"modified":"2019-03-14T09:59:31","modified_gmt":"2019-03-14T07:59:31","slug":"openvpn-bridged-su-debian-9-stretch-copy","status":"publish","type":"post","link":"http:\/\/www.sfsoft.it\/blog\/2019\/03\/08\/openvpn-bridged-su-debian-9-stretch-copy\/","title":{"rendered":"OpenVPN &#8220;routed&#8221; su Debian 9 &#8220;Stretch&#8221;"},"content":{"rendered":"<p>Adatto l&#8217;articolo <a title=\"OpenVPN \u201cbridged\u201d su Ubuntu Lucid Lynx\" href=\"http:\/\/blog.sfsoft.it\/2014\/05\/14\/openvpn-bridged-su-ubuntu-14-04\/\" target=\"_blank\" rel=\"noopener\">OpenVPN \u201cbridged\u201d su Ubuntu 14.04<\/a> per Debian 9 &#8220;Stretch&#8221;.<\/p>\n<hr \/>\n<p>Una soluzione gratuita e multi-piattaforma \u00e8 <a href=\"http:\/\/openvpn.net\/\" target=\"_blank\" rel=\"noopener\">OpenVPN<\/a>, il sistema \u00e8 molto potente e versatile e di conseguenza \u00e8 anche complesso per certi versi.<\/p>\n<p><strong>Nota<\/strong>: Tutte le operazioni vengono fatte dall&#8217;utente <em>root<\/em>.<\/p>\n<h2>Installazione server<\/h2>\n<p>Innanzitutto installiamo la parte <em>server<\/em>:<\/p>\n<pre class=\"\" lang=\"bash\">apt-get install openvpn easy-rsa<\/pre>\n<p>Prepariamo per generare le chiavi:<\/p>\n<pre class=\"\" lang=\"bash\">make-cadir \/etc\/openvpn\/certs\r\ncd \/etc\/openvpn\/certs\r\nln -s openssl-1.0.0.cnf openssl.cnf\r\n<\/pre>\n<p>Modifichiamo i parametri di default che verranno utilizzati nella generazione delle chiavi, quindi apriamo il file <em>vars<\/em>:<\/p>\n<pre class=\"\" lang=\"bash\">nano \/etc\/openvpn\/certs\/vars<\/pre>\n<p>Impostiamo poi\u00a0 i seguenti valori:<\/p>\n<pre class=\"lang:default decode:true\">export KEY_SIZE=4096\r\n...\r\nexport KEY_COUNTRY=\"IT\"\r\nexport KEY_PROVINCE=\"Roma\"\r\nexport KEY_CITY=\"Roma\"\r\nexport KEY_ORG=\"Societ\u00e0 di esempio\"\r\nexport KEY_EMAIL=\"mario@example.com\"\r\nexport KEY_OU=\"Organizzazione di esempio\"\r\n...\r\nexport KEY_NAME=\"VPNServer\"<\/pre>\n<h2>Creazione certificati server<\/h2>\n<p>Si procede alla generazione dei certificati del <em>server VPN<\/em> ( il comando <em>openssl dhparam<\/em> \u00e8 facile che impieghi molto tempo a seconda delle prestazioni della macchina ):<\/p>\n<pre class=\"lang:default decode:true\">source vars\r\n.\/clean-all\r\n.\/build-ca\r\n.\/build-key-server server\r\nopenssl dhparam 4096 &gt; \/etc\/openvpn\/dh4096.pem\r\nopenvpn --genkey --secret \/etc\/openvpn\/certs\/keys\/ta.key<\/pre>\n<h2>Configurazione server<\/h2>\n<p>Procediamo ora alla configurazione del <em>server<\/em> creando il file <em>server.conf<\/em> partendo dall&#8217;esempio fornito dal pacchetto:<\/p>\n<pre class=\"lang:default decode:true\">gunzip -c \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\/server.conf.gz &gt; \/etc\/openvpn\/server.conf<\/pre>\n<p>In questo caso procederemo alla configurazione detta <em>routed<\/em>, la differenza sostanziale tra una <em>bridged<\/em> e una <em>routed<\/em> \u00e8 che la prima funziona come fosse un <em>hub<\/em> o uno <em>switch<\/em> virtuale ( quindi mette in connessione due reti che hanno visibilit\u00e0 di classe di IP tra loro ) mentre la seconda si occupa di far dialogare due reti con classi diverse e quindi impossibilitate a vedersi.<\/p>\n<p>Esiste poi anche una versione chiamiamola <em>base<\/em> che mette in comunicazione solo i <em>client<\/em> della <em>VPN<\/em> tra loro oppure solo verso il <em>server<\/em>, la configurazione \u00e8 molto pi\u00f9 semplice ma per cosa serve a me \u00e8 troppo limitante quindi la ignoro.<\/p>\n<p>Per le differenze nel dettaglio e i vari pro e contro tra i vari metodi rimando alle <a href=\"http:\/\/openvpn.net\/index.php\/open-source.html\" target=\"_blank\" rel=\"noopener\">documentazioni ufficiali<\/a>.<\/p>\n<p>Prima di avviare il demone andiamo a modificare il file <em>\/etc\/openvpn\/server.conf<\/em>:<\/p>\n<pre class=\"\" lang=\"bash\">port 1194\r\nproto udp\r\ndev tun\r\nca \/etc\/openvpn\/ca.crt\r\ncert \/etc\/openvpn\/server.crt\r\nkey \/etc\/openvpn\/server.key\r\ndh \/etc\/openvpn\/dh4096.pem\r\ntopology subnet\r\npush \"topology subnet\"\r\nserver 192.168.8.0 255.255.255.0\r\nifconfig-pool-persist \/etc\/openvpn\/ipp.txt \r\n;server-bridge 192.168.8.4 255.255.255.0 192.168.8.128 192.168.8.254\r\npush \"route 192.168.1.0 255.255.255.0\"\r\npush \"dhcp-option DNS 192.168.1.1\"\r\npush \"dhcp-option WINS 192.168.1.1\"\r\npush \"dhcp-option DOMAIN mydomain.loc\"\r\nmax-clients 10\r\ntls-auth \/etc\/openvpn\/ta.key 0 \r\nstatus openvpn-status.log\r\n;log openvpn.log\r\nlog-append openvpn.log<\/pre>\n<div>\n<ul type=\"disc\">\n<li><strong>port<\/strong>: \u00e8 la porta di ascolto del <em>server VPN<\/em>, ovviamente questa porta va aperta e reindirizzata dal <em>router<\/em>;<\/li>\n<li><strong>proto<\/strong>: il protocollo da utilizzare, <em>tcp<\/em> o <em>udp<\/em>, ovviamente questo va a interessare anche la regola di <em>forwarding<\/em> dal <em>router<\/em>, in giro consigliano di usare <em>udp<\/em> in quanto \u00e8 pi\u00f9 veloce la trasmissione e poi tanto il controllo dei dati avviene tramite <em>tun\/tap<\/em>;<\/li>\n<li><strong>dev<\/strong>: \u00e8 il metodo di incapsulamento dei dati, <em>tun<\/em> virtualizza il passaggio di pacchetti IP ( tunnel ) mentre <em>tap<\/em> virtualizza per intero come un interfaccia ethernet; di solito si mette <em>tun<\/em> in quanto i dati che transitano sono ridotti, se invece ci sono soluzioni pi\u00f9 complesse ad esempio in cui si richiede un <em>bridge<\/em> di rete ( come nel nostro caso ) occorre usare <em>tap<\/em>;<\/li>\n<li><strong>ca, cert, key, dh, tls-auth<\/strong>: questi devono puntare ai certificati del server creati prima;<\/li>\n<li><strong>topology:<\/strong> di solito si preferisce la tipologia <em>subnet<\/em> su client recenti, su client windows vecchi occorre commentare l&#8217;istruzione per avere tipologia net30 ( vedere la documentazione );<\/li>\n<li><strong>push &#8220;topology &#8230;&#8221;:<\/strong> nel caso di tipologia <em>subnet<\/em> questa istruzione serve principalmente se ci sono client Windows o loro prendono comunque la tipologia net30 e non si collegano;<\/li>\n<li><strong>server<\/strong>: necessaria in caso di <em>VPN routed<\/em>, se si usa un <em>bridge<\/em> di rete come nel nostro caso questa voce va commentata;<\/li>\n<li><strong>server-bridge<\/strong>: qui vanno indicati in ordine l&#8217;IP dell&#8217;interfaccia di <em>bridge<\/em>, la maschera di rete del <em>bridge<\/em>, l&#8217;inizio del <em>range<\/em> di IP da assegnare ai <em>client VPN<\/em>, la fine del range di IP da assegnare ai <em>client VPN<\/em>;<\/li>\n<li><strong>push &#8220;route &#8230;&#8221;<\/strong>: indica ai vari <em>client<\/em> l&#8217;eventuale modifica alla tabella di <em>routing<\/em>;<\/li>\n<li><strong>push &#8220;dhcp-option &#8230;&#8221;<\/strong>: indica ai vari client l&#8217;eventuale aggiunta di parametri <em>DNS\/WINS\/DOMAIN<\/em>;<\/li>\n<li><strong>max-clients<\/strong>: indica il numero massimo di <em>client VPN<\/em> che sono accettati, \u00e8 possibile anche non mettere questo parametri se non si vuole limitare;<\/li>\n<li><strong>ifconfig-pool-persist<\/strong>: serve a far memorizzare su file le varie assegnazioni degli IP in maniera che ogni <em>client<\/em> abbia sempre lo stesso indirizzo;<\/li>\n<li><strong>status:<\/strong> si tratta di un file di log riassuntivo aggiornato ogni minuto dove vengono indicati i client collegati;<\/li>\n<li><strong>log<\/strong> \/ <strong>log-append<\/strong>: normalmente OpenVPN salva i log nel log di sistema, se vogliamo che per maggiore chiarezza venga salvato a parte basta attivare i parametri <em>log<\/em> o <em>log-append<\/em>; la differenza sta che <em>log<\/em> ad ogni sessione azzera il file e riparte pulito, <em>log-append<\/em> invece accoda sempre; se indicato solo il nome del file viene salvato nella dir di configurazione ( <em>\/etc\/openvpn\/<\/em> );<\/li>\n<\/ul>\n<\/div>\n<p>Ora salviamo e facciamo partire il <em>server<\/em>:<\/p>\n<pre class=\"\" lang=\"bash\">service openvpn start<\/pre>\n<p>Se vogliamo vedere i log:<\/p>\n<pre class=\"lang:default decode:true\">tail -f \/etc\/openvpn\/openvpn.log<\/pre>\n<p>E&#8217; necessario abilitare il <em>port-forwarding<\/em>, quindi editiamo i file <em>\/etc\/sysctl.conf<\/em> e impostiamo la riga:<\/p>\n<pre class=\"\" lang=\"bash\">net.ipv4.ip_forward=1<\/pre>\n<p>Forziamo il caricamento delle regole appena modificate:<\/p>\n<pre class=\"\" lang=\"bash\">sysctl -p<\/pre>\n<p>Ricordiamo infine di abilitare il traffico attraverso le nostre interfacce con <em>iptables<\/em>:<\/p>\n<pre class=\"\" lang=\"bash\">iptables -A INPUT -i tap0 -j ACCEPT\r\niptables -A INPUT -i br0 -j ACCEPT\r\niptables -A FORWARD -i br0 -j ACCEPT\r\niptables -t nat -A POSTROUTING -j MASQUERATING<\/pre>\n<p>Ovviamente queste regole del firewall sono molto generiche e molto insicure, ogni soluzione dovr\u00e0 poi adottare le proprie restrizioni per garantire una maggiore sicurezza alla rete.<\/p>\n<h2>Usare un utente specifico per il servizio<\/h2>\n<p>Per migliorare la sicurezza \u00e8 possibile utilizzare un utente dedicato per far girare openvpn.<\/p>\n<p>Si crea un utente dedicato:<\/p>\n<pre class=\"lang:default decode:true\">adduser --system --shell \/usr\/sbin\/nologin --no-create-home openvpn<\/pre>\n<p>Aprire nuovamente <em>\/etc\/openvpn\/server.conf<\/em> e modificare i valori:<\/p>\n<pre class=\"lang:default decode:true\">user openvpn\r\ngroup nogroup<\/pre>\n<h2>Creazione certificati client<\/h2>\n<p>Successivamente occorre creare un certificato per ogni <em>client<\/em> che necessita il collegamento, al posto di <em>hostname<\/em> mettiamo il nome identificativo di ogni <em>client<\/em> in maniera da distinguere poi le chiavi da consegnare ( qui ho preferito usare <em>build-key<\/em> perch\u00e8 \u00e8 in modalit\u00e0 interattiva, quindi per ogni campo della chiave chiede conferma, invece <em>pkitool<\/em> fa tutto in automatico prendendo in valori dal file <em>vars<\/em> ):<\/p>\n<pre class=\"\" lang=\"bash\">cd \/etc\/openvpn\/certs\/\r\nsource vars\r\n.\/build-key name-client-vpn<\/pre>\n<p>Se al certificato per ragioni di sicurezza vogliamo anche associare una password che verr\u00e0 poi richiesta ad ogni connessione occorre dare invece il comando:<\/p>\n<pre class=\"\" lang=\"bash\">.\/build-key-pass nome-client-vpn<\/pre>\n<p>Al <em>client<\/em> occorre poi fornire i seguenti file e possibilmente \u00e8 bene non mandarli per email ma usare un metodo di copia cifrata tipo <em>scp<\/em> o consegnarli a mano su supporto esterno per evitare che vengano intercettati e utilizzati a nostra insaputa:<\/p>\n<div>\n<ul type=\"disc\">\n<li>\/etc\/openvpn\/certs\/keys\/ca.crt<\/li>\n<li>\/etc\/openvpn\/certs\/keys\/nome-client-vpn.crt<\/li>\n<li>\/etc\/openvpn\/certs\/keys\/nome-client-vpn.key<\/li>\n<li>\/etc\/openvpn\/certs\/keys\/ta.key<\/li>\n<\/ul>\n<p>Di questi certificati \u00e8 consigliabile tenerne sempre una copia anche sul <em>server<\/em> in quanto se capitasse la necessit\u00e0 di revocarne uno occorre averlo, in fondo aggiungo le operazioni da eseguire per la revoca.<\/p>\n<p>Verificare poi che la cifratura nel client sia la stessa del server, es. AES-256-CBC<\/p>\n<\/div>\n<h2>Configurazione client Debian<\/h2>\n<p>Installiamo ovviamente il pacchetto <em>openvpn<\/em>:<\/p>\n<pre class=\"\" lang=\"bash\">apt-get install openvpn<\/pre>\n<p>Copiamo le chiavi del client ( <em>ca.crt<\/em>, <em>hostname.crt<\/em>, <em>hostname.key<\/em>, <em>ta.key<\/em> ) nella cartella <em>\/etc\/openvpn<\/em>.<\/p>\n<p>Copiamo il file di configurazione di esempio per modificarlo:<\/p>\n<pre class=\"\" lang=\"bash\">cp \/usr\/share\/doc\/openvpn\/examples\/sample-config-files\/client.conf \/etc\/openvpn<\/pre>\n<p>Editiamolo e impostiamo con i parametri del <em>server<\/em>:<\/p>\n<pre class=\"\" lang=\"bash\">dev tun\r\nproto udp\r\nremote [ip o host del server] 1194\r\nca ca.crt\r\ncert hostname.crt\r\nkey hostname.key\r\ntls-auth ta.key 1<\/pre>\n<p>In questo caso a differenza della configurazione del <em>client<\/em> per <em>Windows<\/em> che vedremo dopo \u00e8 che le direttive <em>push<\/em> del <em>server<\/em> ( esempio per avere la risoluzione <em>DNS<\/em> ) potrebbero non avvenire in automatico, nel caso serve impostarle a mano magari tramite uno script che come recita <a href=\"http:\/\/openvpn.net\/index.php\/open-source\/documentation\/howto.html#dhcp\" target=\"_blank\" rel=\"noopener\">la pagina ufficiale<\/a> analizzi la variabile d&#8217;ambiente <em>foreign_option_*<\/em>:<\/p>\n<blockquote><p><em>Windows clients can accept pushed DHCP options natively, while non-Windows clients can accept them by using a client-side up script which parses the foreign_option_n environmental variable list.<\/em><\/p><\/blockquote>\n<p>Attualmente nessuna delle soluzioni che ho trovato in giro hanno funzionato, l&#8217;unica per avere anche la risoluzione dei <em>DNS<\/em> \u00e8 quella di editare a mano il file <em>\/etc\/resolv.conf<\/em> e aggiungere come prima riga la voce <em>nameserver x.x.x.x<\/em> ( dove per <em>x.x.x.x<\/em> si intende l&#8217;ip del <em>server DNS<\/em> dietro <em>VPN<\/em> ).<\/p>\n<p>Facciamo partire il servizio:<\/p>\n<pre class=\"\" lang=\"bash\">service openvpn restart<\/pre>\n<p>Se vogliamo vedere i log:<\/p>\n<pre class=\"lang:default decode:true\">tail -f \/etc\/openvpn\/openvpn.log<\/pre>\n<h2>Configurazione client Windows<\/h2>\n<p>Il pacchetto che andremo a usare sar\u00e0 quello ufficiale di <em>OpenVPN<\/em> scaricabile dal sito a questo indirizzo:<\/p>\n<p><a href=\"http:\/\/openvpn.net\/index.php\/open-source\/downloads.html\" target=\"_blank\" rel=\"noopener\">http:\/\/openvpn.net\/index.php\/open-source\/downloads.html<\/a><\/p>\n<p>Installiamo il pacchetto che di default si installa in <em>C:\\Programmi\\OpenVPN<\/em><\/p>\n<p>Andiamo in quel percorso e spostiamo nella cartella <em>sample-config<\/em> al cui inteno ci sono i file di configurazione standard, a noi interessa il file <em>client.ovpn<\/em><\/p>\n<p>Copiamo il file nella cartella <em>C:\\Programmi\\OpenVPN\\config<\/em>, volendo se abbiamo una sola configurazione possiamo usare direttamente questa, ma per pulizia io preferisco creare un ulteriore sotto cartella per ogni configurazione che abbiamo, quindi ad esempio creiamo la cartella <em>vpn-prova<\/em> e spostiamoci dentro il file <em>client.ovpn<\/em> ( magari rinominiamolo come la cartella sempre per pulizia, quindi <em>vpn-prova.ovpn<\/em> ) e anche i quattro file dei certificati <em>client<\/em> che abbiamo creato prima ( <em>ca.crt<\/em>, <em>hostname.crt<\/em>, <em>hostname.key<\/em>, <em>ta.key<\/em> ).<\/p>\n<p>Ora apriamo con il <em>notepad<\/em> o qualsiasi editor di testo il file <em>vpn-prova.ovpn<\/em> e andiamo a modificare le seguenti righe con i dati del server come nell&#8217;esempio<\/p>\n<pre class=\"\" lang=\"bash\">client\r\ndev tun\r\nproto udp\r\nremote [ip o host del server] 1194\r\nresolv-retry infinite\r\nnobind\r\npersist-key\r\npersist-tun\r\nca ca.crt\r\ncert hostname.crt\r\nkey hostname.key\r\nremote-cert-tls server\r\ntls-auth ta.key 1\r\ncipher AES-256-CBC\r\n#comp-lzo\r\nverb 3<\/pre>\n<p>A questo punto possiamo salvare e chiudere.<\/p>\n<h2>Utilizzare un IP statico per i vari client<\/h2>\n<p>Creare se manca la cartella ccd:<\/p>\n<pre class=\"lang:default decode:true\">mkdir \/etc\/openvpn\/ccd<\/pre>\n<p>Nel file di configurazione del server decommentare o aggiungere l&#8217;istruzione:<\/p>\n<pre class=\"lang:default decode:true\">client-config-dir ccd<\/pre>\n<p>Creare un file di configurazione con lo stesso nome del client di cui si vuole l&#8217;ip statico:<\/p>\n<pre class=\"lang:default decode:true\">cd \/etc\/openvpn\/ccd\r\nnano client1<\/pre>\n<p>Inserire l&#8217;indirizzo richiesto nel formato:<\/p>\n<pre class=\"lang:default decode:true\">ifconfig-push &lt;IP&gt; &lt;MASK&gt;<\/pre>\n<p>Riavviare il server:<\/p>\n<pre class=\"lang:default decode:true\">service openvpn restart<\/pre>\n<h2>Indicare un range di indirizzi disponibili<\/h2>\n<p>La modalit\u00e0 routed con il parametro <em>server<\/em> utilizza il .1 come IP del server mentre dedica tutti gli altri ai client VPN,nel caso volessimo ridurre questo range per poter utilizzare anche IP statici occorre commentare il parametri server e aggiungere gli altri valori:<\/p>\n<pre class=\"lang:default decode:true wiki\">;server 10.8.0.0 255.255.255.0\r\nmode server\r\ntls-server\r\nifconfig 10.8.0.1 255.255.255.0\r\npush \"route-gateway 10.8.0.1\"\r\nifconfig-pool 10.8.0.2 10.8.0.199\r\ntopology subnet\r\npush \"topology subnet\"\r\nclient-config-dir ccd<\/pre>\n<p>Nel caso di interfaccia <em>tun<\/em> non si mette la <em>netmask<\/em> a <em>ifconfig-pool<\/em>.<\/p>\n<p>Riavviare il server:<\/p>\n<pre class=\"lang:default decode:true\">service openvpn restart<\/pre>\n<h2>Revoca di un certificato<\/h2>\n<p>In caso si volesse revocare un certificato ( magari perch\u00e8 \u00e8 stato rubato o perso ) occorre seguire alcuni semplici punti, occorre per\u00f2 avere copia del certificato da revocare, per quello prima si consigliava di non cancellarli mai dal <em>server<\/em>:<\/p>\n<pre class=\"\" lang=\"bash\">cd \/etc\/openvpn\/certs\/keys\/\r\nsource vars\r\n.\/revoke-full client1<\/pre>\n<p>Dopo un po&#8217; di messaggi uscir\u00e0 un <em>error 23 at 0 depth lookup:certificate revoked<\/em> che sta a indicare che il certificato \u00e8 stato revocato e sar\u00e0 creato un file <em>crl.pem<\/em> con l&#8217;elenco dei certificati revocati.<\/p>\n<p>Questo file va copiato nella cartella con le altre chiavi del <em>server<\/em>:<\/p>\n<pre class=\"\" lang=\"bash\">cp crl.pem \/etc\/openvpn\/<\/pre>\n<p>Controllate nella configurazione del <em>server<\/em> che esista la riga ( altrimenti aggiungetela ):<\/p>\n<pre class=\"\" lang=\"bash\">crl-verify \/etc\/openvpn\/crl.pem<\/pre>\n<p>Riavviare il server:<\/p>\n<pre class=\"\" lang=\"bash\">service openvpn restart<\/pre>\n<h2>Attivare il logrotate sui log custom<\/h2>\n<p>Se abbiamo attivato i log nel percorso custom \/etc\/openvpn\/openvpn.log e se abbiamo utilizzato il metodo append conviene attivare anche il logrotate per non saturare in breve tempo lo spazio specialmente su minidispositivi o serverini virtuali.<\/p>\n<p>Creare il file di configurazione \/etc\/logrotate.d\/openvpn :<\/p>\n<pre class=\"lang:default decode:true\">\/etc\/openvpn\/openvpn.log {\r\n  rotate 7\r\n  weekly\r\n  compress\r\n  missingok\r\n  notifempty\r\n}\r\n<\/pre>\n<p>Per provarlo, forzarne l&#8217;avvio a mano:<\/p>\n<pre class=\"lang:default decode:true\">logrotate -f -v \/etc\/logrotate.d\/openvpn<\/pre>\n<h2>Visualizzare i client collegati<\/h2>\n<p>Per vedere quali utenti sono collegati alla VPN si pu\u00f2 guardare nel file <em>openvpn-status.log<\/em> oppure se si vuole un monitoraggio costante senza aprire e chiudere il file di status si aggiunge l&#8217;istruzione:<\/p>\n<pre class=\"lang:default decode:true\">management localhost 6666<\/pre>\n<p>al file <em>server.conf<\/em> ( o al posto di 6666 una porta qualsiasi ).<\/p>\n<p>Per collegarsi alla console:<\/p>\n<pre class=\"lang:default decode:true\">telnet localhost 6666<\/pre>\n<p>e poi dare il comando:<\/p>\n<pre class=\"lang:default decode:true\">status<\/pre>\n<h2>Eseguire operazioni alla connessione dei client<\/h2>\n<p>Al file <em>server.conf<\/em> aggiungere:<\/p>\n<pre class=\"lang:default decode:true\">script-security 2\r\nclient-connect .\/client-connect.sh\r\nclient-disconnect .\/client-disconnect.sh<\/pre>\n<p>Il parametro <em>script-security 2<\/em> permette a openvpn di eseguire anche gli script, senza quello con il valore di <em>default 1<\/em> pu\u00f2 eseguire solo i binari installati ( tipo <em>ifconfig, ip, route o netsh<\/em> ).<\/p>\n<p>Questo se vogliamo eseguire determinati script alla connessione\/disconnessione dei client, la disconnessione comunque potrebbe avvenire per timeout non effettivamente quando un client si disconnette.<\/p>\n<p>Esempio <em>client-connect.sh<\/em>:<\/p>\n<pre class=\"lang:default decode:true\">#!\/bin\/bash\r\n# This is an openvpn connect script that log users connection\r\n# ${ifconfig_pool_remote_ip} is IP\/Subnet\/MAC\r\n# ${common_name} is certificate's common name\r\n#\r\ntest -f \/var\/log\/openvpn\/conn.log || touch \/var\/log\/openvpn\/conn.log\r\necho \"`date` - connect - CN: ${common_name} has IP: ${ifconfig_pool_remote_ip}\" &gt;&gt; \/var\/log\/openvpn\/conn.log<\/pre>\n<p>Esempio <em>client-disconnect.sh<\/em>:<\/p>\n<pre class=\"lang:default decode:true\">#!\/bin\/bash\r\n# This is an openvpn disconnect script that log user\r\n# ${ifconfig_pool_remote_ip} is IP\/Subnet\/MAC\r\n# ${common_name} is certificate's common name\r\n#\r\ntest -f \/var\/log\/openvpn\/conn.log || touch \/var\/log\/openvpn\/conn.log\r\necho \"`date` - disconnect - CN: ${common_name} from IP ${ifconfig_pool_remote_ip}\" &gt;&gt; \/var\/log\/openvpn\/conn.log<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Adatto l&#8217;articolo OpenVPN \u201cbridged\u201d su Ubuntu 14.04 per Debian 9 &#8220;Stretch&#8221;. Una soluzione gratuita e multi-piattaforma \u00e8 OpenVPN, il sistema \u00e8 molto potente e versatile e di conseguenza \u00e8 anche complesso per certi versi. Nota: Tutte le operazioni vengono fatte dall&#8217;utente root. Installazione server Innanzitutto installiamo la parte server: apt-get install openvpn easy-rsa Prepariamo per [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[166,15,3],"tags":[167,8,7,273,6],"_links":{"self":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/2174"}],"collection":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/comments?post=2174"}],"version-history":[{"count":8,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/2174\/revisions"}],"predecessor-version":[{"id":2180,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/posts\/2174\/revisions\/2180"}],"wp:attachment":[{"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/media?parent=2174"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/categories?post=2174"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.sfsoft.it\/blog\/wp-json\/wp\/v2\/tags?post=2174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}