En esta entrada vamos a proteger nuestro sistema Unix con APF (Advanced Policy Firewall).
APF es un sistema de Firewall basado en IPtables, con la peculiaridad de que su manejo e instalación es extremadamente sencilla. Próximamente explicaremos también como instalar BFD, un detector de ataques de fuerza bruta, que unido a APF forman un excelente nivel de seguridad en el servidor, pues trabajan de forma conjunta.
Comenzamos con la instalación de APF:
cd /root/descargas (o la carpeta en la que guardes tus sources) wget http://rfxnetworks.com/downloads/apf-current.tar.gz tar -zxf apf-current.tar.gz cd apf-0.* ./install.sh
Una vez instalado nos indicará las distintas rutas de ficheros de configuración y ejecutables:
Installation Details: Install path: /etc/apf/ Config path: /etc/apf/conf.apf Executable path: /usr/local/sbin/apf AntiDos install path: /etc/apf/ad/ AntiDos config path: /etc/apf/ad/conf.antidos DShield Client Parser: /etc/apf/extras/dshield/
Comenzamos a configurar APF, abirmos el fichero de configuración con nuestro editor favorito, estas son las opciones principales a configurar, recordad leer los comentarios en el fichero de configuración y en los README:
vi /etc/apf/conf.apf
Desactivamos/activamos el cron que desactiva el firewall cada 5 minutos, es útil activarlo mientras estemos de pruebas, pero aseguraos de dejarlo en 0 cuando el server entre en producción:
# Set firewall cronjob (devel mode) # 1 = enabled / 0 = disabled DEVEL_MODE="1"
Interfaces de red que APF va a rastrear su tráfico, ponemos la interfaz que salga a Internet, en este caso es la eth1:
# Untrusted Network interface(s); all traffic on defined interface will be # subject to all firewall rules. This should be your internet exposed # interfaces. Only one interface is accepted for each value. # NOTE: The interfacing structure is being worked towards support of MASQ/NAT IFACE_IN="eth1" IFACE_OUT="eth1"
Por otro lado, podemos configurar que ciertas interfaces no sean rastreadas por el firewall, pueden ser interfaces de tráfico local:
# Trusted Network interface(s); all traffic on defined interface(s) will by-pass # ALL firewall rules, format is white space or comma seperated list. IFACE_TRUSTED="eth0"
Y para terminar la configuración básica, la parte más importante, la sección de puertos, configurable dependiendo de los puertos abiertos necesarios para cada servidor:
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. Y recordad revisar todas las demás opciones para sacar el mayor partido a este excelente firewall.
Otros dos ficheros importantes a tener en cuenta son :
/etc/apf/deny_host.rules /etc/apf/allow_host.rules
En estos ficheros podemos incluir ips, rangos y reglas a las que denegar acceso (deny_host.rules) o permitir(allow_host.rules) al servidor. Finalmente arrancamos APF:
/usr/local/sbin/apf -s