El sistema LFD va llenando el archivo de IPs bloqueadas del CSF constantemente por lo que el mantenimiento del mismo se puede volver muy engorroso. Para que este archivo se limpie cada 4 horas (específicamente al minuto 50 cada 4 horas) debemos ejecutar:
cd /etc/csf nano limpiaips.sh
Colocar en el archivo el siguiente contenido:
#MAILTO=hostmaster@sudomimiocom #!/bin/sh #Limpiar las IP Bloqueadas en el CSF cada 4 horas echo > /etc/csf/csf.deny /etc/csf/csf.pl -r
Guardar el archivo y salir del editor.
Ahora debemos darle permisos de ejecución con:
chmod 700 limpiarips.sh
Luego debemos crear el cron que se ejecute en el minuto 50 cada 4 horas, para ello debemos ejecutar:
crontab -e
Colocar al final del archivo el siguiente contenido:
service crond restart (ó con /etc/rc.d/init.d/crond restart)
LISTO.
NOTAS:
Si el editor que maneja el crontab es el editor “vi” entonces debemos ir al final del archivo, presionar la tecla ” i ” para pasar al modo de inserción, pegar el contenido en una nueva línea, luego presionar la tecla ESC para salir del modo de inserción y finalmente ejecutar el comando para guardar y salir con ” :wq “.
Algunos detalles del formato del archivo de Denegación de Ips son:
Permite el format CIDR (e.j. 192.168.254.0/24)
Si se agrega el texto “do not delete” a los comentarios de una Ip registrada entonces la misma no se borrará cuando se llegue al límite DENY_IP_LIMIT
Permite el filtrado avanzado de puertos e ips con el siguiente formato:
Cuando las aplicaciones en PHP graban archivos en el servidor, el usuario predeterinado para dichos archivos es “nobody”. Esto afecta el cálculo del espacio usado en el servidor ya que el mismo se basa en el usuario:grupo.
Para resolver esto debemos ejecutar un cron que deberá ejecutarse a las 5:00 AM todos los días, para que ubique todos los archivos creados por nobody y los cambie al usuario:grupo del usuario correspondiente, para ello ejecutamos:
crontab -e
Y al final colocamos:
0 5 * * * for i in `ls /home/`; do find /home/$i/ -user nobody -exec chown $i:$i "{}" \;; done > /dev/null 2>&1
Guardamos el archivo (recordar cambiar XX por lo que corresponda según el servidor)
Para evitar que las carpetas de los clientes a las que les coloquen permisos 777 queden desprotegidas permitiendo la ejecución de archivos, hay que cargar un archivo .htaccess en las mismas con el siguiente contenido:
# ATENCION - NO ELIMINE ESTE ARCHIVO - PROTECCION 777 # Prohibida la ejecucion de archivos en carpetas 777 <filesmatch "\.(js|php*|css|pl|cgi|htm|html|jsp)$"> deny from all </filesmatch>
Debemos cargar este archive en la carpeta:
/home/adminXX/proteccion
Donde adminXX corresponde al usuario creado inicialmente para la administración del servidor.
Luego de cargado el archivo debemos asegurar que sea propiedad de root, para ello ejecutamos:
cd /home/adminXX/proteccion chown root:root .htaccess
Ahora debemos crear el cron que deberá ejecutarse a las 3:00 AM todos los días, para ello ejecutamos:
Parar y desinstalar el servicio “PC/SC smart card daemon“ que no se usa y puede representar vulnerabilidades:
service pcscd stop chkconfig pcscd off
Parar y desinstalar el servicio “Bluetooth H.I.D. Server“ que no se usa y puede representar vulnerabilidades:
service hidd stop chkconfig hidd off
Parar y desinstalar el servicio Avahi que permite detectar automáticamente los recursos de una red local y conectarse a ella, que no se usa y puede representar vulnerabilidades:
service avahi-daemon stop chkconfig avahi-daemon off
Parar y desinstalar el servicio Anacron que es un programador de tareas similar a cron, con la diferencia de que no necesita que el sistema esté en ejecución (Se puede utilizar para ejecutar los procesos que cron ejecuta normalmente de forma diaria, semanal y mensual), que no se usa y puede representar vulnerabilidades:
service anacron stop chkconfig anacron off
Parar y desinstalar el servicio Bluetooth, que no se usa y puede representar vulnerabilidades:
service bluetooth stop chkconfig bluetooth off
Parar y desinstalar el servicio rpcidmapd que maneja un servidor NFS, que no se usa y puede representar vulnerabilidades:
service rpcidmapd stop chkconfig rpcidmapd off
Parar y desinstalar el servicio nfslock que inicia los procesos RPC adecuados para permitir que clientes NFS bloqueen archivos en el servidor, que no se usa y puede representar vulnerabilidades:
service nfslock stop chkconfig nfslock off
Parar y desinstalar el servicio cups que es un servidor de impresión, que no se usa y puede representar vulnerabilidades:
service cups stop chkconfig cups off
Parar y desinstalar el servicio xfs que es un servidor de fonts para X Windows, que no se usa y puede representar vulnerabilidades:
service xfs stop chkconfig xsf off
Parar y desinstalar el servicio atd que es un servidor que ejecuta comandos planificados por el programa at en los momentos configurados, que no se usa y puede representar vulnerabilidades:
service atd stop chkconfig atd off
Se deben deshabilitar los commandos LOAD DATA LOCAL en MySQL agregando la línea siguiente línea en la sección [mysqld] del archivo /etc/my.cnf y luego debemos rearrancar mysql, con:
nano /etc/my.cnf
Agregar bajo la sección [mysqld] la línea:
local-infile=0
Guardar el archivo
Reiniciar mysql con:
service mysql restart
Se deben marcar todos los ítems de procesos maliciosos indicados en:
WHM > Background Process Killer
(BitchX, bnc, eggdrop, generic-sniffers, guardservices, ircd, psyBNC, ptlink, services) y luego guardar.
Se debe marcar la casilla siguiente:
WHM > Tweak Settings > Always redirect users to the ssl/tls ports when visiting /cpanel, /webmail, etc.
Debido a que puede ser un vector de ataque de hackers, debemos impedir que existan cargas de archivos por anónimos, a través de:
WHM > FTP Server Configuration > Allow Anonymous Uploads > No
Se deben colocar en automatico las actualizaciones de paquetes y seguridad asociados a cPanel en:
Se deben marcar varias casillas relacionadas con la seguridad en cuanto a la conexión del navegador del usuario, referidores, tokens de seguridad y cokies, estas casillas son:
WHM > Tweak Settings > Only permit cpanel/whm/webmail to execute functions when the browser provides a referrer
WHM > Tweak Settings > Only permit cpanel/whm/webmail to execute functions when the browser provided referrer (Domain/IP and Port) exactly matches the destination URL
WHM > Tweak Settings > Require security tokens for all interfaces
CSF Firewall es un popular cortafuegos basado en iptables para sistemas Gnu/Linux, nació para integrarse con el popular panel cPanel/WHM, pero fue tan grande su éxito que el desarrollador añadió una versión generica que corre hoy en día en las distros más populares.
CSF/LFD soporta los siguientes sistemas operativos:
RedHat v7.3, v8.0, v9.0
*openSUSE v10, v11
RedHat Enterprise v3, v4, v5 (32/64 bit)
*Debian v3.1, v4.0, v5.0
CentOS v3, v4, v5 (32/64 bit)
*Ubuntu v6.06 LTS, v8.10, v9.10, v10.04 LTS
Fedora Core v1 to v12(32/64 bit)
*Mandriva 2009, 2010
*Gentoo
*Slackware v12.2
(* pueden requerir patrones regex personalizados para algunas funciones)
A su vez, soporta los siguientes Servidores Virtuales:
** Virtuozzo
**OpenVZ
VMware
UML
Xen
MS Virtual Server
VirtualBox
(** require la configuración correcta de iptables en el servidor)
Las características de CSF/LFD son:
Script de firewall basado en iptables SPI directas
Proceso tipo demonio que verifica fallas en la autenticación por login para:
Courier imap, Dovecot, uw-imap, Kerio
openSSH
cPanel, WHM, Webmail (sólo servidores cPanel)
Pure-pftd, vsftpd, Proftpd
Páginas web protegidas por contraseña (htpasswd)
Fallas de Mod_security (v1 y v2)
Fallas Suhosin
Exim SMTP AUTH
Fallas de login personalizados con archivos log separados y coincidencia de expresiones regulares.
Seguimiento de login POP3/IMAP para reforzar los login por hora
Notificación de login por SSH
Notificación de login SU
Bloqueo de conexión excesiva
Integración con la interfaz Web para cPanel, DirectAdmin y Webmin
Actualizaciones sencillas entre versiones dentro de cPanel/WHM, DirectAdmin ó Webmin
Actualizaciones sencillas entre versiones por SSH
Pre-configurado para trabajar con cPanel con todos los puertos de cPanel abiertos
Pre-configurado para trabajar con DirectAdmin con todos los puertos de DirectAdmin abiertos
Auto-configuración del puerto SSH si se esta utilizando un puerto no estándar
Bloqueo del tráfico en las direcciones IPs no utilizadas en el servidor para disminuir riesgos
Alerta cuando scripts de usuarios envian emails excesivos po hora para identificar spam
Reporte de procesos sospechosos indicando exploits potenciales ejecutándose en el servidor
Reporte de procesos de usuario excesivos
Reporte de procesos de usuario de uso excesivo y terminación opcional
Reporte de archives sospechosos para indicar archives poteciales de exploit en /tmp y directorios similares.
Vigilancia de directories y archivos, reportando cuando un directorio o archivo vigilado cambia
Bloquea el tráfico que este registrado en las listas de DShield Block y Spamhaus DROP
Protección de paquetes BOGON
Parámetros pre-configurados para seguridad Baja, Media o Alta (sólo para servidores cPanel)
Trabaja con multiples dispositivos ethernet
Verificación de la seguridad del servidor. Verifica aspectos básicos de seguridad y parámetros del servidor (a través de la interfaz web de cPanel/DirectAdmin/Webmin)
Permite direcciones IP con DNS Dinámicos, permitiendo el acceso desde su IP siempre aún cuando su IP cambie cuando se conecta a la Internet.
Envío de Alerta si el promedio de carga permanence alto por un determinado período de tiempo
Reporte del log de mod_security (si está instalado)
Seguimiento de Email relay (verifica todos los emails enviados a través del servidor y emite alertas por uso escesivo ” sólo para servidores con cPanel)
Sistema de Detección de Intrusiones IDS (la última línea de detección alerta acerca de cambios del sistema y archivos binarios de aplicaciones
Protección de SYN Flood
Protección de Ping of death
Bloqueo y seguimiento de rastreo de puertos
Bloqueo permanente y temporal de Ips (con TTL)
Verificación de Exploits
Seguimiento de modificaciones de cuentas (envía alertas si un registro de cuenta es modificado. Ejm: si se cambia la contraseña o el acceso por SSH)
Toma en cuenta el syslog compartido
Servicio de Messenger. Le permite redireccionar solicitudes de conexiones desde IPs bloqueadas hacia páginas de texto o html preconfiguradas para informar al visitante que ha sido bloqueado por el firewall. Esto puede ser muy útil para aquellos con una gran base de usuarios y ayuda en el proceso de solicitudes de soporte en forma más eficiente.
Bloqueo por código de país. Le permite denegar o permitir el acceso desde códigos de país ISO
Detección y mitigación de Port Flooding (por IP y Puerto, para evitar ataques DoS)
Notificación de acceso al WHM root (solo para servidores con cPanel)
Clustering en LFD. Permite que los bloques de IPs se propaguen automáticamente alrededor de un grupo de servidores ejecutando LFD. Esto permite el manejo de LFD en clusters.
Arranque Rápido CSF. Arranque diferido por LFD para servidores con listas de permitidos y bloques muy largos
Detección de Ataques de Fallas de Login Distribuido
IPs Permitidas temporales (con TTL)
Soporte IPv6 con ip6tables (BETA)
Demonio de Fallas de Logins (LFD)
Para complementar el CSF, se utiliza el demonio LFD que se ejecuta como un proceso continuo que se ejecuta cada ciertos segundos y rastrea las entradas a los archivos log buscando intentos de accesos con logins fallidos en forma contínua en un corto período de tiempo. Dichos intentos se denominan “Ataques por Fuerza Bruta” y el proceso del demonio responde muy rápidamente a tales patrones bloqueando las IP’s.
Instalación:
Para realizar la instalación debemos:
Ejecutar:
cd /usr/local/src wget http://www.configserver.com/free/csf.tgz tar -zxvf csf.tgz cd csf
Antes de instalarlo debemos saber que CSF/LFD no debe coexistir con APF/BFD ya que traerá múltiples inconvenientes. Si estamos instalado CSF/LFD en un servidor donde previamente se había instalado APF/BFD entonces debemos ejecutar una aplicación que permite eliminar el APF/BFD con el siguiente comando:
sh /etc/csf/remove_apf_bfd.sh
Ahora podemos instalarlo con:
sh install.sh
Al culminar mostrará:
*** SSH port XXXXX added to the TCP_IN port list TCP ports currently listening for incoming connections: 21,25,53,80,110,143,443,465,765,993,995,2077,2078,2082,2083,2086,2087,2095,2096,3306,8009,8080,XXXXX UDP ports currently listening for incoming connections: 53,631,759,762,5353,53491,57363 Note: The port details above are for information only, csf hasn't been auto-configured. Don't forget to: 1. Configure the TCP_IN, TCP_OUT, UDP_IN and UDP_OUT options in the csf configuration to suite your server 2. Restart csf and lfd 3. Set TESTING to 0 once you're happy with the firewall Adding current SSH session IP address to the csf whitelist in csf.allow: Adding 190.205.209.35 to csf.allow only while in TESTING mode (not iptables ACCEPT) *WARNING* TESTING mode is enabled - do not forget to disable it in the configuration
Luego de instalado debemos ejecutar el siguiente commando para realizar la prueba:
perl /etc/csf/csftest.pl
Si todo esta OK entonces el firewall ha sido instalado y si refrescamos la pantalla del WHM lo veremos al final del menú en el área de Plugins.
Debemos ir a:
WHM > Plugins > ConfigServer Security&Firewall y hacer clic en el botón Firewall Configuration
Buscar los siguientes campos y colocar los valores indicados:
TESTING colocarlo en 0 SMTP_BLOCK colocarlo en 1 LF_SCRIPT_ALERT colocarlo en 1 PT_ALL_USERS colocarlo en 1 SAFECHAINUPDATE colocarlo en 1 IPV6 colocarlo en 1 LT_POP3D colocarlo en 120 PT_DELETED colocarlo en 0 TCP_IN = 20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2089,2095,2096,XXXXX,1433,3306,8080 TCP_OUT = 20,21,22,25,37,43,53,80,110,113,443,587,873,2087,2089,2703,1433 UDP_IN = 20,21,53 UDP_OUT = 20,21,53,113,123,873,6277
Clic en el botón Change y Luego clic en el botón Restart.
LISTO
Adicionalmente, para evitar que el LFD envíe emails constantes en referencia a procesos asocidados al spamd, awstats y tomcat, se debe ingresar al CSF vía Web y editar el archivo “csf.pignore”, agregando al final:
A su vez, podemos editarlos directamente por el WHM con:
WHM > Plugins > ConfigServer Security & Firewall
Al final esta una caja de selección con los nombres de las plantillas de email comenzando con alert.txt y a su lado tiene el botón Edit con el cual se pueden editar.
En el caso de que estemos utilizando Webmin podemos instalar el módulo de CSF para este panel, siguiento estos pasos:
Webmin > Configuración de Webmin > Módulos de Webmin > install from: Desde archivo local > /etc/csf/csfwebmin.tgz > instalar módulo.
Después en:
Webmin > Sistema
Se mostrará ConfigServer Security & Firewall con su logo.
Por otro lado, es importante conocer los comandos del CSF que pueden ser ejecutados por consola (SSH) que listamos a continuación:
Comando Descripción csf -d [IP] Comentario Bloquear/Denegar el acceso a una IP permanentemente y agregarla al archivo /etc/csf/csf.deny csf -td [IP] Bloqueo Temporal csf -dr [IP] Desbloquear una IP y sacarla del archivo /etc/csf/csf.deny csf -g [IP] Verificar si una IP está bloqueada csf -s Inicar las reglas del firewall csf -f Hacer Flush/Parar las reglas del firewall (nota: lfd puede reiniciar csf) csf -r Reiniciar las reglas del firewall csf -a [IP] Permitir acceso a una IP y agregarla al archivo /etc/csf/csf.allow csf -tr [IP] Sacar una IP de la lista de bloqueos temporales o de la lista de permitidos csf -tf Hacer Flush de todas las IPs de la lista de IPs bloqueadas temporalmente csf -df Sacar y desbloquear todas las IPs que están en el archivo /etc/csf/csf.deny csf -t Mostrar la lista de las IP permitidas temporalmente y denegar las IP’s con su TTL y comentario
El sistema BFD va llenando el archivo de IPs bloqueadas del APF constantemente por lo que el mantenimiento del mismo se puede volver muy engorroso. Para que este archivo se limpie cada 4 horas (específicamente al minuto 50 cada 4 horas) debemos ejecutar:
cd /etc/apf nano limpiaips.sh
Colocar en el archivo el siguiente contenido:
MAILTO= #!/bin/sh #Limpiar las IP Bloqueadas en el APF cada 4 horas echo > /etc/apf/deny_hosts.rules >/dev/null 2>&1 /usr/local/sbin/apf -r >/dev/null 2>&1
Guardar el archivo y salir del editor.
Ahora debemos darle permisos de ejecución con:
chmod 700 limpiaips.sh
Luego debemos crear el cron que se ejecute en el minuto 50 cada 4 horas, para ello debemos ejecutar:
crontab -e
Colocar al final del archivo el siguiente contenido:
50 */4 * * * /etc/apf/limpiaips.sh
Guardar el archivo y salir del editor.
Ahora debemos reiniciar el servicio del cron con:
service crond restart (ó con /etc/rc.d/init.d/crond restart)
LISTO.
NOTA: Si el editor que maneja el crontab es el editor “vi” entonces debemos ir al final del archivo, presionar la tecla ” i ” para pasar al modo de inserción, pegar el contenido en una nueva línea, luego presionar la tecla ESC para salir del modo de inserción y finalmente ejecutar el comando para guardar y salir con ” :wq “.