Instalación y configuración de APF (Advanced Policy Firewall)

Publicado originariamente en http://www.rfxnetworks.com/apf.php
APF es un sistema de políticas de cortafuegos basado en iptables cuyo uso y configuración se han diseñado para que sean fáciles. Emplea un subconjunto de características para satisfacer a usuarios avanzados y noveles de Linux. Empaquetado en formato tar.gz y son formatos RPM, APF resulta idóneo para muchos entornos de servidor basados en Linux.

En este procedimiento se describen la instalación y configuración de APF (Advanced Policy Firewall) en un sistema Linux. Además, se proporciona un archivo conf.apf para cada panel de control, CPanel y Plesk; sin embargo, la primera tarea que se debe realizar es la instalación.

Instalación de APF
Tenga en cuenta que deberá iniciar sesión en SSH como root o usuario con los privilegios adecuados para llevar a cabo la instalación.
Paso 1: preparación para la instalación

Consola:
cd /usr/local/src/
wget http://www.rfxnetworks.com/downloads/apf-current.tar.gz
tar -zxvf apf-current.tar.gz; cd apf-*

Paso 2: instalación

Consola:
sh ./install.sh
Successful Installation
Installing APF 0.9.6-1: Completed.

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/

Other Details:
Listening TCP ports: 1,21,25,53,80,110,111,143,199,443,465,631,993,995, 2082,2083,2084,2086,2087,2095,2096,3306,6666,14534 ,51234
Listening UDP ports: 53,161,631,8767,32769
Note: These ports are not auto-configured; they are simply presented for information purposes. You must manually configure all port options.

Para resolver problemas de instalación, desplácese a la parte inferior de la publicación

Configuración de APF
Paso 1: apertura del archivo de configuración, conf.apf
Se utilizará vi en este procedimiento. Consulte Basic Guide to Vim. Tendrá que iniciar sesión en los foros para ver esta guía. Para cambiar la contraseña del foro: inicie sesión en el portal y, a través de, https://control.softlayer.com/account/users, seleccione el usuario y actualice la contraseña.

Consola:
cd /etc/apf; vi conf.apf
i Press 'i' to enter Insert Mode

IMPORTANTES variables de configuración

Consola:
# Set firewall cronjob (devel mode)
# 1 = enabled / 0 = disabled

DEVEL_MODE="1" 

DEVEL_MODE: esta variable indicará a APF que deseche la configuración actual cada 5 minutos. Ello es útil cuando se realizan pruebas de nuevas configuraciones y se encuentra que tiene el acceso bloqueado al servidor. Recuerde definir esta variable en 0 cuando se haya creado una configuración de trabajo.

Consola:
# 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="eth0"
IFACE_OUT="eth0" 

IFACE_IN e IFACE_OUT: de forma predeterminada, se definen como eth0. Sin embargo, en SoftLayer nuestro eth0 se define como red privada y nuestra red pública se define en eth0. Si estas variables no se configuran correctamente, es posible que no haya conectividad de red. Defina ambas variables como eth1.

Consola:
# 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="" 

IFACE_TRUSTED: esta variable indica al cortafuegos que confíe en las interfaces listadas. En nuestro ejemplo, confiamos en eth0. Defina la variable como eth0

Consola:
##
# [Ingress]
# Configure ingress (inbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# IG_TCP_CPORTS="21,22,25,53,80,443,110,143,6000_7000"
# IG_UDP_CPORTS="20,21,53,123"
# IG_ICMP_TYPES="3,5,11,0,30,8"
##

# Common ingress (inbound) TCP ports


IG_TCP_CPORTS="22"

# Common ingress (inbound) UDP ports
IG_UDP_CPORTS=""

# Common ICMP (inbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

IG_ICMP_TYPES="3,5,11,0,30,8" 

IG_TCP_CPORTS, IG_UDP_CPORTS e IG_ICMP_TYPES: lista los puertos y los tipos de tráfico que se permite recibir en el servidor. Recuerde listar solo los puertos y tipos de la lista que desea permitir y elimine los elementos no necesarios.

Pedido:
Ingress
Puertos y tipos para Cpanel
Consola:
##
# [Ingress]
# Configure ingress (inbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# IG_TCP_CPORTS="21,22,25,53,80,443,110,143,6000_7000"
# IG_UDP_CPORTS="20,21,53,123"
# IG_ICMP_TYPES="3,5,11,0,30,8"
##

# Common ingress (inbound) TCP ports


IG_TCP_CPORTS="20,21,22,25,26,53,80,110,143,161,443,465,623,993,995,2082,2083,2086,2087,2095,2096,3306,3389,6666"

