Securizando un poco más el acceso

Tras la serie de posts anywhere, surge un problema: ¿no es un poco peligroso dejar tantas cosas al aire?.

Sí, efectivamente, un atacante con unos buenos scripts y suficiente paciencia podría liar una buena. Para tratar de eviarlo, uso fail2ban (¡gracias Carlos!). Antes usaba denyhosts, pero tiene unos problemas:

1) Sólo sirve para SSH.

2) Usa el fichero /etc/hosts.deny.

3) La experiencia me indica que el proceso muere, así que tenía que estar continuamente revisándolo.

Fail2Ban sin embargo,

1) Sirve para ssh, apache, postfix, ftp… (ahora que tengo el proxy y el acceso remoto, me soluciona todo)

2) Usa IpTables

Respecto al tercer punto, a lo largo del tiempo comprobaré si es igual de inestable que DenyHosts, aunque espero que no

Acceso al servidor anywhere

Siguiendo la línea anywhere, hoy hablamos de cómo administrar un servidor desde cualquier sitio, en especial en aquellos en los que sólo tienes acceso por HTTP/HTTPS/FTP.

Lo lógico es usar SSHv2, pero, en muchos sitios, no puedes “salir” por el puerto 22 y mucho menos por uno aleatorio que le habrás puesto a tu SSH con el que evitas la mayoría de los ataques.

En un principio, pensé en SSL-Explorer, pero tiene un problema, levanta su propio servicio en el puerto 443 (por ejemplo), por lo que no depende de Apache (y no permite hacer un VirtualHost). Sé que con mod_proxy podría solucionarlo, pero me da mucha pereza.

Finalmente, encontré AnyTerm y AjaxTerm (que es el que uso). Cualquiera de estos programas te da una “bash” a través del navegador, levantando un servicio más de red en un puerto dado. El problema es cómo publicarlo, pues, ¿vas a dejar tu bash abierta al mundo (tendrán que adivinar el user/pass)? y también, si el problema es que necesito acceder sólo por el puerto 80 o 443, ¿cómo hacerlo? (y ya he dicho que el mod_proxy me da pereza).

Como en el anterior post, con CGIProxy, ya he creado una capa de seguridad, así pues, a través de él accedo a AjaxTerm, encapsulando la sesión a través de mi proxy SSL, por lo que puedo acceder al servicio que yo le indique.

Por tanto, tengo acceso al servidor desde virtualmente cualquier sitio, por muy chapado que esté.

Navegación anywhere

¿Harto de estar detrás de un proxy?

¿Cansado del abuso de los filtros de contenidos?

¿Temeroso de lo que tu jefe vea en tus logs de navegación?

¿Odias dormir en incómodas camas plegables?… ups!, eso es otro anuncio….

Para todo ello, CGIProxy es tu solución (¡gracias Esteban!). Para ello, debes configurar un Apache y tener este CGI basadp en Perl. Para mejorar la seguridad y, SOBRE TODO, el salto del proxy corporativo, debes usar SSL, pues accediendo por HTTPS, lo único que veremos en el proxy es un método CONNECT a tu Apache, nada más. También, es MUY IMPORTANTE, que el acceso sea mediante usuario/password (como mínimo), de lo contrario, tendrás un proxy abierto al mundo.

Ya sabemos cómo eludir el proxy, ¿y los filtros de contenidos?. Sencillo, como el acceso es restringido, no deberían ser capaces de categorizar tu sitio, si llegan a ello, lo categorizarán con toda probabilidad como una categoría no “sospechosa”. Si a alguien le interesa en qué saco lo mete Webfilter, no tengo problema en comentarlo, pero no lo publicaré.

Finalmente, ¿qué mejor que comprobar que todo lo que he dicho es cierto?. La prueba del algodón, pasamos a través de un Bluecoat:

start transaction ——————-
CPL Evaluation Trace: transaction ID=XXXXXX
<Proxy>
miss :     condition=xxxx
miss :     client.address=xxxxx
MATCH:     client.address=ESTA ES MI IP
.

.

.

miss :     category=”XXXXXXX”
connection: service.name=HTTP client.address=ESTA ES MI IP proxy.port=8080
time: FECHA y HORA UTC
CONNECT tcp://URL_de_MI_PROXY:443/
User-Agent: UserAgent de mi browser
url.category: CATEGORIA_NO_SOSPECHOSA

