martes, diciembre 19, 2006

Linux contará con una solución de virtualización integrada en el kernel.

Que la virtualización constituye uno de los paradigmas de futuro con el que trabajan las compañías e iniciativas informáticas hoy día (y, especialmente, todas aquellas relacionadas con los diferentes sistemas operativos) no constituye ninguna sorpresa ni nada nuevo y, evidentemente, Linux no podía ser menos.

Las soluciones de virtualización que se añaden al sistema operativo como software descargable e instalable son actualmente la solución utilizada tanto por usuarios como por desarrolladores, pero parece que el futuro de la virtualización a medio plazo va en otro sentido, pues se trabaja en la dirección de incorporar tecnologías de virtualización a bajo nivel directamente en el núcleo de los sistemas operativos. Ya se especuló que Apple lo haría en Mac OS X 10.5 "Leopard", rumor que fue tan insistente que obligó a la compañía de Steve Jobs a emitir un comunicado negándolo (con un pero que dejaba la puerta abierta en el futuro), e incluso que Microsoft lo haría con Windows Vista, aunque parece que va a ser Linux el primer sistema operativo que incluya en su núcleo la capacidad de ejecutar máquinas virtuales.

Será concretamente en la versión 2.6.20 del kernel (núcleo) del sistema del pingüino -de la cual en el momento de escribir estas líneas disponemos de una versión Release Candidate-, y el componente recibe el nombre de KVM (Kernel-based Virtual Machine).

KVM funcionará como módulo (kvm.ko) por el momento de forma exclusiva sobre plataforma x86 permitiendo la ejecución de sistemas operativos no-alterados* en un espacio virtualizado en el cual facilitará el acceso a una unidad de disco virtual, tarjeta gráfica e incluso conexión de red. Si queremos testear su funcionamiento, ya está disponible para descargar y ejecutar con nuestra distribución favorita siendo totalmente funcional y permitiendo la ejecución virtualizada de sistemas Linux de 32 y 64 bits, y Windows de 32 bits.

Para aquellos usuarios de la distro openSUSE (de la cual recientemente se ha liberado la versión 10.2) que quieran probar KVM, existen unos paquetes RPM con binarios ya construidos y con relativa poca dificultad para su instalación. Los usuarios de Debian también cuentan con unas simples instrucciones para empezar a trabajar con KVM, y próximamente se prevé la aparición de paquetes para su instalación en Fedora Core.

Para funcionar, este software utiliza una versión modificada de QEMU, un proyecto también libre de máquina virtual hardware, reconociendo los formatos de archivo de disco duro virtual del propio QEMU y de VMware.

Para el futuro se deja abierta la posibilidad de un port de KVM para Windows.

Más información:

KVM: Kernel-based Virtual Machine for Linux
http://kvm.sourceforge.net/

http://linux.inet.hr/finally-user-friendly-virtualization-for-linux.html

* Otra iniciativa en el terreno del software libre como es Xen necesita que el sistema operativo virtualizado esté preparado para ello, por lo cual y al no dar Microsoft acceso al código fuente de Windows, por el momento Xen no puede ejecutar dicho sistema operativo.

DenyHost al rescate de SSH.

DenyHosts es un script escrito en Python que tiene como único fin el evitar ataques por fuerza bruta, algo más que habitual cuando tenemos una máquina corriendo un servidor SSH público. Este script monitoriza el fichero /var/log/auth.log en búsqueda de un anormal crecimiento del mismo, como por ejemplo mi propio auth.log:

Jul 9 09:20:18 firewall-one sshd[687]: Failed password for root from 222.122.160.115 port 35695 ssh2
Jul 9 09:20:21 firewall-one sshd[689]: Could not reverse map address 222.122.160.115.
Jul 9 09:20:21 firewall-one PAM_unix[689]: authentication failure; (uid=0) -> root for ssh service
Jul 9 09:20:23 firewall-one sshd[689]: Failed password for root from 222.122.160.115 port 35909 ssh2
Jul 9 09:20:26 firewall-one sshd[691]: Could not reverse map address 222.122.160.115.


Instalación:
apt-get install denyhosts