# Common ingress (inbound) UDP ports
IG_UDP_CPORTS="21,53,161,465,623,873"

# Common ICMP (inbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

IG_ICMP_TYPES="3,5,11,0,30,8" 

Puertos y tipos para Plesk

Consola:
##
# [Ingress]
# Configure ingress (inbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# IG_TCP_CPORTS="21,22,25,53,80,443,110,143,6000_7000"
# IG_UDP_CPORTS="20,21,53,123"
# IG_ICMP_TYPES="3,5,11,0,30,8"
##

# Common ingress (inbound) TCP ports


IG_TCP_CPORTS="20,21,22,25,26,53,80,110,143,161,443,465,623,993,995,3389,8443"

# Common ingress (inbound) UDP ports
IG_UDP_CPORTS="21,53,161,465,623,873"

# Common ICMP (inbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

IG_ICMP_TYPES="3,5,11,0,30,8" 

Consola:
##
# [Egress]
# Configure egress (outbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory.
#
# Egress filtering is not required but makes your firewall setup complete
# by providing full inbound and outbound packet filtering. You can toggle
# egress filtering on or off with the EGF variable. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# EG_TCP_CPORTS="21,25,80,443,43"
# EG_UDP_CPORTS="20,21,53"
# EG_ICMP_TYPES="all"
##

# Egress filtering [0 = Disabled / 1 = Enabled]


EGF="0"

# Common egress (outbound) TCP ports
EG_TCP_CPORTS="21,25,80,443"

# Common egress (outbound) UDP ports
EG_UDP_CPORTS="20,21,53"

# Common ICMP egress (outbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

EG_ICMP_TYPES="all" 

EG_TCP_CPORTS, EG_UDP_CPORTS y EG_ICMP_TYPES> igual que las variables anteriores, excepto en que gestionan el tráfico de salida.

Pedido:
Egress
Puertos y tipos para CPanel
Consola:
##
# [Egress]
# Configure egress (outbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory.
#
# Egress filtering is not required but makes your firewall setup complete
# by providing full inbound and outbound packet filtering. You can toggle
# egress filtering on or off with the EGF variable. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# EG_TCP_CPORTS="21,25,80,443,43"
# EG_UDP_CPORTS="20,21,53"
# EG_ICMP_TYPES="all"
##

# Egress filtering [0 = Disabled / 1 = Enabled]


EGF="1"

# Common egress (outbound) TCP ports
EG_TCP_CPORTS="21,22,25,26,27,37,43,53,80,110,113,161,443,465,623,873,2089,3389"

# Common egress (outbound) UDP ports
EG_UDP_CPORTS="20,21,53,161,465,623,873"

# Common ICMP egress (outbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

EG_ICMP_TYPES="all" 

Puertos y tipos para Plesk

Consola:
##
# [Egress]
# Configure egress (outbound) accepted services. This is an optional
# feature; services and customized entries may be made directly to an ip's
# virtual net file located in the vnet/ directory.
#
# Egress filtering is not required but makes your firewall setup complete
# by providing full inbound and outbound packet filtering. You can toggle
# egress filtering on or off with the EGF variable. Format is comma seperated
# and underscore seperator for ranges.
#
# Example:
# EG_TCP_CPORTS="21,25,80,443,43"
# EG_UDP_CPORTS="20,21,53"
# EG_ICMP_TYPES="all"
##

# Egress filtering [0 = Disabled / 1 = Enabled]


EGF="1"

# Common egress (outbound) TCP ports
EG_TCP_CPORTS="21,22,25,26,27,37,43,53,80,110,113,161,443,465,623,873,3389"

# Common egress (outbound) UDP ports
EG_UDP_CPORTS="20,21,53,161,465,623,873"

# Common ICMP egress (outbound) types
# 'internals/icmp.types' for type definition; 'all' is wildcard for any

EG_ICMP_TYPES="all" 

Consola:
# DShield.org's "block" list of top networks that have exhibited
# suspicious activity. [0 = Disabled / 1 = Enabled]

USE_DS="0" 

USE_DS: utilice la lista negra de dshield.org para proteger el servidor. Defínala como 1

Paso 2: cómo guardar la configuración (mientras se está en vim)

Consola:

:wq

Paso 3: prueba de la configuración

Consola:
apf -r
Development mode enabled!; firewall will flush every 5 minutes.

Pruebe el servidor volviendo a iniciar sesión en SSH. Visite el panel de control, el sitio web, el ftp, etc. Realice los ajustes necesarios.

Paso 4: cambio de DEVEL_MODE a 0 y apf -r

Paso 5: definición de APF en inicio automático

Consola:
chkconfig --level 2345 apf on