domingo, 17 de marzo de 2013

aprender python

Por si el título deja lugar a dudas, estoy aprendiendo python.
Cuando nos toca aprender un lenguaje nuevo, siempre buscamos información que nos oriente y nos facilite el proceso, desde google hasta preguntar a nuestros amigos/conocidos que sepan un poco del tema. Así que, aquí voy a dejar algo de material disponible sobre las opciones por las que me he decantado, por si quieres aprender python:


IDE

Eclipse + PyDev: Cómo instalar PyDev: http://pydev.org/manual_101_install.html

Documentación

  • Documentación oficial de Python: [ HTML / PDF / TXT ] Un indispensable en los marcadores. Es la gran fuente de refencia para conocer librerias, clases y métodos oficiales. Desde lo nuevo que se va añadiendo a python hasta saber qué está obsoleto y cual es su reemplazo.

    http://docs.python.org
  • De 0 a python (hackXcrack): [ PDF 18 páginas ] Si ya sabes programar en algún lenguaje, deberías empezar por aquí. Un gran resumen de los conceptos básicos de python.

    http://www.hackxcrack.es/cuadernos/python/Hack_x_Crack_de0aPython.pdf
  • Guía de aprendizaje de Python (Guido van Rossum): [ HTML / PDF 77 páginas ] Introducción a lo que será programar en ptyhon. Trata conceptos desde manejar el intérprete hasta las clases, pasando por el control de excepciones.

    http://pyspanishdoc.sourceforge.net/tut/tut.html http://sourceforge.net/projects/pyspanishdoc
  • Learn Python The Hard Way: [ HTML / PDF + VIDEO (29$) ] Una manera interactiva de aprender python. Aunque describe de forma teórica conceptos fundamentales, el método que se sigue es, básicamente, un método de aprendizaje basado en la pŕactica.

    http://learnpythonthehardway.org/
  • Python para todos (Raúl González Duque - MundoGeek): [ PDF 160 páginas ] Bastante teórico, pero con ejemplos que amenizan el aprendizaje. Este libro abarca todas las fases del desarrollo de un programa, desde "¿Qué es python?" hasta el empaquetado para su distribución.

    http://mundogeek.net/tutorial-python/
  • wxPython + wxGlade: [HTML] Para diseñar y programar GUIs (interfaces gráficas). Me he decantado por wxPython, porque da un look nativo a las aplicaciones en todas las plataformas, y por wxGlade porque es muy sencillo de utilizar.

    http://www.wxpython.org/
    http://wiki.wxpython.org/WxGladeTutorial

Juegos (vía @ivmora)

  • Project Euler - http://projecteuler.net
    Resolver una serie de desafíos matemáticos mediante programación. No es exclusivo para python, pero es una buena forma de aprender nuevos conceptos.
  • Python Challenge - http://www.pythonchallenge.com
    Un "wargame" de programación. Hay que ir resolver un nivel para acceder al superior. Es muy entretenido.

domingo, 10 de marzo de 2013

manejar varias interfaces de red con firestarter e iptables


Por casualidades (o causalidades) de la vida, llevo una temporada usando firestarter como firewall. Firestarter es una GUI para configurar de forma sencilla iptables. Como con todo, después de usarlo un tiempo, surge una lista de pros y contras, en la que yo destacaría:





Pros:

  • Sencillez: Se configura a través de un asistente y diálogos de prefrencias. Definir reglas y políticas se convirte en algo trivial.
  • Buenos defaults: Creo que tiene una buena configuración por defecto, y suficiente para la mayoría de equipos de escritorio. Aunque siempre se pueden añadir y modificar reglas y políticas.
  • Daemon: Se ejecuta como daemon, y se puede configurar para que se inicie/pare al conectarse a internet o al renovar la sesión DHCP.
  • Icono: El icono (opcional) en el área de notificación. Es imposible pasar algún evento por alto (aunque puede llegar a distraer).

Contras:

  • Interfaces: Firestarter permite configurar un dispositivo de red conectado a internet y un dispositivo de red conectado al área local. El problema está en que, dependiendo de la configuración de la red, la interfaz puede ser la misma, o puede no ser suficiente.

Para configurar otra interfaz hay que añadir manualmente las reglas mediante iptables. Pero, después de añadir las reglas, todo lo que pase por esa interfaz se guardará en los logs*.
El peligro está en que si esta nueva interfaz tiene mucho tráfico, los logs pueden crecer GBs, llegando a saturar la partición donde se almacenan.

