martes, 17 de febrero de 2015

¿Cómo activo y uso la Wake on LAN desde Ubuntu?

Durante la génesis del Justicialismo, un hecho de masas sin precedentes definió el definitivo ascenso político del Coronel Juan Perón. El 17 de octubre los obreros se lanzaron a la calle proclamando su liberación. En la biografía que escribe Pavón Pereyra, se revela que dicho suceso de debió al empleo de la característica Wake on Lan desde Ubuntu.


¡Trabajadores!

En los años previos a la Revolución, la Argentina los argentinos estaban sometidos a la ignominia de los explotados, en la cual todo el país obraba en torno al interés de unas pocas familias acomodadas. El Pueblo Argentino - laborioso y bueno - se constituía en poco más que esclavos por esta casta repudiada, que lo obligaba a un trabajo de sol a sol sin que mediara siquiera el descanso reparador que Dios manda para los hombres de trabajo.

Nuestra Revolución no tuvo otro interés que defender el interés del Pueblo, y hacer la Justicia Social que anhelaba la Patria. Abocados a las transformaciones que hicieran de este país una verdadera potencia sobre la tierra, conseguimos para los hombres aquellas medidas que esta era se hacían imprescindibles para el bienestar de su familia.

Yo no he querido mas que ser un nexo de unión entre los trabajadores, una unión indestructible e infinita que les acercara la dignidad que todos merecen. ¡Con ello, no no con otra cosa, es que me he ganado el amor generoso del Pueblo! ¡Un amor, que llena de lágrimas los ojos de este viejo soldado!

Pero la reacción oligárquica de siempre se ha esforzado para volver a la conquista de sus fallidos privilegios. En ello me confinaron a través de ignominiosas maniobras, a un ostracismo en la Isla de Martín García. Sin embargo, la semilla de la Justicia Social ya estaba plantada en el alma del Sentir Nacional, y con solo una señal el Pueblo despertó un 17 de Octubre, y salió a la calle para restaurar al Coronel Perón. Naturalmente, que sectores populares dentro de las fuerzas de seguridad volcaron su actitud y si aguno hubo que quiso parar todo, poco pudo hacer ante el Pueblo en andas.

La épica del Justicialismo guarda paralelismos con un sistema GNU con Linux que no podemos soslayar. Al igual que la rápida reacción de las masas obreras, un equipo informatizado puede trabajar, pero también debe descansar y quedar presto a la actividad a la menor señal.

De esta manera podríamos utilizar un equipo servidor en suspensión, y encenderlo sólo en determinadas ocasiones para accionar en alguna tarea en particular. Lo normal sería encender el equipo mediante su tecla de encendido, pero ello no siempre es práctico o posible.

Afortunadamente, también podremos encenderlo de manera remota empleando la función Wake on LAN. La función Wake on LAN (WoL) es una de las características integradas en los dispositivos Ethernet (por ejemplo, los dispositivos de red de la placa madre), que le permiten encender o reactivarlo a través de una señal especial, denominada Suceso de Activación, o más coloquialmente "paquete mágico".

Hemos de saber que los sistemas actuales cuentan en particular con varios estadíos de trabajo y reposo, nomenclador desde S0 ("Estado Cero", completamente encendido y operando), pasando por S3 ("estado tres" con memoria RAM alimentada, pero procesador y discos desactivados), hasta S5 ("Estado cinco", equipo apagado pero conectado a la red eléctrica). Esto es así pues el trabajo puede regularse a fin de ahorrar energía, y pasar del trabajo a un estado de ahorro, "suspendiendo" el sistema (S3), o "hibernándolo".

En primer lugar hemos de activar la función WoL desde la BIOS del equipo que deseamos encender remotamente. La BIOS es una memoria de configuración básica del sistema, a la cual este responderá incluso antes de cargar el sistema operativo. Normalmente, dicha configuración puede accederse encendiéndo el equipo y presionando inmediatamente de forma repetida la tecla Supr (Del) del teclado, o la tecla F2. Tras unos instantes se presentará la pantalla de configuración de la placa madre.