stop transaction ——————–

Como se puede ver, sólo se ve el connect al proxy, que es la URL que tengamos. Esto es imporante, pues como la URL que visitamos forma parte de la URL que nos muestra el navegador, siempre queda la duda, que espero haya quedado resuelta.

NOTA: En el caso que el Bluecoat o proxy similar tenga tarjeta aceleradora SSL y hayan pagado la licencia de uso, el túnel SSL es “roto”. En ese caso, tendremos que poner mil ojos en la autoría de los certificados, ya que en caso de ser capaz de entrometerse en la conexión HTTPS, el certificado estará generado por éste.

Ojo al hacer una web…

Ayudando a Alicia con los trabajos de la uni, recopilando información que generalmente está en webs de colegios e instituciones, he llegado a http://www.cplgsfuentes.com

Resulta que permite listar el directorio, y su único html, al cargarlo:

PÁGINA DE PRUEBAS

ESTA SERÁ LA PRUEBA PARA VER SI FUNCIONA O NO EL VÍDEO DE LA LECHE

Parece que está tratando de mostrar un video (flv, de flash) con un reproductor embebido… pero a la vista está que parece no salirle

¿Cómo tener tu MTA en casa y no ser bloqueado en el intento?

Siguiendo al hilo de los post sobre Motion, las imágenes salen de casa a través del correo. En un principio, con una configuración básica de Postfix no había mayor problema.

El problema ha surgido con el tiempo: los ISP y demás se han puesto un poco duros con el spam (se suele decir que en condiciones “normales”, el 97% del tráfico de email que recibe un MTA es Spam), así que, si te ven que envías correo con una IP dinámica (las típicas de cualquier ADSL) te meten en el mismo saco (pagamos justos por pecadores… o mejor dicho, redes botnets y demás “Inter-fauna”).

Para ello, sólo me ha quedado la opción de tener un “relayhost” (o smarthost), de tal modo que no realizaré la entrega de correo directamente al MTA destino, sino que usaré el de Gmail para que él, con mejor reputación que yo (que debo aparecer en todas las RBL’s), envíe el correo.

Para ello, usaré Postfix con el siguiente añadido en el fichero main.cf:

       relayhost = smtp.gmail.com:587
       smtp_use_tls = yes
       smtp_sasl_tls_security_options = $smtp_sasl_security_options
       smtp_sasl_tls_verified_security_options = $smtp_sasl_security_options
       smtp_sasl_auth_enable = yes
       smtp_sasl_password_maps = hash:/etc/postfix/password
       smtp_sasl_security_options =

Y donde el fichero /etc/postfix/password tendrá:

       #cat password
       smtp.gmail.com  CUENTA@GMAIL.COM:PASSWORD

No podemos olvidarnos que ese fichero:

1) Contiene en CLARO el usuario y password de una cuenta gmail (ojo con los permisos que le damos)

2) Tendremos que hacer un postmap para que se convierta en “password.db” (el típico fichero de postfix)

Como supongo que podréis imaginar, ¿todo el correo sale con CUENTA@GMAIL.COM como origen?. Sí pero no, es decir, como YO genero los correo con los scripts de Motion (o lo que me dé la gana), puedo poner el “mail from” que quiera, eso sí, la cuenta origen será la misma…

Detección de Movimiento (y III)

Ya hemos configurado Motion, nos envía alertas, pone las evidencias con un time-stamp y a salvo… ¿qué más nos puede hacer falta?.

Muy sencillo: ¿cómo lo activo?, ¿cada vez que salgo de casa me tengo que hacer root y ejecutar /etc/init.d/motion start?… Eso es mucho rollo, necesito algo automático.

Desde el principio, tengo un par de combinaciones secretas de teclas (en gnome, con el gconf_editor… buscad por ahí), una para activarlo y otra para desactivarlo. Evidentemente, la activación tiene un retardo, para que me dé tiempo a salir de casa sin prisa.

Este sistema, era útil, pero, necesitaba que todavía lo fuese más, es decir, activación automática. Sin embargo, ¿y la desactivación?. Prefiero que sea manual. Si alguien, mediante algún tipo de coacción (navaja en el cuello, pistola en la sien…) entra conmigo a casa, tendré evidencias de este suceso.