Hay una forma de solucionar esto, añadiendo las reglas necesarias en /etc/firestarter/user-pre.
Por ejemplo, si firestarter está controlando una interfaz de red inalámbrica (wlan0), para permitir todo el tráfico a través de una interfaz de red cableada (eth0), hay que añadir:

iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT

*Llegados a este punto, he de decir que para evitar saturar los logs lo he intentado todo, o, por lo menos, todo lo que se me ocurrió. He intentado añadir reglas con -m limit, --limit, --limit-burst, LOG, añadir las reglas a las creadas por firestarter... Pero todo se seguía guardando en los logs.
Si conoces otra forma de evitarlo, agradecería un comentario ;)

martes, 1 de enero de 2013

Felíz 2013

Felíz 2013!

Como viene siendo costumbre, me gusta felicitaros el año a todos los que me seguís, por aquí y/o por twitter (incluso a los que me pegan un pequeño tirón de orejas por dejado :P). Sin olvidarme, por supuesto, de los que estáis en talk, de los wikifreaks, de los de la vieja guardia que seguís en el IRC, ni de los que estáis en la vida real ;)

Felíz año a todos y gracias. Gracias por toda esa información que generáis y compartís, por todos esos ratos de charlas, debates, risas y cacharreos varios. Seguid así, sois grandes! :D

domingo, 23 de septiembre de 2012

protege tu grub

La configuración por defecto de GRUB permite que cualquier persona con acceso físico a la máquina, pueda acceder a él y editarlo, pudiendo así obtener una GRUB shell. El problema aparece cuando esa persona tiene ciertos conocimientos y se hace con una root shell, como explican en flu-project en el artículo "El Sticky Keys (sethc.exe) de GNU/Linux".

No es un fallo de seguridad, como bien aclaran en flu-project y el proyecto GNU. Se deja así para facilitar la recuperación de sistemas estropeados, lo cual se consiera la opción más razonable para la mayoría de sistemas. Ya que una persona con acceso físico a la máquina podría utilizar distintas técnicas para comprometerla. De todas formas, en GNU, reconocen y advierten de que en ciertos entornos es conveniente bloquear el cargador de arranque. Así que, si no os fiais del entorno en el que puede acabar vuestro ordenador, bloqueadlo ;)

Cómo podemos bloquear el GRUB?

En dos sencillos pasos:


1. Generar una contraseña de forma segura:

$ grub-mkpasswd-pbkdf2

2. Editar el fichero /etc/grub.d/40_custom y añadir dos líneas:

set superusers="nombreUsuario"
password_pbkdf2 nombreUsuario grub.pbkdf2.sha512.password.increiblmente.larga.que.generamos.antes

Si la opción --unrestricted no es usada en las entradas de grub (y no es añadida por defecto), sólo los usuarios especificados en la lista de superusers podrán editarlo.

Fuentes:

domingo, 22 de julio de 2012

evitar los inhibidores de señal

Imagina que una noche cualquiera estás en tu casa, durmiendo o viendo la televisión, tranquilamente. Cuando, de repente, un grupo de individuos armados decide asaltar tu pueblo con nocturnidad y alevosía. Usando para ello inhibidores de señal (GSM,CDMA,3G,Wifi), prentendiendo así evitar que se conozca y se difunda semejante atrocidad de espectáculo.

