Una máxima en seguridad es instalar un firewall delante de un servidor y más si tienes el servidor expuesto en Internet. En el caso de disponer de un servidor bajo Plesk con CentOS y visto un poco mi experiencia recomiendo instalar el firewall apf junto a la herramienta bfd.
Esta herramienta parsea los logs de los diferentes servicios (ssh, ftp) y chequea ataques por fuerza bruta y le indicará a APF que IPs debe bloquear para que su acceso al servidor sea denegado:
En primer lugar desinstalamos el firewall de plesk:
# yum remove psa-firewall
Instalamos el firewall Apf:
# wget http://rfxnetworks.com/downloads/apf-current.tar.gz # tar -zxf apf-current.tar.gz # cd apf-9.7-2/ # ./install.sh
Procedemos a configurar el firewall. Para ello utilizamos el editor nano (también podemos utilizar el editor vi) y accedemos al fichero de configuración:
# nano /etc/apf/conf.apf
Allí buscamos las siguientes variables para configurar:
Desactivamos/activamos el cron que desactiva el firewall cada 5 minutos. Es útil activarlo mientras estemos en pruebas, pero hay que dejarlo en 0 cuando el servidor lo pongamos en producción:
# Set firewall cronjob (devel mode) # 1 = enabled / 0 = disabled DEVEL_MODE="1"
Configuramos las interfaces de red que APF va a rastrear su tráfico. En mi caso, la eth1:
IFACE_IN="eth1" IFACE_OUT="eth1"
Opcionalmente podemos configurar que ciertas interfaces no sean rastreadas por el firewall (p.ej. interfaces de tráfico local):
IFACE_TRUSTED="eth0"
Configuramos los puertos que necesitamos tener abiertos:
Puertos de entrada TCP permitidos:
# Common ingress (inbound) TCP ports IG_TCP_CPORTS="21,25,80,110,443,465"
Puertos de entrada UDP permitidos:
# Common ingress (inbound) UDP ports IG_UDP_CPORTS=""
Puertos de entrada ICMP permitidos:
# Common ICMP (inbound) types # 'internals/icmp.types' for type definition; 'all' is wildcard for any IG_ICMP_TYPES="3,5,11"
Después están las mismas opciones, pero para salida, configurar según los requerimientos de cada uno.
Para Plesk, y muy importante no olvidar que hay que abrir puertos para las actualizaciones de Plesk. Estos puertos son el 8447.
Configuramos las IP´s o rango de IP´s que vamos a permitir(allow_host.rules) o denegar(deny_host.rules):
/etc/apf/deny_host.rules /etc/apf/allow_host.rules
Incrementamos la seguridad a media:
RAB_PSCAN_LEVEL=”2″
Comprobamos el número máximo de «sesiones» (entradas de seguimiento de conexiones) que se puede manejar al mismo tiempo por el cortafuegos en la memoria del kernel:
SYSCTL_CONNTRACK="34576"
Finalmente arrancamos APF:
# /usr/local/sbin/apf -s
o bien como
# service apf start
Pasemos a instalar bfd. Para ello descargamos el fichero y procedemos a la instalación:
# wget http://www.rfxnetworks.com/downloads/bfd-current.tar.gz # tar -xvzf bfd-current.tar.gz # cd bfd-1.5/ # ./install.sh
Pasamos a configurarlo:
# nano /usr/local/bfd/conf.bfd
Activamos las alertas de ataque y configuramos que nos envíe un email por cada una:
ALERT_USR="1" EMAIL_USR="micuentadecorreo@tudominio.com"
Indicamos el nº de conexiones o intentos permitidos para cada servicio (En mi caso con 20, considero que puede ser suficiente):
TRIG="20"
Opcionalmente podemos configurar para evitar que el sistema bloquee nuestra IP local (192.168.0.1). Para ello, añadimos la IP al fichero:
# nano /usr/local/bfd/ignore.hosts
Ejecutamos el programa:
# /usr/local/sbin/bfd -s
Ahora ya nos queda parsear los logs cada X tiempo. Para ello cron «al canto» (Lo pondremos cada 10 minutos):
# nano /etc/cron.d/bfd */15 * * * * root /usr/local/sbin/bfd -q
Dedicando un poco de tiempo podéis personalizar las reglas que vienen por defecto para cada servicio:
/usr/local/bfd/rules