Instalar y configurar firewall apf junto a bfd (Brute Force Detection)

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

Related Posts