Realizando conexions a puertos SSL/TLS

No es muy complicado probar o verificar muchos de los servicios de Internet a mano con un simple Telnet al puerto del servicio. Con esto no solo podemos verificar que el puerto esta abierto y escuchando, sino que en muchos casos es posible simular o realizar a mano el dialogo con servidor.

Pero en el caso que el servicio a probar utilice SSL o TLS, ya no podemos usar Telnet para poder dialogar con el servidor. Pero para ello podemos usar el comando "openssl" en modo cliente. En particular para simular una simple conexion a un puerto que use SSL o TLS podemos usar :
openssl s_client -connect servidor:puerto
Esto iniciara el dialogo SSL con el servidor y nos mostrara el certificado e informacion del mismo, asi tambien como, si no es un certificado auto-firmado, intentara verificarlo. Una vez finalizado el dialogo y la verificacion del certificado, nos mostrara el resumen de la coneccion como el siguiente:
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : AES256-SHA
Session-ID: E9F3218C651A1F59CFA21D997AE63CF80810F70CD9D62F456F98B15E85F71C4D
Session-ID-ctx:
Master-Key: ACCA4FE23EEA8C8FE414C3FAB570C1D51115B685CD6662FB56961604272F0C347A57040FA78DDBF42F35E3B205D4A103
Key-Arg : None
Start Time: 1240453754
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)

Luego de esto, ya tenemos la conexión establecida y podemos ejecutar los comandos a mano para probar el servicio en particular como lo haríamos usando Telnet






Mejoras al History del Bash

Una de las características que le falta al history del bash (por lo menos de mi punto de vista) es poder saber quien y a que hora se ejecutaron los comandos. Para poder solucionar esto existen muchas soluciones, desde agregar keylogers al sistema hasta parchear el mismo fuente del Bash.

Pero los otros dias navegando por un blog encontré una solución que me pareció muy buena y limpia a través del mismo syslog. La idea es agregar en alguno de los scripts de inicio de la sesión de los usuarios una pequeña función que guarda el ultimo comando ejecutado en el syslog a través del comando logger.

En nuestro caso elegimos el archivo /etc/profile y en el le agregamos al final las siguientes lineas:
function history_to_syslog {
declare cmd
cmd=$(fc -ln -0)
logger -p local7.notice -- SESSION = $$, WHO = $(whoami), CMD=$cmd
}

trap history_to_syslog DEBUG

Luego para poder revisar mejor los registros, configuramos el demonio de syslogd para que separe los registros y los guarde en un archivo separado. Para ello agregamos en el /etc/syslog.conf la siguiente linea:
# BASH
local7.* -/var/log/cmdhist.log
Por ahí también es bueno agregar en el logrotate algunas lineas para rotar los logs y evitar que se haga muy grande este archivo. Para ello podemos crear el archivo /etc/logrotate.d/cmdhist y le agregamos las siguientes lineas:
/var/log/cmdhist.log {
daily
rotate 31
compress
missingok
}
y con esto tendremos registrado el día a día de todos los comandos ejecutados en el sistema identificando el usuario, la sesión y la hora en que se ejecuto cada comando.

Lo bueno de esta solución es que le agrega un poco más de seguridad al histórico de los comandos. El bash_history es facil de saltear, si el usuario en algún momento de la sesión ejecutamos el comando:
unset HISTFILE
Con esto, el Bash pierde la configuración de donde tiene que guardar los comandos ejecutados, por lo que al cerrar la sesión no se guardan los comandos ejecutados. La solución de ir guardando los comandos en el syslog, le agrega un poco de seguridad en este aspecto, ya que los comandos se van guardando a medida que se van ejecutando, por lo que hasta los mismos comandos para "borrar las huellas" quedan registrados en el mismo syslog, e inclusive, se puede configurar el demonio del syslog para que guarde los registros en forma remota y de esta forma agregarle un poco mas de seguridad al respecto.

Otra vieja historia Zen

Recordando viejas historias algunas ves leídas y meditadas, hoy recordé en particular una sobre lo malo que puede ser la ansiedad de querer conseguir resultados.

La historia es la de un gran maestro zen especialista en el manejo de la espada. Un día se le acerca un joven, que conocía la destreza del maestro y le ruega para ser aceptado como su alumno. El maestro acepta y lo toma como su discípulo.

Pero el joven no quería ser el discípulo del gran maestro para ser iniciado en el Zen, lo que deseaba era convertirse en un gran espadachín para poder así vengar la muerte de su familia.

Después de unos años de ser discípulo el alumno, viendo que no avanzaba muy rápido su aprendizaje en el manejo de la espada, el alumno le pregunta al maestro: "en cuanto tiempo voy a ser un gran espadachín ?" y el maestro.. que ya conocía el apuro de su alumno, le dice "en unos 15 años mas"

La frustración del alumno fue muy grande al ver postergado en tanto tiempo su venganza y le volvió a preguntar a su maestro: "y si entreno duro todo los días ?" a lo que el maestro respondió "en ese caso... puede que en 20 años"

Mas asombrado el alumno, le reclama a su maestro "como puede ser ? si todos los días entreno para ello, como puede ser que tarde mas tiempo?"

A lo que el maestro respondió "es que en ese caso vas a estar mas pendiente en llegar al final del camino, que en lo que tienes que hacer realmente para recorrerlo y llegar a destino"