
{"id":89,"date":"2007-03-05T12:52:58","date_gmt":"2007-03-05T15:52:58","guid":{"rendered":"http:\/\/talsoft.com.ar\/weblog\/?p=89"},"modified":"2007-03-05T13:09:44","modified_gmt":"2007-03-05T16:09:44","slug":"vpn-sobre-linux-y-openswan","status":"publish","type":"post","link":"https:\/\/www.talsoft.com.ar\/site\/es\/vpn-sobre-linux-y-openswan\/","title":{"rendered":"VPN sobre linux y openswan"},"content":{"rendered":"<p>Existen muchas alternativas para hacer redes privadas virtuales (VPN) sobre linux, como openvpn, poptop (protocolo pptp) y varias implementaciones de IPsec. Cada soluci\u00c3\u00b3n tiene sus beneficios y debilidades, elijo en este art\u00c3\u00adculo no discutir la mejor opci\u00c3\u00b3n para cada escenario sino explicar a modo de HOWTO c\u00c3\u00b3mo realizar una VPN basada en IPsec con openswan sobre linux, particularmente Debian.<\/p>\n<p>Breve introducci\u00c3\u00b3n a IPsec<\/p>\n<p>De wikipedia:<\/p>\n<p>IPsec (la abreviatura de Internet Protocol security) es una extensi\u00c3\u00b3n<br \/>\nal protocolo IP que a\u00c3\u00b1ade cifrado fuerte para permitir servicios de<br \/>\nautenticaci\u00c3\u00b3n y, de esta manera, asegurar las comunicaciones a trav\u00c3\u00a9s<br \/>\nde dicho protocolo. Inicialmente fue desarrollado para usarse con el<br \/>\nnuevo est\u00c3\u00a1ndar IPv6, aunque posteriormente se adapt\u00c3\u00b3 a IPv4.<br \/>\nIPsec act\u00c3\u00baa a nivel de capa de red, protegiendo y autenticando los paquetes IP entre los equipos participantes en la comunidad IPsec. No est\u00c3\u00a1 ligado a ning\u00c3\u00ban algoritmo de encriptaci\u00c3\u00b3n o autenticaci\u00c3\u00b3n, tecnolog\u00c3\u00ada de claves o algoritmos de seguridad espec\u00c3\u00adfico. Es m\u00c3\u00a1s, IPsec es un marco de est\u00c3\u00a1ndares que permite que cualquier nuevo algoritmo sea introducido sin necesitar de cambiar los est\u00c3\u00a1ndares.<br \/>\nIPSec est\u00c3\u00a1 formado por un conjunto de protocolos de cifrado por (1) securing packet flows y (2) key exchange. De la forma:<\/p>\n<p>Encapsulating Security Payload (ESP), el cual provee autenticaci\u00c3\u00b3n, confidencialidad de datos e integridad del mensaje<\/p>\n<p>Authentication Header (AH), provee de autenticaci\u00c3\u00b3n e integridad de datos, pero no de confidencialidad.<br \/>\nPor sus caracter\u00c3\u00adsticas es el protocolo est\u00c3\u00a1ndar para la construcci\u00c3\u00b3n de redes privadas virtuales.<\/p>\n<p>Modos<\/p>\n<p>Transparente: S\u00c3\u00b3lo se encripta el payload (el contenido del mensaje) y no el encabezado, normalmente es usado para t\u00c3\u00baneles de host a host. Hay que tener en cuenta que no puede usarse NAT con el modo transparente, debido a que se rompe la hash al alterar el encabezado.<\/p>\n<p>T\u00c3\u00banel: Cada paquete es completamente encriptado y encapsulado dentro de otro, es el modo m\u00c3\u00a1s usado y permite hacer VPNs de tipo red a red.<\/p>\n<p>Autenticaci\u00c3\u00b3n<\/p>\n<p>Las opciones m\u00c3\u00a1s populares de autenticaci\u00c3\u00b3n son:<\/p>\n<p>\u00abSecreto compartido\u00bb: (aka PSK) usando algoritmos de hashing como MD5 o SHA-1, al parecer recientemente ambos algoritmos de hashing fueron \u00abcrackeados\u00bb, al menos reducido considerablemente el tiempo de crackeo, aunque todav\u00c3\u00ada son \u00abusables\u00bb s\u00c3\u00b3lo falta tiempo para que alg\u00c3\u00ban matem\u00c3\u00a1tico refine la t\u00c3\u00a9cnica y los vuelva trivialmente crackeables.<\/p>\n<p>Certificados digitables: los cuales est\u00c3\u00a1n basados en encriptaci\u00c3\u00b3n asim\u00c3\u00a9trica. En este ejemplo se utiliza este m\u00c3\u00a9todo con el algoritmo RSA.<\/p>\n<p>Encriptaci\u00c3\u00b3n e intercambio de llaves<\/p>\n<p>La encriptaci\u00c3\u00b3n s\u00c3\u00b3lo puede ser realizada usando ESP (o sea no con AH) y los algoritmos normalmente utilizados son: DES, 3DES y AES.<br \/>\nEl tr\u00c3\u00a1fico se encripta usando llaves que se renuevan a intervalos regulares, para el intercambio de llaves entre los pares se puede usar intercambio manual o autom\u00c3\u00a1tico (IKE).<\/p>\n<p>Manos a la obra<\/p>\n<p>Supongamos que queremos armar una VPN entre la casa central de una empresa y una sucursal para que la \u00c3\u00baltima pueda acceder a recursos de la casa central. En ambos lugares tenemos servidores Debian\\linux bajo estable trabajando como Firewalls.<\/p>\n<p>La topolog\u00c3\u00ada del ejemplo es la siguiente:<\/p>\n<p>Como antes nombr\u00c3\u00a9, utilizaremos Openswan para armar la VPN, este est\u00c3\u00a1 disponible tanto en la distribuci\u00c3\u00b3n estable (Sarge), como para la de prueba (etch). Los n\u00c3\u00bacleos oficiales de Debian (2.4 y 2.6) incluyen el stack 26sec por lo que no hay necesidad de recompilar el kernel para tener soporte de ipsec.<\/p>\n<p>Para instalarlo desde la consola como root ejecutamos:<\/p>\n<p>$ apt-get install openswan<\/p>\n<p>Adem\u00c3\u00a1s del paquete se instalaran varios m\u00c3\u00a1s de los cuales depende. Es<br \/>\nprobable que si no ten\u00c3\u00adas instalado el paquete ca-certificates te<br \/>\nconsulte acerca de confiar en ciertas Autoridades Certificantes, las<br \/>\nrespuestas son indistintas para este ejemplo.<\/p>\n<p>Cuando le toque el turno de configuraci\u00c3\u00b3n a openswan te preguntar\u00c3\u00a1 por:<\/p>\n<p>Encriptaci\u00c3\u00b3n oportunista: esta opci\u00c3\u00b3n no es necesaria para nuestro ejemplo y si no la vas a usar es preferible desactivarla.<br \/>\nCreaci\u00c3\u00b3n de un certificado autofirmado: Tampoco es necesario, si no tienes experiencia con ello, no lo crees.<br \/>\nConfiguraci\u00c3\u00b3n<\/p>\n<p>Por cada firewall debemos obtener la siguiente informaci\u00c3\u00b3n:<\/p>\n<p>IP publica del firewall<br \/>\nRango IP dentro de la subred que tendra acceso a la VPN<br \/>\nUn nombre con el cual queda extremo pueda reconocerse, su forma es un FQDN precedido con un arroba, ej: @xy.example.com. (Tambien podemos usar las direcciones IP publicas)<br \/>\nPrimero creamos una llave en cada servidor ejecutando:<br \/>\nfw-central$ ipsec newhostkey &#8211;output &#8211; >> \/etc\/ipsec.secrets<br \/>\nfw-sucursal$ ipsec newhostkey &#8211;output &#8211; >> \/etc\/ipsec.secrets<\/p>\n<p>Este proceso puede demorar bastante tiempo en m\u00c3\u00a1quinas no muy veloces,<br \/>\npor lo que no desesperes.<\/p>\n<p>El archivo de configuraci\u00c3\u00b3n principal es el \/etc\/ipsec.conf y en este<br \/>\nse declara un extremo como izquierdo y el otro como derecho, quien es<br \/>\ncada cual es indistinto y adem\u00c3\u00a1s es determinado en la ejecuci\u00c3\u00b3n. Esto<br \/>\npermite tener una misma configuraci\u00c3\u00b3n en ambos extremos sin tener que<br \/>\nhacer traducciones. Para nuestro ejemplo usaremos la casa central como<br \/>\nizquierdo y la sucursal como derecho.<\/p>\n<p>Ahora determinamos la llave p\u00c3\u00bablica de cada extremo ejecutando:<\/p>\n<p>fw-central$ ipsec showhostkey &#8211;left<br \/>\nfw-sucursal$ ipsec showhostkey &#8211;right<\/p>\n<p>esto mostrar\u00c3\u00a1 algo como:<\/p>\n<p># RSA 2192 bits fw-central Wed Jan 24 21:48:39 2007<br \/>\nleftrsasigkey=0sAQO9Pc&#8230;.<br \/>\n# RSA 2192 bits fw-sucursal Sat Feb 3 03:51:44 2007<br \/>\nrightrsasigkey=0sAQOW&#8230;<\/p>\n<p>Ahora editamos en ambos extremos el archivo \/etc\/ipsec.conf y<br \/>\nagregamos al final:<\/p>\n<p>$ vi \/etc\/ipsec.conf<\/p>\n<p>conn central-a-sucursal<\/p>\n<p>left=1.2.3.4<br \/>\nleftsubnet=172.16.0.0\/24<br \/>\nleftid=1.2.3.4<br \/>\nleftrsasigkey=0sAQOGJ&#8230;<br \/>\nleftnexthop=%defaultroute<br \/>\nright=1.2.3.5<br \/>\nrightsubnet=192.168.66.0\/24<br \/>\nrightid=1.2.3.5<br \/>\nrightrsasigkey=0sAQOW&#8230;<br \/>\nrightnexthop=%defaultroute<br \/>\nauto=add # add autoriza la conexion pero no la establece automaticamente<\/p>\n<p>Reiniciamos openswan en ambos servidores:<br \/>\n$ \/etc\/init.d\/ipsec restart<\/p>\n<p>Probamos que levante manualmente:<br \/>\n$ ipsec auto &#8211;up central-a-sucursal<\/p>\n<p>Si sale todo bien, el \u00c3\u00baltimo mensaje dir\u00c3\u00a1 algo como:<br \/>\n004 \u00abcentral-a-sucursal\u00bb #2: STATE_QUICK_I2: sent QI2, IPsec SA<br \/>\nestablished {ESP=>0x84b3d554 &#8230;<\/p>\n<p>Consideraciones<br \/>\nPara que el t\u00c3\u00banel levante autom\u00c3\u00a1ticamente al inicio se debe cambiar la opci\u00c3\u00b3n auto=add por auto=start<br \/>\nEn el caso de que tengas IP din\u00c3\u00a1micas en alguno o ambos de los puntos, puedes mirar los ejemplos del wiki de openswan para \u00abroadwarrior\u00bb<br \/>\nEs importante que si tienes reglas de NAT estas no se apliquen al tr\u00c3\u00a1fico del t\u00c3\u00banel.<br \/>\nSi tienes un firewall construido con la regla por defecto en denegar todo, debes permitir los protocolos de IPsec (numero 50 y 51). Ej:<\/p>\n<p>iptables -A INPUT -p 50 -j ACCEPT<br \/>\niptables -A OUTPUT -p 50 -j ACCEPT<br \/>\niptables -A INPUT -p 51 -j ACCEPT<br \/>\niptables -A OUTPUT -p 51 -j ACCEPT<br \/>\nNo soy un experto en IPsec por lo que pueden haber algunas imprecisiones en este texto, sin embargo espero que el art\u00c3\u00adculo sea de utilidad.<\/p>\n<p>Referencias<\/p>\n<p>http:\/\/en.wikipedia.org\/wiki\/IPSec<br \/>\nhttp:\/\/www.microsoft.com\/technet\/prodtechnol\/windows2000serv\/howto\/ispstep.mspx<br \/>\nhttp:\/\/www.unixwiz.net\/techtips\/iguide-ipsec.html<br \/>\nhttp:\/\/wiki.openswan.org\/index.php\/Openswan\/Configure<\/p>\n<p>Fuente: <a href=\"http:\/\/brsi.blogspot.com\/\">http:\/\/brsi.blogspot.com\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Existen muchas alternativas para hacer redes privadas virtuales (VPN) sobre linux, como openvpn, poptop (protocolo pptp) y varias implementaciones de IPsec. Cada soluci\u00c3\u00b3n tiene sus beneficios y debilidades, elijo en este art\u00c3\u00adculo no discutir la mejor opci\u00c3\u00b3n para cada escenario sino explicar a modo de HOWTO c\u00c3\u00b3mo realizar una VPN basada en IPsec con openswan [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[3,1],"tags":[],"class_list":["post-89","post","type-post","status-publish","format-standard","hentry","category-articulos","category-profesional"],"_links":{"self":[{"href":"https:\/\/www.talsoft.com.ar\/site\/wp-json\/wp\/v2\/posts\/89","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.talsoft.com.ar\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.talsoft.com.ar\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.talsoft.com.ar\/site\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.talsoft.com.ar\/site\/wp-json\/wp\/v2\/comments?post=89"}],"version-history":[{"count":0,"href":"https:\/\/www.talsoft.com.ar\/site\/wp-json\/wp\/v2\/posts\/89\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.talsoft.com.ar\/site\/wp-json\/wp\/v2\/media?parent=89"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.talsoft.com.ar\/site\/wp-json\/wp\/v2\/categories?post=89"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.talsoft.com.ar\/site\/wp-json\/wp\/v2\/tags?post=89"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}