Bloqueo de Bad Bots en cPanel con ModSecurity usando el Sistema Vendor Introducción Los bad bots representan una amenaza significativa para los servidores web , realizando miles de solicitudes no autorizadas que pueden comprometer la seguridad y el rendimiento del servidor. Este documento describe la implementación de un sistema automatizado de bloqueo de bad bots en cPanel utilizando ModSecurity y el sistema vendor nativo. A diferencia de las soluciones tradicionales basadas en .htaccess que requieren mantenimiento manual y pueden generar inconsistencias entre diferentes servidores, esta solución aprovecha el sistema vendor de cPanel para automatizar completamente la gestión de reglas ModSecurity y actualizaciones de listas de bad bots. Diferencias con DirectAdmin Mientras que en DirectAdmin se requiere configuración manual en el directorio /usr/local/directadmin/custombuild/custom/modsecurity/conf/ , cPanel ofrece un **sistema vendor **integrado que permite: Instalación automática de reglas ModSecurity Actualizaciones automáticas de configuraciones Gestión centralizada sin intervención manual Integración nativa con el sistema de gestión de cPanel Descripción del Sistema Castris ModSecurity Instalador one-click Como root de un sistema con cPanel ejecutar: curl -sSL https://gitlab.castris.com/root/utilidades/-/raw/main/cpanel/castris_mod_security/install_castris_badbots.sh | bash Castris Bad Bots ModSecurity Installer ===================================== 2025-07-05 06:56:34 - Starting Castris Bad Bots installation... 2025-07-05 06:56:34 - cPanel version detected: 11.110.0.68 SUCCESS: ModSecurity is available and loaded 2025-07-05 06:56:34 - SUCCESS: ModSecurity is available and loaded 2025-07-05 06:56:34 - Downloading Castris Bad Bots files from GitLab... 2025-07-05 06:56:34 - Downloading bot_list_management/update_badbot_list.sh... SUCCESS: Downloaded bot_list_management/update_badbot_list.sh 2025-07-05 06:56:34 - SUCCESS: Downloaded bot_list_management/update_badbot_list.sh 2025-07-05 06:56:34 - Downloading bot_list_management/install_cron.sh... SUCCESS: Downloaded bot_list_management/install_cron.sh 2025-07-05 06:56:34 - SUCCESS: Downloaded bot_list_management/install_cron.sh 2025-07-05 06:56:34 - Downloading bot_list_management/castris_badbots_list.txt... SUCCESS: Downloaded bot_list_management/castris_badbots_list.txt 2025-07-05 06:56:34 - SUCCESS: Downloaded bot_list_management/castris_badbots_list.txt SUCCESS: All files downloaded successfully 2025-07-05 06:56:34 - SUCCESS: All files downloaded successfully 2025-07-05 06:56:34 - Installing Castris Bad Bots cPanel vendor... info [modsec_vendor] You have added the vendor “Castris”. [castris] Castris archive_url | https://gitlab.castris.com/root/utilidades/-/raw/main/cpanel/castris_mod_security/vendor_package/castris-badbots-v1.0.0.zip description | Castris Bad Bots ModSecurity Blocker dist_md5 | bcf790fd90f757cd2ad780b76418dba5 dist_sha512 | 39593fa919723094ff4fe86725f956a334465c1a029bfff2621cc354c83c579c152ce645b3e88841a1d56a0b39e39a8c3dd814754d03b8aac162e329d4691db3 distribution | castris-badbots-01 enabled | 1 inst_dist | castris-badbots-01 installed | 1 installed_from | https://gitlab.castris.com/root/utilidades/-/raw/main/cpanel/castris_mod_security/vendor_package/meta_castris.yaml is_pkg | meta_vendor_cache_file | /var/cpanel/modsec_vendors/meta_castris.cache meta_yaml_file | /var/cpanel/modsec_vendors/meta_castris.yaml name | Castris path | /etc/apache2/conf.d/modsec_vendor_configs/castris progress_bar | report_url | supported_versions | (3) vendor_id | castris vendor_url | https://castris.com SUCCESS: Vendor added successfully 2025-07-05 06:56:35 - SUCCESS: Vendor added successfully info [modsec_vendor] You have enabled the vendor “castris”. SUCCESS: Vendor enabled successfully 2025-07-05 06:56:35 - SUCCESS: Vendor enabled successfully 2025-07-05 06:56:35 - Installing bot list management system... 2025-07-05 06:56:35 - Starting Castris Bad Bots cron installation... SUCCESS: Update script found and executable 2025-07-05 06:56:35 - SUCCESS: Update script found and executable 2025-07-05 06:56:35 - Installing weekly cron job for bad bots list update... SUCCESS: Cron job installed: /etc/cron.d/castris-badbot-update 2025-07-05 06:56:35 - SUCCESS: Cron job installed: /etc/cron.d/castris-badbot-update 2025-07-05 06:56:35 - Restarting cron service... SUCCESS: Cron service restarted 2025-07-05 06:56:35 - SUCCESS: Cron service restarted 2025-07-05 06:56:35 - Testing cron installation... WARNING: Cron syntax test failed (this might be normal on some systems) 2025-07-05 06:56:35 - WARNING: Cron syntax test failed (this might be normal on some systems) SUCCESS: Cron installation test passed 2025-07-05 06:56:35 - SUCCESS: Cron installation test passed 2025-07-05 06:56:35 - Running initial bad bots list update... 2025-07-05 06:56:35 - Starting Castris Bad Bots List update... 2025-07-05 06:56:35 - Downloading new bad bots list from: https://raw.githubusercontent.com/mitchellkrogza/apache-ultimate-bad-bot-blocker/master/_generator_lists/bad-user-agents-htaccess.list SUCCESS: Downloaded from primary URL 2025-07-05 06:56:36 - SUCCESS: Downloaded from primary URL SUCCESS: New bad bots list installed 2025-07-05 06:56:36 - SUCCESS: New bad bots list installed 2025-07-05 06:56:36 - New list contains 515 entries 2025-07-05 06:56:36 - Testing Apache configuration... SUCCESS: Apache configuration test passed 2025-07-05 06:56:36 - SUCCESS: Apache configuration test passed 2025-07-05 06:56:36 - Reloading Apache configuration... SUCCESS: Apache configuration reloaded 2025-07-05 06:56:38 - SUCCESS: Apache configuration reloaded 2025-07-05 06:56:38 - Statistics: 2025-07-05 06:56:38 - - Previous list: 0 entries 2025-07-05 06:56:38 - - New list: 515 entries 2025-07-05 06:56:38 - - Change: 515 entries SUCCESS: Bad bots list update completed successfully 2025-07-05 06:56:38 - SUCCESS: Bad bots list update completed successfully SUCCESS: Initial update completed successfully 2025-07-05 06:56:38 - SUCCESS: Initial update completed successfully ================================== Castris Bad Bots Cron Installation ================================== Installation completed successfully! Configuration: - Update script: /usr/local/bin/castris/update_badbot_list.sh - Cron file: /etc/cron.d/castris-badbot-update - Log file: /var/log/castris_cron_install.log - Schedule: Every Sunday at 2:00 AM Manual commands: - Run update now: /usr/local/bin/castris/update_badbot_list.sh - Check cron logs: tail -f /var/log/castris_badbot_update.log - Remove cron: rm -f /etc/cron.d/castris-badbot-update && systemctl restart cron The bad bots list will be automatically updated weekly. Check the logs for update status and statistics. SUCCESS: Castris Bad Bots cron installation completed 2025-07-05 06:56:38 - SUCCESS: Castris Bad Bots cron installation completed SUCCESS: Bot list management system installed 2025-07-05 06:56:38 - SUCCESS: Bot list management system installed 2025-07-05 06:56:38 - Testing installation... SUCCESS: Apache configuration test passed 2025-07-05 06:56:38 - SUCCESS: Apache configuration test passed SUCCESS: Vendor installation verified 2025-07-05 06:56:38 - SUCCESS: Vendor installation verified ============================================ Castris Bad Bots Installation Complete! ============================================ ✅ cPanel ModSecurity vendor installed ✅ Bot list management system installed ✅ Apache configuration validated TESTING: Test the installation with: curl -H 'User-Agent: BadBot' http://yourserver.com/ (Should return 406 Not Acceptable) MANAGEMENT: - Update bot list: /usr/local/bin/castris/update_badbot_list.sh - Check vendor: /scripts/modsec_vendor list - Disable vendor: /scripts/modsec_vendor disable castris - Remove vendor: /scripts/modsec_vendor remove castris LOGS: - Installation: /var/log/castris_badbots_install.log - Bot updates: /var/log/castris_badbot_update.log - ModSecurity: /usr/local/apache/logs/modsec_audit.log The system will automatically update bad bots lists weekly. Check cron with: cat /etc/cron.d/castris-badbot-update SUCCESS: Installation completed successfully! 2025-07-05 06:56:38 - SUCCESS: Installation completed successfully! Abajo esta la descripción técnica de todo el trabajo, y en mi Gitlab el resto Es público. Arquitectura del Paquete El sistema está compuesto por tres componentes principales: 1. Vendor Package meta_castris.yaml : Configuración del vendor que define las URLs de descarga y metadatos 00_castris_badbots.conf : Reglas ModSecurity optimizadas con IDs únicos (1090901-1090905) castris-badbots-v1.0.0.zip : Paquete ZIP que cPanel descarga automáticamente 2. Bot List Management update_badbot_list.sh : Script de actualización semanal de listas install_cron.sh : Instalador automatizado del cron castris_badbots_list.txt : Lista inicial de bad bots conocidos 3. Instalador Automático install_castris_badbots.sh : Script principal que orquesta toda la instalación pre_install_setup.sh : Script de verificación de prerrequisitos (opcional) Funcionamiento del Sistema Vendor El sistema vendor de cPanel permite que las reglas ModSecurity se gestionen automáticamente: Descarga Automática : cPanel descarga el ZIP desde la URL especificada en meta_castris.yaml Inyección de Reglas : Las reglas se instalan automáticamente en /etc/apache2/conf.d/modsec_vendor_configs/castris/ Actualización Transparente : Los cambios se aplican sin intervención manual Persistencia : Las configuraciones surviven a actualizaciones de cPanel Reglas ModSecurity Implementadas ID 1090901 : Bloqueo principal basado en User-Agent Utiliza @pmFromFile para comparar contra la lista de bad bots Respuesta HTTP 406 (Not Acceptable) Logging completo para monitoreo ID 1090902 : Bloqueo de User-Agent vacío Detecta solicitudes sin User-Agent Protección contra herramientas automatizadas básicas ID 1090903 : Detección de patrones sospechosos Identifica comportamientos anómalos en headers Análisis de patrones de solicitudes sospechosas ID 1090904 : Rate limiting avanzado Límite de 100 solicitudes por hora por IP Prevención de ataques de fuerza bruta ID 1090905 : Inicialización de contadores Gestión de estado para rate limiting Optimización de memoria y rendimiento Proceso de Instalación Instalación Automática El script install_castris_badbots.sh realiza las siguientes operaciones: Verificación de Prerrequisitos Comprueba que cPanel esté instalado y funcionando Verifica que ModSecurity esté habilitado Valida permisos de administrador Descarga de Componentes Descarga únicamente los archivos necesarios desde GitLab Verifica integridad mediante checksums Maneja fallos de conectividad con URLs de respaldo Instalación del Vendor /scripts/modsec_vendor add https://gitlab.castris.com/root/utilidades/-/raw/main/cpanel/castris_mod_security/vendor_package/meta_castris.yaml /scripts/modsec_vendor enable castris Configuración de Actualizaciones Instala cron para actualizaciones semanales (domingos 2:00 AM) Configura logs de actualización en /var/log/castris_badbot_update.log Establece URLs primarias y de respaldo para listas Validación del Sistema Prueba reglas con User-Agents conocidos Verifica logs de ModSecurity Confirma respuestas HTTP correctas Limpieza Elimina archivos temporales de instalación Optimiza configuraciones de Apache Reinicia servicios solo si es necesario Gestión de Listas de Bad Bots El sistema mantiene actualizadas las listas de bad bots mediante: Fuentes de Datos Primaria : https://download.castris.com/badbots/castris_badbots_list.txt Respaldo : GitHub Apache Ultimate Bad Bot Blocker Actualización Automática Ejecución semanal vía cron Respaldo automático de listas anteriores Logging detallado de cambios y estadísticas Reinicio automático de Apache solo cuando es necesario Gestión de Fallos Fallback automático a URLs de respaldo Conservación de listas anteriores en caso de fallo Alertas en logs para problemas de conectividad Archivos de Configuración Estructura en el Servidor /etc/apache2/conf.d/modsec_vendor_configs/castris/ ├── 00_castris_badbots.conf # Reglas ModSecurity /usr/local/apache/conf/modsec2/ ├── castris_badbots_list.txt # Lista activa de bad bots ├── castris_badbots_list.txt.backup # Respaldo de la lista anterior /etc/cron.d/ ├── castris-badbot-update # Cron de actualización semanal /var/log/ ├── castris_badbot_update.log # Logs de actualizaciones Configuración del Cron # Actualización semanal domingos 2:00 AM 0 2 * * 0 root /usr/local/bin/castris/update_badbot_list.sh >> /var/log/castris_badbot_update.log 2>&1 Monitoreo y Validación Testing del Sistema # Estos comandos DEBEN devolver 406 Not Acceptable curl -H 'User-Agent: BadBot' http://yourserver.com/ curl -H 'User-Agent: nikto' http://yourserver.com/ curl -H 'User-Agent: wget' http://yourserver.com/ # Este comando DEBE funcionar normalmente (200 OK) curl -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' http://yourserver.com/ Análisis de Logs # Ver bloqueos en tiempo real tail -f /usr/local/apache/logs/modsec_audit.log | grep 1090901 # Estadísticas de bloqueos grep "1090901" /usr/local/apache/logs/modsec_audit.log | wc -l # Top bots bloqueados grep "1090901" /usr/local/apache/logs/modsec_audit.log | \ grep -o 'User-Agent: [^"]*' | sort | uniq -c | sort -nr | head -10 Monitoreo de Actualizaciones # Logs de actualización de listas tail -f /var/log/castris_badbot_update.log # Verificar última actualización grep "Statistics:" /var/log/castris_badbot_update.log | tail -5 Consideraciones de Seguridad Ventajas del Sistema Automatización Completa : Sin intervención manual requerida Actualizaciones Regulares : Listas actualizadas semanalmente Persistencia : Configuraciones que surviven a actualizaciones del sistema Monitoreo : Logging detallado para análisis forense Fallback : Múltiples fuentes de datos para alta disponibilidad Precauciones Falsos Positivos : Monitorear que no se bloquee tráfico legítimo Impacto en Rendimiento : Las reglas son optimizadas pero requieren monitoreo Conectividad : Dependencia de URLs externas para actualizaciones Logs : Gestión del crecimiento de archivos de log Mantenimiento y Solución de Problemas Verificación de Estado # Verificar vendor habilitado /scripts/modsec_vendor list # Verificar ModSecurity cargado httpd -M | grep security2 # Verificar archivos de configuración ls -la /etc/apache2/conf.d/modsec_vendor_configs/castris/ Solución de Problemas Comunes Apache no inicia # Verificar sintaxis de configuración httpd -t # Revisar logs de error tail -f /usr/local/apache/logs/error_log Reglas no funcionan # Verificar lista existe ls -la /usr/local/apache/conf/modsec2/castris_badbots_list.txt # Verificar permisos chmod 644 /usr/local/apache/conf/modsec2/castris_badbots_list.txt Actualizaciones fallan # Ejecutar actualización manual con debug bash -x /usr/local/bin/castris/update_badbot_list.sh # Verificar conectividad curl -I https://download.castris.com/badbots/castris_badbots_list.txt Desinstalación Completa # Deshabilitar y remover vendor /scripts/modsec_vendor disable castris /scripts/modsec_vendor remove castris # Eliminar cron rm -f /etc/cron.d/castris-badbot-update systemctl restart cron # Limpiar archivos rm -rf /usr/local/bin/castris rm -f /usr/local/apache/conf/modsec2/castris_badbots_list.txt* rm -f /var/log/castris_*.log # Reiniciar Apache systemctl restart httpd Conclusiones Este sistema representa una evolución significativa en la gestión de bad bots para cPanel, ofreciendo automatización completa y mantenimiento mínimo. La integración con el sistema vendor nativo de cPanel garantiza persistencia y compatibilidad a largo plazo, mientras que las actualizaciones automáticas de listas mantienen la protección actualizada contra nuevas amenazas. La implementación de reglas ModSecurity optimizadas con IDs únicos evita conflictos con otras configuraciones, y el sistema de monitoreo integral permite análisis detallado del tráfico bloqueado y la efectividad del sistema. Recursos Adicionales Código fuente : https://gitlab.castris.com/root/utilidades/-/tree/main/cpanel/castris_mod_security Documentación técnica : Incluida en el README.md del repositorio Soporte : https://castris.com Lista de bad bots : Basada en Apache Ultimate Bad Bot Blocker Disclaimer Esta herramienta se proporciona tal como está para propósitos de seguridad. Los administradores son responsables de probar y validar la configuración en su entorno antes del despliegue en producción. Se recomienda revisar el código fuente antes de ejecutar scripts de instalación automática. Aviso Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris Si necesitas soporte profesional puedes contratar con Castris soporte profesional .