¿Cómo hago para activarlo automáticamente?… muy fácil, ¿qué es lo que siempre que sales de casa llevas encima?… ¿el móvil quizas?. A día de hoy, hasta los móviles más chapuceros tienen bluetooth… ¡ya lo tengo todo!

La idea es la siguiente: el móvil siempre tiene el bluetooth activado pero oculto, para que no me lo vean por “ahí”, pero, ¿entonces cómo interactúo con él?

Como la MAC bluetooth es conocida por mi (hcitool scan, eso sí, con el móvil visible sólo para esto) al igual que el “nombre” que le tengo puesto, consultando directamente a la MAC (hcitool info MAC) me dará ciertos datos, así que, tengo un sistema simple de detectar si están los móviles.

#!/bin/bash
MACS=( MAC_BT_DEL_MOVIL1 MAC_BT_DEL_MOVIL2 …. )
IDS=( NOMBRE_MOVIL1 NOMBRE_MOVIL2 …. )
INDICE=0
ESTA_EL_MOVIL=0
MOVILES=0
QUIEN_ESTA=
###########################

ELEMENTOS=${#MACS[@]}

while [ “$INDICE” -lt “$ELEMENTOS” ]
do
ESTA_EL_MOVIL=`hcitool info ${MACS[$INDICE]} 2>/dev/null | grep -v “Requesting information …” | grep ${IDS[$INDICE]} | wc -l`
if [ $ESTA_EL_MOVIL -gt 0 ]
then
let “MOVILES = $MOVILES + 1”
# echo “Detectado móvil ${IDS[$INDICE]}”
QUIEN_ESTA[$INDICE]=${IDS[$INDICE]}
else
QUIEN_ESTA[$INDICE]=”nadie”
fi

let “INDICE = $INDICE + 1”
done

if [ $MOVILES -eq 0 ]
then
#Como no hay móviles, encendemos la alarma
logger “Enciendo la camara porque no hay nadie en casa”
# echo $MOVILES
beep -f 880 -l 100 -r 10 -d 100
/etc/init.d/motion start
else
logger “Estan en casa ${QUIEN_ESTA[0]} y ${QUIEN_ESTA[1]}”
fi
exit 0;

Bueno, creo que ya lo tenemos todo… cualquier sugerencia, mejor de los scripts será bienvenida.

P.S: Los scripts son GNU y como se suele decir, no me responsabilizo. Llevo un par de años usándolos (unos más que otros según he ido actualizando) y hasta ahora sin problemas.

P.S.2: Lo sé, picar código no es lo mío y es posible que haya barbaridades en los scripts, pero una vez más, a mi me funcionan.

Detección de Movimiento (II)

Ya tenemos instalado Motion, nos genera chorrocientas imágenes cada vez que hay un cambio, pero, siguen en local y no tenemos ni idea cuándo pasa algo.

Para solucionar esto, se me ocurrió usar un directorio para las fotos y vídeos nuevos que genera. Dicho directorio será limpiado cada vez que arranque, para evitar tener morralla que no sirve. Para ello, el inicio lo he modificado del siguiente modo:

#!/bin/bash
#
# motion      Capturador de movimiento por webcam
#
# chkconfig: 2345 90 30
# description: Montion es un programa para capturar movimiento con
#              dispositivos v4l.
# processname: motion
# config: /etc/motion/motion.conf

start() {

ACTIVO=`ps -ef | grep motion | grep -v grep | grep -v init | wc -l`
if [ $ACTIVO == 0 ]
then
#    echo “Motion NO Esta activo”

RUTA=”RUTA A LAS FOTOS NUEVAS”
RUTA2=”RUTA AL DIRECTORIO DE BACKUP/LIMPIEZA”
VIEJAS=-2
FOTO=0

LISTA=`ls -tr $RUTA/ | cut -d  -f1`

for i in $LISTA
do
if [ “$i” == “foto.jpg” ]
then
FOTO=1
fi

if [ !$FOTO ]
then
if [ “$1” != “foto.jpg” ]
then
VIEJAS=`expr $VIEJAS + 1`
fi
fi

done

if [ $VIEJAS -gt 0 ]
then
FOTOS_VIEJAS=`ls -tr $RUTA/20* | head -n $VIEJAS | cut -d  -f1`

for i in $FOTOS_VIEJAS
do

mv $i $RUTA2
#echo “-a $i ” >> $TEMPORAL

done
fi

#ACTIVO=`ps -ef | grep motion | grep -v grep | wc -l`

#if [ !$ACTIVO ]
#then
/usr/bin/motion
echo “1” > /tmp/sms
fi
exit 1

}

stop() {

pkill motion

exit 1

}

backup() {

VIEJAS=-2
FOTO=0

LISTA=`ls -tr $RUTA/ | cut -d  -f1`

for i in $LISTA
do
if [ “$i” == “foto.jpg” ]
then
FOTO=1
fi

if [ !$FOTO ]
then
if [ “$1” != “foto.jpg” ]
then
VIEJAS=`expr $VIEJAS + 1`
fi
fi

done

if [ $VIEJAS -gt 0 ]
then
FOTOS_VIEJAS=`ls -tr $RUTA/20* | head -n $VIEJAS | cut -d  -f1`

for i in $FOTOS_VIEJAS
do

mv $i $RUTA2
#echo “-a $i ” >> $TEMPORAL

done
fi

exit 1
}

case “$1” in
start)
start
;;
stop)
stop
backup
;;
backup)
backup
;;
restart)
stop
start
;;
*)
echo “Usage: motion {start|stop|restart|backup}”
exit 1
esac