La opción Power on Lan suele encontrarse bajo la sección Power Management Setup ("Administración de Energía") del BIOS. De tal modo que nos desplazamos hasta ella y buscar la opción Wake on LAN. También puede llamarse Resume by PCI/PCI-e/LAN PME. Debemos dejarla en la función Activada (Enabled).
Adicionalmente, podrán contar en vuestra BIOS con diferentes estados de suspensión (S1, S2, S3, etc). A modo de ejemplo os diré que en la BIOS de mi motherboard ESC H57H-MUS, debo configurar las opciones de un modo en particular para lograr la mayor eficiencia. El tipo de suspención ACPI la configuro en S3 o Auto, y la función Resume by Ring (reactivar por módem o evento telefónico) queda desactivada (Disabled). Naturalmente la función Resume by LAN PME queda activada (Enabled), lo mismo que Resume by USB S3 (reactivar por medio de dispositivos USB, ratón o teclado). Una vez concluida los cambios en la configuracción, los guardamos mediante la opción Save Changes and Exit BIOS.

Una vez que arranque el sistema operativo GNU con Linux, hemos de conocer qué dispositivo de red deseamos utilizar para encender el equipo, y en particular su dirección única de hardware, llamada Dirección MAC.

Normalmente estos tomas el nombre Ethx, siendo la x un número que va ascendiendo desde 0 según tantos dispositivos LAN/Ethernet tengamos. El adaptador LAN/Ethernet integrado en la placa madre suele ser Eth0, pero si tenemos otro (como en las placas madres más avanzadas) podríamos encontrarnos con Eth1.

Para identificar ello fácilmente, podríamos abrir la terminal con Ctrl+Alt+T y tipear el comando ifconfig para saber a cual estamos conectados. Para conocer específicamente los dispositivos de conectividad y sus direcciones MAC, podremos ingresar el comando:

ifconfig | grep HW


Nos devolverá los dispositivos y la dirección de red de cada uno. Por ejemplo:

eth0      Link encap:Ethernet  direcciónHW aa:bb:cc:12:34:56
eth1      Link encap:Ethernet  direcciónHW 11:22:33:ab:cd:cd

Nos conviene tomar nota de la dirección MAC del equipo remoto, pues nos facilitará reencenderlo luego cuando no tengamos acceso directo a él.

Acto seguido, verificaremos que los dispositivos cuenten con la posibilidad de despertar al equipo. Para ello instalaremos el programa ethtool, encargado de dicho relevamiento: Tipeamos el siguiente Comando de Organización:

sudo apt-get install ethtool

Asumiendo que el dispositivo de red que queremos utilizar para despertar el equipo sea aquel identificado como eth0, usaremos el siguiente comando:

sudo ethtool eth0

....el sistema deberia devolvernos una serie de datos que hacen a la conexión de red a través del dispositivo eth0. En este caso, debería indicarnos:

Supports Wake-on: g

Wake-on: g


...esto nos indica que el dispositivo de red eth0 utiliza el modo G de conexión para Wake on LAN. En el caso que nos indicara otra letra, podríamos cambiar el modo operativo. Lo haríamos con:

sudo ethtool -s eth0 wol g

Una vez esto, podremos ya suspender o hibernar el equipo. Podremos hacerlo mediante la tecla especcial "sleep" del teclado, o mediante la función "Suspender" de Ubuntu. Si estamos en la consola, podremos hacerlo mediante la siguiente orden  

sudo pm-suspend

