El mito de la seguridad de los Unix/Linux

Es muy común entre los aficionados a las computadoras hablar de lo inseguro que es Windows y lo confiables que son los sistemas operativos Unix o sus derivados como por ejemplo el OS X, e incluso Linux que aunque no es un Unix de pura sangre, si cumple los estándares POSIX. Lo divertido de muchos de estos debates en foros, blogs y demás espacios de discusión públicios que muchas veces toman giros radicales, es que quienes más defienden los sitemas Unix/Linux, son aquellos que no los usan diariamente. Y es que aquellos que trabajamos con estos entornos de forma cotidiana tenemos que convivir con sus limitaciones y las imprudencias de los usuarios (es decir los aficionados).

Si hicieramos una comparación con el fútbol, el hincha que está en la tribuna gritando y peleandose con los del otro equipo son los usuarios. Los sufridos system administrator, somos los que estamos en la cancha de la web 2.0 sufriendo los golpes del adversario y la ira de los hinchas cada vez que algún error se comete, y es que como dice el refrán, los toros se ven mejor de lejos. Yo soy un profesional de la informática, es decir me pagan por hacer esto, y hay días en los que me arrepiento de ganarme la vida de esta forma, aunque esos son los menos. La mayor parte del tiempo soy un aficionado más de la informática también, es decir lo hago porque me gusta y tengo mi equipo (Linux), lo cuál no quita que pueda jugar (cobrando) por otro u otros equipos.

Los comentarios anteriores eran porque he leído una nota en CBC News, en donde se describe como un grupo de cybercriminales consiguió montar la primera red de mac-bots, es decir una red de computadoras zombies constituída por Macs. La forma como lo hicieron fue escondiendo un trojano dentro de programas comerciales que se distribuyen a través de torrents públicos, es decir se aprovecharon de la piratería para infectar las computadoras de las víctimas. Lo cuál es básicamente lo que pasa también con los usuarios de Windows, y creanlo o no con los usuarios Linux también.

Por ejemplo es muy común que los usuarios de mis servidores, por facilidad no configuren apropiadamente un directorio al que le otorgan privilegios 777, y si el CMS que están utilizando posee alguna vulnerabilidad, sencillamente están dejando la puerta abierta para que un atacante remoto pueda instalar código arbitrario en el servidor. El año pasado publique un post titulado "Colección de exploits" en el que discutía lo peligroso de los permisos 777, pero como suele pasar el mito de la seguridad de los Unix/Linux puede más que la realidad de que un sistema no puede ser más seguro que sus usuarios.

Pero para ello estan las herramientas que nos permiten detectar si hemos sido invadidos por estos molestos programas, que una vez instalados usan nuestras computadoras como plataformas para lanzar ataques contra otras redes. Es por ello que si Ud. tiene un Linux, se tome la molestia de al menos una vez a la semana utilizar cualquiera de estos detectores de rootkits chkrootkit y rkhunter. Además de verificar mensualmente con Nessus si alguno de sus servidores es vulnerable. Así que no crean que por qué están en Unix/Linux pueden tener el mismo comportamiento descuidado que tenían en Windows, porque podrían tener una desagradable sorpresa.

Adicionalmente a las medidas anteriores recomiendo instalar tambien denyhosts, un scripts en Python que bloquea cualquier intento de ataque basado en fuerza bruta, luego de leer el artículo publicado por Peter Hansteen en su blog That gumpy BSD guy, le eche una ojeada a mi /var/log/auth.log para ver si había intentos de hacking usando el puerto ssh como describía Hansteen en su artículo y quede sorprendido de lo frecuentes que eran y lo diverso del origen. Fue por ello que le aplique el denyhosts a todos mis servers. En caso de que seamos más paranoicos y no deseemos que nadie pueda siguiera tener el prompt podemos usar los TCP wrappers para bloquear todo intento de conexión al ssh desde fuera de nuestra red, pero eso tiene el terrible inconveniente de dejarnos fuera incluso a nosotros mismos cuando estamos en el camino y necesitamos urgentemente arreglar algo en el servidor, en ese sentido denyhosts ofrece la mejor combinación flexibilidad/seguridad.

Espero que esta información les haya sido de utilidad y sirva para clarificar algunas ideas. Pero lo más importante, que haya servido para asegurar nuestros servidores Linux.