Configuración:
vi /etc/denyhosts.conf
DENY_THRESHOLD_INVALID = 2 #Número de intentos fallidos permitidos a un usuario inexistente antes de denegar acceso
DENY_THRESHOLD_VALID = 4 #Número de intentos fallidos permitidos a un usuario existente antes de denegar acceso


/etc/init.d/denyhosts start
El fichero de configuración es mucho mas extenso, pudiendo filtrar las reglas, pero en un blog no es muy buena idea extenderse demasiado, de todas formas el fichero está muy bien comentado, eso sí en inglés(No problem).

Port Knocking que gran maravilla.

Se conoce como portknocking a la técnica de abrir puertos utilizando una combinación de llamadas a un grupo de puertos en concreto en una concreta secuencia, es decir, girando la rueda de nuestra caja fuerte (atacando puertos) en una secuencia de números secretos (grupo de puertos) para poder abrirla (abrir un puerto).

Partiendo de un firewall que lo deniega todo, un script perl vigila el log del firewall en busca de una secuencia de llamadas a puertos concreta que actúa a modo de password, desbloqueando la ejecución de una aplicación o una línea de comandos. La secuencia de llamadas se realiza utilizando el software cliente de la propia aplicación, la cual debe estar instalada en los equipos remotos desde los que queremos acceder al servicio oculto (también puede estar en un usb-stick).

Veamos una configuración simple partiendo del paquete knockd disponible para Debian.

1.- Instalamos el paquete:
apt-get install knockd

2.-Para que arranque en el inicio:
Debian->Modificamos /etc/default/knockd para permitir que knockd arranque en el inicio de sistema
START_KNOCKD=1

3.- Editamos /etc/knockd.conf y configuramos nuestros servicios
[options]
logfile = /var/log/knockd.log

[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -A INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT
tcpflags = syn

4.- Reiniciar el servicio
/etc/init.d/knockd restart

A partir de este momento, nuestro sistema será invisible a los port-scanners pero utilizando el cliente knock y la secuencia de puertos que hemos establecido, podemos abrir el puerto bajo demanda:

knock IP SecPuertos


Es como tener una caja fuerte en la que se necesita una combinación para poder ser abierta.
Existe un cliente portknocking para Windows, cuyo funcionamiento no he verificado llamado
It's Me.

jueves, diciembre 14, 2006

Google y Linux.

Si algo puede ser uno de los secretos del éxito de Google, eso es Linux. Este Sistema Operativo Libre es utilizado mayoritariamente en toda la compañía. Y no solamente en los miles de servidores de los que dispone, sino también en los PCs de los empleados.

Según nos cuenta Ovidiu Predescu en su weblog, hay en Google un gran número de ingenieros desarrollando exclusivamente sobre Linux. Los lenguajes de programación que utilizan son -fundamentalmente- 'C', 'Python' y 'Java', y además utilizando editores de aspecto aparentemente tan simple (en comparación con otros entornos IDE), como 'Emacs', 'XEmacs' o 'vi'.

Sergey Brin, uno de los dos fundadores de Google, comentaba en esta entrevista para Linux Gazette en noviembre de 2000, que usan herramientas GNU, como gcc, gdb y gnats.

Sergey no reparaba en elogios para Linux, y le atribuye parte del éxito del espectacular crecimiento de su compañía. Lo escogieron porque ofrece el mejor ratio rendimiento/precio, y porque pueden personalizar cualquier parte del Sistema Operativo, en cualquier momento. Google suele contactar incluso con los desarrolladores del kernel para aspectos concretos. Brin asegura que los técnicos de Google tienen mucha experiencia en el uso de Linux en sus hogares.

En esta otra entrevista en Linux Journal, el propio Sergey afirma que usa Linux (aunque con VMware para ejecutar aplicaciones de MS Windows). También es verdad que MS Windows es utilizado también en Google, pero solamente en departamentos concretos, como el de marketing.

En el año 2000, Google llegó a un acuerdo con Red Hat, por lo que esta compañía pasaría a suministrar el Sistema Operativo que han de correr los casi 20,000 servidores de los que dispone Google. De esta manera, forman el que probablemente sea el mayor clúster Linux del mundo.