Imaginad la posibilidad de usar una "cadena de proveedores VPN", es decir, establecer una VPN teniendo previamente otra levantada, y así varias veces para ocultar la IP real detrás de varias "capas". O la posibilidad de distribuir tráfico paralelamente durante un escaneo de puertos multiplicando la rapidez y de paso facilitando la evasión de IDS/IPS. Por poner dos claros ejemplos...
Pues nada más fácil, simplemente hay que levantar cada uno de los túneles añadiendo cada ruta con una métrica diferente y pata ello sólo hay que especificarlo en cada fichero de configuración correspondiente del cliente openvpn (.ovpn).
El siguiente script levantará automáticamente tantos túneles VPN como indiquemos:
#!/bin/bash
cp pass.txt ./multivpn
rm ./multivpn/*.ovpn
echo introduce numero de vpns concurrentes
read novpns
# Copia 3 ficheros ovpn adicionales por si algún peer falla
novpns=$((novpns + 3))
currentnovpns=0
while [ $novpns != $currentnovpns ]
do
randomvpn=$(ls *.ovpn | shuf -n 1)
if [ ! -f ./multivpn/$randomvpn ]; then
cp $randomvpn ./multivpn/
echo "Copiado el fichero $randomvpn"
fi
currentnovpns=`ls -1 ./multivpn/*.ovpn 2>/dev/null | wc -l`
done
novpns=$((novpns - 3))
# levanta cada tunel con diferentes metricas
metric="20"
INT=$(ls /sys/class/net/ | grep -E '^eth|^en' | head -1)
GW=$(ip route show 0.0.0.0/0 dev $INT | cut -d\ -f3 | sort -u)
for file in $(ls ./multivpn/*.ovpn)
do
echo "route-metric $metric" >> $file
echo "route-nopull 1" >> $file
echo "route 0.0.0.0 0.0.0.0 vpn_gateway $metric" >> $file
metric=$((metric + 1))
done
cd multivpn
musthavetun=1
tries=1
for file in $(ls *.ovpn)
do
currenttun=$(ifconfig | grep tun | awk '{print $1}' | wc -l)
echo -en "\nNúmero de túneles levantados: $currenttun\n"
nohup openvpn $file 2>/dev/null &
echo "Levantando interfaz de túnel"
while [[ $currenttun -lt $musthavetun ]]
do
echo -en "."
tries=$((tries + 1))
sleep 1
currenttun=$(ifconfig | grep tun | awk '{print $1}' | wc -l)
if [ "$tries" = 30 ]
then
break
fi
done
route del default gw $GW $INT 2>/dev/null
route add default gw $GW $INT 2>/dev/null
sleep 3
if [ "$currenttun" = "$novpns" ]
then
break
else
musthavetun=$((musthavetun + 1))
echo "ok!"
fi
done
echo -e " todos los túneles levantados."
Sólo tenéis que copiarlo (multivpn.sh) al directorio donde tengáis los .ovpn (con 4nonimizer en '/opt/4nonimizer/vpn/proveedor') y copiará aleatoriamente algunos de estos ficheros al subdirectorio 'multivpn' para ejecutarlos después con el cliente openvpn y establecer los túneles uno tras otro:
# bash multivpn.sh introduce numero de vpns concurrentes 4 Copiado el fichero VpnProvider.Singapore-Singapore-NO-TORRENTS-TCP.ovpn Copiado el fichero
VpnProvider
.Denmark-Lyngby-TCP.ovpn Copiado el fichero
VpnProvider
.USA-NewJersey-NO-TORRENTS-TCP.ovpn Copiado el fichero
VpnProvider
.Turkey-Istanbul-UDP.ovpn Copiado el fichero
VpnProvider
.Latvia-Riga-NO-TORRENTS-UDP.ovpn Copiado el fichero
VpnProvider
.Singapore-Singapore-NO-TORRENTS-UDP.ovpn Copiado el fichero
VpnProvider
.Tunisia-Tunis-UDP.ovpn Número de túneles levantados: 0 Levantando interfaz de túnel ....ok! Número de túneles levantados: 1 Levantando interfaz de túnel ....ok! Número de túneles levantados: 2 Levantando interfaz de túnel .......ok! Número de túneles levantados: 3 Levantando interfaz de túnel .... todos los túneles levantados.
Después de su ejecución podéis comprobar que los interfaces de túnel (tun0, tun1, tun2, etc.) han sido creados:
# ifconfig
eth0 Link encap:Ethernet HWaddr 50:7a:6d:f5:1a:12
inet addr:192.168.1.180 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:322235 errors:0 dropped:0 overruns:0 frame:0
TX packets:215243 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:149725996 (149.7 MB) TX bytes:17969308 (17.9 MB)
Interrupt:16 Memory:e1300000-e1320000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:1527 errors:0 dropped:0 overruns:0 frame:0
TX packets:1527 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:9467111 (9.4 MB) TX bytes:9467111 (9.4 MB)
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.10 P-t-P:10.8.0.9 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:48000 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
tun1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.9.0.42 P-t-P:10.9.0.41 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:48000 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
tun2 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.6 P-t-P:10.8.0.5 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:48000 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
tun3 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.9.0.14 P-t-P:10.9.0.13 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:48000 Metric:1
RX packets:13 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1312 (1.3 KB) TX bytes:0 (0.0 B)
Y que las rutas han sido creadas con las métricas establecidas:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 10.8.0.9 0.0.0.0 UG 20 0 0 tun0
0.0.0.0 10.9.0.41 0.0.0.0 UG 21 0 0 tun1
0.0.0.0 10.8.0.5 0.0.0.0 UG 22 0 0 tun2
0.0.0.0 10.9.0.13 0.0.0.0 UG 23 0 0 tun3
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun2
10.8.0.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
10.9.0.13 0.0.0.0 255.255.255.255 UH 0 0 0 tun3
10.9.0.41 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
A partir de ahí lo que dictamine vuestra imaginación... por ejemplo, lanzar varios escaneos en paralelo con nmap simplemente especificando cada vez un interfaz distinto dentro de un loop:
nmap -sT -Pn -p$port_range -oX salida.xml $network -e tun$iface_number &
De esta manera podremos jugar como queramos como escanear cada rango de puertos de un mismo host desde ubicaciones geográficas diferentes, tal y como se muestra en la siguiente imagen (bmon) con 15 túneles simultáneamente:
¿Interesante verdad? Pues atentos porque pronto actualizaran 4nonimizer con ésta y otras interesantes opciones :)