Con un directorio que sé que está vacío en cada nueva ejecución, sólo tengo que periódicamente comprobar si aparecen nuevas fotos, o lo que es lo mismo, se genera un “evento” (provocando las fotos y vídeos).

Bien, ya sabemos detectar eventos, pero, ¿cómo me avisan?. Para ello, el aviso será a una cuenta de correo electrónico, en el que además, adjuntamos las fotos. Esto tiene tres ventajas:

a) Sacamos las evidencias fuera del servidor, así que, si sufrimos un robo o incendio, tendremos seguridad de no perder esos valiosos datos.

b) De algún modo, podremos certificar, gracias al servidor externo de correo, un time-stamp, que, con un buen peritaje, no creo que un Juez se niegue a aceptarlo.

c) Un modo rudimentario de alertas, aunque por e-mail, lo que no es inmediato, pero en determinados entornos puede que no nos quede otra.

Vale, ya he sacado las fotos fuera, pero, ¿y las alertas?. Para ello, generalmente los operadores de telefonía móvil suelen dar una cuenta de correo asociada a un número de móvil, de tal modo que te das de alta en ese servicio (gratuito en todos los casos que conozco) y cuando te llega un mail el operador, envía un SMS con, al menos, el remitente y sin coste alguno. Antiguamente también enviaban el subject, pero eso lo convertía en una forma interesante de recibir SMS gratis.

Para todo ello, tengo un script en el crontab que hace todo esto:

#!/bin/bash
#Definimos las variables
RUTA=”RUTA CON LAS IMÁGENES NUEVAS”
REMITENTE=”DIRECCIÓN DE EMAIL QUE GENERA LAS ALERTAS”
MENSAJE=”SUBJECT DEL EMAIL”
TEMPORAL=”/tmp/VARIABLE_TEMPORAL”
DESTINATARIOS=( CORREO1@DOMINIO CORREO2@DOMINIO …)
COMODIN=”foto.jpg”
SMS=”/tmp/sms”
UMBRAL=10
#EJECUCION
###############################

COMPRUEBA=`echo $EMAIL`
if [ “$COMPRUEBA” != “$REMITENTE” ]
then
export EMAIL=”$REMITENTE”
fi

#export

LISTA=`ls -tr $RUTA/ | cut -d  -f1`
NUEVAS=-1
TOKEN=`cat $SMS`

for i in $LISTA
do
if [ “$i” == “$COMODIN” ]
then
FOTO=1
fi

if [ $FOTO ]
then
NUEVAS=`expr $NUEVAS + 1`
fi

done

if [ $NUEVAS -gt 0 ]
then
FOTOS_NUEVAS=`ls -tr $RUTA/20* | tail -n $NUEVAS | cut -d  -f1`

for i in $FOTOS_NUEVAS
do
echo “-a $i ” >> $TEMPORAL
done

ADJUNTOS=`cat $TEMPORAL`

rm -f $TEMPORAL

