Installare e configurare APF (Advanced Policy Firewall)

Originariamente pubblicato da http://www.rfxnetworks.com/apf.php
APF è un sistema di firewall iptables basato su politiche progettato per la semplicità di utilizzo e configurazione. Utilizza una serie di funzionalità per soddisfare ugualmente gli utenti esperti e i principianti di Linux. Compresso in formati tar.gz e RPM, rende APF ideale per la distribuzione in molti ambienti server basati su Linux.

Questa guida illustrativa spiega l'installazione e la configurazione di un firewall basato su politiche avanzate per il sistema Linux. Inoltre, verrà fornito un file conf.apf di esempio per ogni pannello di controllo, CPanel e Plesk; tuttavia, la prima attività proposta è l'Installazione.

Installazione di APF
Tenere presente che sarà necessario accedere a SSH come 'root' o come utente con i privilegi appropriati per portare a termine l'installazione.
Passo 1: preparazione dell'installazione

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

Passo 2: installazione

Console:
sh ./install.sh
Installazione completata correttamente
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.

Per la risoluzione dei problemi di installazione, fare riferimento alla parte finale di questo argomento

Configurazione di APF
Passo 1: apertura del file di configurazione, conf.apf
In questa Guida illustrativa, utilizzeremo vi. Consultare l'argomento Basic Guide to Vim. Per visualizzarlo, sarà necessario accedere ai forum; per modificare la password del forum: accedere al Portale e, tramite https://control.softlayer.com/account/users, selezionare la propria utenza e aggiornare la 'password del forum' qui.

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

IMPORTANTE variabili di configurazione

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

DEVEL_MODE="1" 

DEVEL_MODE - Questa variabile indica ad APF di eseguire la ripulitura della configurazione corrente ogni 5 minuti. Ciò è di aiuto quando si verifica una nuova configurazione e ci si ritrova esclusi dal proprio server. Tenere a mente di impostare questa variabile su 0 una volta creata una configurazione funzionante.

Console:
# 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 - Per impostazione predefinita, queste variabili sono impostate su eth0; tuttavia, SoftLayer imposta eth0 su rete privata e la nostra rete pubblica su eth0. Una configurazione errata di queste variabili potrebbe risultare nella perdita di connettività di rete. Impostare entrambe le variabili su eth1

Console:
# 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 - Questa variabile indica al firewall di considerare le interfacce elencate come attendibili. Nel nostro caso, riteniamo eth0 attendibile. Impostare su eth0

Console:
##
# [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 - Elenca le porte e i tipi di traffico la cui ricezione da parte del server è consentita. Tenere a mente di elencare solo le porte e i tipi che si desidera consentire; rimuovere gli elementi non necessari.

Citazione:
Ingress
Porte e tipi per Cpanel
Console:
##
# [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" 

Porte e tipi per Plesk

Console:
##
# [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" 

Console:
##
# [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 e EG_ICMP_TYPES - Identiche alle variabili sopra riportate, eccetto per la gestione del traffico in uscita.

Citazione:
In uscita
Porte e tipi per CPanel
Console:
##
# [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" 

Porte e tipi per Plesk

Console:
##
# [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" 

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

USE_DS="0" 

USE_DS - Utilizzare la blacklist di dshield.org per proteggere il proprio server. Impostare su 1

Passo 2: salvataggio della configurazione (mentre in vim)

Console:

:wq

Passo 3: verifica della configurazione

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

Verificare il server accedendo nuovamente a SSH. Passare al pannello di controllo, al sito web, all'FTP, eccetera...Effettuare le modifiche necessarie.

Passo 4: modificare DEVEL_MODE su 0 e apf -r

Passo 5: impostare APF su autostart

Console:
chkconfig --level 2345 apf on