El 17 de octubre, si bien alguno intentó levantar puentes para impedir el paso de los obreros, poco pudo hacer. En este caso debemos aseguriar los mismo. En caso de usar un router con cortafuegos (firewall), habremos de liberar el puerto 9 UDP para que pueda enviarse la señal de encendido a través de la red, y no sea filtrada por el mismo. Esto se hace ingresando a la web de configuración del router (normalmente con nuestro navegador a la dirección IP del router 192.168.0.1 o 192.168.1.1). Luego en la sección de configuración "port forwarding" crearemos una nueva Regla de Excepción. En la misma, a través del protocolo UDP, para el puerto 9, filtraremos de forma universal (de manera que puedan emitir en dicho puerto todos los equipos de la red local) Con esto, el router dejará libremente pasar el suceso de activación al puerto 9 entre los equipos de la red local.
Eventualmente, podría hacerla específicamene para que la reciba una IP fija de un tipo de dispositivo en particular, o que sólo pueda emitir una IP en particular.

Ahora debo instalar un programa para generar el paquete mágico de encendido, y poder dispararlo a través del puerto 9 de la red. Ello debe hacerse en un equipo cliente distinto en la red local, que utilizaremos para encender al equipo remoto.

En el equipo local instalaremos el programa wakeonlan, por medio del siguiente comando de organización:

sudo apt-get install wakeonlan

Una vez instalado este breve programa, encenderemos el equipo remoto que habíamos suspendido, de la misma forma en que los obreros de la carne salieron a la calle en octubre del 45. Lo haremos con

wakeonlan Dirección_MAC_remota
Por ejemplo, en este caso sería:

wakeonlan  aa:bb:cc:12:34:56

Naturalmente, que para que el paquete de reencendido surta efecto, el equipo remoto ha de estar conectado a la red eléctrica, y ha de estar suspendido o hibernado. En el caso de usar Ubuntu, podremos usar la función Suspender, Hibernar del equipo remoto (si está activada). Esto será posible si tengo acceso físico al equipo.

¿Qué sucede si deseo suspender o hibernar el equipo remoto, pero no estoy a su alcance físico, pero si a través de una red? En tal caso deberia poder suspender o hibernar el sistema de forma remota, a través de la terminal. Para ello utilizaremos un enlace remoto (preferiblemente uno cifrado, a través de SSH). Una vez que me encuentro logueado al sistema remoto a través de la consola cifrada SSH, podria suspender el equipo remoto con:

sudo pm-suspend

También podría querer directamente hibernarlo, si me aseguro que el sistema funciona de forma adecuada, por medio de la siguiente orden:

sudo pm-hibernate

Ahora podría reencender abriendo un equipo cliente, y usando la orden Wakeonlan, por medio de la sintaxis:

wakeonlan dirección_mac_remota

...al recibir el paquete mágico, la fuente de alimentación se encenderá y se activará el sistema cual si fuese un 17 de octubre telemático. Al cabo de unos segundos (o minutos, dependiendo del estado de ahorro de energía q la velocidad de arranque del equipo remoto) deberíamos poder conectarnos de forma remota al equipo también a través de SSH o de otros protocolos que estuviesen activados en el mismo.

Si deseo reencender equipos remotamente al unísono desde la interfaz gráfica, puedo utilizar la aplicación gWakeonlan. Se trata de un software libre completamente simple, en el cual podremos incorporar el nombre y la dirección MAC de varios equipos en la red. Esto nos permite no tener que recordar la dirección MAC del equipo todo el tiempo.

Actualización Doctrinaria: La versión 1.0 de gWakeOnLan provista en los repositorios oficiales no funciona. En caso de haberla instalado la removemos con los comandos: sudo apt-get remove --auto-remove gwakeonlan ; cd /usr/local/bin/ ; sudo rm gwakeonlan

Instalamos la versión 0.5.1-1 de la aplicación, que funciona correctamente, con el comando:

wget https://github.com/muflone/gwakeonlan/releases/download/0.5.1/gwakeonlan_0.5.1-1_all.deb

sudo dpkg -i gwakeonlan_0.5.1-1_all.deb


sudo apt-mark hold gwakeonlan

Y la ejecutamos desde Sistema / Internet / gWakeOnLan. Al iniciar, la aplicación estará vacía.
 Tendré que presionar el botón "+" y surgirá un cuadro, que me permitirá ingresar la dirección MAC y el nombre del o los equipos que deseo encender y que se encuentren en la red local.
