¡¡NO PUEDES PASAAAAR!!
Buenas noches, hace un par de días me dio por mirar algunos de los logs de mi RaspberryPi y vi lo siguiente:Dec 9 08:22:36 raspberrypi ftpd[17083]: pam_unix(ftp:auth): authentication failure; logname= uid=0 euid=0 tty= ruser= rhost=219.143.103.190 Dec 9 08:22:39 raspberrypi ftpd[17083]: pam_ftp(ftp:auth): conversation failedy en el apache:
88.252.139.68 - - [10/Nov/2012:11:52:00 +0100] "POST /cgi-bin/firmwarecfg HTTP/1.1" 400 527 "-" "veryprivateacsor" 78.175.195.203 - - [10/Nov/2012:11:52:30 +0100] "POST /cgi-bin/firmwarecfg HTTP/1.1" 400 527 "-" "veryprivateacsor"son intentos de hackers, afortunadamente solo intentos. Para que esto no vuelva a pasar, a parte de limitar las conexiones a ssh y vpn, he instalado fail2ban, con un par de toques mágicos para el RaspberryPi, veámoslo.
Como ya he dicho, el 99% de los ataques vienen al exponer un host a internet, es decir, abrir al exterior algún puerto como el de FTP, Apache, Asterisk ... Lo mejor es dejar el menor número de puertos expuestos, yo los he limitado a SSH y VPN, dos de los más seguros, pero aún así tengo miles de intentos de intrusión al puerto 22 (SSH). Para evitar esto, se usa (entre otras cosas) fail2ban, un servicio que corre como demonio, monitorizando los archivos de logs, en busca de ataques. Al detectar alguno, bloquea la IP atacante con iptables.
Para instalarlo, no puede ser más fácil:
apt-get update apt-get install fail2banfááááácil. Hay varios millones de manuales y tutoriales de fail2ban, yo voy a lo fácil. Editamos el archivo: /etc/fail2ban/jail.conf y cambiamos las líneas:
[DEFAULT] bantime = 3600 maxretry = 3 [apache] enabled = true [pure-ftpd] enabled = true¡ojo! esas son las líneas modificadas, el resto del archivo déjalo tal cual. Como mu bien se suele decir ¡¡si no sabes no toques!! ¿PA QUÉ TOCAS?
Hasta aquí no hay misterio, así que vamos a darle una vuelta de tuerca más. En el archivo /etc/fail2ban/action.d/iptables-multiport.conf hacemos la siguiente modificación:
ver -> aqui
lo cambiamos por:
ver -> aqui
y por supuesto:
ver -> aqui
... efectivamente!! que nos envíe un whatsapp cuando haga un baneo y cuando lo desbanee
¿a que mola? Ahora puedes decir aquello de:
"No puedes pasar!!!! Soy siervo del Fuego Secreto, administrador de la llama de Anor!!! Tu fuego oscuro es en vano!!!! Llama de Udûn!!!! ¡Regresa a la Sombra! No puedes pasar!!!"
ACTUALIZACIÓN:
Al final no hice nada contra los ataques vía web ':( Para evitar cosas como:
78.187.122.116 - - [21/Nov/2012:11:27:47 +0100] "POST /cgi-bin/firmwarecfg HTTP/1.1" 400 527 "-" "veryprivateacsor"
en el archivo /etc/fail2ban/jail.conf :
[apache-badbots] enabled = true port = http,https filter = apache-badbots logpath = /var/log/apache*/*access.log maxretry = 2
y en seguida llega un whatsapp:
de verdad es superfácil, nos ahorrará más de un dolor de cabeza.
Joder con el WhatsApp, el tuto iba guay hasta que he leído que te envía las notificaciones al 'Was' y como a mi no me funciona, ya me he muerto de envidia y ya no quiero hacerlo xD
ResponderEliminarCuenta con mi hacha...
y con mi espada...
y con mi arco...
y... con mi raspi... no cuentes que no la funciona el whatsapp.
Ahora en serio. Muy útil e interesante, no sabía que había tanta gente en internet intentando tramarla :_(
Hola,
ResponderEliminarA mí tampoco me funciona el Whatsapp, creo que han cambiado el método de generar la password. De todas formas en el archivo jail.conf le puedes configurar una dirección de correo para que esas notificaciones te las envíe por email.
funcionado todo correctamente, gracias!!
ResponderEliminarsoy nuevo en eso como lo miro ??? estoy perdido gracias
ResponderEliminarcomo miras ... el qué? los logs? los tienes en /var/log/ cada servicio usa un archivo.log distinto y si no tiene, envia el log al archivo syslog.log que es el del sistema. Creo que te referías a eso ¿no?
Eliminaro ya me funciono ise la prueba active el puerto 22 de mi router y desde un mac mi laptop ise la prueba con putty entre y todo a la consola despues volvi a entar a putty y meti datos malos y todo y cerre putty y quise volver a entar y ya no me dejo entrar XD
ResponderEliminarquisiera saber como crear script pero para twitter ya que el whatsapp no me funciono
ResponderEliminarA mi el Whatsapp me funciona perfectamente. Si quereis os pego mi "script", aunque es mas chapuzero que el de Juanmol va bien. AHI VA!
ResponderEliminarPor un lado envia_whatsapp.sh:
nano /usr/local/bin/envia_whatsapp.sh
----------------------------------------
#!/bin/bash
# programado por Juanmol para http://rsppi.blogspot.com
echo se recibe: $@ >> /tmp/enviawhatsapp.log
ruta=/usr/src/WhatsAPI-master/src/php/
cat $ruta/testprotocol.php | sed "s/destino/$1/g" | sed "s/mensaje/$2/g" > $ruta/elphp.php
estado=$(php $ruta/elphp.php | wc -l ) # ademas de enviarlo guarda el estado
echo Mensaje se ha enviado: $@;
rm $ruta/elphp.php
-----------------------
Por otro lado testprotocol.php
nano /usr/src/WhatsAPI-master/src/php/testprotocol.php
-------------------------
Connect();
$w->Login();
$w->Message("34destino", "mensaje");
sleep(2); //Este es el detallito chapuzero jeje
?>
Con eso va de maravilla y no hace falta el encola_whatsapp.
Si os funciona bien como a mi, dad un aplauso y a ver si me dan una papeleta extra para el sorteo por lo que me he enrollado! JAJAJAJA
No se porque me ha cortado parte del php de testprotocol. a ver si ahora no lo corta!!!
ResponderEliminarPara que no lo corte he quitado el la etiqueta de abrir php. Solo le faltaria eso a lo que pego ahora
require "whatsprot.class.php";
$options = getopt("d::", array("debug::"));
$debug = (array_key_exists("debug", $options) || array_key_exists("d", $options)) ? true : false;
$w = new WhatsProt("TUPHONEYOU", "TUIMEIDELPC", "John Doe", $debug);
$w->Connect();
$w->Login();
$w->Message("34destino", "mensaje");
sleep(2);// Aqui el detalle rastrero y chapuzero
?>
Disculpa la ignorancia estimado, estoy tratando de seguir tu tutorial.
Eliminaracabo de generar el enviar_whatsapp.sh
y ahora veo lo del test_protocol..
yo baje esto: https://github.com/venomous0x/WhatsAPI/archive/master.zip
calculando de que de ahi sacas los archivos.
El archivo test_protcol, coloco el tuyo en vez de ese que viene en el ZIP?
yo no comprender. =D gracias
tengo una duda aparmetne todo me funciona pero yo vivo en guatemala y el codigo es 502 de los numero me pregunto si donde dice 34 va 502? o es obligatorio el 34 que es de españa? gracias
ResponderEliminarEvidentemente pon el codigo de tu zona. 34 es el numero de españa. A veces lo veras asi: (0034, +34) seguido de nueve digitos. Desconozco el codigo internacional de Guatemala, pero seguro que debes de cambiarlo.
EliminarSi te ha ayudado mi script a que te vaya bien el Whatsapp me alegra mucho. Presiona a JuanMol que me de una papeleta extra en el sorteo por revivir un puperpoder a la gente que aun no podia usar el Guasap!
gracias pero no me funciono T-T
ResponderEliminare estado provando con twitter y si puedo enviar pero no logro que me los envie e echo pequeños script con el internet cree el script llamado aviso_torrent.sh
#!/bin/bash
twidge update "$1 bajado" //
y despues recibo_torrent.sh
#!/bin/bash
/usr/local/bin/aviso_torrent.sh "$TR_TORRENT_NAME"
lo ejecuto yo y funciona pero cuando lo asocio a transmission y termina una descarga no me envia nada ??? lo detengo modifico el archivos y despues lo reinicio no se si ise algo mal ???
y tambien para el fail2ban
cre uno llamado aviso_bloqueo.sh
#!/bin/bash
twidge update "$1"
iptables -I fail2ban- 1 -s -j DROP
/usr/local/bin/aviso_bloqueo.sh "se bloqueo la ip durante segundos por intentos al servicio "
iptables -D fail2ban- -s -j DROP
/usr/local/bin/aviso_bloqueo.sh "se desbanea la ip "
funciona si yo escribo aviso_bloqueo.sh y envia el twitter con los datos erroneo porq no se llenan esos espacio pero no lo envia cuando lo asocio ayuda porfa o que estoy asiendo mal T-T
El tema de twitter aun no me he puesto. Yo prefiero whatsapp.
ResponderEliminarDime que error te daba en el whatsapp. Si no me das mas datos de como lo usas me es dificil adivinar porque no te funciona.
donde esta el codigo de encola_whatsapp.sh?
ResponderEliminarhttp://rsppi.blogspot.com.es/2012/11/demonio-para-el-envio-progresivo-de.html
Eliminarhola juan mol, sabes otra forma de activar el whatsapp sin usar el bluestacks no me descarga el whatsapp, sebes alguna forma de hacerlo directo con el sdk de windows? ese si me funciona.
ResponderEliminargracias
o el sdk de linux tengo linux en mi pc con whatsapp jalando desde el sdk !
ResponderEliminarbusca por yowsup en los comentarios de http://rsppi.blogspot.com.es/2012/10/uso-de-whatsapp-para-el-envio-de.html
Eliminartal y como ponía en el post de whatsapp, la gente de whatsapp cambia continuamente el tipo de conexión para que no funcionen las apis de terceros. Es probable que lo estés haciendo bien, pero tu cuenta de whatsapp necesita otra tipo de autenticación. Yo te recomiendo usar GTALK para estos menesteres.
EliminarGracias Juan. Un abrazo.
EliminarHola Juan, estoy tratando de configurar fail2ban para que me notifque por gtalk. Sendxmpp funciona desde la linea de comando pero cuando quiero definir la notificación en iptables-multiport.conf no tengo suerte. Esto es lo que he puesto:
ResponderEliminaractionstart = iptables -N fail2ban-
iptables -A fail2ban- -j RETURN
iptables -I -p -m multiport --dports -j fail2ban-
echo "Fail2ban activo" | /usr/bin/sendxmpp -t miusuario@gmail.com
Sabes cuál es mi error? gracias!
creo que esta en que lo as puesto en la definicion de actionstart, que no se si funcionaría ahí. Si te fijas, yo lo he puesto en actionban, mira a ver si es eso.
EliminarMuy buenas, solo decirte que se agradecen post de este tipo para sacar más partido a la raspi. Quería comentarte que tengo un problema a la hora de notificar el baneo de ips. La ip la banea correctamente, pero no consigo que mande la notificación por Gtalk. En el log (/var/log/fail2ban.log) me dice esto:
ResponderEliminar2013-05-06 22:10:07,410 fail2ban.actions: WARNING [ssh] Ban 192.168.1.13
2013-05-06 22:10:11,055 fail2ban.actions.action: ERROR iptables -I fail2ban-ssh 1 -s 192.168.1.13 -j DROP
/usr/local/bin/aviso_gtalk.sh "se banea la ip 192.168.1.13 durante 1367871007.41 segundos por 3 intentos al servicio ssh" returned 100
Si ejecuto la linea del script me manda correctamente el mensaje.
Gracias
tengo el mismo problema. No encuentro la solución en otros posts. Alguien lo ha solucionado?
EliminarHola, muchas gracias por el manual, solo una pregunta, el mensaje que se muestra del estilo "se banea la ip 192.168.1.13 durante 1367871007.41 segundos por 3 intentos al servicio ssh" , no se puede hacer algo para que el 1367871007.41 sea la hora en la que dejara de estar ban.
ResponderEliminarGracias
no sabria decirte ahora mismo, podrias sumar ese dato a la hora unix actual y despues convertir de unix a normal.
EliminarHola, ya lo he encontrado
Eliminar/usr/local/bin/aviso_fail2ban.sh "`date -d @` : Se banea la ip por intentos al servicio
Lo que se muestra es la fecha en la que se banea la ip, quedando el mensaje como el siguiente
Fri May 31 16:08:31 CEST 2013 : Se banea la ip xxx.yyy.zzz.www por 6 intentos al servicio ssh.
Esto lo he puesto que lo envíe por Google Talk y funciona correctamente.
Muchas gracias
Juanmol, tienes hecho en el router el desvio de puertos a la raspberry para filtrar desde ahí? Deduzco que solo tienes entonces un firewalll, iptables, no?
ResponderEliminarNos vemos en el curro
en el curro? quién eres?
EliminarHago nat desde el ruter y el iptables con el baneo lo hago en el raspberry, lo ideal seria poder mandarle esa orden al ruter, pero mi ruter no lo permite. Acepto donaciones para comprarme un ruter adsl 2+ que permita instalarle OpenWRT con todas sus funciones.
Estupendo articulo, felicidades.
ResponderEliminarAl final lo he hecho funcionar con los "whatsapp" y todo. Pero me he sudado lo mio, os explico por si os es de ayuda.
Los PCs de casa están con Archlinux, y la Raspberry no podía ser menos y tiene el ArchlinuxARM
Al instalar el "fail2ban" me he vuelto loco al ver que no hacia caso a los "ban" del SSH, con todo correcto y estupendamente bien configurado.
El problema: el programa era incapaz de detectar la entradas del ssh ya que este no genera fichero de log en /var/log, sino entradas en journald.
La solución: Instalar el "fail2ban" desde "git" que es la versión preparada para el journald del Systemd.
Lo que hace el "fail2ban" es buscar los patrones en los logs del sshd, pero Arch se actualizo a Systemd y esta nueva versión de "fail2ban" busca las entrada en el journald.
Hola juanmol
ResponderEliminarHe podido poner el fail2ban sin problemas pero queria hacer que en lugar de enviar un whatsapp enviara por gtalk pero no funciona. Así es como lo tengo
/home/pi/Scripts/send.sh:
#!/bin/bash
echo "prueba" | centerim -s msg -p jab -t DESTINO@gmail.com
y ese fichero es llamado desde fail2ban así:
actionban = iptables -I fail2ban- 1 -s -j DROP /home/pi/Scripts/send.sh
Gracias de antemano
Un saludo
te funciona si lo ejecutas a mano?
EliminarSi, el log no dice nada de error ni nada
Eliminarpruebaaa ... umm prueba prueba ... vamos a probar con sudo, cambia el script:
Eliminarsudo echo "prueba" | centerim -s msg -p jab -t DESTINO@gmail.com
ahora me da error return 200 en el fail2ban.log
EliminarMenudo lio..... :(