Skip to content

TMCZ VPN v linuxu bez zadávání hesel

Ne zrovna ideální a nejbezpečnější způsob, ale rozhodně pohodlný 😉

Pro certifikát použijeme jako heslo ID filesystému, na kterém je certifikát uložený (jako parametr postačí libovolný soubor na stejném FS):

Zjištění FSID:

$ stat --file-system --printf=%i\\n MaiksnarM.pfx
0123456789abcdef

Vytvoříme certifikát a klíč z PFX souboru od IT security (jako nové heslo pro klíč zadáme zjištěné FSID):

$ openssl pkcs12 -in MaiksnarM.pfx -out $HOSTNAME-maiksnarm.cert.pem -nokeys
Enter Import Password:
MAC verified OK
$ openssl pkcs12 -in MaiksnarM.pfx -out $HOSTNAME-maiksnarm.key.pem -nocerts    
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Připravíme si TMCZ root CA ve správném formátu (PEM):

openssl x509 -in T-MobileCZRootCA2.crt -inform DER -out T-MobileCZRootCA2.pem -outform PEM

Vytvoříme soubor s konfigurací pro openconnect:

/home/user/cert/openconnect.conf:

certificate=/home/user/.certs/maiksnarm.cert.pem
sslkey=/home/user/.certs/maiksnarm.key.pem
cafile=/home/user/.certs/T-MobileCZRootCA2.pem
cert-expire-warning=30
user=maiksnarm
key-password-from-fsid 

Uložíme si svoje doménové heslo do zašifrovaného souboru (fuj):

echo mojedomenoveheslo | openssl enc -aes-128-cbc -a -salt -pass pass:supertajneheslo > /home/user/.certs/.password
chmod u=rw,go= /home/user/.certs/.password

Todo

Použít password manager.

Vytvoříme si startovací / stopovací skriptík s názvem např. _vpn.sh:

_vpn.sh:

#!/bin/bash
LOG="$HOME/log/openconnect-tmcz-vpn.log"
PID="$HOME/log/openconnect-tmcz-vpn.pid"
function _log
{
    echo -n `date '+%F %T'` >> "$LOG"
    echo " $1" >> "$LOG"
    echo "$1"
}
case $0 in
*disconnect*)
    if [ -f "$PID" ]
    then
        _log "disconnect: PID file found, guessing what to do..."
        P=`cat "$PID"`
        if [ -d "/proc/$P" ]
        then
            _log "disconnect: process with PID $P seems running, killing it. Pew pew.  7^^ °  °  °     (O.o)"
            sudo kill $P
        else
            _log "disconnect: No running processes found... *confused*"
        fi
        _log "disconnect: Clearing ancient PID file."
        sudo rm "$PID"
    else
        _log "disconnect: No PID file found, why did you disturb my meditations?"
    fi
    ;;
*)
    if [ -f "$PID" ]
    then
        _log "PID file found, guessing what to do..."
        P=`cat "$PID"`
        if [ -d "/proc/$P" ]
        then
            _log "Another process seems running, aborting."
            exit 255
        else
            _log "No running processes found, clearing old PID file."
            sudo rm "$PID"
        fi
    fi
    _log "Starting VPN..."
    cat /home/user/.certs/.password | openssl enc -aes-128-cbc -a -d -salt -pass pass:supertajneheslo | sudo openconnect --passwd-on-stdin --background --pid-file="$PID" --config=/home/user/.certs/openconnect.conf https://rzt-vpn-emp.t-mobile.cz >> "$LOG"
    _log "Adjusting routes..."
    sudo ip route delete default dev tun0
    sudo ip route add 10.0.0.0/8 dev tun0
    _log "Done."
esac

Vytvoříme symlink pro odpojení od VPN:

ln -s _vpn.sh _vpn-disconnect.sh

A pokud nemáme, tak si příkazem visudo nastavíme sudo pro spouštění openconnect bez hesla:

$ sudo visudo
~~~~~~~~~~~~~~
user    ALL = (root) NOPASSWD: /usr/sbin/openconnect

Pak už se pouze připojujeme a odpojujeme 😉:

_vpn.sh
_vpn-disconnect.sh