Archivo de la categoría: Software Libre

Historia de un script

Siempre me gusta tener un repositorio Debian en un disco portable, una conexión decente en dónde vivo (Guanare) es inexistente y de igual manera en el resto de ciudades, es mejor instalar Debian rápidamente que tener que esperar 2 horas de descargas.

Sin embargo, actualizarlo es otra cosa muy distinta, debo contar con una conexión “decente” (por encima de los 200kB/s) o podría pasar días enteros esperando a que “sincronize”, a veces, los archivos quedan “truncados” o no se descargan correctamente (uso rsync y si un archivo no se descarga correctamente, salta al siguiente y ese queda en falla).

Entonces escribí este script (https://github.com/phenobarbital/check_debian_repository), que, aunque está en sus inicios, aplica la filosofía del IDM (Internet Download Manager) y de los Download Accelerators, para descubrir qué archivos faltan en un mirror Debian y descargarlos en paralelo.

Por qué haría algo así? y por qué nadie había hecho algo parecido?, bueno, cuando tu velocidad promedio de descarga es:

>f+++++++++ pool/main/libr/libreoffice/libreoffice-help-zh-tw_4.2.6-1~bpo70+1_all.deb
1.93M 46% 162.71kB/s 0:00:13

162kB/s (y estaba rápida, son las 4 am) mientras amigos en países incluso consideradores “tercer mundo” con El Salvador o Guatemala poseen conexiones de 5MBps ó 10MBps, yo me tengo que conformar con “viajar” a Barquisimeto y conectarme al ABA de CANTV de la casa de mi mamá qué cuando funciona “de maravilla” (como ahora, a las 4am) reporta que es de 1.2MBps (aunque pago por 2MBps). La cosa no es que la conexión “sea cara” es que literalmente no existe.

Entonces, uno termina haciendo cosas que solo sirven para países en condiciones como las nuestras, espero que alguien más, con la necesidad de tener un mirror Debian multi-arch sincronizado y que tenga una conexión pobre, le sirva este script.

Saludos.

[iptables] Descargando listas negras con Shorewall

Una de las características más importantes que debe realizar un firewall hoy día es reaccionar ante atacantes y/o conjuntos de atacantes, uno de ellos son los firewalls que protegen servidores de correo.

Las RBL (Realtime Blackhole List) son listas negras en tiempo real, generadas por muchísimas empresas e instituciones (spamhaus, por ejemplo) y que nos permiten obtener un listado bastante grande de IPs y subnets que son vigiladas por SPAM.

Hoy voy a probar hacer 2 listas negras, una desde Spamhaus y otra, de las subredes chinas más comunes utilizadas por los hackers.

Preparando a Shorewall para listas negras

Shorewall posee un archivo llamado /etc/shorewall/blacklist, de no poseer ese archivo, no hay problema, ya que crearemos un script que lo generará.

Pero primero, debemos indicar que la disposición de las IPs y subredes dentro del archivo BLACKLIST sea DROP.

Para ello ejecutamos:

sed -i "s/^BLACKLIST_DISPOSITION=.*$/BLACKLIST_DISPOSITION=DROP/" /etc/shorewall/shorewall.conf

Y refrescamos shorewall.

shorewall refresh

Script para descargar listas negras

Ahora debemos crear un script, que se ejecute mensualmente y que se dedique a “llenar” el archivo blacklist con listas dinámicas de varios sitios:

  • DShield Blacklist
  • Spamhaus DRBL
  • OKEAN Chinese and Korean Spammers
  • Wizcrafts (russian botnets)
  • RBN: Russian Bussiness Network
  • OpenBL

Con este conjunto de listas, creamos el script:

#!/bin/bash
cat <<EOF > /tmp/blacklist
#ADDRESS/SUBNET PROTOCOL PORT
# block all between ports 1 and 31
- tcp 1:31
# block unused ports
- udp 1024:1033,1434
- tcp 57,1433,1434,2401,2745,3127,3306,3410,4899,5554,6101,8081,9898
# block all from spamhaus, dshield and wizcrafts
EOF
echo "# dshield blocklist" >> /tmp/blacklist
wget -q -O - http://feeds.dshield.org/block.txt | awk 'NF && !/^[:space:]*#/' | sed '/Start/,+1 d' | awk '{ print $1 "/24"; }' >> /tmp/blacklist
echo "# spamhaus DRBL" >> /tmp/blacklist
wget -q -O - http://www.spamhaus.org/drop/drop.lasso | awk 'NF && !/^[:space:]*;/' | awk '{ print $1 }' >> /tmp/blacklist
echo "# chinese and korean spammers" >> /tmp/blacklist
wget -q -O - http://www.okean.com/sinokoreacidr.txt | awk 'NF && !/^[:space:]*#/' | awk '{ print $1 }' >> /tmp/blacklist
echo "# Wizcrafts Russian botnets, attackers and spammers" >> /tmp/blacklist
wget -q -O - http://www.wizcrafts.net/russian-iptables-blocklist.html | awk -F\> '/^pre>/{print $2}' RS=\< | awk 'NF && !/^[:space:]*#/' >> /tmp/blacklist
echo "# RBN Russian IPs" >> /tmp/blacklist
wget -q -O - http://doc.emergingthreats.net/pub/Main/RussianBusinessNetwork/RussianBusinessNetworkIPs.txt | awk 'NF && !/^[:space:]*#/' >> /tmp/blacklist
echo "# OpenBL.org 30 day List" >> /tmp/blacklist
wget -q -O - http://www.openbl.org/lists/base.txt | tr -d $'\r' | awk 'NF && !/^[:space:]*#/' >> /tmp/blacklist
echo "#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE" >> /tmp/blacklist
mv /tmp/blacklist /etc/shorewall/blacklist
shorewall refresh &>/dev/null

El script simplemente descarga todo en una lista temporal, que luego reemplaza el archivo blacklist y refresca la configuración del shorewall.

Luego, simplemente hacemos un enlace simbólico a /etc/cron.monthly

Para verificar, simplemente ejecutamos:

iptables -L -n --line

O en su defecto,

shorewall show blacklst

Que serían aproximadamente unas 28 mil IPs que quedarían permanentemente bloqueadas y que mensualmente se renovaría la lista.

Conclusiones

Atrás quedaron aquellas románticas (pero estúpidamente inútiles) épocas donde la gente escribía sus breves y concisos archivos de “reglas iptables” y los ponía en producción (aun queda *peligrosamente* gente así), en la actualidad es sumamente complicado mantener protegido un Firewall, con constantes botnets, malware, troyanos y un pare de contar de ataques y aprovechar estas listas, muchas actualizables incluso en tiempo real, nos ahorra mil dolores de cabeza y protege un poco más nuestros servidores.

¿imaginen qué pudieramos hacer si integraramos fwsnort al Firewall de nuestro equipo? …

 

[iptables]: Usar geoIP y Shorewall para bloquear paises

Y no, no es para hacer embargos! …

Preámbulo

Se estaba presentando el caso de un ataque de fuerza bruta contra un servidor públicamente visible, el ataque venía mayormente de China y Hong Kong y decidí, que sería interesante aprovechar las capacidades del módulo de xtables XT_GEOIP para ubicar una IP geográficamente con un porcentaje más o menos preciso.

Por ejemplo, GeoIPLookup (que hace uso de la base de datos de GeoIP), puede retornar la siguiente información:

geoiplookup 186.92.27.1
GeoIP Country Edition: VE, Venezuela

Lo cual resulta muy útil, ¿se podrá usar para bloquear tráfico desde países completos? …

Pre-requisitos

Los pre-requisitos son los siguientes:

  • Shorewall, versión 4.5 o superior
  • xtables-addons-common
  • libtext-csv-xs-perl (para procesar la base de datos de georeferencia).

Por ende, es simplemente instalar las dependencias y tener configurado Shorewall.

aptitude install xtables-addons-common libtext-csv-xs-perl

Creamos el directorio que requiere el módulo:

mkdir /usr/share/xt_geoip

Y montamos el módulo:

modprobe xt_geoip

Ahora, nos toca descargar la base de datos:

/usr/lib/xtables-addons/xt_geoip_dl

Veremos algo como:

root@proxy:/etc/shorewall# /usr/lib/xtables-addons/xt_geoip_dl
–2014-06-24 22:07:01– http://geolite.maxmind.com/download/geoip/database/GeoIPv6.csv.gz
Resolving geolite.maxmind.com (geolite.maxmind.com)… 108.168.255.243, 2607:f0d0:3:8::4
Connecting to geolite.maxmind.com (geolite.maxmind.com)|108.168.255.243|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 823979 (805K) [application/octet-stream]
Saving to: ‘GeoIPv6.csv.gz’
100%[====================================================================>] 823,979 91.0KB/s in 9.3s
2014-06-24 22:07:11 (86.9 KB/s) – ‘GeoIPv6.csv.gz’ saved [823979/823979]

Y por último, convertimos este CSV en una forma binaria empaquetada que requiere el módulo xt_geoip:

/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
1 IPv6 ranges for VC Saint Vincent and the Grenadines
23 IPv4 ranges for VC Saint Vincent and the Grenadines
38 IPv6 ranges for VE Venezuela
230 IPv4 ranges for VE Venezuela
0 IPv6 ranges for VG Virgin Islands, British
48 IPv4 ranges for VG Virgin Islands, British
2 IPv6 ranges for VI Virgin Islands, U.S.
47 IPv4 ranges for VI Virgin Islands, U.S.
32 IPv6 ranges for VN Vietnam
257 IPv4 ranges for VN Vietnam
5 IPv6 ranges for VU Vanuatu
14 IPv4 ranges for VU Vanuatu

Y ya estamos listos para hacer uso de esta base de datos en Shorewall.

Configurando Shorewall

Desde Shorewall 4.5 existe soporte para GeoIP y su uso es extremadamente fácil, por ejemplo, podemos agregar al archivo /etc/shorewall/rules la siguiente regla:

DROP net:^[CN,TW,JP] fw - -

Y estaríamos bloqueando (DROP) desde mi zona “Internet” (net) a China (CN), Taiwan (TW) y Japón (JP), con destino a mi firewall (fw) de absolutamente todo tráfico UDP y TCP.  el formato del país es ISO-3661.

Podríamos por ejemplo, aceptar pero con información (LOG) todo tráfico WEB reportado como IP de Venezuela:

ACCEPT:info              net:^[VE]        fw          tcp          80,443

Podemos bloquear todo tráfico que sea explicitamente declarado como un proxy anónimo (según las reglas de GeoIP):

DROP        net:^[A1,A2]                  fw              -             -

Y listo!, verifiquen sus reglas y disfruten!.

Conclusiones

Los 2 comandos de arriba para descargar la base de datos de GeoIP podemos meterlos en un script, que se ejecute mensualmente, con esto, el sistema se actualizaría solo:

vim /etc/shorewall/scripts/updategeoip.sh

#!/bin/bash
# update geoip database (xt_geoip)
/usr/lib/xtables-addons/xt_geoip_dl > /dev/null 2>&1
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv > /dev/null 2>&1
# refresh configuration
shorewall refresh &>/dev/null

hacerlo ejecutable:

chmod 0770 /etc/shorewall/scripts/updategeoip.sh

Y colocar un enlace simbólico en cron.monthly:

ln -s /etc/shorewall/scripts/updategeoip.sh /etc/cron.monthly/updategeoip.sh

Y ya tendríamos un Firewall que bloquea (con una precisión del 74%) todo acceso desde el gigante asiático.

 

 

Del por qué un desarrollador NO ES un Database Administrator?

O del por qué podría ser, pero debería primero cambiarse la camisa …

Este POST no busca explicar postgreSQL, ni siquiera es un artículo acerca de trucos o buenas prácticas, es simplemente una reflexión acerca de cómo pequeñas cosas que muchos pasan desapercibidas causan impacto profundo en el diseño de una aplicación.

Preámbulo

Tomé un servidor físico GNU/Linux que únicamente ejecutaba una base de datos y lo mudé a una máquina virtual restringida (¡conchale!, hay que ahorrar recursos!, pensé), pensando que todo quedaría bien.

Sin embargo, los usuarios del sistema (en producción) comenzaron a quejarse de lentitud, además, los administradores de sistemas comenzaron a notar excesivos picos de uso de CPU (¿en un equipo que sólo tiene postgreSQL?) e incluso en varias oportunidades se iba a SWAP.

Antes de devolver la base de datos al equipo físico, decidí hacer una revisión (les dije, “no solo monto sistemas, también sé de programación y mucho de base de datos, lo olvidan?”) y estas son las impresiones de la muy breve (pero exitosa) revisión.

El análisis

Lo primero que siempre hago cuando voy a analizar un sistema conectado a postgreSQL, es activar el slow log, esto es, comenzar a medir aquellos queries que consumen más del tiempo que uno supone debería asumir cierto tipo de consulta; paralelamente es daba una clase rápida de postgreSQL, de la importancia de entender el ciclo de parsing/análisis de una consulta SQL y más aún, de la importancia de entender SQL; por ejemplo, dos casos reales extraídos de este caso:

“fecha_inscrito” es un campo VARCHAR, donde almacenan algo como “12/04/2012″; si desean sacar el año, hacen un SPLIT de la cadena con un SUBSTR y sacan el tercer valor luego del “/” … ¿les parece eso correcto?, pues veamos el resultado:

postgres=# SELECT substr(’12/04/2012′, 6);
substr
——–
/2012
(1 fila)
Duración: 61,300 ms

Versus:

postgres=# SELECT EXTRACT(year from ‘2012-04-12′::date);
date_part
———–
2012
(1 fila)
Duración: 0,468 ms

Y comenzaron las alarmas!, 60 milisegundos menos!, pero chamo, a mi no me gusta trabajar con formato ANSI!, y luego les recuerdo que existe la variable de conexión DATESTYLE:

postgres=# SET datestyle to sql;
SET
Duración: 0,124 ms
postgres=# SELECT ‘2012-04-12′::date;
date
————
12/04/2012
(1 fila)
Duración: 0,154 ms

INSOLITO! ¿cómo es posible que una simple función SET cause que todas las fechas salgan con el formato que yo desee?, esto pasa cuando se desconocen los detalles de la base de datos con la que se trabaja.

Igual sucede cuando la gente comprende la diferencia entre usar ON y USING cuando se construyen JOINS (diferencia claro está, a nivel de planificador).

El tercer caso de no-entendimiento de postgreSQL ocurría con un “pseudo-ORM hecho a mano” por los mismos programadores, que no solamente escapaba mal las cadenas:

Esto:

(‘Empresa’, ‘   MATURIN’, ’15/04/2014′, …

No es igual a esto:

(‘Empresa’, ‘MATURIN’, ’15/04/2014′, …

Ya que la cadena ”    MATURIN” no es igual a “MATURIN”, a menos que se haga un TRIM adicional, afectando el performance de la consulta, sino que además, hacen cosas como esta:

’21’, ’32’, ’16’, ‘8’, …

¿Esos son cadenas o números?, luego de ejecutar un DESCRIBE a la tabla, encontramos con que son campos numéricos, y aunque postgreSQL hace la conversión, lanza un WARNING indicando que esos valores son “not integers”, lo cual obviamente no es para nada óptimo.

Esto es lo que pasa cuando los programadores, pensando como programadores, intentan diseñar bases de datos.

El extraño caso del CPU consumido

Me he encontrado con una consulta muy repetida, con esta forma:

SELECT * FROM sol_solvencia WHERE cod_aport = $1 and estatus = $2;

La consulta se repetía muchísimo (sobre todo en temporada de mucho uso de la aplicación web hecha en PHP) y los logs del postgreSQL reportaban que su duración, promedio, era de 550 milisegundos … grité (como gritó Emmet Brown cuando le dijeron que debía alimentar el D’lorean con 1.1Gigawatts) ¡550 milisegundos!, yo en 550 milisegundos corría una nómina y ellos sólo ejecutan un query!.

Luego de usar EXPLAIN ANALYZE nos encontramos con la sorpresa de que la tabla no posee índices de ningún tipo (alegan que es un sistema legado y viene así de informix) y en la actualidad posee unos 98 mil registros; por ende, postgreSQL no le queda de otra para hacer el WHERE que ejecutar un SEQUENTIAL SCAN; o lo que es lo mismo, postgreSQL iteró de manera secuencial por los 98 mil registros para sacar ámbos criterios, ¿en conclusión?, allí se van los 550 milisegundos.

Si el query se ejecuta a un ritmo de hasta 50 veces en un minuto, se imaginan el uso de CPU de postgreSQL para poder mantener ese ritmo.

Indizar, y sino, indizar también …

Luego de construir un par de índices sencillos:

CREATE INDEX idx_sol_solvencia_cod_aport ON sol_solvencia USING btree (cod_aport NULLS FIRST);

Y

CREATE INDEX idx_sol_solvencia_estatus ON sol_solvencia USING btree (cod_estatus);

El EXPLAIN cambia considerablemente:

Aggregate  (cost=32.19..32.20 rows=1 width=4)
  ->  Index Scan using idx_solvencia_fecha on sol_solvencia  (cost=0.00..31.96 rows=94 width=4)
        Index Cond: (fecha_now = ’11-04-2014′::date)
        Filter: ((estado = 1) OR (estado = 15))

Al realizar un escaneo sobre índices y luego una función de agregado sobre ámbos índices, la consulta se ejecuta en 1.7 milisegundos …

¡toda una mejora!, ¿no les parece?

Prepáralo, ponlo para llevar

Luego, les expliqué el concepto del planificador, del GeQo de postgreSQL, y de cómo se analizaban las consultas, luego de ello, les dije “¿y se imaginan que ese tiempo pudiera bajarse más?” … te miran con cara de gallina comiendo sal y tú les muestras PREPARE.

PREPARE genera sentencias preparadas, toma una consulta común, la pasa por el planificador, construye el plan en base a criterios pre-definidos y compila este plan, presto a simplemente recibir los parámetros, ¿y qué ganamos con esto?, ¡ahorrarnos milisegundos valiosos de planificación!.

PREPARE pln_obtenersolvencia (int, varchar) AS
SELECT * FROM sol_solvencia WHERE cod_aport = $1 and estatus = $2;

Como ven, la sentencia preparada es simplemente un QUERY tradicional, al cual hemos pasado sus condiciones (que deben ser criterios, no metadatos) como parámetros, así, postgreSQL puede analizar, planificar y compilar la sentencia y esperar únicamente a que pasemos los parámetros:

EXECUTE pln_obtenersolvencia(682185, 1);

Total runtime: 0.473 ms
(1 filas)

De 1.7 a 0.4 ha sido una mejora interesante, ¿no?.

Conclusiones

No busco “echarme de enemigos” a los desarrolladores, yo también soy uno (de diseñado APIs, frameworks, y módulos en python y PHP), pero, cuando se trata de bases de datos, los desarrolladores deben quitarse los audífonos, la sudadera geek y ponerse en la camisa y anteojos nerd de los DBA; porque al final del día, la aplicación no se está diseñando para yo sentirme cómodo para trabajar con fechas o agregar y agregar campos sin mantener un diccionario de datos simplemente porque me pidieron en un lugar meter el RIF como J310210423 en otro como J-31021042-3 y en otro el tipo de contribuyente por un campo y el código del mismo por otro; no se trata de nuestra comodidad (o de nuestro limitado conocimiento como desarrolladores) sino de la eficiencia y la funcionalidad que deben garantizar que sea el USUARIO FINAL (y sólo él, porque al final, es el que usará todos los días la aplicación) quien disfrute el uso de nuestra aplicación.

Por cierto, como colofón, habrán notado que la tabla se llama “solvencia”, si, es un sistema que genera solvencias al público en general, ahora las consultas duran menos de un milisegundo (y no casi un segundo en cargar) por lo que la mejora impacta a miles de personas que solicitan la solvencia en ese sistema …

… Y ya el CPU no se agota en la máquina virtual! …

 

Instalar openWRT a un TP-LINK WR-741ND

He tomado un viejo enrutador TP-LINK pre-N (150Mbps) que tenía por allí para actualizarle el firmware e instalar openWRT, mis razones de por qué openWRT y no DD-WRT?

tplink

  • Lo que no podés hacer por la interfaz, lo hacés por consola
  • El soporte a VLANs es exactamente igual al nativo en Linux, si aprendí en Linux, lo sé hacer en openWRT
  • Selección: Varios “optware” (módulos opcionales) y mod-hackings presentes para openWRT me son útiles (como soldarle un puerto USB y usarlo como servidor de impresión)

Entre otras cosas, DD-WRT es bastante óptimo en estos equipos para cosas como permitir gestionar la inalámbrica, múltiples SSID (es lo bueno del software libre: elección) pero en mi caso, usaré el equipo para más cosas y por ende openWRT es mi opción.

Actualización del Firmware oficial

Lo primero que debemos hacer es actualizar el firmware oficial de la página de TP-LINK, esto con el fin de evitar inconvenientes y tener un firmware “oficial” de respaldo ante cualquier inconveniente.

or seguridad, actualizar a la última versión de la versión 1 (V1.6 en mi caso).

Descargar cualquier versión v1 del ROM oficial acá:

http://www.tp-link.com/ve/support/download/?model=TL-WR741ND&version=V1

- Descargar y descomprimir:

wget -c http://www.tp-link.com/resources/software/201011814560814.zip

unzip 201011814560814.zip
cd 201011814560814

- Ir a System Tools > Firmware Upgrade y cargar el binario que descargamos (wr741nv1_en_3_12_4_up(100910).bin)

- Reiniciar el equipo y luego un “factory defaults”

downgrade

Listo, actualizado a la última versión “oficial”, pasamos a obtener OpenWRT.

Obtener openWRT

Para obtener openWRT podemos ir a la página oficial del enrutador:

Página oficial: http://wiki.openwrt.org/toh/tp-link/tl-wr741nd

Y aprovechar el WIKI en español que nos ofrecen:

Wiki de openWRT en español: http://wiki.openwrt.org/es/toh/tp-link/tl-wr741nd

Para descargar la última versión estable para el enrutador (Backfire) apuntamos a:

- Descargar la última versión backfire:

http://downloads.openwrt.org/backfire/10.03.1-rc3/ar71xx/openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin

- O con la última versión del trunk:

http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-wr741nd-v1-squashfs-factory.bin

También he descargado la última versión Beta (2014) (versión de actualización):

http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-wr741nd-v1-squashfs-sysupgrade.bin

Con esto descargado, ahora si procedemos con el enrutador.

Desactivar opciones en el Router

Por seguridad deberíamos cumplir los siguientes criterios:

  • Estar conectados por la red alámbrica
  • Desactivar la red inalámbrica
  • Tener un firmware oficial descargado
  • Energía eléctrica estable (se los aseguro!, lean el último capítulo)

 

Preparando el TP-LINK para instalación

- Conectarse al equipo vía cable (parece obvio, pero hay que recordar que no se puede hacer este procedimiento vía wireless).
– Hacemos un respaldo del mismo (System tools > Backup & Restore > Backup)
– Reiniciamos el equipo a sus valores de fábrica (System Tools > Factory Defaults)
– Entramos al equipo con sus valores por defecto (IP: 192.168.1.1, user:admin, password:admin)
– Deshabilitamos el radio del equipo, para ello:
* vamos a la opción “wireless”
* desmarcan el checkbox “enable wireless radio”
* presionan el botón “SAVE”
* hagan click en el link “reboot” y luego en el botón “reboot”
* vayan a “status” y confirmen que Wireless está DISABLE.

wireless-disableAhora, ya podemos iniciar la instalación de openWRT.

Instalación vía Web

- Vamos a Firmware Upgrade (System Tools > Firmware Upgrade)

firmware-upgrade

Allí escogemos el archivo del firmware openWRT que seleccionamos y le damos “UPGRADE”.

Luego de unos minutos verán:

completed

Y el equipo se reiniciará en openWRT.

Accediendo al openWRT por primera vez

Al encender nuevamente el TP-LINK y conectarnos por red inalámbrica, nos dará una IP de la subred 192.168.1.0; nos conectamos al router a través de http://192.168.1.1/

Nos exigirá asegurar el equipo con una clave:

dd-wrt-first

Y luego de insertar la clave veremos que solicitará que aseguremos el acceso SSH:

no-password

 

Hacemos click en “Go to password configuration”:

Y configuramos la clave del usuario root:

openwrt-first

y el acceso SSH, luego presionan “SAVE & APPLY”:

save-apply

Y ya estamos listos para configurar, o para actualizar a la versión trunk “attitude adjustment”.

Actualizando a una nueva versión

descagar attitude_adjustment: http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-wr741nd-v1-squashfs-sysupgrade.bin

Para actualizar se puede contar con varios modos, acá explicaré el modo SSH, el modo SCP (failsafe) y el modo Web

Modo Web

El modo web es muy sencillo, simplemente van a SYSTEM > FIRMWARE UPGRADE y cargan la versión de firmware que contenga la palabra “sysupgrade”:

system-flashing-openwrt

Vigilen los LEDs, cuando vean que el equipo esté completamente activado, verán que pierden el acceso Web, es porque hay un par de módulos que se deben activar “a mano” en esta versión de openWRT.

Acceso SSH:

  • Acceden por SSH al equipo 192.168.1.1 con el usuario “root” y la clave que le proporcionaron.

openwrt-ssh

Ejecutan los siguientes comandos:

opkg update
opkg install luci

/etc/init.d/uhttpd start
/etc/init.d/uhttpd enable

Y listo!, ya pueden acceder a la interfaz web.

Actualización via SSH

Podemos acceder vía SSH al TP-LINK y actualizarlo vía SSH

- Con acceso a Internet

Si es con acceso a Internet, simplemente, nos vamos al directorio TMP

root@OpenWrt:~# cd /tmp

Descargamos el FIRWMARE “sysupgrade” necesario:

root@OpenWrt:/tmp# wget -c http://downloads.openwrt.org/snapshots/trunk/ar71xx/openwrt-ar71xx-generic-tl-wr741nd-v1-squashfs-sysupgrade.bin
Connecting to downloads.openwrt.org (78.24.191.177:80)
openwrt-ar71xx-gener 100% |*****************************************************************************************************| 2880k 0:00:00 ETA

Ejecutar la actualización:

root@OpenWrt:/tmp# sysupgrade -v /tmp/openwrt-ar71xx-generic-tl-wr741nd-v1-squashfs-sysupgrade.bin

Upgrade completed
Rebooting system…

Al finalizar el reboot, hacer un “cold reset” (desconectar la energía, esperar 10 segundos y reconectar).

Volver a conectarse vía SSH y activar la interfaz web:

opkg update
opkg install luci
/etc/init.d/uhttpd start
/etc/init.d/uhttpd enable

- Sin acceso a Internet

Si no cuentan con Internet, pero el firmware lo han descargado a un equipo al que están conectados alámbricamente entonces usan SCP para copiarlo a /tmp en el TP-LINK

root@OpenWRT:/tmp# scp -P 22 root@192.168.1.2:/home/jesuslara/Descargas/openwrt/openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin .
Host ‘192.168.1.2’ is not in the trusted hosts file.
(ssh-rsa fingerprint md5 81:05:23:57:67:f5:bd:79:8a:08:2b:d9:eb:14:aa:00)
Do you want to continue connecting? (y/n) yes
root@192.168.1.2’s password:
openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin 100% 3840KB 768.0KB/s 00:05

Y actualizamos:

root@openWRT:/tmp# sysupgrade -v /tmp/openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin
Saving config files…
etc/sysctl.conf
etc/shells
etc/rc.local
etc/profile
etc/passwd
etc/inittab
etc/hosts
etc/group
etc/dropbear/dropbear_rsa_host_key
etc/dropbear/dropbear_dss_host_key
etc/config/system
etc/config/firewall
etc/config/dropbear
etc/config/dhcp
killall: watchdog: no process killed
Failed to connect to ubus
Switching to ramdisk…
Performing system upgrade…
Unlocking firmware …
Writing from <stdin> to firmware … [w]
Upgrade completed
Rebooting system…
Connection closed by foreign host.

Igual que los anteriores, actualizamos el opkg update y accedemos vía web.

Modo Failsafe

El modo “failsafe” es un modo busybox que es útil para recuperación, incluso en modos cuando ningún acceso es posible, en los TP-LINK el modo FAILSAFE se logra de la siguiente manera:

  • Desconectar cualquier cable de red que se tenga conectado
  • Desconectar de la corriente, esperar 10 segundos
  • Volver a conectar, observando los LEDs
  • Cuando el LED “SYS” comienza a parpadear y antes de quedar fijo, presionar varias veces el botón QSS
  • El LED “SYS” comenzará a parpadear muy rápidamente “Flash-blinking”, están en modo FAILSAFE

Para conectarse al modo FAILSAFE, deberán configurar manualmente su interfaz eth0 a la subred 192.168.1.0, yo en Debian ejecuté:

  • Desactivé el network-manager (service network-manager stop)
  • ifconfig eth0 up && ifconfig eth0 192.168.1.2 netmask 255.255.255.0

Y nos conectamos vía Telnet:

root@tafil:~# telnet 192.168.1.1
Trying 192.168.1.1…
Connected to 192.168.1.1.
Escape character is ‘^]’.

=== IMPORTANT ============================
 Use 'passwd' to set your login password
 this will disable telnet and enable SSH
 ------------------------------------------
BusyBox v1.19.4 (2014-04-23 10:39:15 UTC) built-in shell (ash)
Enter 'help' for a list of built-in commands.
_______ ________ __
 | |.-----.-----.-----.| | | |.----.| |_
 | - || _ | -__| || | | || _|| _|
 |_______|| __|_____|__|__||________||__| |____|
 |__| W I R E L E S S F R E E D O M
 -----------------------------------------------------
 BARRIER BREAKER (Bleeding Edge, r40555)
 -----------------------------------------------------
 * 1/2 oz Galliano Pour all ingredients into
 * 4 oz cold Coffee an irish coffee mug filled
 * 1 1/2 oz Dark Rum with crushed ice. Stir.
 * 2 tsp. Creme de Cacao
 -----------------------------------------------------

A partir de acá, la actualización procederá igual al modo SSH con o sin Internet.

Acceso Web a la versión trunk

Por seguridad, al actualizar, openWRT les exigirá reconfigurar la clave y el acceso SSH (con su nueva interfaz):

password-openwrt-2

y SSH:

ssh-openwrt-2

Luego, ya podemos configurar la inalámbrica:

configure-wifi

Y listo!, en próxima entrega otros experimentos! …

PD: ¿Y el modo recovery?

Cuando me encontraba experimentando con las diversas versiones y hacks de openWRT (Gargoyle, “attitude adjustment”, etc) durante un proceso de upgrade hubo un bajón de electricidad (bueno, técnicamente se fue la luz en mi casa) y el TP-LINK había quedado en un estado “BRICK” (un gran ladrillo), con el botón SYS completamente colgado. Es allí cuando el modo “recovery” entra en operación.

Para ello, accedemos vía telnet tal como expliqué, no sin antes borrar todo en la memoria existente:

Primero, ejecutamos “firstboot”

root@(none):/# firstboot

This will erase all settings and remove any installed packages. Are you sure? [N/y]
y
/dev/mtdblock3 is not mounted, erasing it
erasing 0 10000
erasing 10000 10000
erasing 20000 10000
erasing 30000 10000
erasing 40000 10000
erasing 50000 10000
erasing 60000 10000
erasing 70000 10000
erasing 80000 10000
erasing 90000 10000
erasing a0000 10000
erasing b0000 10000
erasing c0000 10000
erasing d0000 10000
erasing e0000 10000
erasing f0000 10000
root@(none):/#

Cambiamos al directorio TMP

root@(none):/# cd /tmp

Luego, usamos SCP para copiar un firmware COMPLETO (no un sysupgrade) a /TMP:

root@(none):/tmp# scp -P 22 root@192.168.1.2:/home/jesuslara/Descargas/openwrt/openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin .

/usr/bin/dbclient: Warning: failed creating /root/.ssh: Read-only file system

Host ‘192.168.1.2’ is not in the trusted hosts file.
(ssh-rsa fingerprint md5 81:05:23:57:67:f5:bd:79:8a:08:2b:d9:eb:14:aa:00)
Do you want to continue connecting? (y/n) yes
root@192.168.1.2’s password:
openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin 100% 3840KB 768.0KB/s 00:05

Y lo cargamos con sysupgrade:

root@(none):/tmp# sysupgrade -v /tmp/openwrt-ar71xx-tl-wr741nd-v1-squashfs-factory.bin
Saving config files…
etc/sysctl.conf
etc/shells
etc/rc.local
etc/profile
etc/passwd
etc/inittab
etc/hosts
etc/group
etc/dropbear/dropbear_rsa_host_key
etc/dropbear/dropbear_dss_host_key
etc/config/system
etc/config/firewall
etc/config/dropbear
etc/config/dhcp
killall: watchdog: no process killed
Failed to connect to ubus
Switching to ramdisk…
Performing system upgrade…
Unlocking firmware …

Writing from <stdin> to firmware … [w]

Upgrade completed
Rebooting system…
Connection closed by foreign host.

El equipo “volverá a la vida” después de eso, de no ser así, podrían montar un TFTP y cargar el firmaware, usar MTD o incluso podrían fabricarse un cable USB-to-SERIAL para conectarse al TP-LINK (requiere algo de experiencia y soldadura!).

Incluso, podríamos usar el modo FAILSAFE para devolver el equipo a un firmware STOCK.

¿Qué más?

OpenWRT es bastante completo, lástima que su interfaz no sea “tan elaborada” como la de DD-WRT, sin embargo, tiene mucho más desarrollo (la versión TRUNK de mi TP-LINK es de Marzo de este año), por lo que sirve para tener cosas tan avanzadas como un kernel 3.3 o soporte a openFlow y openVswitch, entre otras.

En próximo artículo, VLANS y múltiples SSID.

 

¿Y DD-WRT?, si, también lo instalé en el TP-LINK, la forma de instalación es muy semejante … comenta si deseas que haga un artículo.

Happy Hacking!

 

 

 

Linux Disks: Rescatando data de un disco de portátil VIT de las garras de la muerte

Mil disculpas por tener abandonado el blog!, ciertamente el no tener portátil y trabajar con portátil prestada, me limita en las cosas que podría y/o debería hacer en el equipo, además el trabajo, múltiples ocupaciones hacen imposible dedicarle mucho tiempo a escribir …

Pero sucedió algo … ;-)

Me encontraba usando una portátil VIT (modelo 2400), en vista que mi anterior portátil Thinkpad fue robada en diciembre pasado, con el equipo todo iba bien salvo algunas cosas:

  • Ligeros congelamientos en el mousepad
  • Keycodes disparados (visibles en el dmesg) sin haber presionado ninguna tecla especial
  • Algunos problemas con la red
  • Incompatibilidad con Debian Jessie e imposibilidad de usar un kernel liquorix con la tarjeta inalámbrica que trae.

Bueno, todo iba bien con el equipo, hasta que un día, de improviso y sin siquiera avisarlo el smartctl, el disco duro se congeló!, el equipo literalmente se congeló por completo, una larga espera y tuve que apagarlo forzado.

Al encender, veo que insólitamente el BIOS ni siquiera ve el disco!, es decir, el disco duro se ha “esfumado”, tratando de “dilucidar” tan extraño comportamiento de la BIOS (imaginándola tal vez desactualizada y jamás dudando de un disco duro SATA3 de menos de un mes de uso), decido probar suerte y meto un Live-USB de Debian Installer.

Pero, por si acaso, presiono “TAB” para editar la entrada del “Advanced Options > Rescue Mode” y escribo:

idebus=66 pci=routeirq

La primera opción, hace que el disco funcione como un IDE-66 (PATA-compatible) y la segunda opción cuestiona la decisión de asignación de IRQ de la tarjeta madre y decide que el kernel la haga por si mismo (esto me permite en algunas tarjetas madre “buggy”, como la que usan en VIT, detectar hardware con problemas).

Insólito!, el disco aparece en el dmesg!

[ 2377.833672] end_request: I/O error, dev sdb, sector 4007
[ 2377.833689] sd 9:0:0:0: [sdb] Unhandled error code
[ 2377.833695] sd 9:0:0:0: [sdb] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[ 2377.833708] sd 9:0:0:0: [sdb] CDB: Read(10): 28 00 00 00 0f a7 00 00 08 00
[ 2377.833745] end_request: I/O error, dev sdb, sector 4007
[ 2377.833767] sd 9:0:0:0: [sdb] Unhandled error code
[ 2377.833774] sd 9:0:0:0: [sdb] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[ 2377.833784] sd 9:0:0:0: [sdb] CDB: Read(10): 28 00 00 00 0f a7 00 00 08 00
[ 2377.833820] end_request: I/O error, dev sdb, sector 4007
[ 2414.775081] sd 9:0:0:0: [sdb] Unhandled error code
[ 2414.775083] sd 9:0:0:0: [sdb] Result: hostbyte=DID_BAD_TARGET driverbyte=DRIVER_OK
[ 2414.775086] sd 9:0:0:0: [sdb] CDB: Read(10): 28 00 00 00 00 41 00 00 02 00

Ahora bien,eso realmente no significa mucho, el disco da problemas de montaje, sin embargo, el DRIVER_OK me causa sospechas, ¿y si el disco está bueno, pero la lógica de comunicación de la tarjeta madre está operando mal?, entonces apago el equipo y reinicio el sistema de rescate, pero esta vez con dos opciones más:

libata.force=noncq libata.atapi_passthru16=0 idebus=66

Con la primera opción, fuerzo la desactivación del NCQ, es un sistema de cola de comandos de 32bits que utilizan los discos SATA y SSD más modernos para comunicarse con la tarjeta madre, un error en la lectura de comandos por parte de la controladora ATA puede “simular” un fallo de hardware y desactivar el disco; por ende, desactivar el NCQ puede ayudar a la controladora SATA a entender al disco duro.

La segunda opción, me permite tratar al disco como si fuera un viejo IDE, desactivando el soporte a comandos de 16 bits.

Con estas dos opciones, mágicamente el disco duro ahora es perfectamente detectado, he montado un disco externo, rescaté los datos a dicho disco externo y listo!, datos del disco duro “dado por muerto” rescatados.

¿y qué pasará con la portátil?

Aunque pudiera desactivar el modo AHCI en el BIOS y funcionar en modo IDE y pudiera luego pasar estas opciones en el GRUB, ciertamente estas opciones hacen que el disco vaya a muchísima menos velocidad que en condiciones normales, cómo la única posible solución documentada es una actualización del BIOS que le permita actualizar la tabla APCI y corregir el bug NCQ de la controladora ATA; será mejor devolver el equipo ya que al ser un equipo VIT ensamblado en Venezuela con piezas chinas, es poco probable que el proveedor de piezas de VIT haya sacado alguna “actualización de seguridad” del BIOS VIT.

Si a alguno le quedó el disco como “desaparecido del BIOS” en una VIT y necesitan con urgencia sacar unos datos, les indico que esta es la solución de resurrección más idónea.

Si alguien sabe como “actualizar” el BIOS de una VIT, me avisa …

Actualización

Luego de “despertar” al disco con “idebus=66 libata.force=noncq” y apagar inmediatamente el equipo, EL EQUIPO ENCENDIÓ!, normalmente, salvo que al llegar al GRUB, por precaución agregué ámbas opciones (idebus=66, libata.force=noncq) y pude llegar al GNOME para sacar sin apuro y con más vigilancia (y con un entorno gráfico) algunas cosas que no había respaldado.

Happy Hacking!

Ideas sin patentar

Nunca me han gustado las patentes, ni su idea, ni su filosofía, siquiera su existencia misma, y no, no es envidia, no envidio al hombre que “patentó” la idea de hacerle ejercicio a un gato con un apuntador láser:

patent-cat-exercise

Ni la de “dispositivo portátil electrónico para enviar y recibir correos electrónicos” patentada en 1984 por RIM y es la causa de que aún no haya ido a la quiebra, gana más por regalías de esta patente que por sus propios productos, o incluso aquél hombre que “quizo” patentar como juguete el sable láser luego de la primera película de George Lucas en 1977 … y descubrir que George Lucas ya lo había patentado …

El punto es, que en 1984 RIM no construyó ningún teléfono que enviara y recibiera correo (ni siquiera había celulares), ni el primer teléfono “touchscreen sin botones” fue el iphone (fue de LG), como tampoco fue el primer ratón de Apple (fue de Xerox Palo Alto), la cosa es, la humanidad avanza sobre ideas, si alguien toma una idea mia y la mejora, está ayudando a la humanidad, si alguien gana más dinero que yo con una idea mia, es que yo realmente no supe verle el potencial que esa otra persona vió.

Proteger los derechos de autor (y liberar mi idea como a mi me de la gana, por ejemplo, con una licencia libre) es una cosa completamente distinta, estoy protegiendo algo que YO HICE, no algo que “tengo pensado hacer en algún futuro y voy a patentarlo para que nadie más lo haga, y si lo hacen lo jodo!”.

En el software libre, uno toma ideas, las mejora y luego pone las mejoras tanto a disposición del creador original, como de la comunidad, hay quienes no creen en esta fórmula, a veces, porque consideran que serán “robados”, otras, porque se subestiman imaginando que “más nunca” tendrán otra idea importante en sus vidas (como si hacerle ejercicio al gato fuera tan importante).

Tormenta de ideas libres

Un par de días atrás, me encontraba con unos amigos (@_seraph1, @willicab) discutiendo las posibilidades de automatizar algunas cosas en GNU/Linux (soy amante de la automatización y la pereza) y surgió una idea interesante, ¿te imaginas si uno pudiera “dibujar” la sub-red completa, algo como lo hacen “GNS3″ o “autonetkit” y que un script tomara ese “dibujo” y desplegara la solución completa vía contenedores LXC?; a partir de allí, a diferencia de muchos “empresarios”, no salí con folios de carpetas a “patentar” la idea, al contrario, me puse a contactar a otros amigos (@LuisAlejandro) a ver ¿qué cosas se le ocurrían?, Luis aportó muchísimo con la idea de, en vez de usar Java Jed, Inkscape o Dia, cree una sencilla aplicación “drag-n-drop” web con node-js y flask (o lo que se me ocurra), mientras contactaba amigos de otras latitudes como Walter Stanish (aka GlobalCitizen) para ver qué posibilidades había de hacerlo usando LXC.

Por allí surgió LXC-Tools > https://github.com/phenobarbital/lxc-tools

Gracias a Walter, tengo ahora una plantilla funcional para Gentoo, también una para CentOS 6 y gracias a Javier Lezcano, tengo una funcional para Debian, o gracias a los scripts de roles y hooks hechos por Steve Kemp de los Debian Xen-tools, ahora puedo post-configurar los contenedores LXC.

Gracias a una “chuleta” (en Venezolano, una guía para “copiarse”) de Luis Alejandro, estoy creando la plantilla para contenedores LXC Canaima, gracias a Sthefane Graber de Ubuntu llegan unas plantillas de Ubuntu Server 100% funcionales y gracias a los posts de Jonathan Carter en sudáfrica, voy a comenzar a usar la API de LXC en Python.

¿Se imaginan qué sería del mundo si todos “patentaramos” y “cerraramos filas” ante cada idea interesante que tengamos? … estaríamos, imagino yo, en una época victoriana maravillándonos de las posibilidades del vitriolo blanco y sus propiedades descritas por Platón.

“Liberando” un ejemplo

Es decir, vean este “ejemplo”:

E imaginen que esa imagen está en algún formato “libre” (SVG, graphML, xfig, etc), es extraordinariamente trivial, simular toda una suerte de VLANs en Linux (usando VLAN y 802.1q), simular un “soft-layer 3″ Switch, un Switch de capa-4 con load-balancing, usar openvswitch para los túneles y la comunicación fluída entre contenedores, y claro, usar LXC para crear y “simular” cada servicio (DNS, Web, FileServer, Directory, etc), el Firewall (ej: shorewall) e incluso, gracias a GNS3, se que puedo “emular” enrutadores Cisco usando QEMU y el ISO del software del mismo y con KVM puedo emular PCs con la distribución o incluso el sistema operativo que quiera.

¿Les parece una idea “patentable” o una idea para hacerla pública y que la gente empiece a colaborar para hacerla realidad? …

“Hand of Thief” o por qué Linux no está listo para usuarios finales

Bueno, realmente si está listo, ¡pero para las personas normales no!, la cosa es que hoy me he enterado de un “troyano” para Estaciones de trabajo (usuarios finales) y que “afecta” a diversas distribuciones GNU/Linux, según lo informa la RSA.

Bien, “Hand of Thief” es un trojan-banking, se supone que está diseñado para “robar información” como cookies, inicios de sesión, claves y demás, de diversos navegadores en Linux (firefox, chrome, iceweasel), aunque ciertamente podría ser “de cualquiera”, ya que su método de ataque es comprometer la resolución DNS del equipo, permitiendo, por ejemplo, re-dirigir el tráfico de navegación a proxy-socks externos y allí filtrar-robar tu información.

Los rusos detrás de Hand of Thief lo venden a “ladrones de información” por un monto que oscila entre 1500 y 3000 US$, me imagino que mucha gente comenzará a correr en pánico y a gritar “ya hay virus para Linux, ya hay virus para Linux”, como aquellos que afirman que SELinux es un parche troyano de la NSA, #FAIL.

¿Qué cosa es “Hand Of Thief”?

Conociendo el “origen” de la noticia (la RSA, que han estado en contra de cualquier migración Windows>Linux basándose en seguridad), es posible que sea un “HOAX” muy exhacerbado, sin embargo, todas las “funcionalidades” que pregona el Troyano son alcanzables en cualquier distribución GNU/Linux básicamente instalada:

  • Grabber HTTP-Sessions
  • Re-directing HTTP sessions to external proxies
  • host-list based blocking
  • poison DNS queries
  • Backdoor, Back-connect and Socks5-proxy

Así, que hay que tener mucho cuidado.

… ¿Y qué cosa no es?

Por mucho que pregonen en RSA, “Hand of Thief” no es un virus, ni siquiera es un troyano (en su acepción básica), esto es debido a que “Hand Of Thief” no puede ni instalarse por si mismo, ni afectar alguna “vulnerabilidad” o “puerta abierta” existente (ejemplo: el FBI logra comprometer sistemas e instalar troyanos explotando una vulnerabilidad zero-day en Android, ESO si es un troyano), tampoco se “replica” a sí mismo ni nada, “exige” que el atacante “convenza” a la víctima de “debe instalarlo” y además “debe instalarlo con privilegios de root”, entonces ¿cómo algo que exige que deba ser instalado por el usuario puede considerarse un verdadero troyano?, esto suena como si le solicito a una persona que me entregue “por las buenas” su cartera y las claves de su tarjeta de débito.

y entonces ¿por qué digo que Linux no está listo?

Porque ciertamente hay mucho “ingenuo” allá afuera, Windows está lleno de troyanos y virus no solamente porque tenga muchos agujeros, muchas vulnerabilidades y fallos “zero-day” cada día; sino, que hay demasiada gente estúpida que si recibe un tweet “hey!, a funny pic of you” en un navegador donde tienen su twitter conectado y la cookie de autenticación almacenada, le hacen click sin más y se convierten en otro spammer más del Twitter.

GNU/Linux, en su instalación más básica en la mayoría de las distribuciones (por aquello de “facilitar” al usuario final, su “necesidad” de seguir siendo pendejo) no instalan herramientas básicas de seguridad, ni un solo firewall, ni tcp wrappers, ni un denyhosts ni un MAC (Mandatory Access Control) serio y que evite zero-day flaws (ej: Tomoyo), le dicen “instala este escritorio muy bonito con chicas semi-desnudas y boobies” y “hazle click a todos los “funny pic of you” que quieras porque no te va a pasar nada”, y esto realmente es falso.

Hay herramientas extremadamente sencillas para asegurar nuestros sistemas, por ejemplo:

  • shorewall o ufw (uncomplicated firewall) permiten tener un firewall sencillo en minutos
  • denyhosts permite “bloquear” hosts maliciosos, igual que psad y fwsnort (firewall-snort convierte reglas de SNORT a reglas de firewall linux, de hecho, ya SNORT+BASE detectan actividad de “Hand Of Thief”)
  • Tomoyo es un MAC (Mandatory Access-Control) que prohíbe a nivel de kernel, accesos externos inherentes

Sin embargo, pocas de ellas vienen “por defecto” configuradas en GNU/Linux ya que, todos se preocupan más por “poner bonito su Elementary OS” que en protegerse de accesos externos.

Si por ingeniería social (forma bonita de decir “te vieron la cara de pendejo”) pueden lograr que instales un troyano de tipo “Hand Of Thief”, en definitiva, estás en GNU/Linux por las razones equivocadas.

Si deseas seguir siendo un usuario final despreocupado, para ello, debes invertir un poquito más de tiempo y protegerte.

… y dejar de ser tan “usuario final” …

[Carta abierta a Williams Dávila] Palabras acerca del software libre

Ayer, se estuvo realizando en la Asamblea Nacional la discusión de la Ley de Infogobierno, una ley que busca promover estándares abiertos, con una marcada preferencia hacia el uso del software libre.

En el ínterin de la discusión, tuve una twitter-plática con el Diputado Williams Dávila, que abstuvo su voto en los artículos 34, 35 y 36 (no sé si otros), al igual que el diputado Leomagno Flores (aquel que indicó que el software libre era una dictadura).

Uno de los tweets más interesantes, fue este:

tweet Williams Dávila

Y simplemente quería aclarar algunos puntos, bajo los mismos principios y preceptos que el Diputado Williams Dávila menciona en el tweet.

Defensa del 299

El artículo 299 de nuestra constitución señala:

“El régimen socioeconómico de la República Bolivariana de Venezuela se fundamenta en los principios de justicia social, democracia, eficiencia, libre competencia, protección del ambiente, productividad y solidaridad, a los fines de asegurar el desarrollo humano integral y una existencia digna y provechosa para la colectividad. El Estado, conjuntamente con la iniciativa privada, promoverá el desarrollo armónico de la economía nacional con el fin de generar fuentes de trabajo, alto valor agregado nacional, elevar el nivel de vida de la población y fortalecer la soberanía económica del país, garantizando la seguridad jurídica, solidez, dinamismo, sustentabilidad, permanencia y equidad del crecimiento de la economía, para lograr una justa distribución de la riqueza mediante una planificación estratégica democrática, participativa y de consulta abierta.”

Como vemos, el 299 defiende la eficiencia, la libre competencia, pero además la solidaridad, hay que resaltar qué:

  • El “Software Libre” no es una empresa, es un conjunto de software, licenciado bajo reglas que permiten su utilización a expensas de las 4 libertades fundamentales, son licencias tan válidas como la EULA de Microsoft o incluso sin licencia alguna (dominio público), bajo este precepto, repito, el software libre “no es una empresa”, es usado por las empresas y ellas se encargarán de promoverlo, venderlo (el software libre es libre “por sus libertades”, no necesariamente es gratis), arrendarlo o simplemente cederlo, por lo que un ecosistema de empresas dedicadas al software libre es igual de productivo, competitivo y solidario.
  • La eficiencia y la productividad se garantizan, en el marco de la utilización de estándares que promuevan la interoperabilidad (posibilidad de interacción e intercambio de datos entre dos o más sistemas), ningún software de licencia “cerrada” (a menos que se base en estándares abiertos) podrá garantizar una completa interoperabilidad entre los diversos entes del Estado, a menos qué, ese software sea el único que se use (por lo cual, no hay interoperabilidad, sólo homogeneidad y eso se conoce como MONOPOLIO).

Para darle un ejemplo de este último detalle, expongamos la situación más común, la interoperabilidad de los sistemas de ofimática, fijese, anteriormente Microsoft Office guardaba en un formato binario que sólo ellos conocían y las especificaciones para “interoperar” eran liberadas exclusivamene a los que ellos “quisieran”, por ende, un documento hecho en Microsoft Office no era que “se veía mal en OpenOffice y este era un producto malo”, era que Microsoft Office no liberaba todas las especificaciones para poder construir un “interoperador” con sus documentos eficiente, como sus archivos solo “abrían bien” en su software, eso le garantizó un Monopolio en el mercado de la ofimática.

Luego, con esto de “la nube”, “la interoperabilidad” y “la web 2.0″, Microsoft debió crear un nuevo estándar (Microsoft OOXML, que luego se convirtió en norma ISO) para poder permitir a productos “de la competencia” interoperar limpiamente con él (ej: Google Docs, ThinkOffice, etc), tal fue el cambio con MS OOXML que incluso una herramienta de software libre (OpenOffice) pudo leer primero archivos MSOOXML (.docx) que el propio software de Microsoft.

¿Ve como se garantiza la igualdad, la no-sustentación de monopolios y la interoperabilidad, gracias a los estándares abiertos?.

  • Por ende, ¿puede una empresa que usa licencias cerradas de software competir?, tendría que al menos cumplir dichas premisas “evitar la generación de monopolios, promover la interoperabilidad con estándares abiertos y garantizar que su software sea 100% auditable y eficiente”, al menos, en mi observación, sólo grandes corporaciones (Oracle, Microsoft) y empresas que se dediquen a software libre (por usar estándares abiertos, ser 100% auditables y garantizar la no-existencia de monopolios) podrían competir en este aspecto; como ya las grandes corporaciones tienen garantizada su participación (por distintas razones de orden estratégico, ejemplo, Oracle en PDVSA), promover el software libre es la única manera de garantizar el ecosistema saludable, de alto valor agregado nacional y de justicia social en el país.

Ahora, hablemos de las preocupaciones, que a mí también me afectan con la ley.

ALBET

¿Y qué pasa con la iniciativa privada?, yo tengo una empresa, una compañía anónima, soy asesor de sistemas abiertos no solo en Venezuela, sino en otras partes del mundo ¿acaso no soy una iniciativa privada?, una iniciativa privada que genera empleos y valor agregado nacional tal como me lo garantiza la república, sin embargo, acá viene una preocupación cierta que a usted y a mí nos debe parecer válida ¿y las iniciativas privadas extranjeras?, por todos es bien “conocido” cómo los convenios “bi-nacionales” crearon empresas con discrecionalidad “transversal” en todo el gobierno nacional, una de ellas ALBET de Cuba, se convirtió en la sempiterna de las instituciones públicas, la ves creando joint-ventures con PDVSA y “trabajando unas horas que le sobraron” en CNTI (el organismo que la Ley facultó para asesorar al CONATI).

Más que un “miedo al software libre”, lo que se debe evitar, al tratar de garantizar el 299 constitucional (y el 37 de la Ley), es que se garantice el ecosistema nacional y que prive el fomento de las iniciativas nacionales (la verdadera “soberanía tecnológica”, entendiéndola como la imposibilidad de entregar nuestros sistemas en manos extranjeras, sean norteaméricanas o cubanas, como está pasando ahora) por encima de intereses extranjeros que vienen a vendernos cédulas electrónicas de 7 años de duración que aún no están “ni verdes” como diría mi abuela.

Garantía de acceso a la información pública

Imagine ahora, que le entrego un documento, donde está toda su información, y ese documento está en WordPerfect Office para Mac, usted, tendría que comprar un Mac, más la licencia de WordPerfect Office, simplemente para leer un documento que se supone “es suyo”, ¿dónde está la garantía de acceso a la información pública?.

La garantía de acceso a la información, de manera pública y transparente, pasa por utilizar estándares que le permitan a cualquier persona, en cualquier equipo, en cualquier plataforma e incluso, en cualquier idioma, (ejemplo, Wayuunaiki ó Maquiritare) el acceso irrestricto a toda su información, ¿está el Estado Venezolano en la capacidad, de coordinar con empresas de software privado, versiones en sus lenguas nativas, para todas las plataformas del Estado Venezolano y para cualquier equipo?, ciertamente no lo está (y no es finalidad del Estado Venezolano en realidad coordinar eso); pero el software libre si está en la capacidad de garantizarnos ese despliegue, tomemos por ejemplo, el estándar ODF (OpenDocument Format, utilizado por OpenOffice y LibreOffice, y es un estándar ISO):

  • Su aplicación nativa (OpenOffice|LibreOffice) corre en todas las plataformas (PC, MAC, etc) y en muchos sistemas operativos, incluído Microsoft Windows.
  • Al ser ISO, miles de aplicaciones han realizado “interpretes” para verlos (ejemplo en la nube: Google Docs)
  • Proyectos “abiertos” de traducción (como el de LibreOffice) le garantizan que cientos de personas, pueden crear proyectos de traducción en los idiomas necesarios (un compañero de la comunidad @radical_michael en twitter, ha creado una comunidad para colaborar con gnome para traducirlo a lengua Wayuu).
  • OpenOffice|LibreOffice tienen conversores a cualquier formato que sea ISO (DOCX ó PDF) que garantizan la conversión y luego el acceso de la información a aquellas personas que no posean dicha aplicación (que además, es gratis y pueden descargar sin costo en su equipo, para poder leerlo).
  • ODF es de una fundación (OASIS Fundation), no es de ninguna empresa ni posee regalías, no existirá “una sola empresa en el mundo que nos venda OpenOffice” y podrá existir una única aplicación que abra bien los ODF (de hecho, ya Microsoft Office 365 abre perfectamente documentos ODF).

¿Qué software propietario|privativo puede garantizar esto?, el que “todo el mundo tiene Microsoft Office” no es una excusa, ya que más del 60% de los venezolanos usan software “pirata” en sus computadores, no solo estamos fomentando el monopolio, sino además el robo a una empresa transnacional.

Y el acceso, es público

tweet2

El elector no necesita acceso al código fuente de los sistemas (aunque no debería negarsele la posibilidad, de solicitarla), quienes lo necesitan son las organizaciones políticas (como los partidos) para garantizar, vía la auditoría de sistemas (verdaderas auditorías y no esas “miren, todo funciona de maravilla” y salta alguien con una “clave fantasma” que nadie sabe como la obtuvo); una de las grandes ventajas de la Ley de Infogobierno (que lleva engavetada desde 2005 y ciertamente está siendo aprobada más por “discurso ideológico” que por entender sus implicaciones) es que dicha Ley puede convertirse en un verdadero “Caballo de Troya” que garantice a cualquier ciudadano, con las ganas (y el conocimiento) de auditar al Estado, de develar toda la maraña que hay “detrás” de la mastodóntica burocracia construída en estos 14 años.

Tan acostumbrados están a aprobar cosas por “levantar la mano y discursividad leguleya”, que el gobernador Ameliach pone en su página web que está dictando cursos de Microsoft Office y la propia plataforma tecnológica de la Asamblea Nacional (esos diputados que se rasgan vestiduras y se ponen franelitas de “yo uso software libre” y jamás lo han visto) está en tecnologías privativas; dudo que ellos sean los más “interesados” en verdad, en cumplir dicha ley.

Poniendo como ejemplo el organismo que nombra, el CNE, yo me especializo en estudio de datos (uso un par de herramientas libres muy buenas para minería y análisis de datos, Pentaho y Talend Studio) y yo quisiera por ejemplo, tener acceso a la data de electores (que extrañamente este año, removieron el campo “fecha de nacimiento” de la DB oficial) y verificar cosas como:

  • La densidad del promedio de voto en una zona de Concepción, Iribarren (Barquisimeto, Edo. Lara, de donde vengo) fue el 7 de Octubre cuando allí Maduro sacó 30% y 69% Capriles, es una superficie de más de 30 centros electorales (y una populosa población) en todos los centros, los promedios oscilan entre 30%/69% hasta 40%/58%, salvo en un centro, un extraño y único centro que desvió toda la densidad promedio de la zona, donde Maduro ganó con 70% y la abstención en un increíble 8% (en otros centros 20%, manteniendo el promedio nacional), ¿cómo puedo yo auditar, como ciudadano, la data de ese centro?, ¿cómo puedo contrastarla, por ejemplo, con fechas de nacimiento, si el CNE no me da esa información?, ¿o con RIF o data del SAIME (para verificar veracidad en los datos publicados, ejemplo, verificar contra cédulas registradas en el SAIME); es decir, podría ser simplemente una “desviación” típica producto de las personas censadas y “movilizadas” a ese centro, pero también podría ser el tan “mentado” voto-asistido o incluso “electores fantasmas”, que tanto propugna la oposición, ¿cómo podrían saberlo?.
  • Hay una **familia** “interesantemente distribuida” alrededor del país, de apellido “ññjia”, fijese en este detalle:

V-3594708 ÑÑJIA FEBRES ANDRES RAFAEL PRIMER MIEMBRO SUPLENTE DE MESA (sin RIF para corroborarlo)

* Acá hay un ÑÑJIA en Sucre:

V 590563 ÑÑJIA ANGEL CUSTODIO 46940 (Casualidad, tampoco tiene RIF)

* Hay otros dos que si están en el SENIAT y que no son hermanos al parecer:

V 3282936 ÑÑJIA ANDRES RAFAEL 47390 (verdadero nombre según SENIAT: V032829364 MEJIAS ANDRES RAFAEL)

V 5694118 ÑÑJIA MAICAN ANIBAL RAFAEL 46080 (verdadero nombre según SENIAT: V056941181 ANIBAL RAFAEL MEJIA MAICAN)

Dirá cualquiera que defienda al CNE ¿problemas al registrarlos?, ¿uno en Sucre, otro en Miranda y otro en Carabobo?, 4 mecanógrafos, en 3 Estados distintos, no pueden cometer “el mismo error” de tipear “ÑÑJIA” en vez de “Mejía” o “Mejías”, esto significa qué, hay un proceso de contaminación “externo y continuado” de la base de datos del CNE, que causa alteraciones como esta (debido a que CNE no se conecta eficientemente a SAIME, no hay forma de “normalizar” los datos).

NOTA de revisión: en la última versión de la DB (abril 2013) muchos de esos nombres ya han sido normalizados.

Quisiera saber ¿cómo sino utilizando estándares abiertos y garantizando el acceso irrestricto a la información pública contenida en nuestros servidores (porque ESTADO nos incluye, los servidores del CNE son tan míos como de los Rectores) se podrá garantizar el acceso a la información que se necesita?.

Ahí le expongo sólo un ejemplo, imagine por ejemplo, poder contrastar en tiempo real, conectando SAIME > SENIAT > SAREN > BANAVIH > MINTRA > SNC la veracidad de los datos de algunas “empresas de maletín” que pupulan en la APN (por allí hay una “cooperativa” con muchos “guisos” y los verdaderos trabajadores de la misma no tienen ni un contrato formal con ella, están a “destajo” violando todo reglamento de SUNACOOP).

Conclusiones

Tal vez sea muy ingenuo, tal vez ALBET no se va a ir del país así como así (aunque muchos compañeros “chavistas” no quieran a ALBET, son incapaces de enfrentar a sus líderes para hablar mal de ella), tal vez la Ley sólo sirva de “letra muerta” para afianzar esos sospechosos convenios de software con empresas Uruguayas (una de ellas, del *malandro* hijo del ex-presidente Tabaré Vásquez) o con empresas Cubanas (como quejarse de PRISM y de la NSA y comprar software para el espionaje de ciudadanos a Cuba); pero considero que uno no debe echarse para atrás en las trincheras, todo lo contrario, debe buscar adelantarse y aprovechar los “huecos jurídicos” que permite la ley, para por ejemplo:

  • Usarla de marco para una ley orgánica de transparencia de la administración pública
  • Exigir (bajo el artículo 37) al ente rector (CONATI/CNTI y Min. de Información) la expulsión de empresas Cubanas del país, que violan la propia ley que están aprobando (uso de software privativo, violación de la soberanía tecnológica del país, desmotivación y destrucción del ecosistema de industria nacional, que termina siendo sólo unos “empleados” de los Cubanos o los Uruguayos y no unos verdaderos productores)
  • Exigir en los términos que plantee la ley, de mecanismos de intercambio electrónico entre las instituciones auspiciantes del CONATI, que nos permita a los ciudadanos auditar a nuestros propios Diputados y empleados públicos (¿cuánto venezolano (hasta chavista) acaso no quiere ver la declaración jurada de bienes de Diosdado Cabello?)

Si usted piensa como yo, reflexionará, como verá, el software libre “no es chavista” ni mucho menos “comunista”, al final del día, la “neutralidad tecnológica” no habla de política (aunque politizar el software libre es un “deporte” en este país) ni tampoco de economía (ninguna empresa venezolana va en “igualdad de condiciones” a competir con Microsoft), sino de garantizar la no implantación de monopolios, la no exigencia de una tecnología única y “de-facto” pero garantizando una “normalización” para evitar que un variado ecosistema tecnológico cause el efecto contrario (incompatibilidad e imposibilidades de interoperabilidad), como verá el software libre garantiza la neutralidad tecnológica en 4 puntos:

  • Todos van en “igualdad de condiciones”, por calidad de software y no por el peso o “lobby” que puede hacer una empresa más grande
  • evitar la implantación de monopolios de empresas (la empresa que asesore en la implementación de por ejemplo, OpenOffice en el CNE no necesariamente será la misma que asesore al SAREN, aunque sea la misma herramienta)
  • No habrá tecnologías únicas ni “de-facto”: Microsoft Office es un estándar “de-facto”, nadie “dictó” que lo fuera, simplemente se impusieron a través de su Sistema Operativo, que ya venía “de-facto” en los portátiles y PCs de los fabricantes, al ser software libre (y muchas veces gratis de adquirir), una entidad puede garantizar el acceso por diferentes “tecnologías” para diferentes usuarios (ejemplo, el CNE debería garantizar acceso a su data vía: API programática, descarga de PDF, descarga de ODS ó XLS cual fuere el caso, archivo CSV y un sinfín de tecnologías más, todas libres, todas gratis)
  • Se garantiza la “normalización” a través de herramientas y tecnologías y no a través de “empresas” (se normaliza el intercambio de documentos editables en ODF y de no-editables en PDF, si usas “Microsoft Office 365″ ó “LibreOffice” para abrir el ODF ó usas un Adobe Acrobat, un Evince ó un lector de PDF para Android)  es tú elección, pero el Estado debe garantizar un mínimo de “normalización” en sus sistemas.

Espero que estas líneas lo ayuden a comprender un poco acerca de mis motivaciones de insistirle en la aprobación de la Ley de Inforgobierno, estamos a la orden por acá para cualquier duda.

Gracias por su atención.

[Debian] Virtualizando con Xen XCP

En mi blog “Phenobarbital con Soda! 2 – El hereje” he incorporado el primero (de una serie) de artículos sobre virtualización utillizando Xen XCP, la plataforma de computación en la nube de Xen, ahora estable en Debian Wheezy y lista para entornos de producción.

Hago la nota acá pues tengo muchos más suscriptores por este blog y me gustaría recibir más comentarios que vayan retroalimentando y mejorando la entrada.

Próximamente habrá una versión “copy & paste” en el wiki de phenobarbital.info.

 

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 3.045 seguidores

%d personas les gusta esto: