¿Qué es DevOps?

Dejar un comentario

Aprovechando que me he leído el libro What is DevOps? (un e-book que, por cierto, es gratuito), voy a explicaros un poco de qué va el tema.

La idea principal del DevOps es la fusión del departamento de sistemas con el departamento de desarrollo. ¿Por qué? Pues porque la división de estos dos departamentos hace que sus miembros se vean como “enemigos”. Digamos que el objetivo del trabajo del departamento de sistemas es el mantener la aplicación funcionando, mientras que el objetivo del trabajo del departamento de desarrollo es (simplificando) añadir nuevas funcionalidades a la aplicación. El problema es que esas nuevas funcionalidades suelen ser vistas por el departamento de sistemas como potenciales desestabilizadores de la aplicación, es decir como más trabajo, por lo que sistemas intentará retrasar al máximo el despliegue en producción de esas nuevas funcionalidades (ha de pasar un tiempo en el entorno de test), lo que será percibido por desarrollo como un menosprecio o amenaza a su trabajo y ya tenemos montado el mal rollo dentro de la empresa.

Lo que propone DevOps es que uniendo ambos departamentos no sólo consigues una mayor harmonía dentro del departamento de IT, si no que consigues una mayor eficiencia a la hora de resolver incidencias. Por ejemplo, desarrollando la parte de logs ¿Cuántos de nosotros ha tenido un problema con una aplicación, ha ido a echarle un ojo al log y ver un galimatías que es incapaz de entender (no entremos cuando vemos el chorro de excepciones no capturadas tan típicas de una aplicación Java)? ¿Por qué? Pues por que el que ha programado la aplicación no sabe que información necesita sistemas, el es de desarrollo y pondrá la información que le resultaría útil a él o ella. Y no por ánimo de joder al pobre sysadmin a media hora de acabar su turno, si no simplemente porque no es consciente de lo que necesita el sysadmin.

Otra de las cosas interesantes que comentan, es hacer que la aplicación se “autoadministre”. Dado que sistemas ahora participa en el desarrollo, se puede añadir código que gestione las típicas incidencias que se resuelven reiniciando un demonio (¿a que jode una alerta a las tres de la mañana para, simplemente, reiniciar un Apache y que ya no te vuelva el sueño?). Hacer la aplicación más resiliente se le llama a esto. Si a esto le sumamos la aparición del IaaS (AWS, Rackspace, CloudBuilder, etc.) podemos hacer que la propia aplicación levante más frontales web cuando lo necesite, o pare un esclavo de base de datos y levante otro porque había fallos con la replicación de forma totalmente automática. Obviamente esto haría mucho más agradable el trabajo del sysadmin de guardia, que sólo sería despertado para incidencias gordas e interesantes, no para chorradas.

La verdad que es una idea que me parece interesante y creo que el futuro de sistemas a por ese camino, al menos en entornos web.

PD: Ya sabéis empresas web que estéis interesadas en un sysadmin molón y que sepa de qué va el rollo DevOps os invito a visitar mi perfil de LinkedIn. :P

Instalar WebGoat de forma sencilla

Dejar un comentario

WebGoat es una aplicación web deliberadamente vulnerable, creada para aprender y practicar lecciones de seguridad en aplicaciones web. Así que como ahora tengo tiempo me propuse instalármelo y practicar un poco, el problema vino en el momento que intenté instalarlo, ya que las instrucciones que ponen en la web son algo confusas (al menos para mí).

Si vamos a la página de descargas  (al menos en el momento de escribir éste artículo), vemos que se distribuye de dos formas: un paquete .zip para Windows (o eso se deduce, erróneamente, al leer el nombre del fichero) y en un fichero .war. Entiendo que todo aquél que vea esta situación y lo quiera desplegar en una máquina no Windows, se bajaría el .war, instalaría un Tomcat, desplegaría la aplicación y luego configuraría el Tomcat para que la aplicación funcione correctamente. El problemilla es que esas configuraciones no están documentadas en ningún lado y las tienes que ir viendo por “ingeniería inversa” (como mínimo vi que se tenían que definir los roles en tomcat-users.xml). Pues vaya rollo ¿no? Aunque para un sysadmin como yo, con los huevos “pelaos” de desplegar aplicaciones sobre Tomcat, tampoco sería un trabajo muy arduo :P

Aunque si le echamos un ojo al paquete para Windows, vemos que hay un directorio con la aplicación desplegada y el Tomcat configurado. Y como Tomcat está escrito en Java pues “Run everywhere” y usamos este paquete para nuestro Linux:

cd /tmp
wget -c http://webgoat.googlecode.com/files/WebGoat-5.4-OWASP_Standard_Win32.zip
unzip WebGoat-5.4-OWASP_Standard_Win32.zip
mv WebGoat-5.4/tomcat /opt/WebGoat-5.4
chmod +x /opt/WebGoat-5.4/bin/catalina.sh
ln -s /opt/WebGoat-5.4/bin/catalina.sh /etc/init.d/WebGoat

De este modo ya podemos levantar/parar la aplicación WebGoat mediante

/etc/init.d/WebGoat start
/etc/init.d/WebGoat stop

Y por defecto la tendremos escuchando por el puerto 8080, por lo que entramos a http://hostname:8080/WebGoat/attack y ya podemos empezar a jugar :)

PD: Ya sé que para mis avezados lectores esta advertencia no es necesaria, pero por si acaso. Recordad que esta aplicación es vulnerable por lo que no la instaléis en ninguna máquina que sea accesible desde Internet.

Compartir ficheros en una red local de forma fácil y sencilla (con Netcat)

1 comentario

Una de las cosas que más rabia me dan es cuando quieres copiar un fichero (algo grande) entre dos equipos que tienes en casa.

Un método sencillo y rápido es copiarlo en un pendrive y moverlo de un equipo a otro, el problema es que nunca encuentro un pendrive que funcione cuando lo necesito (tengo un montón de petados).

Otra idea sería la de configurar un servidor de SSH en un equipo y copiarlos por SCP, lo cual también sería efectivo, pero te obliga a instalar y configurar un servidor de SSH, otro problema sería que podrías estar desperdiciando ancho de banda debido a que el fichero se tiene que cifrar antes de enviar (tal vez en la red de casa te dé igual, pero si estás en la oficina podrías estar desperdiciando una buena conexión a gigabit).

Para ello puedes emplear Netcat (la navaja suiza de los administradores de red :P ), simplemente ejecuta lo siguiente en el equipo donde quieres recibir el fichero:

nc -l ${puerto} > ${nombredelfichero}

Lo que arrancará una instancia de Netcat que escuchará el puerto que le hayas indicado en $puerto. En el equipo que esté el fichero que quieres copiar escribe:

cat ${nombredelfichero} | nc ${ipdestino} ${puerto}

Lo que enviará el fichero hacia el equipo destino, sin “perder tiempo” cifrando el contenido y sin tener que instalar ni configurar ningún extra.

Generando certificados X.509 falsos al vuelo en Python para un ataque “Man in the Middle”

Dejar un comentario

EDIT (15/07/12 20:37): Por ciertos motivos que no vienen al caso, el contenido de la entrada ha sido eliminado. De todos modos lo que aquí se comentaba se puede encontrar fácilmente en otros sitios de la red que son de libre acceso.

Ejemplo empleando M2Crypto

Ejemplo empleando OpenSSL

Borrón y cuenta nueva

Dejar un comentario

Después de unos meses de locura intentando tener acabado el PFC para la convocatoria de este junio, por fin soy libre. Así que he decidido desempolvar este blog que tenía bastante aparcado.

Dado que las pocas entradas que tenía eran poco relevantes, he decidido cepillármelas y empezar desde 0 (bueno en realidad he mantenido el pequeño tutorial sobre como montar un USB físico en la versión libre de VirtualBox, que era la única que tenía enlaces desde el exterior y no era plan de “romper el Internet” :P )

Me gustaría enfocar la temática de este blog sobre sistemas, redes, seguridad informática y programación. Especialmente con artículos técnicos y algo de opinión, aunque no me gustaría llenar esto de tutoriales, más que nada porque no creo que un blog sea el medio apropiado, tal vez si empiezan a salir demasiados tutoriales mire de abrir una wiki o algo.

Así que espero tener suficiente tiempo y paciencia para hacer de este sitio algo útil para la comunidad… :)

Usar memorias USB y compartir carpetas con VirtualBox OSE

13 comentarios

Buenas, hoy traigo un HowTo muy sencillo para ir empezando con la sección más “técnica” de este blog.


Una de las featuresmás interesantes, para el usuario medio, de la versión privativa de VirtualBox, es la capacidad de montar las unidades USB en el sistema virtual. Lo cual es útil cuando quieres transportar cómodamente los datos del sistema virtual, por ejemplo para prácticas de universidad.

Pero esta característica es emulable gracias a que en los sistemas Unix todo se considera un fichero (y las unidades USB también ;) ).

Antes de nada veamos como compartir un directorio de nuestro GNU/Linux con un Windows XP virtualizado.Primero debemos de indicarle al Virtualbox cuál es la carpeta que vamos a compartir. Para ello escribimos en la consola:

ataulfo@vidimensional:~$ vboxmanage sharedfolder add Nombre -name /carpeta/carpeta -hostpath /carpeta/carpeta

Donde ‘Nombre’ es el nombre que tenga la maquina virtual en Virtual Box (ojo con las mayúsculas) y /carpeta/carpeta pues la ruta del directorio que vamos a compartir.

Luego entramos en Windows XP y una vez allí, abre “Mi PC” y en el menú “Herramientas” > “Conectar una unidad de red” seleccionamos la unidad que nos plazca (por defecto, Z:) y en la dirección debemos poner: VBOXSVR/carpeta/carpeta.

Y si todo a transcurrido normalmente veremos una nueva unidad de red en nuestro Mi Pc, que podremos usar normalmente.

Para poder usar la unidad USB, simplemente debemos compartir el directorio donde nos monte el USB (/media/usb, por ejemplo) y ya tendremos acceso a nuestra memoria USB.

Seguir

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