tun
(para túneles a nivel de IP) y tap
(para túneles a nivel Ethernet). En la práctica, usualmente utilizará interfaces tun
excepto cuando los clientes VPN deban intengrarse a la red local del servidor a través de un puente Ethernet.
openssl
.
$
make-cadir pki-falcot
$
cd pki-falcot
vars
, especialmente aquellos cuyos nombres comienzan con KEY_
; estas variables luego son integradas en el entorno:
$
vim vars
$
grep KEY_ vars
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA` export KEY_DIR="$EASY_RSA/keys" echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR export KEY_SIZE=2048 export KEY_EXPIRE=3650 export KEY_COUNTRY="FR" export KEY_PROVINCE="Loire" export KEY_CITY="Saint-Étienne" export KEY_ORG="Falcot Corp" export KEY_EMAIL="admin@falcot.com" export KEY_OU="Certificate authority" export KEY_NAME="Certificate authority for Falcot Corp" # If you'd like to sign all keys with the same Common Name, uncomment the KEY_CN export below # export KEY_CN="CommonName" $
. ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/roland/pki-falcot/keys $
./clean-all
keys/ca.crt
y keys/ca.key
):
$
./build-ca
Generating a 2048 bit RSA private key ...................................................................+++ ...+++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [FR]: State or Province Name (full name) [Loire]: Locality Name (eg, city) [Saint-Étienne]: Organization Name (eg, company) [Falcot Corp]: Organizational Unit Name (eg, section) [Certificate authority]: Common Name (eg, your name or your server's hostname) [Falcot Corp CA]: Name [Certificate authority for Falcot Corp]: Email Address [admin@falcot.com]:
vpn.falcot.com
; se reutiliza este nombre para los archivos de llaves generados (keys/vpn.falcot.com.crt
para el certificado público, keys/vpn.falcot.com.key
para la llave privada):
$
./build-key-server vpn.falcot.com
Generating a 2048 bit RSA private key .....................................................................................................................+++ ...........+++ writing new private key to 'vpn.falcot.com.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [FR]: State or Province Name (full name) [Loire]: Locality Name (eg, city) [Saint-Étienne]: Organization Name (eg, company) [Falcot Corp]: Organizational Unit Name (eg, section) [Certificate authority]: Common Name (eg, your name or your server's hostname) [vpn.falcot.com]: Name [Certificate authority for Falcot Corp]: Email Address [admin@falcot.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /home/roland/pki-falcot/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'FR' stateOrProvinceName :PRINTABLE:'Loire' localityName :T61STRING:'Saint-\0xFFFFFFC3\0xFFFFFF89tienne' organizationName :PRINTABLE:'Falcot Corp' organizationalUnitName:PRINTABLE:'Certificate authority' commonName :PRINTABLE:'vpn.falcot.com' name :PRINTABLE:'Certificate authority for Falcot Corp' emailAddress :IA5STRING:'admin@falcot.com' Certificate is to be certified until Mar 6 14:54:56 2025 GMT (3650 days) Sign the certificate? [y/n]:
y
1 out of 1 certificate requests certified, commit? [y/n]
y
Write out database with 1 new entries Data Base Updated $
./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time […]
$
./build-key JoeSmith
Generating a 2048 bit RSA private key ................................+++ ..............................................+++ writing new private key to 'JoeSmith.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [FR]: State or Province Name (full name) [Loire]: Locality Name (eg, city) [Saint-Étienne]: Organization Name (eg, company) [Falcot Corp]: Organizational Unit Name (eg, section) [Certificate authority]:
Development unit
Common Name (eg, your name or your server's hostname) [JoeSmith]:
Joe Smith
[…]
key/ca.crt
) será almacenada en todas las máquinas (tanto el servidor como los clientes) como /etc/ssl/certs/Falcot_CA.crt
. Sólo instalará el certificado del servidor en el servidor (key/vpn.falcot.com.crt
en /etc/ssl/vpn.falcot.com.crt
y key/vpn.falcot.com.key
en /etc/ssl/private/vpn.falcot.com.key
con permisos restringidos para que sólo el administrador pueda leerlo), con los parámetros Diffie-Hellman correspondientes (key/dh2048.pem
) instalados en /etc/openvpn/dh2048.pem
. Instale los certificados de clientes en el cliente de VPN correspondiente de forma similar.
/etc/openvpn/*.conf
. Configurar un servidor VPN entonces es cuestión de almacenar el archivo de configuración correspondiente en este directorio. Un buen punto de partida es /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
que lleva a un servidor bastante estándar. Por supuesto necesitará adaptar algunos parámetros: ca
, cert
, key
y dh
describirán las ubicaciones seleccionadas para cada uno (respectivamente: /etc/ssl/certs/Falcot_CA.crt
, /etc/ssl/vpn.falcot.com.crt
, /etc/ssl/private/vpn.falcot.com.key
y /etc/openvpn/dh2048.pem
). La directiva server 10.8.0.0 255.255.255.0
define la subred utilizada por la VPN; el servidor utilizará la primera dirección IP en el rango (10.8.0.1
) y se asignarán a los clientes el resto de las direcciones.
tun0
. Sin embargo, normalmente se configuran los firewalls al mismo tiempo que las interfaces de red reales, lo que ocurre antes que inicie OpenVPN. La creación de una interfaz de red virtual persistente, y configurar OpenVPN para que la utilice, es una buena práctica recomendada. Esto además permite elegir el nombre de esta interfaz. A tal efecto, openvpn -mktun -dev vpn -dev-type tun
crea una interfaz de red virtual llamada vpn
de tipo tun
; puede integrar fácilmente esta orden en el script de configuración del firewall o en la directiva up
del archivo /etc/network/interfaces
. Debe actualizar también el archivo de configuración de OpenVPN de forma acorde, con las directivas dev vpn
y dev-type tun
.
10.8.0.1
. Para permitir a los clientes que accedan la red local (192.168.0.0/24) necesitará agregar una directiva push route 192.168.0.0 255.255.255.0
a la configuración de OpenVPN para que los clientes VPN automáticamente obtengan una ruta de red que les indique que esta red está disponible a través de la VPN. Lo que es más, los equipos en la red local también necesitarán ser informados que la ruta a la VPN es a través del servidor de VPN (esto funciona automáticamente cuando instala el servidor VPN en la puerta de enlace). Otra alternativa es configurar el servidor VPN para realizar enmascaramiento de IPs de forma que las conexiones que provengan de los clientes VPN parezcan provenir del servidor VPN en su lugar (revise la Sección 10.1, “Puerta de enlace”).
/etc/openvpn/
. Puede conseguir una configuración estándar utilizando /usr/share/doc/openvpn/examples/sample-config-files/client.conf
como punto de partida. La directiva remote vpn.falcot.com 1194
describe la dirección y puerto del servidor OpenVPN; también necesita adaptar ca
, cert
y key
para describir la ubicación de los archivos de llave.
AUTOSTART
como none
en el archivo /etc/default/openvpn
. Siempre es posible iniciar o detener una conexión VPN dada con los comandosservice openvpn@nombre start
y service openvpn@nombrestop
(donde la conexión nombre coincide con aquella definida en /etc/openvpn/nombre.conf
).
tun*
) en ambos extremos de una conexión SSH y puede configurar estas interfaces virtuales exactamente como si fueran interfaces físicas. Primero debe activar el sistema de túneles configurando PermitTunnel
como «yes» en el archivo de configuración del servidor SSH (/etc/ssh/sshd_config
). Cuando se establece la conexión SSH debe solicitar explícitamente la creación del túnel con la opción -w any:any
(puede reemplaza any
con el número de dispositivo tun
deseado). Esto necesita que el usuario tenga permisos de administrador en ambos extremos para poder crear el dispositivo de red (en otras palabras, debe establecer la conexión como root).
/etc/ipsec-tools.conf
de cada equipo contiene los parámetros de los túneles IPsec (en términos de IPsec: asociaciones de seguridad, «Security Associations») en los que el equipo está involucrado; el script /etc/init.d/setkey
provee una forma de iniciar y detener el túnel (cada túnel es un enlace seguro a otra máquina conectada a la red privada virtual). Puede construir este archivo a mano desde la documentación que provee la página de manual setkey(8). Sin embargo, escribir los parámetros para todos los equipos en un conjunto de máquinas no trivial se convierte fácilmente en una tarea ardua ya que la cantidad de túneles crece rápidamente. Instalar un demonio IKE (intercambio de llaves IPsec: «IPsec Key Exchange») como racoon, strongswan hace el proceso mucho más simple centralizando la administración y más seguro rotando las claves periódicamente.
/etc/ppp/options.pptp
, /etc/ppp/peers/falcot
, /etc/ppp/ip-up.d/falcot
y /etc/ppp/ip-down.d/falcot
.
Ejemplo 10.2. El archivo /etc/ppp/options.pptp
# opciones PPP utilizadas en una conexión PPTP lock noauth nobsdcomp nodeflate
Ejemplo 10.3. El archivo /etc/ppp/peers/falcot
# vpn.falcot.com es el servidor PPTP pty "pptp vpn.falcot.com --nolaunchpppd" # el usuario «vpn» identificará a la conexión user vpn remotename pptp # necesita cifrado require-mppe-128 file /etc/ppp/options.pptp ipparam falcot
pptpd
es el servidor PPTP para Linux. Necesitará cambiar pocas cosas de su archivo de configuración principal, /etc/pptpd.conf
: localip (dirección IP local) y remoteip (dirección IP remota). En el ejemplo a continuación el servidor PPTP siempre utiliza la dirección 192.168.0.199
y los clientes PPTP reciben una dirección IP desde 192.168.0.200
a 192.168.0.250
.
Ejemplo 10.6. El archivo /etc/pptpd.conf
# ETIQUETA: speed # # Especifica la velocidad a la que se comunica el demonio PPP. # speed 115200 # ETIQUETA: option # # Especifica la ubicación del archivo de opciones PPP # De forma predeterminada, se lo busca en «/etc/ppp/options» # option /etc/ppp/pptpd-options # ETIQUETA: debug # # Activa (más) depuración al registro del sistema # # debug # ETIQUETA: localip # ETIQUETA: remoteip # # Especifica los rangos de direcciones IP local y remoto # # Puede especificar direcciones IP individuales separadas por coma o # rangos o ambos. Por ejemplo: # # 192.168.0.234,192.168.0.245-249,192.168.0.254 # # RESTRICCIONES IMPORTANTES: # # 1. No se permiten espacios entre las comas o en las direcciones. # # 2. Si provee más direcciones IP que MAX_CONNECTIONS, comenzará al # principio de la lista y continuará hasta que obtenga # MAX_CONNECTIONS direcciones IPs. De lo contrario será ignorado. # # 3. ¡Sin atajos en los rangos! Es decir que 234-8 no significa 234 # a 238, para esto debe tipear 234-238. # # 4. Está bien si provee sólo una IP local - se configurarán todas # las IPs locales como la provista. DEBE proveer al menos una IP # remota para cada cliente simultáneo. # #localip 192.168.0.234-238,192.168.0.245 #remoteip 192.168.1.234-238,192.168.1.245 #localip 10.0.1.1 #remoteip 10.0.1.2-100 localip 192.168.0.199 remoteip 192.168.0.200-250
/etc/ppp/pptpd-options
. Los parámetros importantes son el nombre del servidor (pptp
), el nombre del dominio (falcot.com
y la dirección IP para los servidores DNS y WINS.
Ejemplo 10.7. El archivo /etc/ppp/pptpd-options
## activar la depuración de pppd en el registro del sistema #debug ## modifique «servername» a lo que sea que especificó como su nombre de servidor en chap-secrets name pptp ## modifique el nombre del dominio a su dominio local domain falcot.com ## Estos son valores predeterminados razonables para clientes WinXXXX ## para las configuraciones relacionadas con seguridad # El paquete pppd de Debian ahora es compatible tanto con MSCHAP como con MPPE, actívelos aquí. # ¡Necesita tener también el módulo de núcleo para MPPE! auth require-chap require-mschap require-mschap-v2 require-mppe-128 ## Complete con sus direcciones ms-dns 192.168.0.1 ms-wins 192.168.0.1 ## Complete con su máscara de red netmask 255.255.255.0 ## Algunos valores predeterminados nodefaultroute proxyarp lock
vpn
(y su contraseña asociada) en el archivo /etc/ppp/chap-secrets
. A diferencia de otras instancias en las que un asterisco («*
») funcionaría, aquí debe proveer explícitamente el nombre del servidor. Lo que es más, los clientes PPTP Windows se identifican a sí mismo en la forma DOMINIO\\USUARIO
en lugar de sólo proveer un nombre de usuario. Esto explica porqué el archivo también menciona el usuario FALCOT\\vpn
. También es posible especificar una dirección IP individual para los usuarios; un asterisco en este campo especifica que debe utilizar direcciones dinámicas.