Sus reglas personalizadas con fail2ban

Iniciado por engel lex, 28 Diciembre 2017, 09:06 AM

0 Miembros y 1 Visitante están viendo este tema.

engel lex

Hola!

decido abrir este tema para ver que util se consigue y aportar...

vamos a dejar aquí nuestras reglas personalizadas de fail2ban ;)

esta primera que dejo, la cree porque tengo gente muy fastidiosa con bots, así que decidí frenarlos con todo XD

una cosa peculiar de gran parte de los bots es que no tienen user agent o no mandan host en la conexión... esto se ve reflejado por guiones al final de la linea en el log de accesos de apache, ejemplo

xxx.xxx.xxx.xxx - - [01/Dec/2017:00:00:02 -0600] "GET www.xxxxxxxxxxxxx.com:443 HTTP/1.1" 200 5363 "-" "-"
xxx.xxx.xxx.xxx - - [01/Dec/2017:00:00:17 -0600] "GET http://yyyyyyyyy.me/control/includes/version.php HTTP/1.1" 404 1287 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1944.0 Safari/537.36"



así que explotando esto decidí hacer una regla muy agresiva y listo


failregex = ^<HOST> - .*"CONNECT.*HTTP.*$ # no acepto este tipo de peticiones
            ^<HOST> - .*"\\x03.*$   # mala solicitud ssl? a quien le importa
            ^<HOST> - .*"\\x16\\x03.*$ # lo mismo de arriba
            ^<HOST> - .*"USER.*$ # nope... esto en http está mal
            ^<HOST> - .*HTTP.*\d+ \d+ "-" ".*$ # sin solicitar host no se entra


agresivo dije

[apache-agresive]
enabled = true
port = http,https
filter = apache-agresive
logpath = /var/log/apache2/access* #vhosts con sus propios logs
maxretry = 1 # agresivo...
findtime = 84600 # 24 horas
bantime = 8460000 # 100 dias



si, se que puede ser demasiado, pero una petición formal de un navegador común no tiene nada de eso...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

WHK

Acá va otro para la detección de robots:

/etc/fail2ban/filter.d/whk-httpd-bots.conf

[Definition]
badbots = dav\.pm|libwww\-perl|python\-|typhoeus|winhttp|autoit|Java|java|sqlmap|hydra|\.nasl|email\s+extractor|arachni\/|autogetcontent|bilbo|BFAC|brutus|bsqlbf|cgichk|cisco\-torch|commix|core\-project\/|crimscanner|datacha0s|dirbuster|domino\s+hunter|dotdotpwn|fhscan|floodgate|f\-Secure|get\-minimal|auto\-rooter|grabber|grendel\-scan|havij|inspath|internet\s+ninja|jaascois|zmeu|masscan|metis|scanner|mysqloit|n\-stealth|nessus|netsparker|nikto|nmap|nsauditor|openvas|pangolin|paros|pmafind|customcrawler|qualys|s\.t\.a\.l\.k\.e\.r\.|security\s+scan|springenwerk|injector|lobster|exploit|dragostea|uil2pn|vega\/|voideye|w3af|webbandit|webinspect|webshag|analyzer|webvulnscan|whatweb|whcc|grabber|WPScan|struts\-pwn|fuck|pwned|hacker
failregex = ^<HOST> -.*?"(GET|POST|HEAD)\s.+HTTP.+?"\s\d+\s\d+\s".+?"\s".*?%(badbots)s.*?"$
ignoreregex =


Después se habilita en /etc/fail2ban/jail.local y le decimos que aplique un baneo automático al iptables:

[whk-httpd-bots]
enabled  = true
port     = http,https
logpath  = %(apache_access_log)s
maxretry = 1
action   = iptables-allports


Finalmente se reinicia el servicio y ya:

# systemctl restart fail2ban
# fail2ban-client status whk-httpd-bots
Status for the jail: whk-httpd-bots
|- Filter
|  |- Currently failed: 0
|  |- Total failed: 0
|  `- File list: /var/log/httpd/access_log
`- Actions
   |- Currently banned: 0
   |- Total banned: 0
   `- Banned IP list:


Recordar que se está utilizando el log de accesos con ruta por defecto, cualquier cambio hay que indicar la ruta manualmente.

WHK

Acá va otro para banear el abuso de accesos denegados (filtros por htaccess y similares):

/etc/fail2ban/filter.d/whk-httpd-403.conf

[Definition]
failregex = ^<HOST> -.*?"(GET|POST|HEAD|OPTIONS|TRACE)\s.+HTTP.+?"\s403\s
ignoreregex =



Baneamos al tercer intento seguido:

nano /etc/fail2ban/jail.local

[whk-httpd-403]
enabled  = true
port     = http,https
logpath  = %(apache_access_log)s
maxretry = 3
action   = iptables-allports