ELEMENTOS=${#DESTINATARIOS[@]}
INDICE=0

while [ “$INDICE” -lt “$ELEMENTOS” ]
do
echo “$MENSAJE” | mutt -s “$MENSAJE” $ADJUNTOS ${DESTINATARIOS[$INDICE]}
logger “Envio mail a ${DESTINATARIOS[$INDICE]}”
let “INDICE = $INDICE + 1”
done

logger “ALERTA: DETECTADO MOVIMIENTO”

ULTIMA=`ls -tr $RUTA/20* | tail -n 1 | cut -d  -f1`
cp $ULTIMA $RUTA/foto.jpg -f

#Si hay mas de 8 fotos, enviamos SMS
if [ $NUEVAS -gt 8 ]
then

TOKEN=`expr $TOKEN + 1`
echo “$TOKEN” > $SMS

if [ $TOKEN -eq 1 ]
then
echo “$MENSAJE” | mutt -s “$MENSAJE” $CORREO
logger “SMS: SE ENVIA SMS”
fi
fi

fi

Bueno, con esto ya tenemos casi todo… ¿o no?

Detección de Movimiento (I)

Como ya sabéis algunos, en casa tengo un sistema de detección de movimiento con alertas.

Al comienzo de venir a vivir al piso de alquiler, como el portero tenía también las llaves, sospechaba que pudiese entrar, como pasó una vez para “quitarme” un ambientador a pilas que tenía… el hombre se excusaba en que pensaba que era del casero.

Con estos antecedentes, tenía claro que necesitaba algo que me avisase si algo pasa, así que, me puse manos a la obra.

Antiguamente, usaba Camorama con Apache, lo que permitía refrescar cada cierto tiempo una imagen en un servidor web. Este sistema, para ver un nido de pájaros puede estar bien, o para ver si hay nieve en la sierra, o mi habitación como hacía, pero no es válido para vigilar.

Busqué, por aquel entonces, algún software que detectase movimiento con una webcam (básicamente, que capturase una imagen, capturase otra pasado cierto tiempo y que haga un resta). Realmente no es complejo hacerlo, pero, ya había alguien que lo había hecho: Motion.

Motion está bien, no es tan completo como otras soluciones actuales, pero hace un par de años no encontré nada mejor.

Tiene dos formas de configurarse: a pelo, editando el fichero de configuración motion.conf, o bien, si consigues que arranque, a través de la interfaz web en el puerto 8082.

Una vez que está arrancado me surgió un problema: ¿cómo hago que me avise?

"Halta Seguridaz" en Carrefour

Acabo de venir de comprar en Carrefour. Como sólo llevaba tres cosas, pasé por las “auto-cajas”, en las que te sirves tú mismo, pues generalmente están vacías y para pocas cosas es más rápido. El único problema es que no reconozca algún artículo o la báscula que tienen no dé por bueno un producto pensando que has metido otro en la bolsa).

Pues bien, tras terminar de pagar con la tarjeta, salgo haciéndome el loco, a modo de prueba de concepto. En ese momento, me para el responsable de las “auto-cajas”. Me indica que debo firmar el recibo, al igual que todo pago con tarjeta. Lo firmo y procedo a largarme cuando me dice que también debo enseñar el DNI
y la tarjeta con la que he pagado.

Ahí viene lo bueno, le enseño mi DNI (pues no tengo otro) y otra tarjeta de crédito que no usé para pagar. No se dieron ni cuenta y pude salir sin problemas. ¿Qué comprueban al enseñar el DNI y la tarjeta?, ¿en tan poco tiempo les da tiempo a verificar el nombre?, ¿no podrían verificar los cuatro últimos dígitos del recibo y la tarjeta de crédito?.

En Portugal, para evitar esto, el cliente debe teclear el número secreto de la tarjeta (como al sacar en un cajero automático), lo que, si se uniese a la verificación del DNI creo que haría el método más robusto.

Parque de la Tortuga y seguridad "himformatika"

En Tres Cantos, hay un parque cercano a la estación de tren con una estatua de una tortuga.

A lo largo de estos días, parece que han estado haciendo prospecciones en el terreno y se comenta que van a construir ahí.

Hoy, al ir por la calle, me encuentro con este cartel:

Cartel de la concentración

He borrado la cuenta de hotmail vinculada al “proyecto”, pero, ¿os habéis dado cuenta que ha puesto la password de dicha cuenta?, ¿cuánto va a durar hasta que algún vándalo se apodere del mail?

Esto es seguridad y lo demás pamplinas: ¡passwords públicas!