Tutoriales y Manuales
Entradas Mensuales
-
▼
2024
(Total:
1015
)
-
▼
septiembre
(Total:
50
)
- Estafadores bancarios ya usan IA para replicar la ...
- Infostealers evitan las nuevas defensas contra el ...
- Multa a Meta por almacenar millones de contraseñas...
- Microsoft bloqueará keyloggers en Windows, aunque ...
- Una vulnerabilidad en el portal y APIs de KIA perm...
- Intel localiza la raíz de los fallos de estabilida...
- El Proyecto Tor y Tails se fusionan: «unidos por l...
- Múltiples vulnerabilidades en OpenPrinting CUPS
- Orion: las primeras gafas de realidad aumentada de...
- Meta presenta Llama 3.2, su IA de código abierto c...
- Ordenan a Google que desinstale de forma remota la...
- Disney abandona Slack tras haber sufrido un hackeo...
- Google Earth y Maps se actualiza para poder retroc...
- Vulnerabilidad crítica en GNU/Linux en espera de d...
- Google TV Streamer, análisis: el sucesor del Chrom...
- Ransomware RansomHub
- Cómo convertir una partición de Windows de MBR a G...
- Explotan vulnerabilidad Zero-Day en Windows ya par...
- Un malware chino ha infectado 2.000 dispositivos e...
- Operación Kaerb: cae red criminal de phishing en A...
- Repsol sufre un ciberataque a con filtración de su...
- Un padre instala una cámara en la cabeza de su hij...
- Ransomware llamado "Hazard" ha llamado la atención...
- PKfail compromete la seguridad de Secure Boot en P...
- YouTube anuncia novedades, incluyendo comunidades ...
- Lynx Ransomware activo en Latinoamérica
- Explosión simultánea de centenares de 'buscas' de ...
- Microsoft publica Office LTSC 2024
- Google One Lite: de 15GB a 30GB por menos dinero
- Google Photos: convertir fotos y vídeos a calidad ...
- Arrestado adolescente de 17 años involucrado en el...
- Fortinet confirma robo de 440 GB de datos
- Signal vs. Session vs. Telegram vs. WhatsApp. ¿Cuá...
- Una vulnerabilidad SQLi compromete la seguridad de...
- Mitigar ataques DDoS en un servidor web usando Fai...
- Avis sufre un ciberataque que expone información p...
- El Tribunal de la UE confirma una multa de 2.424 m...
- Autopsy: herramienta forense
- Google leerá los mensajes SMS recibidos para entre...
- 50 años de SQL
- Vulnerabilidad crítica en el complemento LiteSpeed...
- Telegram permitirá reportar conversaciones con con...
- Acusan a un productor musical de utilizar cancione...
- Mejores herramientas para redactar textos con inte...
- El Nothing Phone (2a) Plus llega a España con un p...
- Acer presenta una nueva consola portátil, la Nitro...
- Bluetooth 6 ya es oficial, trae mejoras de eficien...
- Troyano NGate de Android clona datos NFC de tarjet...
- Microsoft Recall no podrá ser desinstalado de Wind...
- Una empresa socia de Facebook admite que pueden es...
-
▼
septiembre
(Total:
50
)
-
►
2023
(Total:
710
)
- ► septiembre (Total: 65 )
-
►
2022
(Total:
967
)
- ► septiembre (Total: 72 )
-
►
2021
(Total:
730
)
- ► septiembre (Total: 56 )
-
►
2020
(Total:
212
)
- ► septiembre (Total: 21 )
-
►
2019
(Total:
102
)
- ► septiembre (Total: 14 )
-
►
2017
(Total:
231
)
- ► septiembre (Total: 16 )
-
►
2016
(Total:
266
)
- ► septiembre (Total: 38 )
-
►
2015
(Total:
445
)
- ► septiembre (Total: 47 )
-
►
2014
(Total:
185
)
- ► septiembre (Total: 18 )
-
►
2013
(Total:
100
)
- ► septiembre (Total: 3 )
-
►
2011
(Total:
7
)
- ► septiembre (Total: 1 )
Blogroll
Etiquetas
Entradas populares
-
Después de ver qué es una vCPU y la diferencia entre núcleos (cores) e hilos en los procesadores, pasamos a explicar toda la nomenclatura d...
-
En el panorama en constante evolución de la seguridad de redes, OpnSense se ha convertido en una formidable solución de firewall. Nacido de...
-
Pese a que Gemini ofrece multitudes de opciones, recientemente, se ha dado a conocer una situación fuera de lo común. Hace unos días, un es...
Mitigar ataques DDoS en un servidor web usando Fail2ban
Fail2Ban es un marco de software de prevención de intrusiones gratuito y de código abierto que se puede utilizar para proteger su servidor de ataques de fuerza bruta. Fail2Ban funciona mediante la supervisión continua de los archivos de registro (SSH, Apache, Auth) y prohíbe las direcciones IP que tienen los signos maliciosos tales como la acumulación de muchos fallos de contraseña.
¿Qué es Fail2ban?
Es un script programado en Python que "observa" los logs de Apache en busca de patrones sospechosos y es capaz de tomar medidas para bloquear a los atacantes ya sea con iptables o lanzando un comando de nuestra elección. Se distribuye bajo licencia GNU.
Instalar y configurar Fail2ban en Debian
apt-get install fail2ban
El directorio de configuración de Fail2ban se encuentra en: /etc/fail2ban/ en donde existen dos directorios mas: action.d y filter.d.
- action.d: Encontraremos las acciones que Fail2ban realizará cuando alguno de nuestros filtros encuentre alguna IP haciendo maldades. Estas acciones pasan por filtrado con iptables, envio de e-mails de aviso o hasta realizar una llamada utilizando Asterisk.
- filter.d: Tenemos todos los filtros que utilizaremos para identificar a nuestros atacantes.
Configuración para evitar DoS (Denial of Service)
Primer paso
ls -l /etc/fail2ban
De los archivos listados arriba, jail.conf es el archivo de configuración principal que contiene un conjunto de filtros predefinidos. Te recomendamos que cree un archivo separado /etc/fail2ban/jail.local.
Editamos el archivo /etc/fail2ban/jail.conf y agregamos las siguientes líneas al final:
##Stop DOS attack from remote host.
[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/apache*/access.log
maxretry = 400
findtime = 400
bantime = 200
ignoreip = 192.168.43.193
action = iptables[name=HTTP, port=http, protocol=tcp]
O bien:
[http-get-dos]
enabled = true
port = http,https
filter = http-get-dos
logpath = /var/log/apache2/ARCHIVO_ACCESS_LOG_DE_TU_SERVIDOR
maxretry = 300
findtime = 300
bantime = 300
action = iptables[name=HTTP, port=http, protocol=tcp]
Recomiendo utilizar:
backend = pyinotify
- maxretry: Especifica cuantos intentos vamos a dejar antes de banear la ip.
- findtime: Es el período de tiempo en segundos que estamos contando los "reintentos" (300 segundos = 5 minutos).
- bantime: Es el tiempo que debemos esperar para liberar las peticiones, osea el tiempo que la IP estará baneada, en este caso se trata de 5 minutos.
- ignoreip : Esta opción nos permite poner en la lista blanca las direcciones IP que no pueden ser bloqueadas por Fail2ban.
- logpath : Esta opción especifica la ubicación del archivo de registro de servicios.
Segundo paso
Ahora creamos el archivo de filtrado en /etc/fail2ban/filters.d/http-get-dos.conf y dentro de el colocamos el siguiente contenido:
# Fail2Ban configuration file
[Definition]
# Option: failregex
# Note: This regex will match any GET entry in your logs, so basically all valid and not valid entries are a match.
# You should set up in the jail.conf file, the maxretry and findtime carefully in order to avoid false positives.
failregex = ^<HOST> -.*"(GET|POST).*
# Option: ignoreregex
ignoreregex =
El parámetro failregex es una expresión regular que coincidirá con cualquier entrada GET en sus registros, por lo que, básicamente, todas las entradas válidas y no válidas son una coincidencia. Se debe configurar en el archivo jail.conf, el maxretry y findtime cuidadosamente a fin de evitar falsos positivos.
Tercer paso
Reiniciamos Fail2ban
/etc/init.d/fail2ban restart
o bien:
systemctl restart fail2ban
Hasta ahora con esta configuración ya tenemos un servidor bastante seguro ante ataques ocasionales de denegación de servicio, pero es probable que necesite ajustes mas estrictos en maxretry y findtime para controlar los ataques de denegación de servicio distribuido (DDoS).
Comprobar estado;
fail2ban-client status
Resultado:
Status
|- Number of jail: 7
`- Jail list: apache, apache-badbots, apache-noscript, apache-overflows, http-get-dos, ssh, sshd
Verifiquemos el funcionamiento
Una manera sencilla de comprobar el funcionamiento de nuestra configuración anterior es utilizando ab (Apache Benchmark - parte del paquete apache2-utils) , así:
ab -n 500 -c 10 http://tu-sitio-web-punto-com:80/
Si lo vamos a comprobar de manera local, debemos debemos comentar el parámetro ignoreip en el archivo de configuración /etc/fail2ban/jail.conf y luego reiniciamos Fail2ban, y hacemos la prueba así:
ab -n 500 -c 10 http://127.0.0.1:80/
Esto enviara 500 page-loads en 10 conexiones simultaneas al servior web. Y por las reglas de maxretry y findtime que colocamos, las peticiones GET entrantes desde nuestra IP serán baneadas, y luego de que se cumpla el bantime podremos acceder nuevamente al sitio web.
Echamos un vistazo al log en /var/log/fail2ban.log y deberíamos ver algo como esto:
2014-02-22 05:37:21,943 fail2ban.actions: WARNING [http-get-dos] Ban YOUR_IP_ADDRESS2014-02-22 05:42:22,341 fail2ban.actions: WARNING [http-get-dos] Unban YOUR_IP_ADDRESS
Comando:
tail -f /var/log/fail2ban.log
Esto nos puede ayudar a controlar las peticiones en exceso que realizan scripts mal intencionados para realizar fuerza bruta en formularios de acceso, entre otros, con está técnica y los valores bien afinados deberíamos lograr evitar las peticiones inadecuadas a nuestro servidor.
fail2ban-client status http-get-dos
Resultado:
Status for the jail: http-get-dos
|- Filter
| |- Currently failed: 2
| |- Total failed: 650
| `- File list: /var/log/apache2/access.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: 192.168.43.4
Fail2ban + Listas de CloudFlare
En Fail2ban debemos añadir en [http-get-dos]
action = cloudflare-list[]La acción sería:
curl --request POST 'https://api.cloudflare.com/client/v4/accounts/XXX/items' \
--header "X-Auth-Email: webmaster@elhacker.net" \
--header "X-Auth-Key: XXX" \
--header 'Content-Type: application/json' \
--data-raw '[ { "comment": "<name>","ip": "<ip>" } ]'
#
# Author: el-brujo
#
# IMPORTANT
#
# Please set jail.local's permission to 640 because it contains your CF API key.
#
# This action depends on curl (and optionally jq).
#
# To get your CloudFlare API Key: https://www.cloudflare.com/a/account/my-account
#
# CloudFlare API error codes: https://www.cloudflare.com/docs/host-api.html#s4.2
[Definition]
# Option: actionstart
# Notes.: command executed on demand at the first ban (or at the start of Fail2Ban if actionstart_on_demand is set to false).
# Values: CMD
#
actionstart =
# Option: actionstop
# Notes.: command executed at the stop of jail (or at the end of Fail2Ban)
# Values: CMD
#
actionstop =
# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck =
actionban = curl --request POST 'https://api.cloudflare.com/client/v4/accounts/XXX/items' \
--header "X-Auth-Email: webmaster@elhacker.net" \
--header "X-Auth-Key: XXX" \
--header 'Content-Type: application/json' \
--data-raw '[ { "comment": "<name>","ip": "<ip>" } ]'
#_cf_api_url = https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules
_cf_api_url = https://api.cloudflare.com/client/v4/accounts/XXXXX/rules/lists/XXXX/items
_cf_api_prms = -H 'X-Auth-Email: <cfuser>' -H 'X-Auth-Key: <cftoken>' -H 'Content-Type: application/json'
[Init]
# If you like to use this action with mailing whois lines, you could use the composite action
# action_cf_mwl predefined in jail.conf, just define in your jail:
#
# action = %(action_cf_mwl)s
# # Your CF account e-mail
# cfemail =
# # Your CF API Key
# cfapikey =
# account_id = XXXX
# list_id = XXX
cftoken = XXXXX
cfuser = webmaster@elhacker.net
#[Init?family=inet6]
#cftarget = ip6
- Manage Account
- Configurations
- List
- IP Source Address --> is in list --> fail2ban
(ip.src in $Fail2ban)
3 comentarios :
¿También se puede hacer con Nginx?
Si, Fail2Ban también funciona con nginx, pero hay que mirar formato del log para la expresión regular
Publicar un comentario
Los comentarios pueden ser revisados en cualquier momento por los moderadores.
Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.
Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.