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 NOTA: Si ejecuta ./clean-all, realizaré un rm -rf en $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" # Si desea firmar todas las claves con el mismo Nombre Común, descomente el siguiente exportación de KEY_CN # 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
Generando una clave privada RSA de 2048 bits ..............................................++++++ .......................++++++ escribiendo una nueva clave privada en 'ca.key' ----- Se le va a solicitar que introduzca la información que se incorporará en su solicitud de certificado. Lo que va a intrducir es lo que se denomina Distinguished Name o DN. Hay bastantes camos, pero puede dejar algunos en blanco Algunos campos tendrán un valor por defecto, Si introduce un '.', el campo se dejará en blanco. ----- Country Name (código de 2 letras) [FR]: State or Province Name (nombre completo) [Loire]: Locality Name (p.e., ciudad) [Saint-Étienne]: Organization Name (p.e., compañia) [Falcot Corp]: Organizational Unit Name (p.e., sección) [Certificate authority]: Common Name (p.e., su nombre o el del servidor) [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
Generando clave privada RSA de 2048 bits .....................................................................................................................+++ ...........+++ escribiendo nueva clave privada en 'vpn.falcot.com.key' ----- Se le va a solicitar que introduzca la información que se incorporará en su solicitud de certificado. Lo que va a introducir se denomina Distinguished Name o DN. Hay bastantes campos, pero puede dejar algunos en blanco Algunos campos tendrán un valor por defecto, si introduce ',', el campo se quedará en blanco. ----- Country Name (Código de 2 letras) [ES]: State or Province Name (nombre completo) [Loire]: Locality Name (p.e., ciudad) [Saint-Étienne]: Organization Name (p.e., empresa) [Falcot Corp]: Organizational Unit Name (p.e., sección) [Certificate authority]: Common Name (p.e., su nombre o el del servidor) [vpn.falcot.com]: Name [Certificate authority for Falcot Corp]: Email Address [admin@falcot.com]: Por favor, introduzca los siguientes atributos 'extra para enviarlos junto con su solicitud de certificado Un contraseña de desafío []: Un nombre de empresa opcional []: Usando la configuración de /home/roland/pki-falcot/openssl-1.0.0.cnf Confirme que la solicitud coincide con la firma Firma OK El asunto del Distinguished Name es como sigue countryName :PRINTABLE:'ES' 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' El certificado será válido hasta el 6 Mar 1015 14:54:56 GMT (3650 days) ¿Firmar el certificado? [y/n]:
y
Certificada 1 de 1 solicitud de certificado, ¿confirmar? [y/n]
y
Actualizada base de datos con una nueva entrada Base de datos actualizada $
./build-dh
Generando parámetros DH, número primo seguro de 2048 bits de longitud, generador 2 Este proceso va a tardar un tiempo […]
$
./build-key JoeSmith
Generando una clave privada RSA de 2048 bit ................................+++ ..............................................+++ escribiendo nueva clave privada para 'JoeSmith.key' ----- Se te preguntará sobre información a introducir que será introducido en tu petición de certificado Lo que vas a introducir se llama Nombre Distinguido o un DN. Hay algunos campos que puedes dejar en blanco Para algunos campos habrá un valor por defecto sí introduces '.' el campo se quedará en blanco. ----- Nombre del País (código de dos letras) [FR]: Nombre del Estado o Provincia (nombre completo) [Loire]: Nombre de la Localidad (ej, ciudad) [Saint-Étienne]: Nombre de la Organización (ej, compañía) [Falcot Corp]: Nombre de la Unidad Organizativa (ej, sección) [Certificado de autoridad]:
Development unit
Nombre Común (ej, tu nombre o tu servidor host) [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.