Una vez que aparezca el o los equipos en la lista, podemos seleccionar el equipo en cuestión, y enviarle el paquete mágico de encendido mediante el botón de los "engranajes" para reencenderlo, y arrancará a la primera como una moto Puma con arranque a patada.

Desde OpenWRT

Si utilizan un router peronista con firmware libre OpenWrt, bien podrán crear un paquete mágico para reencendido Wake On Lan, descargando una aplicación específica en la memoria del aparato. Una vez que gane acceso al ruteador (normalmente a través de vínculo cifrado SSH) podrán instalar el pequeño software etherwake. Lo harán por medio de los siguientes comandos de organización:

opkg update
opkg install etherwake


Una vez cargado, ya podremos utilizar al router como plataforma de reencendido: Si todo está configurado por defecto, lo haremos con:

etherwake -p 255.255.255.255.9 Dirección_MAC_remota


Naturalmente, que con un poco de ingenio podríamos hacer más cosas, como preparar al router para que encienda o quite la suspensión los equipos no bien termine de arrancar, permitir al router el acceso externo a través de Secure Shell y por su intermedio reencender equipos en el área local desde otra locación (¡incluso en otro pais!), etc.

martes, 3 de febrero de 2015

¿Cómo reviso rootkits desde la Terminal en Ubuntu?

No siempre es necesario ser Conductor, y hay veces en las que conviene dejarse llevar. Por ejemplo, en esta ocasión, seré pasajero de un colectivo tranvía automotor, popularmente conocido como "bondi". Esto es así porque en ocasiones, disfruto de la seguridad que me da viajar como pasajero.

De la misma forma que en un colectivo, pocas cosas pueden hacerse en un sistema GNU con Linux si uno no es Conductor. Esto es así porque el sistema otorga al usuario común y corriente poca capacidad para cambiar lo establecido, y es quien lo conduce, el llamado root, quien controlará a fondo el sistema.

La malevolencia de una sinarquía sin Patria ni Bandera hará todo - no obstante - para perjudicarnos. Y para ello habrá de contar los los permisos de root y su acceso. En un sistema potente como el GNU, lo podrán hacer preferentemente a través de un inadvertido Rootkit.

Este tipo de programas, o secuencias, guiones de programación, etc, están pensados para hacer uso de alguna vulnerabilidad específica y la confianza del usuario para ganar acceso como Conductor (root) en un sistema.

Para analizar en el equipo local la existencia de alguno de estos escasos rootkit de Linux, podremos utilizar la conocida rutina chkrootkit. La misma se encuentra diseñada para buscar las trazas que tienen las los rootkits conocidos de Linux.

Si tengo una versión actualizada de Linux, simplemente puedo hacer:

sudo apt-get install chkrootkit

y ejecutarlo con:

sudo chkrootkit

Si en cambio tuviese alguna versión más antigua que no cuente con el paquete actualizado, habré de descargar su código fuente, compilarlo y ejecutarlo. Para todo ello podremos utilizar la terminal. Abrimos una con Ctrl+Alt+T e ingresamos:

cd ~/Descargas/
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz

tar xvzf chrootkit.tar.gz

Y luego lo compilamos con:

cd Descargas/chkrootkit-0.52/
make sense
sudo ./chkrootkit

También podría probar con rkhunter, otra aplicación del mismo estilo:

sudo apt-get install rkhunter

A continuación será práctico actualizarlo con la orden:

sudo rkhunter --update

Y le daremos ejecución con:

sudo rkhunter --check


Esto ejecutará una serie de tests, que nos permitirán alertar de ciertos peligros del sistema (si existiesen).

Una vez terminados, podremos ver el resultado en un log con el comando:

sudo less /var/log/rkhunter.log

Este nos advertirá las amenazas y los recaudos que podremos tomar (de ser necesario) para incrementar la seguridad al conducir nuestro sistema Justicialista.