Resumen
Documento explicativo sobre como configurar una red privada virtual entre una red empresarial, cuyo punto de salida hacia Internet es una máquina con GNU/Linux, y un sistema MS Windows XP (bien sea un ordenador portátil o un PC).
Tabla de contenidos
A lo largo del presente documento explicaré la forma de configurar una máquina GNU/Linux para que actue como gateway de una empresa y permita la conexión de un cliente MS Windows XP (este puede ser un portátil o un PC) mediante una red privada virtual (VPN) a la red empresarial.
El esquema de red se muestra en la siguiente imagen[1]:
La tecnología elegida para la configuración de la red privada virtual es IPSec. La implementación elegida para dar soporte IPSec en GNU/Linux ha sido FreeS/WAN y los Parches X.509 para permitir una autentifiación segura. En MS Windows XP se utilizará la implementación IPSec del propio sistema operativo y la herramienta VPN de Marcus Müller.
Nota | |
---|---|
Para la realización de este documento se ha tomado como guia principal la entrada bibliográfica: “NateCarlson1” |
Para poner en funcionamiento nuestra red privada virtual, necesitamos el siguiente software:
Los Parches X.509 para FreeS/WAN
Parches de encriptación para añadir múltiples algoritmos de encriptación (opcional).
La herramienta VPN de Marcus Müller para Windows 2000/XP.
Los parches X.509 son necesarios para permitir a FreeS/WAN trabajar con un cliente Windows 2000/XP nativo.
Antes de instalar el paquete FreeS/WAN, es necesario aplicar los parches X.509 al código fuente de FreeS/WAN. La forma de hacerlo se puede obtener de los propios paquetes de X.509 o de la entrada bibliográfica: AndreasSteffen1 (Puntos 1 a 4 de la 'Section 3: Installation').
De todas formas, en las siguientes secciones veremos la forma de instalar el software necesario a partir del código fuente de las apliaciones:
Nota | |
---|---|
Para el proceso de instalación de FreeS/WAN y de la aplicación de los Parches X.509 se han tomado como guias las entradas bibliográficas: DocFreeS/WAN y AndreasSteffen1, respectivamente. |
Baje el código fuente de la página principal de FreeS/WAN y de los Parches X.509.
Una vez tenemos el software almacenado en nuestro ordenador, verificamos la procedencia del mismo y si se ha bajado correctamente, para ello es necesario obtener las claves públicas de los respectivos mantenedores de los paquetes. El archivo que contiene la clave pública de FreeS/WAN se denomina freeswan-sigkey.asc y el de los Parches X.509 andreas_steffen.asc.
Importamos dichas claves a nuestro anillo de claves:
$ gpg --import freeswan-sigkey.asc gpg: clave 46EAFCE1: clave pública "Linux FreeS/WAN Software Team <build@freeswan.org>" importada gpg: Cantidad total procesada: 1 gpg: importadas: 1 (RSA: 1) $ gpg --import andreas_steffen.asc gpg: clave 40995359: clave pública "Andreas Steffen <andreas.steffen@strongsec.net>" importada gpg: Cantidad total procesada: 1 gpg: importadas: 1 (RSA: 1) |
Antes de verificar la firma, comprobamos que el md5 está correcto:
$ md5sum -cv freeswan-2.04.tar.gz.md5 freeswan-2.04.tar.gz Correcto $ md5sum -cv x509-1.4.8-freeswan-2.04.tar.gz.md5 x509-1.4.8-freeswan-2.04.tar.gz Correcto |
Verificamos la firma del código fuente:
$ gpg --verify freeswan-2.04.k2.4.patch.gz.sig freeswan-2.04.k2.4.patch.gz gpg: Firma creada el mar 11 nov 2003 21:40:35 WET usando clave RSA ID 46EAFCE1 gpg: Firma correcta de "Linux FreeS/WAN Software Team <build@freeswan.org>" $ gpg --verify x509-1.4.8-freeswan-2.04.tar.gz.sign x509-1.4.8-freeswan-2.04.tar.gz gpg: Firma creada el vie 14 nov 2003 21:40:35 WET usando clave RSA ID 40995359 gpg: Firma correcta de "Andreas Steffen <andreas.steffen@strongsec.net>" |
Descomprimimos y desempaquetamos el software en el lugar elegido, por ejemplo en /usr/src:
$ tar xzvf freeswan-2.04.tar.gz -C /usr/src $ tar xzvf x509-1.4.8-freeswan-2.04.tar.gz -C /usr/src |
Aplicamos los parches X.509 a FreeS/WAN:
$ cd /usr/src/freeswan-2.04/ $ cat ../x509-1.4.8-freeswan-2.04/freeswan.diff |patch -p1 |
En estos momentos, si todo ha ido bien, ya estamos en disposición de compilar e instalar el software.
La forma elegida para añadir el soporte IPSec al núcleo Linux, es parcheando las fuentes de Linux y compilando un nuevo núcleo. Para ello, supondremos que las fuentes de Linux están en el directorio /usr/src/linux.
Antes de aplicar el parche FreeS/WAN, ha de configurar y compilar el nuevo núcleo. Una vez que ha finalizado, acceda al código fuente de FreeS/WAN y teclee:
$ cd /usr/src/freeswan-2.04/ $ make menugo # make minstall |
Al finalizar el proceso dispondremos tanto de las herramientas de espacio de usuario de FreeS/WAN como de los módulos necesarios para dar soporte IPSec al núcleo Linux. Ahora sólo le queda instalar el nuevo núcleo y reiniciar el sistema.
Nota | ||
---|---|---|
La distribución Debian GNU/Linux ya provee las herramientas de espacio de usuario empaquetadas (con los Parches X.509 aplicados). Por lo que bastaría con ejecutar el siguiente comando para tenerlas completamente operativas:
Debian también provee un parche para el núcleo debidamente preparado y parcheado, si quiere hacer uso del mismo, pruebe a instalar el paquete kernel-patch-freeswan |
Una de las partes más importantes de la configuración, es la creación de una entidad certificadora[2]. Para ello es necesario instalar OpenSSL[3] y una vez instalado, hacer nuestro certificado de autoridad. La forma de hacerlo se detalla en los siguientes pasos[4]:
Edite el archivo /etc/ssl/openssl.cnf y cambie la opción 'default_bits' de 1024 a 2048 y la opción 'default_days' a 365 (o similar)[5].
Creamos un directorio para almacenar el nuevo certificado (algo similar a /var/tmp/sslca) y le cambiamos los permisos a 700, para impedir que los usuarios tengan acceso al certificado.
Edite el fichero /usr/lib/ssl/misc/CA.sh y cambie la línea 'DAYS="days 365"' por un valor muy elevado[6]. Asegúrese de que este número es mayor que el establecido en el primer punto, o Windows no aceptará sus certificados.
Ejecute el comando:
# /usr/lib/ssl/misc/CA.sh -newca |
Y siga los pasos como se muestra a continuación. La letra en negrita es el texto que yo he tecleado:
Importante | |
---|---|
No utilice caracteres especiales, como guiones, signos de suma, tildes, etc.; estos pueden confundir a la implementación IPSec de MS Windows. |
# /usr/lib/ssl/misc/CA.sh -newca CA certificate filename (or enter to create) (enter) Making CA certificate ... Generating a 2048 bit RSA private key .......+++ ..................+++ writing new private key to './demoCA/private/./cakey.pem' Enter PEM pass phrase:ca-password(enter) Verifying - Enter PEM pass phrase:ca-password(enter) ----- 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) [AU]:PT(enter) State or Province Name (full name) [Some-State]:Braganca(enter) Locality Name (eg, city) []:Braganca Organization Name (eg, company) [Internet Widgits Pty Ltd]:Instituto Politecnico de Braganca(enter) Organizational Unit Name (eg, section) []:Comunicacoes(enter) Common Name (eg, YOUR name) []:Sergio Gonzalez Gonzalez(enter) Email Address []:sergio.gonzalez@hispalinux.es(enter) |
Una vez finalizado el proceso de generación, ya disponemos de una entidad certificadora, con la cual podremos crear certificados.
Lo primero que ha de hacer es genearar los certificados para su máquina gateway. Los pasos que se listan a continuación serán los mismos que deberá seguir si quiere generar certificados para otras máquinas.
Generamos el certificado en cuestión, como se muestra en la siguiente captura de pantalla:
# /usr/lib/ssl/misc/CA.sh -newreq Generating a 2048 bit RSA private key ..................................................+++ .....................................................+++ writing new private key to 'newreq.pem' Enter PEM pass phrase:req-password(enter) Verifying - Enter PEM pass phrase:req-password(enter) ----- 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) [AU]:PT State or Province Name (full name) [Some-State]:Braganca Locality Name (eg, city) []:Braganca Organization Name (eg, company) [Internet Widgits Pty Ltd]:Instituto Politecnico de Braganca Organizational Unit Name (eg, section) []:Comunicacoes Common Name (eg, YOUR name) []:Sergio Gonzalez Gonzalez Email Address []:sergio.gonzalez@hispalinux.es Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:(enter) An optional company name []:(enter) Request (and private key) is in newreq.pem # # # /usr/lib/ssl/misc/CA.sh -sign Using configuration from /usr/lib/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem:ca-password(enter) Check that the request matches the signature Signature ok Certificate Details: Serial Number: 1 (0x1) Validity Not Before: Dec 12 16:25:34 2003 GMT Not After : Dec 11 16:25:34 2004 GMT Subject: countryName = PT stateOrProvinceName = Braganca localityName = Braganca organizationName = Instituto Politecnico de Braganca organizationalUnitName = Comunicacoes commonName = Sergio Gonzalez Gonzalez emailAddress = sergio.gonzalez@hispalinux.es X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 43:A9:62:84:2D:90:F9:A9:5B:43:12:EC:3C:9E:40:13:09:25:57:6C X509v3 Authority Key Identifier: keyid:E7:9D:04:A6:98:8F:C5:AB:F8:E4:AA:A8:8D:69:AE:F6:82:0B:11:D5 DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd serial:00 Certificate is to be certified until Dec 11 16:25:34 2004 GMT (365 days) Sign the certificate? [y/n]:y(enter) 1 out of 1 certificate requests certified, commit? [y/n]y(enter) Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd Validity Not Before: Dec 12 16:25:34 2003 GMT Not After : Dec 11 16:25:34 2004 GMT Subject: C=PT, ST=Braganca, L=Braganca, O=Instituto Politecnico de Braganca, OU=Comunicacoes, CN=Sergio Gonzalez Gonzalez/emailAddress=sergio.gonzalez@hispalinux.es Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:b1:ab:d1:e1:db:6f:0c:9b:a1:2c:eb:9a:58:5c: ad:9d:66:27:b6:47:84:50:d6:93:24:0d:92:32:a2: 81:49:5b:8b:b4:86:f3:31:6d:9d:23:9c:e4:dd:99: 35:26:d5:5a:f4:e7:2a:ad:51:69:0a:29:1d:a1:58: 3c:3c:33:96:5f:91:ef:ee:4b:77:0d:2c:e2:df:d3: 39:9c:fa:69:11:6f:64:41:c6:36:c1:2e:1f:1e:d9: 2b:1d:2d:e0:6b:e7:a6:e7:4f:d3:eb:92:7f:a1:30: b3:61:1e:c8:2c:c9:e1:85:0b:ca:df:bf:a0:be:34: 48:b5:4f:0d:6c:4f:3d:a2:21:9a:1a:d8:73:11:bb: a5:f3:ee:65:c3:5a:02:e4:a4:3c:8c:06:d3:4a:93: 98:e4:1b:8a:e9:2f:bf:b4:32:e5:8f:26:bc:2a:93: 2c:77:29:d3:98:c2:d2:88:f1:45:53:6b:84:7f:ee: c2:0a:ba:35:0a:8e:7a:1d:d8:ca:23:cc:25:4d:e9: cc:7b:ef:ea:46:d4:df:e6:8d:07:8d:8d:4c:ad:e5: 72:35:92:6a:db:05:ca:60:a2:6e:9e:1d:81:41:d0: 7b:32:0b:f1:ca:7c:96:34:e8:9c:d5:0d:b5:a7:ed: f1:35:c3:ef:c5:71:4c:1d:ab:e3:f2:10:28:d2:ff: dd:9b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 43:A9:62:84:2D:90:F9:A9:5B:43:12:EC:3C:9E:40:13:09:25:57:6C X509v3 Authority Key Identifier: keyid:E7:9D:04:A6:98:8F:C5:AB:F8:E4:AA:A8:8D:69:AE:F6:82:0B:11:D5 DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd serial:00 Signature Algorithm: md5WithRSAEncryption 1a:d4:f2:72:ca:02:3a:7a:8d:ed:f5:c0:2a:03:56:14:d2:70: 85:e1:c0:97:84:bb:29:5c:d1:38:f8:d9:56:95:44:e4:47:db: 48:92:da:fd:9b:49:1e:e5:0c:15:15:a4:a9:f4:78:b2:80:31: 81:7b:06:35:f3:86:81:e2:03:a0:37:25:ad:0b:70:17:6e:cd: 80:3a:93:b8:b7:e3:15:0c:45:04:f4:c9:78:43:14:90:b9:3d: 68:ca:2e:b0:9c:95:8c:2d:d3:d2:9a:ea:18:ca:52:24:d7:79: f6:3f:02:63:9c:09:f5:17:41:5b:f7:8d:d0:01:2b:66:59:5a: 62:6b:e8:b7:6b:22:33:5a:a0:42:69:00:e1:83:30:5c:43:55: c7:aa:f8:f8:80:db:db:43:54:aa:6d:99:7a:fc:ea:40:48:af: 65:56:e1:78:4b:b4:0d:c3:41:e5:b6:6e:18:c8:05:ab:db:dd: a0:45:f5:e9:77:69:a0:ab:b4:fa:8c:4e:32:89:eb:76:76:53: f5:13:b2:87:a4:45:4f:df:d0:9d:0e:fc:dd:a0:51:2e:0c:42: 0c:22:d1:ec:7d:e4:ab:31:04:b1:ee:85:fb:a9:d7:83:28:dd: de:50:15:e9:22:22:73:0c:4a:8b:ad:35:66:bc:af:11:ee:2c: 7c:0f:dd:66 -----BEGIN CERTIFICATE----- MIIEUzCCAzugAwIBAgIBATANBgkqhkiG9w0BAQQFADBFMQswCQYDVQQGEwJBVTET MBEGA1UECBMKU29tZS1TdGF0ZTEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQ dHkgTHRkMB4XDTAzMTIxMjE2MjUzNFoXDTA0MTIxMTE2MjUzNFowgccxCzAJBgNV BAYTAlBUMREwDwYDVQQIEwhCcmFnYW5jYTERMA8GA1UEBxMIQnJhZ2FuY2ExKjAo BgNVBAoTIUluc3RpdHV0byBQb2xpdGVjbmljbyBkZSBCcmFnYW5jYTEVMBMGA1UE CxMMQ29tdW5pY2Fjb2VzMSEwHwYDVQQDExhTZXJnaW8gR29uemFsZXogR29uemFs ZXoxLDAqBgkqhkiG9w0BCQEWHXNlcmdpby5nb256YWxlekBoaXNwYWxpbnV4LmVz MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsavR4dtvDJuhLOuaWFyt nWYntkeEUNaTJA2SMqKBSVuLtIbzMW2dI5zk3Zk1JtVa9OcqrVFpCikdoVg8PDOW X5Hv7kt3DSzi39M5nPppEW9kQcY2wS4fHtkrHS3ga+em50/T65J/oTCzYR7ILMnh hQvK37+gvjRItU8NbE89oiGaGthzEbul8+5lw1oC5KQ8jAbTSpOY5BuK6S+/tDLl jya8KpMsdynTmMLSiPFFU2uEf+7CCro1Co56HdjKI8wlTenMe+/qRtTf5o0HjY1M reVyNZJq2wXKYKJunh2BQdB7MgvxynyWNOic1Q21p+3xNcPvxXFMHavj8hAo0v/d mwIDAQABo4HKMIHHMAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wg R2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBRDqWKELZD5qVtDEuw8nkAT CSVXbDBtBgNVHSMEZjBkgBTnnQSmmI/Fq/jkqqiNaa72ggsR1aFJpEcwRTELMAkG A1UEBhMCQVUxEzARBgNVBAgTClNvbWUtU3RhdGUxITAfBgNVBAoTGEludGVybmV0 IFdpZGdpdHMgUHR5IEx0ZIIBADANBgkqhkiG9w0BAQQFAAOCAQEAGtTycsoCOnqN 7fXAKgNWFNJwheHAl4S7KVzROPjZVpVE5EfbSJLa/ZtJHuUMFRWkqfR4soAxgXsG NfOGgeIDoDclrQtwF27NgDqTuLfjFQxFBPTJeEMUkLk9aMousJyVjC3T0prqGMpS JNd59j8CY5wJ9RdBW/eN0AErZllaYmvot2siM1qgQmkA4YMwXENVx6r4+IDb20NU qm2ZevzqQEivZVbheEu0DcNB5bZuGMgFq9vdoEX16XdpoKu0+oxOMonrdnZT9ROy h6RFT9/QnQ783aBRLgxCDCLR7H3kqzEEse6F+6nXgyjd3lAV6SIicwxKi601Zryv Ee4sfA/dZg== -----END CERTIFICATE----- Signed certificate is in newcert.pem |
Renombramos ahora los archivos generados a algo más significativo:
# mv newcert.pem host.dominio.com.pem # mv newreq.pem host.dominio.com.key |
Edite el archivo .key y borre todo el contenido existente entre la línea '-----BEGIN CERTIFICATE REQUEST-----' y '-----END CERTIFICATE REQUEST-----'. Una vez hecho esto, su archivo debería comenzar por '-----BEGIN RSA PRIVATE KEY-----' y terminar por '-----END RSA PRIVATE KEY-----'.
La instalación es muy sencilla, simplemente copie los archivos a sus ubicaciones[7]:
# cp /var/tmp/sslca/host.dominio.com.key /etc/ipsec.d/private # cp /var/tmp/sslca/host.dominio.com.pem /etc/ipsec.d # cp /var/tmp/sslca/demoCA/cacert.pem /etc/ipsec.d/cacerts # openssl ca -gencrl -out /etc/ipsec.d/crls/crl.pem |
Sigua los siguientes pasos para completar su configuración:
El archivo /etc/ipsec.secrets debe contener lo siguiente:
: RSA host.dominio.com.key "req-password" |
La palabra rep-password ha de ser sustituida con la clave que introdujo a la hora de generar el certificado SSL, o con: %prompt si quiere que al arrancar IPSec pregunte por la clave.
Aviso | |
---|---|
A lo largo de este documento estamos suponiendo el uso de una versión 1.96 o superior de FreeS/WAN. |
El archivo /etc/ipsec.conf ha de poseer un contenido similar a:
Importante | |
---|---|
Tenga en cuenta que la identación es importante, si no se respeta, FreeS/WAN fallará. |
# /etc/ipsec.conf - FreeS/WAN IPsec configuration file # RCSID $Id: ipsec.conf.in,v 1.10.2.1 2003/06/13 23:27:25 sam Exp $ # This file: /usr/share/doc/freeswan/ipsec.conf-sample # # Manual: ipsec.conf.5 # # Help: # http://www.freeswan.org/freeswan_trees/freeswan-2.01/doc/quickstart.html # http://www.freeswan.org/freeswan_trees/freeswan-2.01/doc/config.html # http://www.freeswan.org/freeswan_trees/freeswan-2.01/doc/adv_config.html # # Policy groups are enabled by default. See: # http://www.freeswan.org/freeswan_trees/freeswan-2.01/doc/policygroups.html # # Examples: # http://www.freeswan.org/freeswan_trees/freeswan-2.01/doc/examples version 2.0 # conforms to second version of ipsec.conf specification config setup interfaces=%defaultroute klipsdebug=none plutodebug=none plutoload=%search plutostart=%search uniqueids=yes conn %default keyingtries=1 compress=yes disablearrivalcheck=no authby=rsasig leftrsasigkey=%cert rightrsasigkey=%cert conn roadwarrior-net leftsubnet=192.168.1.0/24 also=roadwarrior conn roadwarrior right=%any left=%defaultroute leftcert=host.dominio.com.pem auto=add pfs=yes |
Esta configuración permitirá a cualquier persona, con un certificado válido, conectarse a nuestro host. Hay dos perfiles de conexión: uno para las conexiones que se realizan directamente en el gateway y otro para los clientes que se conectan a la red que está detrás del gateway.
Ahora sólo falta arrancar el demonio IPSec tecleando:
# /etc/init.d/ipsec start ipsec_setup: Starting FreeS/WAN IPsec 2.01... ipsec_setup: Using /lib/modules/<uname -r>/kernel/net/ipsec/ipsec.o |
Una vez que ipsec ha arrancado con normalidad, se habrá creado una nueva interfaz de red (ipsec0), el demonio pluto estará escuchando en el puerto UDP 500 y se habrán añadido algunas entradas en la tabla de rutas:
# /sbin/ifconfig eth1 Link encap:Ethernet HWaddr 00:00:00:00:00:01 inet addr:193.146.99.5 Bcast:193.146.99.255 Mask:255.255.255.0 UP BROADCAST MULTICAST MTU:1500 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:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interrupt:5 Base address:0x8f00 ipsec0 Link encap:Ethernet HWaddr 00:00:00:00:00:02 inet addr:192.168.1.254 Mask:255.255.255.0 UP RUNNING NOARP MTU:16260 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:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 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:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 0) eth0 Link encap:Ethernet HWaddr 00:00:00:00:00:02 inet addr:192.168.1.254 Bcast:10.255.255.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 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:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interrupt:9 Base address:0xee80 # /sbin/route -r Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 193.146.99.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 193.146.99.0 0.0.0.0 255.255.255.0 U 0 0 0 ipsec0 0.0.0.0 193.146.99.254 128.0.0.0 UG 0 0 0 ipsec0 128.0.0.0 193.146.99.254 128.0.0.0 UG 0 0 0 ipsec0 0.0.0.0 193.146.99.254 0.0.0.0 UG 0 0 0 eth1 # /bin/netstat -putan | grep pluto udp 0 0 10.0.1.4:500 0.0.0.0:* 16428/pluto |
Las reglas de iptables necesarias para que el gateway se comporte como debe son las siguientes:
#!/bin/bash # ## # Configuration # IPTABLES="/sbin/iptables" # # interfaces # INTERFACE_LO="lo" INTERFACE_LAN="eth0" INTERFACE_INTERNET="eth1" INTERFACE_IPSEC="ipsec0" # # network # IP_LOCALHOST="127.0.0.1" IP_LAN="192.168.1.254" BCAST_LAN="192.168.1.255" IP_INET="193.146.99.5" IP_LAN_CLIENT_IPSEC="192.168.1.4" IP_INET_CLIENT_IPSEC="212.22.69.45" # # ports # OPEN_TCP_PORTS="22" OPEN_UDP_PORTS="500" OPEN_ICMP_PORTS="0 3 5 8 11" # # IP NAT # IP_NAT="193.146.99.5" ## # Reset iptables # ${IPTABLES} -P INPUT ACCEPT ${IPTABLES} -P OUTPUT ACCEPT ${IPTABLES} -P FORWARD ACCEPT ${IPTABLES} -X ${IPTABLES} -F ## # Policy # ${IPTABLES} -P INPUT DROP ${IPTABLES} -P OUTPUT ACCEPT ${IPTABLES} -P FORWARD ACCEPT ## # INPUT Chain # # # open tcp ports # for x in ${TCP_PORTS} do ${IPTABLES} -A INPUT -p TCP -i ${INERFACE_INET} --dport ${x} -j ACCEPT done # # open udp ports # for x in ${UDP_PORTS} do ${IPTABLES} -A INPUT -p UDP -i ${INERFACE_INET} --dport ${x} -j ACCEPT done # # open icmp ports # for x in ${ICMP_PORTS} do ${IPTABLES} -A INPUT -p ICMP -i ${INERFACE_INET} --icmp-type ${x} -j ACCEPT done # # general input rules # ${IPTABLES} -A INPUT -p ALL -i ${INTERFACE_LO} -d ${IP_LOCALHOST} -j ACCEPT ${IPTABLES} -A INPUT -p ALL -d ${IP_LAN} -j ACCEPT ${IPTABLES} -A INPUT -p ALL -i ${INTERFACE_LAN} -d ${BCAST_LAN} -j ACCEPT ${IPTABLES} -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## # OUTPUT Chain # ${IPTABLES} -A OUTPUT -p ALL -s ${IP_LOCALHOST} -j ACCEPT ${IPTABLES} -A OUTPUT -p ALL -s ${IP_LAN} -j ACCEPT ${IPTABLES} -A OUTPUT -p ALL -s ${IP_LAN} -o ${INTERFACE_IPSEC} \ -d ! ${IP_LAN_CLIENT_IPSEC} -j DROP ${IPTABLES} -A OUTPUT -p ALL -s ${IP_LAN} -o ${INTERFACE_INTERNET} \ -d ${IP_LAN_CLIENT_IPSEC} -j DROP ## # NAT # ${IPTABLES} -t nat -A POSTROUTING -o ${INTERFACE_INET} \ -d ! ${IP_LAN_CLIENT_IPSEC} -j SNAT --to-source ${IP_NAT} |
Importante | |
---|---|
Si tiene instalado en su sistema la aplicación SSH Sentinel, y quiere utilizar la pila IPSec de MS Windows, ha de desinstalar (o desabilitar) SSH Sentinel, y habilitar el servicio 'ipsec'. |
Nota | |
---|---|
En la siguiente dirección existen una serie de capturas de pantalla que muestran el proceso de importación de certificados en una máquina Windows: http://support.real-time.com/open-source/ipsec/index.html |
Los pasos necesarios para configurar nuestro cliente MS Windows XP son los siguientes:
Cree el certificado para la máquina cliente, para ello siga los pasos detallados en la Sección 5, “Generación de los certificados”. A partir de este momento, asumiremos que se ha denominado al certificado para Windows XP de la siguiente forma: winhost.dominio.com
Desde el certificado generado para MS Windows, exporte un archivo .p12 para la máquina MS Windows. La forma de hacerlo es la siguiente:
# openssl pkcs12 -export -in winhost.dominio.com.pem -inkey winhost.dominio.com.key \ -certfile demoCA/cacert.pem -out winhost.dominio.com.p12 Enter pass phrase for host.dominio.com.key:req-password(enter) Enter Export Password:win-password(enter) Verifying - Enter Export Password:win-password(enter) |
Nota | |
---|---|
Tenga en cuenta que puede necesitar añadir la opción '-name friendly_name', para que algunas versiones de MS Windows puedan leer el certificado. |
Ejecute también el siguiente comando:
# openssl x509 -in demoCA/cacert.pem -noout -subject |
Deberá apuntar el resultado obtenido, ya que lo necesitará para la configuración de su VPN. El resultado obtenido en mi caso ha sido:
subject= /C=PT/ST=Braganca/L=Braganca/O=Instituto Politecnico de Braganca /OU=Comunicacoes/CN=Sergio Gonzalez Gonzalez/emailAddress=sergio.gonzalez@hispalinux.es |
Copie el archivo winhost.dominio.com.p12 a su máquina MS Windows de forma segura.
Antes de instalar la aplicación VPN de Marcus Müller, ha de instalar el programa ipeseccmd. Para ello instale las Win XP Support tools que están en el CD de MS Windows XP en el directorio \SUPPORT\TOOLS. Ejecute el archivo setup.exe y seleccione la instalación completa.
Descomprima la aplicación ipsec.exe de Marcus Müller a un directorio de su máquina MS Windows, por ejemplo: c:\ipsec.
En esta sección se han empleado las capturas de pantalla y la información de esta página: RealTimeEnterprises1.
En esta sección se han empleado las capturas de pantalla y la información de esta página: RealTimeEnterprises1.
Edite el archivo ipsec.conf (en la máquina MS Windows), reemplace la entrada “RightCA” con la salida obtenida al final de la Sección 9.2, “Obtener el certificado en formato .p12”, tras ejecutar el comando:
# openssl x509 -in demoCA/cacert.pem -noout -subject |
Nesecitará reformatear la salida como se muestra a continuación[8]:
conn roadwarrior left=%any right=193.146.99.5 rightca="C=PT,S=Braganca,L=Braganca,O=Instituto Politecnico de Braganca, CN=Sergio Gonzalez Gonzalez,Email=sergio.gonzalez@hispalinux.es" network=auto auto=start pfs=yes conn roadwarrior-net left=%any right=193.146.99.5 rightsubnet=192.168.1.0/24 rightca="C=PT,S=Braganca,L=Braganca,O=Instituto Politecnico de Braganca, CN=Sergio Gonzalez Gonzalez,Email=sergio.gonzalez@hispalinux.es" network=auto auto=start pfs=yes |
Ejecute el comando ipsec.exe. A continuación se muestra un ejemplo de salida tras ejecutar dicho comando:
C:\ipsec>ipsec IPSec Version 2.1.4 (c) 2001,2002 Marcus Mueller Getting running Config ... Microsoft's Windows XP identified Host name is: (local_hostname) No RAS connections found. LAN IP address: 192.168.1.4 Setting up IPSec ... Deactivating old policy... Removing old policy... Connection roadwarrior: MyTunnel : 192.168.1.4 MyNet : 192.168.1.4/255.255.255.255 PartnerTunnel: 193.146.99.5 PartnerNet : 193.146.99.5/255.255.255.255 CA (ID) : C=PT,S=Braganca,L=Braganca,O=Instituto Politecnico de Braganca,... PFS : y Auto : start Auth.Mode : MD5 Rekeying : 3600S/50000K Activating policy... Connection roadwarrior-net: MyTunnel : 192.168.1.4 MyNet : 192.168.1.4/255.255.255.255 PartnerTunnel: 193.146.99.5 PartnerNet : 192.168.1.254/255.255.255.255 CA (ID) : C=PT,S=Braganca,L=Braganca,O=Instituto Politecnico de Braganca,... PFS : y Auto : start Auth.Mode : MD5 Rekeying : 3600S/50000K Activating policy... C:\ipsec> |
Una vez ha finalizado el arranque de IPSec, haga un ping a su gateway. Este debería decir 'Negotiating IP Security' varias veces, y después dar respuestas al comando ping.
Nota | |
---|---|
Tenga en cuenta que el establecimiento del tunel puede llevar varios intentos; haciendo uso de una red T1 conectándose a un servidor detrás de un cable módem, el establecimiento toma unos 3-4 pings normalmente. |
Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre GNU, versión 1.1 o cualquier versión posterior publicada por la Free Software Foundation. Puedes consultar una copia de la licencia en http://www.gnu.org/copyleft/fdl.html
[NateCarlson1] Configuring an IPSec tunnel between FreeS/WAN and Windows 2000/XP .
[JaccodeLeeuw1] Using FreeS/WAN with Windows L2TP/IPsec .
[AndreasSteffen1] Installation and Configuration Guide (X.509 FreeS/WAN-version 1.4.8) .
[RealTimeEnterprises1] IPSec, screenshots of the process of importing a certificate .
[Steffen1] Virtual Private Networks Coping with Complexity .
[FreeS/WAN] FreeS/WAN .
[Parches X.509] Parches X.509 .
[MüllerVPN] VPN .
[ParchesEncpt] Parches de encriptación .
[OpenSSL] OpenSSL .
[Dia] Dia .
[TheGimp] The Gimp! .
[DebianGNULinux] Debian GNU/Linux .
[Linux] Linux .
[Windows] MS Windows .
[2] CA: Certificate Authority
[3] Si está utilizando un sistema Debian GNU/Linux, sólo tendrá que ejecutar:
# apt-get install openssl |
[4] Vamos a suponer que estamos trabajando con un sistema Debian GNU/Linux para esta instalación.
[5] Una recomendación sería establecer este número bastante elevado, algo similar a 3650, de esta forma, el certificado tiene una valided de 10 años.
[6] Esto establece la valided de nuestra entidad certificadora
[7] El proceso seguido aquí puede repetirse para todos aquellos equipos que quiera configurar y añadir a la red privada virtual.
[8] Deberá cambiar los caracteres “/” por comas, y cambiar los nombres de algunos de los campos.