¿Cómo funciona Facebook?

Aditya AgarwalEn una interesante presentanción Aditya Agarwal, Director de Ingeniería en Facebook, explica como funciona la pila LAMP (Linux Apache MySQL y PHP) + memcache que soporta a la popular red social. Un hecho importante que pude sacar de la conferencia es que la consistencia de la base de datos no es una prioridad en el diseño de la red social, es decir las múltiples instancias de MySQL geográficamente distribuidas, nunca estan 100% sincronizadas, lo cuál les permite escalar tan fácilmente a millones de usuarios. Además Agarwal insistio en la filosofía de la empresa de usar la mejor herramienta para el trabajo y no tratar de resolver todos los problemas con un sólo lenguaje de programación, así Facebook ha desarrollado un framework llamado Thrift, que permite el desarrollo de servicios RPC independientemente del lenguaje con el que se desarrolle.

Otro interesante punto expuesto son las debilidades de el popular lenguaje de programación PHP, que muchos de nosotros usamos para nuestros proyectos, cuando se trata de mantener código en el tamaño del millon de líneas.

El video de la conferencia (de poco más de 1 hora) y la presentación pueden verse en InfoQueue. Les recomiendo a todos los que esten interesados en entender como podemos escalar websites a billones de visitas ver esta presentación.

El imperio contraataca

En un artículo aparecido en InformationWeek, se informa que Windows XP tiene ahora el 96% de cuota de mercado en el sector de las netbook (el rubro de PCs de más rápido crecimiento). La fuente citada por InformatioWeek es el blog de Brandon LeBlanc "The Windows Experience Blog", en dicho blog podemos leer:

"We’ve seen Windows share on these PCs in the U.S. go from under 10% of unit sales during the first half of 2008 to 96% as of February 2009, according to the latest NPD Retail Tracking Service data."

[Traducción: "Hemos visto a la cuota de mercado de Windows en estos PCs en los Estados Unidos ir desde menos del 10% de las unidades vendidas durante la primera mitad de 2008 a el 96% de estas en Febrero de 2009, de acuerdo a los últimos datos de NPD Retail Tracking Service"].

Como dice LeBlanc en su blog, en un principio el sector de las netbook estaba constituído mayoritariamente por dispositivos web centrícos, con pequeños discos de estado sólido y 512MB de RAM o menos, que hacía practicamente imposible poner un Windows XP con Office en ellos. La eeePC fue pensada como la respuesta de Asus a la XO-1 que era producida por su archirival Quanta Computer. Sin embargo el decidido apoyo que recibió de los early adopters atrajo a otros fabricantes al sector, entre ellos Acer, HP, MSI e incluso Dell. La crisis económica que se hizo sentir a través un aumento del desempleo a tasas no vistas en los últimos 20 años, y una reducción significativa del gasto del consumidor promedio favoreció a estas pequeñas portátiles de menos de $500.

El problema ha sido que el gran público fue atraído por el bajo precio, sin embargo no poseían ni el conocimiento, ni el perfil de los primeros que adoptaron la propuesta de las netbooks, es por ello que las netbooks con Linux eran retornadas a los fabricantes con tasas que excedían hasta en 5 a 1 a las tasas de retorno de las netbooks con Windows XP. Sin embargo lo que no se comenta públicamente es el hecho de que las netbook con Windows XP eran mas costosas básicamente porque necesitaban un mayor hardware para poder ejecutar Windows XP y Office en ellas, así el enfoque minimalista de netbook paso a incluir 1GB de RAM como mínimo y un disco duro convencional de 120GB o más. Es decir se pagaba un poco menos de $500 por una portátil con un teclado y pantalla más pequeños que los ofrecidos por las laptops de gama baja que costaban aproximadamente lo mismo y además incluían un lector/quemador de CD/DVD. Es por ello que hay usuarios retornando netbooks con Windows XP inclusive.

Un hecho que no se comenta mucho en la blogosfera es el total fracaso de HP con su Mininote 2133 con Windows Vista, que tuvo que ser rápidamente reemplazado por la HP 1000 que tenía Windows XP. Es por ello que Microsoft ha pensado en extender la vida de Windows XP hasta finales de Abril del 2010, como se puede leer en ComputerWorld, quien refiere una filtración que dice ha dicho que Microsoft le ha dado luz verde a HP para continuar vendiendo PCs con Windows XP.

