Crypto IP Encapsulation (CIPE)
CIPE es una
implementación de VPN desarrollada principalmente para Linux. CIPE
utiliza paquetes IP encriptados que son encapsulados, o «wrapped», en
paquetes (UDP) de datagramas. A los paquetes CIPE se les da un
encabezado con la información de destino y son encriptados usando un
mecanismo de encriptación de CIPE. Los paquetes son luegos transferidos
sobre IP como paquetes UDP a través del dispositivo de red virtual de
CIPE (cipcbx) sobre una red portadora hasta el nodo remoto destino. La figura muestra una configuración CIPE típica conectando dos redes basadas en Linux:
Este diagrama muestra una red ejecutando CIPE en un cortafuegos
(firewall) y una máquina cliente remota actuando como el nodo CIPE. La
conexión CIPE actúa como un túnel a través del cual todos los datos
relacionados a la Intranet son enrutados entre los nodos remotos. Todos
los datos son encriptados usando llaves de 128-bits generadas
dinámicamente y pueden ser comprimidas para las transferencias de
grandes archivos o para enviar por un túnel las aplicaciones X hasta un
host remoto. CIPE puede ser configurado para establecer comunicación
entre dos o más máquinas Linux con CIPE y tiene los controladores de red
para sistemas operativos basados en Win32.
Ventajas de utilizar CIPE
Hay numerosas razones
por las cuales utilizar CIPE es una decisión inteligente para los
administradores de sistemas y seguridad:
- Red Hat Enterprise Linux se entrega con CIPE, por lo tanto está disponible para todas las máquinas Red Hat Enterprise Linux en las puntas (por ejemplo, cortafuegos o puertas de enlace) que desee conectar a su Intranet. Red Hat Enterprise Linux también incluye código encriptado soportado por CIPE en su distribución general.
- CIPE soporta la encriptación usando cualquiera de los algoritmos estándar de encriptación Blowfish o IDEA. Dependiendo de las regulaciones para exportar encriptación en su país, puede utilizar Blowfish (por defecto) para encriptar todo el tráfico CIPE en su Intranet.
- Debido a que CIPE está basado en software, cualquier máquina vieja o redundante que pueda ejecutar Red Hat Enterprise Linux se puede convertir en una puerta de enlace CIPE, ahorrando que la organización tenga que comprar hardware dedicado VPN para conectar dos LAN de forma segura.
- CIPE está desarrollado activamente para funcionar en conjunto con iptables, ipchains y otros cortafuegos basados en reglas. Todo lo que se necesita es aceptación en par de los paquetes UDP CIPE entrantes para coexistir con las reglas del cortafuegos existentes.
La configuración
de CIPE se lleva a cabo a través de archivos de texto, lo que permite
que los administradores puedan configurar sus servidores y clientes CIPE
remotamente sin la necesidad de utilizar herramientas gráficas pesadas
que funcionarían pobremente a través de la red. CIPE también se puede
configurar a través de la Herramienta de administración de redes.
Instalación de CIPE
La instalación de CIPE es el equivalente a instalar una interfaz de red bajo Linux. El paquete RPM de cipe contiene los archivos de configuración encontrados en /etc/cipe/, el demonio CIPE (/usr/sbin/ciped-cb), los scripts de la red que cargan el módulo del kernel y activan/desactivan la interfaz CIPE (if*-cipcb) y archivos de configuración de ejemplo encontrados en /usr/share/doc/cipe-<version>/samples/.
También está disponible una página con información detallada explicando
el protocolo CIPE y varios detalles de la implementación.
La
siguiente guía detalla una configuración de muestra que envuelve una
estación de trabajo cliente que desea conectarse de forma segura a una
LAN remota con una puerta de enlace CIPE.
La estación de trabajo usa
direcciones IP dinámicas desde una conexión modem cable, mientras que la
máquina puerta de enlace con CIPE emplea el rango 192.168.1.0/24. Esto es
lo que se conoce como una configuración CIPE «típica». La Figura 6-1 ilustra la configuración CIPE típica.
La
instalación de CIPE entre el cliente y el servidor CIPE permite una
conexión punto a punto usando la Internet como el medio de transmisión
del tráfico WAN.
La estación de trabajo del cliente luego transfiere un
archivo a través de la Internet al cortafuego CIPE, donde cada paquete
será marcado con la hora, encriptado y se le dará la dirección del
cortafuego del receptor CIPE. El cortafuego de destino en su turno lee
la información de la cabezera, la remueve y la envía al enrutador de la
LAN remota para que sea luego enrutado al nodo destino. Este proceso es
completamente transparente al usuario final. La mayoría de la
transacción se lleva a cabo entre los pares CIPE.
Configuración del servidor CIPE
Para configurar un servidor CIPE, instale el paquete RPM de cipe desde el CD-ROM de Red Hat Enterprise Linux o a través de Red Hat Network.
Importante | |
---|---|
Si está utilizando una versión vieja de Red Hat Enterprise Linux y/o tiene una versión vieja de CIPE, debería actualizarla a la versión más reciente. |
El próximo paso es copiar los archivos de configuración de ejemplo desde /usr/share/doc/cipe-version/samples/ (donde version es la versión de CIPE instalada en su sistema) a /etc/cipe/. Una vez copiados, necesitará modificar el archivo /etc/cipe/options.cipcbx (x es incremental comenzando desde 0,
para aquellos que desean tener más de una conexión CIPE en el servidor
CIPE) para incluir sus direcciones de subred de la LAN y las
direcciones IP enrutables públicamente del cortafuego. A continuación se
muestra el archivo de ejemplo options incluido con el RPM de cipe en Red Hat Enterprise Linux el cual, para este ejemplo, ha sido renombrado a options.cipbcb0:
# Surprise, this file allows comments (but only on a line by themselves)
# This is probably the minimal set of options that has to be set
# Without a "device" line, the device is picked dynamically
# the peer's IP address
ptpaddr 6.5.4.3
# our CIPE device's IP address
ipaddr 6.7.8.9
# my UDP address. Note: if you set port 0 here, the system will pick
# one and tell it to you via the ip-up script. Same holds for IP 0.0.0.0.
me bigred.inka.de:6789
# ...and the UDP address we connect to. Of course no wildcards here.
peer blackforest.inka.de:6543
# The static key. Keep this file secret!
# The key is 128 bits in hexadecimal notation.
key xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
La salida ptpaddr es la dirección remota de la LAN CIPE. ipaddr es la dirección IP CIPE de la estación de trabajo. La dirección me es la dirección IP pública enrutable del cliente que envía los paquetes UDP sobre la Internet, mientras que peer
es la dirección IP pública enrutable del servidor CIPE. Observe que la
dirección IP de la estación de trabajo cliente es 0.0.0.0 porque utiliza
una conexión dinámica. El cliente CIPE manejará la conexión al servidor
CIPE. El campo key (representado por x's; debería ser secreto) es la llave estática compartida. Esta llave debe ser la misma para ambos pares o de lo contrario la conexión no será posible. Consulte la Sección 6.8 para más información sobre cómo generar una llave estática compartida para sus máquinas CIPE.
A continuación se muestra el archivo modificado /etc/cipe/options.cipcb0 que usará la estación cliente:
ptpaddr 10.0.1.2
ipaddr 10.0.1.1
me 0.0.0.0
peer LAN.EXAMPLE.COM:6969
key 123456ourlittlesecret7890shhhh
|
Este es el archivo /etc/cipe/options.cipcb0 para el servidor CIPE:
ptpaddr 10.0.1.1
ipaddr 10.0.1.2
me LAN.EXAMPLE.COM:6969
peer 0.0.0.0
key 123456ourlittlesecret7890shhhh
|
Configuración de clientes para CIPE
Después de configurar y probar exitosamente el servidor CIPE, puede desarrollar la conexión en la máquina cliente.
Los
clientes CIPE deberían poder conectarse y desconectarse de la conexión
CIPE de una forma automática. Además, CIPE contiene mecanismos
incorporados para personalizar las configuraciones para usos
individuales. Por ejemplo, un empleado remoto puede conectarse al
dispositivo CIPE en la LAN escribiendo lo siguiente:
/sbin/ifup cipcb0
|
El
dispositivo debería mostrarse automáticamente, las reglas del
cortafuego y la información del enrutador también deberían configurarse
con la conexión. El empleado remoto debería poder terminar la conexión
con lo siguiente:
/sbin/ifdown cipcb0
|
La
configuración de clientes requiere la creación de scripts localizados
que son ejecutados después que el dispositivo es cargado. La
configuración del dispositivo mismo puede ser realizado localmente a
través de un archivo creado por el usuario llamado /etc/sysconfig/network-scripts/ifcfg-cipcb0.
Este archivo contiene parámetros que determinan si la conexión CIPE
ocurre en tiempo de arranque, cuál es el nombre del dispositivo CIPE,
entre otras cosas. Lo siguiente es el archivo ifcfg-cipcb0 para un cliente remoto conectándose a un servidor CIPE:
DEVICE=cipcb0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
# This is the device for which we add a host route to our CIPE peer through.
# You may hard code this, but if left blank, we will try to guess from
# the routing table in the /etc/cipe/ip-up.local file.
PEERROUTEDEV=
# We need to use internal DNS when connected via cipe.
DNS=192.168.1.254
|
El dispositivo CIPE es llamado cipcb0. El dispositivo CIPE es activado en el momento del arranque (configurado a través del campo ONBOOT) y no utilizará un protocolo de arranque (por ejemplo, DHCP) para recibir una dirección IP para el dispositivo. El campo PEERROUTEDEV
determina el nombre del dispositivo servidor CIPE que se conecta al
cliente. Si no se especifica un dispositivo en este campo, se
determinará alguno luego que el dispositivo haya sido cargado.
Si
las redes internas están detrás de un cortafuegos, necesita especificar
reglas que permitan a la interfaz CIPE en la máquina cliente, enviar y
recibir paquetes UDP. Consulte el Capítulo 7 para más información sobre la configuración de un cortafuegos. Para esta configuración de ejemplo, se implementan las reglas iptables.
Nota | |
---|---|
Los clientes se deben configurar de forma tal que los parámetros localizados sean colocados en un archivo creado por el usuario llamado /etc/cipe/ip-up.local. Los parámetros locales deberían ser revertidos cuando la sesión CIPE sea apagada usando /etc/cipe/ip-down.local. |
Las
cortafuegos se deberían configurar en las máquinas clientes para
aceptar paquetes UDP CIPE encapsulados. Las reglas pueden variar
ampliamente, pero básicamente se requiere la aceptación de paquetes UDP
para poder establecer la conectividad CIPE. Las siguientes reglas iptables
permiten transmisiones CIPE UDP en la máquina remota cliente
conectándose a la LAN; las reglas finales incorporan enmascaramiento de
IP para permitir al cliente remoto comunicarse a la LAN y a la Internet.
/sbin/modprobe iptables
/sbin/service iptables stop
/sbin/iptables -P INPUT DROP
/sbin/iptables -F INPUT
/sbin/iptables -A INPUT -j ACCEPT -p udp -s 10.0.1.1
/sbin/iptables -A INPUT -j ACCEPT -i cipcb0
/sbin/iptables -A INPUT -j ACCEPT -i lo
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
|
Añada
reglas a la máquina cliente para acceder a los nodos detrás de la
conexión CIPE como que si estos estuviesen en la red local. Esto se
puede hacer ejecutando el comando route. Para nuestro ejemplo, la estación de trabajo del cliente necesitará la siguiente ruta de red:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.0.1.2
|
A continuación se muestra el script final /etc/cipe/ip-up.local para la estación de trabajo cliente:
#!/bin/bash -v
if [ -f /etc/sysconfig/network-scripts/ifcfg-$1 ] ; then
. /etc/sysconfig/network-scripts/ifcfg-$1
else
cat <<EOT | logger
Cannot find config file ifcfg-$1. Exiting.
EOF
exit 1
fi
if [ -n ${PEERROUTEDEV} ]; then
cat <<EOT | logger
Cannot find a default route to send cipe packets through!
Punting and hoping for the best.
EOT
# Use routing table to determine peer gateway
export PEERROUTEDEV=`/sbin/route -n | grep ^0.0.0.0 | head -n 1 \
| awk '{ print $NF }'`
fi
####################################################
# Add The routes for the remote local area network #
####################################################
route add -host 10.0.1.2 dev $PEERROUTEDEV
route add -net 192.168.1.0 netmask 255.255.255.0 dev $1
####################################################
# IP TABLES Rules to restrict traffic #
####################################################
/sbin/modprobe iptables
/sbin/service iptables stop
/sbin/iptables -P INPUT DROP
/sbin/iptables -F INPUT
/sbin/iptables -A INPUT -j ACCEPT -p udp -s 10.0.1.2
/sbin/iptables -A INPUT -j ACCEPT -i $1
/sbin/iptables -A INPUT -j ACCEPT -i lo
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
|
Personalización de CIPE
CIPE se puede configurar de diversas formas, desde pasando parámetros como argumentos de la línea de comandos cuando se arranca ciped,
hasta generando un nuevo conjunto de llaves compartidas estáticas. Esto
permite a un administrador de seguridad la flexibilidad de personalizar
las sesiones CIPE para garantizar la seguridad así como también
incrementar la productividad.
Nota | |
---|---|
Los parámetros más comunes se deberían colocar en el archivo /etc/cipe/options.cipcbx para que se carguen automáticamente en el momento de ejecución. Tenga en cuenta que cualquier parámetro pasado en la línea de comandos como opciones ignora a los respectivos parámetros en el archivo de configuración /etc/cipe/ options.cipcbx. |
La Tabla 6-1 detalla algunos de los parámetros de línea de comandos cuando se ejecuta el demonio ciped.
Parámetros | Descripción |
---|---|
arg | Pasa argumentos al script de inicialización /etc/cipe/ip-up |
cttl | Configura el valor del Tiempo de vida del transportador (Carrier Time To Live, TTL), el valor recomendado es 64 |
debug | Valor boleano para activar la depuración |
device | Nombra el dispositivo CIPE |
ipaddr | Dirección IP enrutable públicamente de la máquina CIPE |
ipdown | Selecciona un script alternativo ip-down al script por defecto /etc/cipe/ip-down |
ipup | Selecciona un script ip-up alterno al script por defecto /etc/cipe/ip-up |
key | Especifica una llave estática compartida para la conexión CIPE |
maxerr | Número de errores permitidos antes de que el demonio CIPE abandone |
me | Dirección UDP de la máquina CIPE |
mtu | Configura la unidad máxima de transferencia del dispositivo |
nokey | No utilice encriptación |
peer | La dirección UDP CIPE par |
ping | Configura el intervalo ping keepalive específico de CIPE (no ICMP) |
socks | Dirección IP y número de puerto del servidor SOCKS para las conexiones proxy |
tokey | Configura el tiempo de vida de la llave dinámicamente; por defecto es 10 minutos (600 segundos) |
tokxc | Valor del tiempo de espera (timeout) para el intercambio de llaves, por defecto son 10 segundos |
tokxts | Valor del tiempo de espera para el intercambio de marcas de hora de las llaves compartidas; por defecto es 0 (ninguna marca de hora) |
toping | Valor del tiempo de espera para los pings de keepalive; por defecto es 0 |
Administración de llaves CIPE
Como se mencionó anteriormente, CIPE incorpora una combinación segura de llaves enlazadas estáticas y encriptación de tráfico para crear un túnel seguro sobre redes transportadoras tales como Internet. El uso de llaves enlazadas estáticas proporciona un punto común de referencia para dos redes CIPE a pasar información de forma segura. Por lo tanto, es imperativo que ambas puertas de enlace de las redes CIPE compartan exáctamente la misma llave, o de lo contrario la comunicación CIPE no será posible.Para generar llaves CIPE se requiere conocer que tipo de llaves son compatibles. Los generadores alfanuméricos aleatorios no funcionan. Las llaves estáticas deben ser cadenas de caracteres de 32, de 128 bits. Esto se puede crear ejecutando el comando siguiente, el cual utiliza od para crear una llave hexadecimal usando el dispositivo de números aleatorio /dev/random.
od -N 16 /dev/random -t x4 | awk '{print $2 $3 $4 $5}'
|
Coloque la salida en el archivo /etc/cipe/options.cipcb0 para todos los servidores y clientes CIPE.
Fuente : http://web.mit.edu/rhel-doc/3/rhel-sg-es-3/s1-vpn-cipe.html