Inici de sessió d'usuari


Tunels OpenVPN als CPEs amb RouterOS v3


 
Com ja sabeu per aqui fem servir tunels des dels routers dels usuaris fins a un servidor per a accedir a Internet. Fins ara ho feiem amb Linksys amb OpenWRT i tunels OpenVPN amb certificats, com s'explica aqui. De manera que els usuaris accedeixen de forma transparent tant a la xarxa guifi com a Internet.

Fins ara no haviem fet servir gaire els CPEs. La rao principal era que no els necessitavem i que tenia que posar-m'hi per a poder fer que establisin tunels de la mateixa manera que fem amb els Linksys. El RouterOS 2.x nomes suporta tunels PPTP, i despres de bastantes hores esbarellant-me amb el servidor Debian i el PPTPd, els he descartat perque tenia molts problemes d'estabilitat. Aixi que he agafat la RouterOS 3.0rc13 i m'hi he posat.

La implementació de client OpenVPN que porta el RouterOS 3.0 no suporta el sistema de certificats que feiem servir fins ara. Suporta un sistema de certificats mes senzill i també l'autenticació amb usuari i password. Com que els usuaris ja tenen un user/pass per autenticar-se en diferents serveis, i els tenim guardats en una taula de MySQL, he configurat un segon servei OpenVPN que autentiqui mitjançant els valors d'aquesta taula.

 
 
Configuració del servidor

Tot i que no fem servir certificats, el OpenVPN hem demana crear certificats pel servidor. Per crear-los segiu el que es diu aqui. Necessitarem els:

dh1024.pem
openvpn-servidor.key
openvpn-servidor.crt
openvpn-auth.key

 
Els copiem a /etc/openvpn. I creem un openvpn.conf amb:

auth-user-pass-verify /home/joan/scripts/auth-ovpn-sql.pl via-env
client-cert-not-required

port 1194
proto tcp
dev tun

dh /etc/openvpn/dh1024.pem
ca /etc/openvpn/openvpn-ca.crt
cert /etc/openvpn/openvpn-servidor.crt
key /etc/openvpn/openvpn-servidor.key

server 192.168.12.0 255.255.255.0
ifconfig-pool-persist ipp2.txt
push "route 192.168.13.0 255.255.255.0"
client-to-client
keepalive 10 120
#comp-lzo
user nobody
group nogroup
persist-key
persist-tun
verb 3

cipher BF-CBC
auth SHA1
tls-server

 
El OpenVPN autenticara els usuaris mitjançant l'script /home/joan/scripts/auth-ovpn-sql.pl. Aquest path l'heu de canviar pel que correspongui en el vostre sistema. Aquest script es cridat pel servidor OpenVPN posant a les enviromental variables el nom d'usuari i password que li ha passat el client OpenVPN per autenticar-se. L'script ha de verificar si son bones i retornar 0 si ho son i 1 si no ho son. En el meu cas ho tinc en una taula MySQL, el meu script (auth-ovpn-sql.pl) es aquest:

#!/usr/bin/perl

use Mysql;

$host = "localhost";
$database = "nom_db";
$tablename = "nom_taula";
$user = "user_mysql";
$pw = "pass_mysql";

$connect = Mysql->connect($host, $database, $user, $pw);
$connect->selectdb($database);
$myquery = "SELECT * FROM $tablename WHERE user='".$ENV{'username'}."' AND pass='".$ENV{'password'}."'";
$execute = $connect->query($myquery);

# Si troba al menys 1 fila esta autenticat i retorna 0 al OpenVPN
if( $execute->numrows() ) { exit(0); } else { exit(1); }

 
Compte si el feu servir, que no hi he posat cap neteja de les variables i es pot fer Injecció de SQL. Es nomes un exemple, podeu validar contra el que vulgueu.

 
 
Configuració del CPE

Una vegada posat el unsolcic, amb el winbox aneu a Interficies, en el desplegable amb la icona + seleccioneu OVPN Client. En la pestanya Dial Out:

Connect To: [IP del servidor OpenVPN]
Port: 1194
Mode: ip
User: [Nom d'usuari que teniu a la taula MySQL]
Pass: [Pass d'usuari que teniu a la taula MySQL]
Profile: default
Certificate: None
Auth: sha1
Cipher: blowfish 128

Seleccioneu la casella "Add Default Route"

 
Cal afegir un masquerade per a la nova Interficie que heu creat:

/ip firewall nat add action=masquerade chain=srcnat comment="" disabled=no out-interface=ovpn-out1

 
Heu de canviar també la ruta default que crea l'unsolclic. Aquesta ruta s'ha de canviar de manera que no encamini per dins del tunel el transit dirigit a la xarxa guifi. La manera més facil es anar a IP->Routes. Editar la ruta default que te Destination 0.0.0.0/0 i canviar aquest valor per 10.0.0.0/8.

També s'ha de desabilitar l'usuari guest del CPE, perque amb aquest compte es pot veure el user/pass que fa servir el trasto per establir el tunel.

Nomes afegir que ho havia provat de fer fa setmanes (mesos?) amb una Beta del RouterOS, però petava per tot arreu. Ara amb la rc13 es estable.