Pero el fracaso de Linux en las netbook se debe básicamente a que se ofrecían como reemplazos baratos de laptops, que las superaban en hardware y poseían un OS que era familiar para el usuario promedio. Hay que admitir que no cualquiera puede tomar una netbook que carece de lector de CD e instalar en ella otra distribución de Linux de su agrado, hacer un hackintosh o incluso instalarle XP. Aunque es posible hacerlo, la gran mayoría de usuarios, incluso aquellos que se consideran a si mismos "expertos", carecen de las habilidades necesarias para efectuar dicha operación.

Ocurrió lo mismo que ha sucedido tantas veces desde la invención de la micro-computadora, se creo una pequeña masa de entusiastas (early adopters) que hizo cosas importantes, esto fue intensamente publicitado por los medios, lo cual arrastró a una gran masa de personas que se sintieron atraídas por el beneficio, pero no tenían ni las más remota idea de las consecuencias de sus actos. Y al final los que ganaron fueron los que vendían las netbooks. Es por ello que al final los fabricantes de netbooks, Intel y Microsoft trabajaron juntos para proveer una netbook que tuviera un menor rechazo de aquel que sólo busca una portátil barata. Por eso vemos cada día nebtooks con pantallas y teclados más grandes, más RAM y discos duros de mayor tamaño; básicamente porque no pretenden ser dispositivos web céntricos, sino simples PCs reducidas de tamaño y precio. Lo cuál no esta mal si es lo que anda buscando, pero no era la idea primaria de este tipo de dispositivos a los que llamamos netbooks.

Google revela la arquitectura de sus data center

En un interesante artículo aparecido en Cnet News, Stephen Shankland nos cuenta como Google el día de ayer 1 de abril en una conferencia realizada en Mountain View (California), revelo la arquitectura básica de sus data center. De acuerdo a dicho artículo estos no estan construidos en base a servidores individuales sino en contenedores estándar AAA que alojan 1,160 servidores cada uno, donde cada data center contiene varias de estas unidades, cada una de las cuales consume el equivalente a 250 Kw. Además otra sorpresa para la audiencia fue el hecho de que no había un sistema de UPS (Sistema de Alimentación Ininterrupdido) centralizado sino que cada servidor y equipo de red (switches y routers) tenían una batería de 12 voltios incorporada, esto permite de acuerdo a los ingenieros de Google lograr eficiencias del 99.9%.

Respecto al diseño de cada servidor individual para nadie era un secreto de que Google construía sus propios servidores, a diferencia de otras empresas que compran servidores de fabricantes establecidos como Dell, HP, IBM o Sun Microsystem. Lo que sorprendió a la audiencia fue que las mainboard utilizadas estaban diseñadas para operar con una entrada de 12 voltios, a diferencia de las mainboard convencionales que necesitan de suministros de 12 y 5 voltios. Esto encarece un poco la mainboard en $1 a $2 pero según Google les permite obtener una mayor eficiencia en el uso de la energía. Otra característica de estos servidores es que tienen 2 discos duros, 2 procesadores (pueden ser Inter o AMD), 8 slots de memoria y una batería de 12 voltios incoporada. Cada servidor ocupa el equivalente a 2U (o 2 unidades de rack), es decir tienen una altura de 3.5" (8.89 cm).

Aunque algunos comentarios en el post de Cnet News dicen que es una broma de April Fools, lo cierto es que ha sido confirmado por otras fuentes el día de hoy, dicha conferencia si se llevo a cabo en Mountain View en el marco del "Google Data Center Efficiency Summit". Dentro de las fuente que confirma que lo divulgado por Cnet están Nicholas Carr en su blog Rough Type, Rich Miller en su blog Data Center Knowledge de donde he tomado el videos del tipo de servidores que Google usa para construir sus containers que aparece al final del post. Finalmente también he encontrado que ComputerWorld informa del evento y confirma los datos publicados por Cnet News.
 

 
 

El poderoso PowerDNS

