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