{"id":26482,"date":"2020-06-09T19:40:33","date_gmt":"2020-06-09T17:40:33","guid":{"rendered":"https:\/\/eltallerdelbit.com\/?p=26482"},"modified":"2020-12-18T09:35:48","modified_gmt":"2020-12-18T08:35:48","slug":"fail2ban-ssh","status":"publish","type":"post","link":"https:\/\/eltallerdelbit.com\/fail2ban-ssh\/","title":{"rendered":"Bloquear ataques SSH con Fail2ban e Iptables"},"content":{"rendered":"
<\/p>\n
En ocasiones nos encontraremos con infinidad de accesos por ssh desde multitud de IP\u00b4s desconocidas que se encargan de intentar acceder a nuestros sistemas, normalmente con los usuarios por defecto conocidos para SSH; habitualmente en este tipo de ataques de fuerza bruta por ssh<\/strong> se usa mucho el usuario “root<\/em>“, “admin<\/em>“, “oracle<\/em>“, y en el caso de la Raspberry Pi se usa el usuario “pi<\/em>“. En este art\u00edculo:<\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n Aqu\u00ed vemos el mensaje “Pledge Network<\/em>” al acceder en modo debug ssh<\/a> al servidor al que no podemos conectar por ssh:<\/p>\n Esta info la sacamos de la conexi\u00f3n ssh, usando el modo debug, ya que en un principio, la conexion ssh iniciaba e intentaba terminar, pero ah\u00ed se queda la terminal, sin acabar de acceder ..<\/p>\n solo cuando conectamos por ssh usando el modo de depuraci\u00f3n, podremos ver el mensaje anterior.<\/p>\n <\/p>\n <\/p>\n Entonces es cuando nos vamos a revisar el fichero de registro “\/var\/log\/auth.log<\/strong><\/em>” y es donde vemos intentos de acceso por ssh denegados<\/strong> d\u00f3nde podemos comprobar que utilizan por defecto el usuario root se trata del t\u00edpico archivo el t\u00edpico ataque por fuerza bruta y que a la vez consiste o puede conllevar pues lo mismo que un ataque de denegaci\u00f3n de servicio ya que por tantas solicitudes de acceso repetidas el servidor acaba saturandose. <\/p>\n <\/p>\n Lo dicho, entonces est\u00e1bamos revisando los accesos en el fichero “\/var\/log\/auth.log” y nos damos cuenta de que estamos siendo v\u00edctimas de un ataque de fuerza bruta por SSH, as\u00ed que la soluci\u00f3n es instalar fail2ban<\/em><\/strong> que se encargar\u00e1 de banear los accesos desde las IP\u00b4s que no paran de intentarlo a nuestro servidor (como se trata de botnets, tendremos cientos, miles de accesos a cada minuto).<\/p>\n <\/p>\n El Comando “last<\/em>“<\/strong>, nos muestra los ultimos accesos, por ssh. Vemos los usuarios utilizados por estos ataques y la IP desde la que se intenta acceder:<\/p>\n <\/p>\n <\/p>\n –> En Debian\/Ubuntu:<\/p>\n <\/p>\n –> En CentOS:<\/p>\n <\/p>\n <\/p>\n <\/p>\n Lo primero, la configuraci\u00f3n inicial de fail2ban se encuentra en el fichero \/etc\/fail2ban\/jail.conf<\/p>\n Hemos de hacer una copia del fichero y la llamaremos jail.local:<\/p>\n <\/p>\n El fichero de configuraci\u00f3n que usaremos ser\u00e1 jail.local. <\/p>\n <\/p>\n Comenzamos a configurar la jaula para ssh en fail2ban. Comenzamos a editar el fichero \/etc\/fail2ban\/jail.local y encontramos estas l\u00edneas acerca de SSH:<\/p>\n <\/p>\n Por ahora la jaula para SSH no est\u00e1 funcionando. Hemos de modificar la directiva y a\u00f1adir estas l\u00edneas:<\/p>\n <\/p>\n De esta forma hemos habilitado la jaula ssh, y creado el filtro sshd, que le dice a fail2ban que ha de usar el fichero “\/etc\/fail2ban\/filter.d\/sshd.conf” para filtrar las conexiones al puerto ssh.<\/strong> <\/p>\n <\/p>\n Tambi\u00e9n podemos ver que en el directorio “\/etc\/fail2ban\/filter.d\/” podemos encontrar una gran multitud de filtros que nos servir\u00e1n para proteger otros servicios:<\/strong><\/p>\n <\/p>\n <\/p>\n Hemos de definir la acci\u00f3n que fail2ban realizar\u00e1 cuando se active para protegernos de una conexi\u00f3n SSH.<\/p>\n La acci\u00f3n que definiremos ser\u00e1:<\/p>\n iptables-multiport<\/strong> La a\u00f1adimos a la directiva as\u00ed:<\/p>\n Al igual que con los filtros, en el directorio \u00a0\/etc\/fail2ban\/action.d\/ podemos encontrar muchas otras acciones que podemos configurar en fail2ban.<\/strong> <\/p>\n <\/p>\n Por defecto nos encontraremos algo as\u00ed:<\/p>\n <\/p>\n Pero vamos a ir un poco m\u00e1s all\u00e1 y vamos\u00a0 a ser m\u00e1s restrictivos.<\/p>\n En lugar de permitir 5 intentos, permitiremos solamente 3 intentos.<\/p>\n Y en lugar de banear durante 3600 segundos, crearemos un baneo permanente<\/strong>:<\/p>\n <\/p>\n <\/p>\n adem\u00e1s de “port=ssh<\/strong><\/em>“, separado por una coma est\u00e1 el puerto que usamos para ssh. <\/p>\n <\/p>\n <\/p>\n Muy importante que configuremos las exclusiones en fail2ban, para no bloquearnos a nosotros mismos.<\/p>\n lo haremos buscando la directiva “ignoreip<\/strong><\/em>“. Por defecto encontraremos localhost, pero tambi\u00e9n podemos a\u00f1adir subredes enteras, o direcciones IP concretas. Separamos los valores con espacio o con una coma:<\/p>\n <\/p>\n <\/p>\n o<\/p>\n <\/p>\n <\/p>\n <\/p>\n Iptables<\/a> act\u00faa como firewall, ya que se encarga de crear reglas de filtrado de paquetes.<\/p>\n Despu\u00e9s de instalar fail2ban nos aseguramos de tener instalado y activado Iptables. –> en Debian\/Ubuntu:<\/p>\n <\/p>\n –> En CentOS:<\/p>\n <\/p>\n Lo bueno de la uni\u00f3n de fail2ban e iptables es que trabajar\u00e1n juntos. Cuando fail2ban banee accesos por ssh, crear\u00e1 reglas en iptables que nos proteger\u00e1n de esos accesos. <\/p>\n y vamos a ver qu\u00e9 reglas est\u00e1 habilitando Iptables, seg\u00fan los accesos incorrectos que est\u00e1 detectando. <\/p>\n <\/p>\n Como podemos ver, en un momento se nos ha llenado la lista con un mont\u00f3n de reglas para rechazar el acceso desde ciertas IP\u00b4s, que est\u00e1n intentando compulsivamente hacer login ssh. <\/p>\n <\/p>\n En este caso, como sabemos que somos el objetivo de un ataque ssh de fuerza bruta, vamos a configurar un bloqueo permanente de todas las IP\u00b4s atacantes con fail2ban, porque sino, a cada reinicio del servidor, perderemos las reglas de bloqueo creadas anteriormente. Lo que vamos a hacer es que se cree un fichero de baneos permanentes que llamaremos “persistent.bans”, y con cada baneo que fail2ban cree, se a\u00f1adir\u00e1 ah\u00ed la ip de forma permanente. Lo lograremos a\u00f1adiendo lo siguiente en el fichero de acciones de fail2ban:<\/p>\n en el fichero “\/etc\/fail2ban\/action.d\/iptables-multiport.conf”<\/strong><\/p>\n debajo de<\/p>\n <\/p>\n Pondremos:<\/p>\n <\/p>\n y al final,<\/p>\n debajo de “actionban<\/em>“:<\/p>\n <\/p>\n pondremos:<\/p>\n <\/p>\n O sea que tenemos que dejar el fichero \u00bb \/etc\/fail2ban\/action.d\/iptables-multiport.conf \u00bb as\u00ed:<\/p>\n <\/p>\n Y reiniciamos el servicio fail2ban.<\/p>\n <\/p>\n Ahora podemos revisar el fichero de baneos permanentes \/etc\/fail2ban\/persistent.bans : <\/p>\n <\/p>\n <\/p>\n <\/p>\n Otro aspecto bastante importante es el de securizar nuestro servidor SSH (Hardening SSH). Digamos que es el paso previo , y las configuraciones m\u00e1s b\u00e1sicas, que deber\u00edamos revisar, son:<\/p>\n <\/p>\n\n Vamos a ver c\u00f3mo protegernos y bloquear ataques de fuerza bruta por SSH en Linux, usando fail2ban e Iptables, actuando como firewall contra ataques DOS.<\/p>\n","protected":false},"author":1,"featured_media":26489,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false},"categories":[1268],"tags":[1093,1119],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/posts\/26482"}],"collection":[{"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/comments?post=26482"}],"version-history":[{"count":2,"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/posts\/26482\/revisions"}],"predecessor-version":[{"id":30611,"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/posts\/26482\/revisions\/30611"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/media\/26489"}],"wp:attachment":[{"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/media?parent=26482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/categories?post=26482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eltallerdelbit.com\/wp-json\/wp\/v2\/tags?post=26482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}
\n <\/br><\/br>
\nEstos ataques pueden tener consecuencias como las de un ataque DDoS<\/strong> (ataque de denegaci\u00f3n de servicio \/ Denial of Service), provocando que ciertos servicios dejen de funcionar por saturaci\u00f3n, adem\u00e1s de que se tratan de intentos de acceso no autorizados y debemos hacer algo por pararlos…
\n <\/p>\n\n
\n
\n
\n
\n
\n
\n
\u00bfC\u00f3mo podemos darnos cuenta de que estamos siendo el objetivo de un ataque SSH?<\/span><\/h3>\n
\n
\n <\/p>\n\n
Failed password for root from ----------(IP)\u00a0 port 52410 ssh2<\/pre>\n<\/li>\n<\/ul>\n
\n <\/p>\n
\n <\/p>\n\u00bfC\u00f3mo bloquear ataques ssh<\/strong>?<\/span><\/h3>\n
\n <\/p>\n\r\n<\/pre>\n
\nlastb -a | more
\n <\/p>\n\u00bfQu\u00e9 es fail2ban?<\/span><\/h3>\n
\nfail2ban es un software de Linux que permite bloquear ataques e intentos de acceso a diversos puertos y servicios conocidos; se puede modificar y adecuar para casos de puertos y servicios concretos. Uno de los mayores usos de fail2ban es en el bloqueo de ataques por SSH.
\n <\/p>\nFail2ban SSH<\/strong> | Instalar y configurar fail2ban para proteger SSH<\/span><\/h3>\n
\n
apt-get install fail2ban<\/pre>\n
\r\nyum install epel-release\r\nyum install fail2ban fail2ban-systemd\r\n<\/pre>\n
Copia del archivo de configuraci\u00f3n original |\u00a0 jail.conf –> jail.local<\/span><\/h4>\n
\n
\r\ncp -p \/etc\/fail2ban\/jail.conf \/etc\/fail2ban\/jail.local\r\n<\/pre>\n
\n <\/p>\nHabilitar la jaula para proteger SSH en fail2ban \/ definir el filtro<\/span><\/h4>\n
\r\n#\r\n# SSH servers\r\n#\r\n\r\n[sshd]\r\n\r\nport = ssh\r\nlogpath = %(sshd_log)s\r\nbackend = %(sshd_backend)s\r\n<\/pre>\n
\r\nenabled = true\r\nfilter = sshd\r\n<\/pre>\n
\n
\nVemos que este fichero contempla varios tipos de mensajes sospechosos que podemos encontrar cuando ssh est\u00e1 siendo comprometido:<\/p>\n
\n <\/p>\nDefinir la acci\u00f3n “banaction<\/em>“<\/span><\/h4>\n
\n <\/p>\nbanaction = iptables-multiport<\/pre>\n
\n <\/p>\nDefinir el n\u00famero de intentos y el tiempo de baneo<\/span><\/h4>\n
\r\nbantime = 3600\r\nmaxretry = 5\r\n<\/pre>\n
\r\nmaxretry = 3\r\nbantime = -1\r\n<\/pre>\n
Resumen: Configuraci\u00f3n de la jaula de baneo para SSH<\/span><\/h4>\n
\nEn resumen, tras estas explicacciones, nuestra jaula para SSH debe quedar as\u00ed:<\/p>\n\r\n[sshd]\r\nenabled = true\r\nport = ssh,44624\r\nbanaction = iptables-multiport\r\nfilter = sshd\r\nlogpath = %(sshd_log)s\r\nbackend = %(sshd_backend)s\r\nmaxretry = 3\r\nbantime = -1\r\n<\/pre>\n
\nImportante: podemos ver que en la l\u00ednea<\/p>\nport = ssh,44624<\/pre>\n
\nSi cambiamos el puerto por defecto para nuestro servicio SSH (algo m\u00e1s que recomendable por cierto), hemos de configurarlo aqu\u00ed, para que fail2ban act\u00fae en los accesos a dicho puerto.<\/p>\n*EXCLUSIONES en fail2ban*<\/span><\/h4>\n
ignoreip = 127.0.0.1\/8 192.168.0.0\/24<\/pre>\n
Reiniciar el servicio<\/span><\/h4>\n
\nYa tenemos configurado fail2ban, ahora reiniciamos el servicio:<\/p>\nsudo service fail2ban restart<\/pre>\n
systemctl restart fail2ban.service<\/pre>\n
IPTABLES<\/span><\/h3>\n
\nInstalamos IPTABLES :<\/p>\nsudo apt install iptables<\/pre>\n
yum install iptables-services<\/pre>\n
\n <\/p>\nComprobando que iptables est\u00e1 funcionando<\/span><\/h4>\n
\nBueno, despu\u00e9s de todo esto, hemos activado fail2ban e iptables,<\/p>\n
\n
\nListamos las reglas creadas por iptables:<\/p>\niptables -L<\/pre>\n
\n <\/p>\nExtra: Configurar baneos permanentes de fail2ban con iptables<\/span><\/a><\/span><\/h3>\n
\n <\/p>\n\r\nactionstart = iptables -N fail2ban-
\r\n cat \/etc\/fail2ban\/persistent.bans | awk '\/^fail2ban-
\r\nactionban = iptables -I fail2ban-
\r\n echo \"fail2ban-
\ny veremos la cantidad de IP\u00b4s que se est\u00e1n a\u00f1adiendo en dicho fichero (claramente no es casualidad, sino que estamos siendo objeto de un ataque ssh):<\/p>\nRecuerda securizar SSH<\/a><\/span> (Hardening SSH)<\/span><\/h3>\n
\n