Imaginemos, también, que los mass media están durmiendo sus 24h diarias, o demasiado ocupados estudiando ese gran capítulo del periodismo "en verano se habla del calor, en invierno del frío". Pero tú quieres ejercer tus derechos constitucionales, libertad de expresión e información, y hacer saber al mundo lo que está pasando. Cómo puedes evitar sus inhibidores de señal?

  • Cualquier bloqueo: Los inhibidores de señal tienen un alcance limitado. Camina en sentido opuesto a dónde creas que está situado el inhibidor. Una vez salgas de su radio de acción podrás comunicarte con normalidad.
  • Bloqueo de la señal de internet móvil: Usa redes sociales que permitan envíos por sms, como twitter o facebook.
  • Bloqueo de toda señal móvil: Si toda señal móvil se encuentra bloqueada, pero no la señal wifi, se pueden abrir todas las wifis, creando así puntos de acceso distribuidos y accesibles por todo el mundo en toda la zona afectada.
  • Bloqueo de toda señal móvil y wifi: Organización. Creo que llegados a este punto es la mejor alternativa. Por ejemplo, una persona que viva cerca de la primera línea se queda conectada en casa, esperando a que los que retratan el conflicto agoten sus memorias y se las lleven. Esa persona será la encargada de vaciar las memorias y publicar todo el material recogido. Que esa persona esté lo más cerca posible de la primera línea evitará carreras a los intrépidos reporteros y permitirá una retransmisión lo más inmediata posible.
  • Bloqueo de señales móviles, wifi e internet: Aquí se empieza a poner peliaguda la cosa, pero hay alternativas:
    • Módems: En las revueltas de Egipto, varios colectivos de diversos países habilitaron números de teléfono para conectarse mediante módem. Las desventajas son evidentes, hay que tener un módem, un PC en dónde todavía se pueda montar, un número al que conectarse... Pero llegado el caso, tenerlo a mano, o incluso montado y listo para funcionar, puede que no esté de más.
    • Internet por satélite: Si el escenario se localiza en una zona rural, no es raro que algún vecino o edificio público posea una de estas comunicaciones.
    • Radio: Dos alternativas
      • Red de packet radio: Aunque bastante improbable, es una alernativa. Es muy difícil encontrarse a alguien que posea el hardware necesario para montar una emisión de este tipo.
      • Emisoras y teléfonos fijos: Usar las emisoras de radio y los teléfonos fijos para contar a gente cercana lo que está pasando y que ellos lo puedan publicar en todos los medios posibles.
    • Fax: Un gran olvidado, pero empresas, locutorios e incluso alǵun particular, los conservan y les dan uso. Muy útil para poder enviar la información fuera de la zona del conflicto, a tanta distancia como se quiera. Amigos, familiares, algún medio de comunicación (incluso extranjeros), seguro que están encantados de recibirla.

Son sólo unas ideas y técnicas recogidas de diversas revoluciones en todo el mundo. Si quieres aportar alguna más siéntete libre de usar los comentarios -;)

Si has llegado hasta aquí, quizás también te interesen:

domingo, 20 de mayo de 2012

usando la nube con sentido común y p7zip

Al hilo del anterior post ( usando la nube con sentido común y aespipe ), y después de investigar un poco, voy a explicar algo más la última nota del artículo, porque creo que quedó bastante escueta y aislada, y merece profundizar un poco más ;)

p7zip Es, hoy por hoy, mi utilidad favorita para comprimir. Es la versión, en línea de comandos, de 7zip para sistemas POSIX. Es open source, consigue muy buenos ratios de compresión, usa varios núcleos, soporta un montón de formatos y puede cifrar usando AES-256.

*Si lo que queremos es comprimir con contraseña, el script se puede adaptar cambiando la línea de aespipe por el comando que queramos ejecutar. Por ejemplo, para comprimir con contraseña usando p7zip y header encryption (mhe=on):
7z a -r -mhe=on -pCONTRASEÑA $i.7z $i

Esta nota, hace referencia a compimir con contraseña usando p7zip, lo que yo no sabía cuando lo escribí es que, de forma resumida, viene siendo un "comprimir y cifrar para vagos".

Cuando comprimimos con p7zip y usamos contraseña, p7zip aplica una función de derivación basada en SHA-256 a la contraseña, y usa el resultado como clave para cifrar con el algoritmo AES-256.

Resumiendo, sería parecido al método explicado usando aespipe, pero todo en uno ;)

domingo, 13 de mayo de 2012

usando la nube con sentido común y aespipe

Con el reciente auge de los servicios de almacenamiento "gratuítos" en la nube, dropbox, skydrive, google drive... Aparecen unas posibilidades de uso interesantes. Una de ellas es la de usarlos para guardar pequeños backups o utilidades a las que poder acceder desde cualquier sitio con conexión a internet.

Llegados a este punto, deberíamos reflexionar sobre qué información almacenar en este tipo de servicios. Si la información es de carácter crítico, almacenarla en un servicio de este tipo, no es buena idea. En este caso sería más conveniente utilizar un servicio de almacenamiento de pago, o contratar los servicios de una empresa de backuping, con unos términos de uso claros y definidos que garanticen que nuestra información no será accedida por ninguna persona, OCR, bot...