Actualmente ando desarrollando un proyecto llamado cix.pe, que tiene por objetivo ofrecer dominios gratis en dicho dominio. La palabra "cix" es la abreviatura que usan las líneas aereas para hacer referencia a Chiclayo, la ciudad de donde es mi familia y donde crecí. La idea es potenciar el uso de Internet en la ciudad de Chiclayo ofreciendo un dominio gratuito al cual todos, desde simples usuarios hasta empresas puedan utilizar para desarrollar su identidad en Internet. El mayor problema que tenía era el implementar un par de servidores DNS que utilizara una base de datos, la opción más fácil sería usar MyDNS, proyecto Open Source que ofrece un servidor DNS que registra sus valores sobre una base de datos MySQL, ya lo utilizo actualmente para mis dominios pero me he dado cuenta de que es lento además de poco flexible y tengo en mente que el dominio cix.pe sea usado por miles, no por decenas. Por dicha razón inicie una búsqueda en la web para encontrar la solución a mi problema.

Las dos opciones que encontre y sobre las que me enfoque fueron MySQL BIND SDB Driver y Bind DLZ, ambos son parches sobre el popular servidor DNS BIND, el problema que encontre en ambos es que funcionan sobre versiones específicas de BIND y dichas versiones tienen vulnerabilidades conocidas, así que eso me desanimaba de usar dichas opciones, pensaba que tendría que utilizar MyDNS de todas formas, hasta que revisando distintos foros encontre una referencia a PowerDNS, que es un servidor DNS Open Source que tiene muy positivos comentarios, puede utilizar MySQL, PostgreSQL, SQLite, Oracle, DB2, LDAP y ODBC, además de ser multiplataforma. Lo mejor de todo es que Debian Etch y Lenny lo incluyen dentro de sus repositorios.

¿Por qué utilizar un servidor DNS que almacene sus configuraciones en una base de datos?, bueno hay dos razones para ello, la primera y más evidente es que es la forma más sencilla de contruir un control panel que permita a los usuarios actualizar sus configuraciones. La segunda razón es que si se almacena la configuración en una base de datos el proceso de reiniciar el servidor DNS cada vez que se aplique un cambio a la configuración de un dominio se evita completamente. Ofreciendo de esta manera actualización automática de las configuraciones, algo que en el caso de mi proyecto es altamente deseable.

La pregunta sería entonces ¿por qué seguir usando BIND o PowerDNS con archivos de configuración?, la respuesta esta en la forma como se opera. Tener toda la configuración en un archivo de texto significa que todos los dominios y sus configuraciones deben ser cargados a la RAM en el momento que se incia el servidor de nombre de dominio, esto por un lago agiliza enormente el procesamiento de las consultas, pero obliga a que cada cambio en el archivo de configuración necesite que el servidor DNS sea reiniciado. Si se resuelven cientos de miles de dominios, esta es sin duda la opción más eficiente, pero demanda de que el servidor cuente con suficiente RAM, algo que no es un problema en nuestros dias.

En el caso de poner la configuración en una base de datos, como MySQL por ejemplo, implica que cada consulta al servidor DNS deba generar un query a la base de datos para extraer la información necesaria desde alli. Como veran esto introduce un overhead en cada consulta, pero nos da la ventaja de que el servidor de nombre no deba ser arrancado si algun usuario cambio la configuración de su dominio, pues los cambios son dinámicos. En nuestros días los servidores son tan potentes que el overhead de cada query es bastante bajo, incluso en un servidor que deba de procesar miles de queries por segundo. Además si a eso le usamos lo sencillo que es construir un sistema de alta disponibilidad con una configuración de MySQL en master-slave las ventajas de usar un servidor de base de datos como backend para almacenar las configuraciones de los dominios son más que evidentes.

La instalación de un servidor PowerDNS en Debian Etch o Lenny es tan sencilla como ejecutar este comando como root:

# apt-get install mysql-server-5.0 mysql-client-5.0 mysql-common pdns-server pdns-doc pdns-backend-mysql

Tenga presente de que no es buena idea poner en un mismo servidor los servidores DNS Authoritative y Recursive (tambien conocido como DNS de cacheo), es por ello que intensionalmente no hemos instalado el paquete "pdns-recursor", queda a su criterio hacer eso.

Finalmente la configuración de PowerDNS con soporte para MySQL debe hacerse siguiendo los pasos descritos en el manual del producto en el Capítulo 4. Espero como siempre que esta información les haya sido de utilidad.