{"id":863,"date":"2016-01-19T11:06:14","date_gmt":"2016-01-19T11:06:14","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=863"},"modified":"2016-03-18T10:23:08","modified_gmt":"2016-03-18T10:23:08","slug":"integrando-fail2ban-en-el-servidor","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2016\/01\/19\/integrando-fail2ban-en-el-servidor\/","title":{"rendered":"Integrando fail2ban en el servidor &#8230;"},"content":{"rendered":"<div class='__iawmlf-post-loop-links' style='display:none;' data-iawmlf-post-links='[{&quot;id&quot;:1063,&quot;href&quot;:&quot;http:\\\/\\\/fail2ban.org&quot;,&quot;archived_href&quot;:&quot;https:\\\/\\\/web-wp.archive.org\\\/web\\\/20080821122611\\\/http:\\\/\\\/www.fail2ban.org\\\/&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[{&quot;date&quot;:&quot;2026-04-15 18:15:29&quot;,&quot;http_code&quot;:206}],&quot;broken&quot;:false,&quot;last_checked&quot;:{&quot;date&quot;:&quot;2026-04-15 18:15:29&quot;,&quot;http_code&quot;:206},&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1064,&quot;href&quot;:&quot;http:\\\/\\\/rsabalburo.blogspot.com.es\\\/2014\\\/07\\\/fail2ban-with-shorewall.html&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;http:\\\/\\\/rsabalburo.blogspot.com\\\/2014\\\/07\\\/fail2ban-with-shorewall.html&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;},{&quot;id&quot;:1065,&quot;href&quot;:&quot;https:\\\/\\\/www.digitalocean.com\\\/community\\\/tutorials\\\/how-to-protect-ssh-with-fail2ban-on-ubuntu-12-04&quot;,&quot;archived_href&quot;:&quot;&quot;,&quot;redirect_href&quot;:&quot;&quot;,&quot;checks&quot;:[],&quot;broken&quot;:false,&quot;last_checked&quot;:null,&quot;process&quot;:&quot;done&quot;}]'><\/div>\n<p><a href=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2015\/02\/tools_server.png\" rel=\"attachment wp-att-562\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-562\" src=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2015\/02\/tools_server-150x150.png\" alt=\"tools_server\" width=\"150\" height=\"150\" \/><\/a>&#8230; y descubriendo lo vers\u00e1til que puede ser.<\/p>\n<p><!--more--><\/p>\n<p><a href=\"http:\/\/fail2ban.org\">fail2ban<\/a> es un programa que sirve para cerrar conexiones de red a m\u00e1quinas que fallan al acceder a servicios del sistema en el que est\u00e1 instalado. La inmensa mayor\u00eda de estos fallos son ataques al sistema, no voy a endulzarlo ahora, por lo que se puede considerar una herramienta tanto informativa como defensiva. Es cierto que con ella en funcionamiento es muy f\u00e1cil dispararse en el pi\u00e9, sobre todo si insistes en emplear contrase\u00f1as antiguas o que corresponden a otros sistemas, pero merece la pena por el n\u00famero de\u00a0<em>exploraciones<\/em> que se reciben de continuo.<\/p>\n<p>Para realizar su trabajo explora los archivos de registro en busca de se\u00f1ales de conexiones fallidas e interact\u00faa con el cortafuegos local para indicarle a qui\u00e9n cerrar el acceso. Resumiendo, que lee archivos de texto, extrae informaci\u00f3n concreta de ellos (direcciones IP b\u00e1sicamente), la contabiliza y lanza la ejecuci\u00f3n de programas externos con esos datos. Para ello compartimentaliza cada servicio dentro de una jaula, que es un concepto muy pr\u00e1ctico definido como:<\/p>\n<ul>\n<li>Archivos de registro de d\u00f3nde obtener los fallos.<\/li>\n<li>Expresiones regulares que extraen informaci\u00f3n de ellos.<\/li>\n<li>Herramientas externas que controlan las conexiones con dichas m\u00e1quinas, aunque es posible realizar otras tareas como enviar correo o mensajes instant\u00e1neos. Es m\u00e1s, pueden definirse varias acciones en cada caso.<\/li>\n<li>L\u00edmites de la jaula como el tiempo que un atacante debe permanecer bloqueado, o el n\u00famero de veces que debe aparecer en los registros para que sea considerado como tal.<\/li>\n<\/ul>\n<p>Y para que funcione se deben dar las siguientes condiciones b\u00e1sicas:<\/p>\n<ol>\n<li>Los registros de sucesos deben estar en texto plano.<\/li>\n<li>Deben estar todos los eventos sin agrupaciones ni res\u00famenes.<\/li>\n<\/ol>\n<p>Un tutorial de configuraci\u00f3n excelente (en ingl\u00e9s) lo he encontrado en la p\u00e1gina de <a href=\"http:\/\/rsabalburo.blogspot.com.es\/2014\/07\/fail2ban-with-shorewall.html\">Rodolfo Sabalburo <\/a>donde tambi\u00e9n hace referencia a otro de <a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-protect-ssh-with-fail2ban-on-ubuntu-12-04\">DigitalOcean<\/a>.<\/p>\n<p>El dise\u00f1o del programa hace muy f\u00e1cil crear jaulas espec\u00edficas para servicios muy concretos. Un ejemplo es el programa de correo <em>Roundcube<\/em>, una aplicaci\u00f3n web, que se puede configurar para que los fallos en el acceso los registre en un archivo separado. <em>Fail2ban<\/em> no tiene dificultades en averiguar qui\u00e9n intenta entrar en el sistema por ese punto y bloquear la m\u00e1quina origen durante un tiempo o toda la vida si es necesario.<\/p>\n<p>En el caso de uno de mis servidores he definido varias jaulas en archivos individuales dentro del directorio <em>\/etc\/fail2ban\/jail.d<\/em> y he retocado al configuraci\u00f3n del programa <em>shorewall<\/em> tal y como aconseja Sabalburo.<\/p>\n<p>As\u00ed que he creado un archivo <em>jail.local<\/em> que me permita definir valores concretos sin preocuparme de que se sobrescriban en las actualizaciones de <em>Debian:<\/em><\/p>\n<pre lang=\"ini\">#\r\n#       Par\u00e1metros globales\r\n#\r\n\r\n[DEFAULT]\r\n\r\n#  Direcciones IP que siempre se ignoran. Util si se tiene varios servidores\r\n#  que interact\u00faan entre s\u00ed.\r\nignoreip = 127.0.0.1\/8\r\n\r\n# Programa externo que retorna verdadero si la IP recibida debe ser ignorada.\r\nignorecommand =\r\n\r\n# N\u00famero de segundos que una m\u00e1quina es bloqueada: 30 minutos\r\nbantime  = 1800\r\n\r\n# Se bloquea una m\u00e1quina cuando alcanza 3 fallos en diez minutos\r\nfindtime = 600\r\nmaxretry = 3\r\n\r\n# M\u00e9todo para obtener los archivos que han sido modificados. Lo dejo en\r\n# autom\u00e1tico por ahora.\r\nbackend = auto\r\n# Avisar cuando se efect\u00faen b\u00fasquedas inversas en el DNS\r\nusedns = warn\r\n\r\n# Direcci\u00f3n de correo electr\u00f3nico para emplear en interpolaci\u00f3n de variables de\r\n# las definiciones de jaulas.\r\ndestemail = root@localhost\r\n\r\n# Nombre del emisor de correo electr\u00f3nico\r\nsendername = Fail2Ban\r\n\r\n# Direcci\u00f3n de correo electr\u00f3nico para emitir avisos\r\nsender = fail2ban@esferas.org\r\n\r\n# Acci\u00f3n predeterminada para bloquear m\u00e1quinas\r\nbanaction = shorewall\r\n\r\n# Acci\u00f3n predeterminada para env\u00edo de correo electr\u00f3nico\r\nmta = mail\r\n\r\n# Protocolo predeterminado\r\nprotocol = tcp\r\n\r\n\r\n<\/pre>\n<p>y he ido a\u00f1adiendo jaulas espec\u00edficas para cada servicio como en el caso de las conexiones <em>SSH<\/em>:<\/p>\n<pre lang=\"ini\">[ssh]\r\n\r\nenabled  = true\r\nport     = 372\r\nfilter   = sshd\r\nlogpath  = \/var\/log\/auth.log\r\nmaxretry = 6\r\n\r\n\r\n<\/pre>\n<p>En el ejemplo indico el puerto especial que empleo para el servicio y doy un poco m\u00e1s de margen por si se me resiste una contrase\u00f1a, que eso tambi\u00e9n cuenta :-)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; y descubriendo lo vers\u00e1til que puede ser.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[6],"tags":[18,492,35,493],"class_list":["post-863","post","type-post","status-publish","format-standard","hentry","category-debian","tag-administracion-de-sistemas","tag-fail2ban","tag-seguridad","tag-shorewall"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/863","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=863"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/863\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=863"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=863"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=863"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}