Una vez decidida la información que queremos almacenar en la nube, no todo lo que subamos va a tener el mismo nivel de relevancia o privacidad. Deberíamos clasificar la información, y definir unas políticas de seguridad claras en base a cada tipo. Es decir, no es lo mismo subir unos ebooks, subir unos ficheros de configuración, subir algún proyecto personal o subir una lista de passwords. Por eso habrá que separar la información, básicamente en dos grupos, la que nos da igual que se vea o sea indexada, y la que queremos que permanezca totalmente privada.

Para evitar miradas ajenas sobre la información que queremos que se mantenga privada, tenemos varias alternativas. Entre ellas:

  • Subir el contenido comprimido con contraseña (y confiar en que no se van a realizar ataques de fuerza bruta).
  • Cifrar, cifrar y cifrar

Como la segunda es más segura que la primera, para este punto, tendremos varias posibilidades:

  1. Truecrypt: Todo un clásico y un indispensable en nuestros ordenadores, está claro. La parte mala de usar truecrypt es que requiere crear volúmenes/contenedores de datos, y por pequeños que sean, suponen una gran descarga de datos adicional. Es decir, si el fichero que nos queremos bajar es de 500Kb, por pequeño que sea el contenedor de truecrypt (50Mb, 10Mb?),descargarse el contenedor entero, supone una descarga de datos inmensa en relación con el tamaño del fichero.
  2. GPG: Otro clásico. Una buena elección para cifrar fichero por fichero, siempre que seas ordenado, y guardes y exportes correctamente tus claves gpg. (No es mi caso ;))
  3. Aespipe: Aespipe es una utilidad para cifrar fichero a fichero. Crea ficheros .tar o .cpio cifrados. Lo mejor de usarlo, es que los ficheros mantienen su tamaño original. Aespipe puede trabajar usando claves gpg, aunque no voy a centrarme en este caso, por lo comentado en el punto anterior.

Si escogemos aespipe, éste trabaja, por defecto, en su modo recomendado multi-key-v3, que requiere una clave con una longitud mínima de 20 caractereres. Llegados a este punto, podemos optar por usar una clave del tipo "googlemecagontostusmuertosnomiresloqueguardo", o escoger una clave (segura) que usemos habitualmente, que no llegue a los 20 caracteres y cifrarla, por ejemplo con un SHA.

$ echo -n nuestrapass | sha512sum
c9087d475d0307f2e4130f0d919084366c4572eb2ef88df62d560ba01d40a3d8ddf1c9186662903d3d27e164b6cf4acf5e1400095d3814716ac5176a756f84fe -

Con esto conseguimos una clave que supera ampliamente los 20 caracteres, y que podremos generar en cualquier equipo que utilicemos, recordando, simplemente, nuestra clave y el algoritmo de cifrado.

Si vamos a cifrar un solo fichero, copiar y pegar la pass es suficiente. Pero si vamos a cifrar varios ficheros, podemos guardar la contraseña en un fichero que almacenaremos de forma temporal y que le pasárselo a aespipe como parámetro:

  1. Exportar la clave al fichero:
    $ echo -n nuestrapass | sha512sum | cut -d " " -f1 >> passParaLaNube.txt
  2. Pasarle el fichero con la clave a aespipe como parámetro:
    $ aespipe -e aes256 -P passParaLaNube.txt ficheroCifrado.tgz
  3. Descifrar el fichero:
    $ aespipe -e aes256 -d -P passParaLaNube.txt fichero

Si vamos a cifrar una cantidad considerable de ficheros, podemos automatizar la tarea con un pequeño script en bash:

#!/bin/bash
for i in *;
do 
   if [ $i != script -a $i != passParaLaNube.txt ];
   then
      aespipe -e aes256 -P passParaLaNube.txt <$i >$i.tgz
   fi;
done;

*script es el nombre del script

*passParaLaNube.txt es el nombre del fichero con la contraseña para aespipe

*Si lo que queremos es comprimir con contraseña, el script se puede adaptar cambiando la línea de aespipe por el comando que queramos ejecutar. Por ejemplo, para comprimir con contraseña usando p7zip y header encryption (mhe=on):
7z a -r -mhe=on -pCONTRASEÑA $i.7z $i
(También habría que quitar -a $i != passParaLaNube.txt de la condición de evaluación del if ;) )

(Segunda parte) usando la nube con sentido común y p7zip