Differences between revisions 4 and 7 (spanning 3 versions)
Revision 4 as of 2012-01-20 14:27:00
Size: 19456
Editor: ?skizzhg
Comment: sync with english
Revision 7 as of 2020-03-10 12:04:14
Size: 20807
Comment: sync with English master v.49
Deletions are marked like this. Additions are marked like this.
Line 8: Line 8:

'''ATTENZIONE:''' iptables viene rimpiazzato da [[nftables]]
Line 184: Line 186:
======= SystemD | firewall.service =======
La maggior parte delle distribuzioni Debian attualmente include systemd. Per attivare all'avvio le regole di iptables usando systemd:

Creare un nuovo file usando un editor di testo ragionevole (il file dell'autore si chiama firewall.service)

{{{
# vim.tiny /etc/systemd/system/firewall.service
}}}

Poi aggiungervi quanto segue:

{{{
[Unit]
Description=Add Firewall Rules to iptables

[Service]
Type=oneshot
ExecStart=/etc/firewall/enable.sh
#ExecStart=/etc/firewall/enable6.sh #Per IPV6

[Install]
WantedBy=multi-user.target
}}}

Poi abilitare il servizio:

{{{
# systemctl enable firewall.service
}}}
Line 192: Line 224:
# Uno script molto basilare per IPtables / Netfilter # Uno script molto basilare per IPtables / Netfilter /etc/firewall/enable.sh
Line 260: Line 292:
iptables -A INPUT -m conntrack --ctstate INVALID -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate INVALID -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate INVALID -j ACCEPT
iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
Line 316: Line 348:

Esempio:

{{{#!text
#!/bin/sh
# Uno script per IP6tables / Netfilter6 molto basilare
PATH='/sbin'

# Flush the tables to apply changes
ip6tables -F

#ACCEPT POLICY
ip6tables -P INPUT DROP #If it doesn't match a rule Drop it
ip6tables -P FORWARD DROP #NO ROUTING POLICY DROP
ip6tables -P OUTPUT ACCEPT #If it doesn't match a rule

########
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -m state --state ESTABLISHED,RELATED -A INPUT -j ACCEPT
ip6tables -A INPUT -p icmpv6 -j ACCEPT
}}}
Line 423: Line 476:
CategoryNetwork CategorySystemAdministration | CategorySystemSecurity | CategoryRedundant: Unire con DebianFirewall

Translation(s): English - Italiano

Introduzione

ATTENZIONE: iptables viene rimpiazzato da nftables

Un firewall di rete è un insieme di regole che consentono o negano il passaggio di traffico di rete, attraverso uno o più dispositivi di rete. Un firewall di rete può anche eseguire compiti più complessi, come tradurre gli indirizzi di rete, regolare la banda, fornire tunnel cifrati e molte altre cose connesse al traffico di rete.

Prima della versione 5 (Lenny), un'installazione standard Debian, non aveva un firewall predefinito abilitato. Forniva però gli strumenti per configurarne uno manualmente.

Software base per firewall

Il traffico di rete ha diverse componenti, livelli e protocolli. Per maggiori informazioni, controllare la sezione con i collegamenti esterni.

I tipi di firewall più conosciuti, ed i primi ad essere implementati, sono insiemi di regole basate sul software netfilter, basati su un insieme di moduli del kernel e alcuni strumenti in spazio utente.

Software di base per la manipolazione del traffico di rete

L'installazione Debian standard viene fornita con il programma iptables(8), configurato per permettere tutto il traffico. Questa sezione spiega brevemente i diversi programmi per gestire il traffico di rete manualmente, oltre a due script d'esempio.

È necessario essere root o usare sudo, per avviare questi programmi.

Potrebbe essere utile il pacchetto iptables-persistent.

Usare iptables per il traffico IPv4

Questo non è un manuale di iptables, solo una breve introduzione sull'uso del programma. Per spiegazioni più dettagliate, vedere iptables(8).

L'invocazione base per definire le regole è:

% iptables [-t tabella] -[AD] catena  definizione-regola [opzioni]

Tabelle e catene

Tutte le regole sono memorizzate in tabelle diverse.

La tabella predefinita è filter, che gestisce le catene INPUT, OUTPUT e FORWARD, usate rispettivamente per il traffico in entrata, uscita e ridiretto.

Altre tabelle presenti sono mangle, nat e raw. Si possono anche creare e cancellare tabelle personalizzate.

Le regole e l'invocazione del programma possono fare riferimento ad una tabella specifica usando l'opzione -t nome_tabella (o --table nome_tabella).

Se non viene specificata alcuna tabella, viene usata quella predefinita (la tabella filter).

Per elencare l'insieme di regole delle tabelle si usa l'opzione -L. Per esempio:

% iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Come si può vedere, la politica (policy) predefinita in un'installazione standard è di accettare (ACCEPT) tutto il traffico. Non c'è nessuna regola in nessuna delle catene (chain).

Ogni tabella predefinita contiene diverse catene per memorizzare le regole per diversi punti del sottosistema di rete del kernel.

Si possono elencare altre tabelle usando -t per vedere, per esempio, la tabella nat (Network Address Translation, traduzione degli indirizzi di rete):

% iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Corrispondenze e ordine

Quando un pacchetto viene ispezionato usando gli insiemi di regole, vengono cercate corrispondenze dall'alto verso il basso di tabelle e catene.

Nelle regole le corrispondenze sono cercate da sinistra a destra della sintassi usata per la regola.

Quando un pacchetto non corrisponde a una regola, la ricerca salta alla regola seguente. Se non corrisponde a nessuna regola, allora al pacchetto viene applicata la politica predefinita.

Se il pacchetto corrisponde ad una qualsiasi definizione di regola, allora viene applicato l'obbiettivo (target) definito nella regola (ACCEPT, REJECT, DROP, LOG, ecc.), e vengono saltate le regole seguenti nella stessa catena.

È molto importante tenere a mente questo comportamento quando si progetta un insieme di regole, per ottenere le funzionalità desiderate e per l'impatto sulle prestazioni in caso di grandi insiemi di regole.

Politiche e obbiettivi

La politica predefinita è ACCEPT, cioè l'accettazione, per tutto il traffico, ma la prassi più comune è di cambiare le politiche in DROP, cioè il rifiuto, per tutto il traffico tranne per quello permesso.

Si deve fare attenzione ed essere sicuri che le proprie regole siano corrette, prima di attuare una politica DROP o si perderà la connettività.

Vedere la sezione sulla risoluzione dei problemi per suggerimenti riguardo a questa problematica.

Opzioni di programma

Le opzioni usate più di frequente sono:

  • -A Aggiunge la regola alla fine della catena specificata.

  • -D Cancella la definizione di regola dall'insieme di regole.

  • -I Inserisce questa regola all'inizio della catena specificata.

  • -P Cambia la politica predefinita di una catena.

Esistono altre opzioni per gestire catene, tabelle, pulire regole, per contatori ed altri elementi. Vedere la pagina di manuale iptables(8).

Moduli

Il programma iptables ha una vasta raccolta di moduli per usare criteri diversi nella valutazione dei pacchetti.

Ci sono moduli per protocolli, per i log, lo stato delle connessioni, ecc. Tutti i moduli compilati internamente sono chiaramente spiegati nella pagina di manuale.

I moduli possono accettare parametri (-m nome_modulo --nome_parametro argomenti_parametro).

Una regola d'esempio, usando il modulo state (stato), per rigettare il traffico in entrata con stato INVALID (un parametro del modulo state), definito nelle intestazioni del pacchetto, sarebbe così:

% iptables -I INPUT -m state --state INVALID -j DROP

Script d'esempio

Installazione

Si possono posizionare questi script in qualsiasi posizione in cui vengono eseguiti automaticamente all'avvio o al momento dell'inizializzazione della rete.

Posizioni usate di solito sono:

/etc/rc.local

Prima di exit 0. Sarà eseguito all'avvio.

#!/bin/sh
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

set -e

# Avviare le regole per netfilter
if [ -e '/etc/firewall_example.sh' ]
then
    /bin/sh '/etc/firewall_example.sh'
fi

exit 0

/etc/network/interfaces

Questa è una posizione più sensata e standard per le cose che riguardano la rete.

Per esempio, se eth0 è la propria unica interfaccia, o quella principale, e si usa DHCP:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto  lo
iface lo inet loopback

# WAN modem via cavo
allow-hotplug eth0
iface         eth0 inet dhcp
              pre-up    /bin/sh /etc/firewall/enable.sh
              post-down /bin/sh /etc/firewall/disable.sh

SystemD | firewall.service

La maggior parte delle distribuzioni Debian attualmente include systemd. Per attivare all'avvio le regole di iptables usando systemd:

Creare un nuovo file usando un editor di testo ragionevole (il file dell'autore si chiama firewall.service)

# vim.tiny /etc/systemd/system/firewall.service

Poi aggiungervi quanto segue:

[Unit]
Description=Add Firewall Rules to iptables

[Service]
Type=oneshot
ExecStart=/etc/firewall/enable.sh
#ExecStart=/etc/firewall/enable6.sh  #Per IPV6

[Install]
WantedBy=multi-user.target

Poi abilitare il servizio:

# systemctl enable firewall.service

Esempio: firewall di base per una macchina singola

Si può usare questo script su qualsiasi macchina singola (per esempio una macchina desktop privata) che non ha bisogno di nessuna porta aperta in alcun posto. Oppure vedere l'ultima riga commentata per aprire porte specifiche.

Uno script d'esempio come quello sottostante fornisce all'host un livello di sicurezza ragionevole. Fare attenzione che lo script seguente rifiuta tutti i pacchetti che non corrispondono a nessuna regola di accettazione, perciò i normale messaggi di errore di rete non verranno visti. Tutte le regole che accettano pacchetti sono state commentate per proteggere gli inesperti.

#!/bin/sh
# Uno script molto basilare per IPtables / Netfilter /etc/firewall/enable.sh

PATH='/sbin'

# Svuotare le tabelle per applicare i cambiamenti
iptables -F

# La politica predefinita è di rifiutare 'tutto' tranne il proprio traffico in uscita verso Internet
iptables -P FORWARD DROP
iptables -P INPUT   DROP
iptables -P OUTPUT  ACCEPT

# Tutte le connessioni stabilite (le risposte al proprio traffico in uscita)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Permette tutti i programmi locali che usano l'interfaccia loopback (socket Unix)
iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT

# Decommentare questa riga per permettere connessioni SSH/SCP in entrata su questa
# macchina, per il traffico da 10.20.0.2 (si può anche usare una definizione di rete
# di origine come 10.20.0.0/22).
# iptables -A INPUT -s 10.20.0.2 -p tcp --dport 22 -m state --state NEW -j ACCEPT

Esempio: firewall di base per una macchina gateway

#!/bin/sh
# Questa è una configurazione più complessa, per un firewall casalingo: 
# * Una interfaccia collegata alla connessione con l'ISP (eth0). Usa DHCP.
# * Una interfaccia collegata alla LAN locale (eth1). Usa 192.168.0.0/24.
# * Traffico libero dalla LAN a SSH nel firewall.
# * Traffico libero e tradotto, dalla LAN locale ad Internet.
# * Traffico libero da Internet al server web locale.
# * Registrazione del traffico rifiutato, usando uno specifico ''livello di registrazione''
#   per configurare un file separato in syslog/rsyslog.

PATH='/sbin'

## INIT

# Svuota le regole preesistenti, cancella le catene e azzera i contatori
iptables -F
iptables -X
iptables -Z
iptables -t nat -F

# Politiche predefinite
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP

echo -n '1' > /proc/sys/net/ipv4/ip_forward
echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_source_route
echo -n '0' > /proc/sys/net/ipv4/conf/all/accept_redirects
echo -n '1' > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo -n '1' > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

# Permette il traffico loopback
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Permette con regole basate su stati (fatto ciò, basta solo permettere le connessioni nuove (NEW))
iptables -A INPUT   -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT  -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# Rifiuta i pacchetti con stato non valido
iptables -A INPUT   -m conntrack --ctstate INVALID -j DROP
iptables -A OUTPUT  -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP


## INPUT

# ssh in entrata dalla LAN
iptables -A INPUT -i eth1 -s 192.168.0.0/24 \
                  -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT


## OUTPUT

# Permette tutto il traffico in uscita verso Internet
iptables -A OUTPUT -o eth0 -d 0.0.0.0/0      -j ACCEPT 

# Permette traffico che va dal firewall alla rete LAN
iptables -A OUTPUT -o eth1 -d 192.168.0.0/24 -j ACCEPT


## FORWARD

# Si usa un IP dinamico (DHCP), perciò è necessario il mascheramento 
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables        -A FORWARD     -o eth0 -i eth1 -s 192.168.0.0/24 \
                               -m conntrack --ctstate NEW -j ACCEPT

# Ridirige HTTP (tcp/80) al server web (192.168.0.2)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 \
                              -j DNAT --to-destination 192.168.0.2:80

iptables        -A FORWARD    -i eth0 -p tcp --dport 80 \
                              -o eth1 -d 192.168.0.2    \
                              -m conntrack --ctstate NEW -j ACCEPT


## LOG - REGISTRAZIONE

iptables -A INPUT   -j LOG --log-level DEBUG --log-prefix '[FW INPUT]:    '
iptables -A OUTPUT  -j LOG --log-level DEBUG --log-prefix '[FW OUTPUT]:   '
iptables -A FORWARD -j LOG --log-level DEBUG --log-prefix '[FW FORWARD ]: '

Usare ip6tables per il traffico IPv6

Poiché in continua crescita, Internet sta lentamente passando a IPv6, che è uno spazio di indirizzi molto più grande di IPv4 e Debian può gestire l'IPv6.

Se si hanno indirizzi, reti e connessioni IPv6 nel proprio firewall, si deve fare attenzione e configurare i propri insiemi di regole per ciascun protocollo.

Per configurare e gestire insiemi di regole IPv6 è necessario usare ip6tables(8), che è fornito con l'installazione Debian standard, nel pacchetto iptables.

L'uso e le funzionalità sono molto simili a quella di iptables, ma orientati al traffico IPv6.

Per maggiori informazioni, vedere: ip6tables(8)

Esempio:

#!/bin/sh
# Uno script per IP6tables / Netfilter6 molto basilare
PATH='/sbin'

# Flush the tables to apply changes
ip6tables -F

#ACCEPT POLICY
ip6tables -P INPUT DROP #If it doesn't match a rule Drop it
ip6tables -P FORWARD DROP #NO ROUTING POLICY DROP
ip6tables -P OUTPUT ACCEPT #If it doesn't match a rule

########
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -m state --state ESTABLISHED,RELATED -A INPUT -j ACCEPT
ip6tables -A INPUT -p icmpv6 -j ACCEPT

Usare ebtables per il traffico ARP

Ebtables (pacchetto ebtables) viene usato per impostare, mantenere e ispezionare le tabelle delle regole Ethernet nel kernel Linux. È l'analogo di iptables, ma opera a livello MAC (ARP), invece che a quello IP.

Se si deve filtrare o tradurre traffico ARP (a livello di collegamento), se il proprio firewall ha interfacce bridge (per esempio un bridge trasparente tra una VLAN con tunnel OpenVPN e una VLAN locale, oppure interfacce bridge per la virtualizzazione), ebtables(8) è quello che si sta cercando.

Il concetto è molto simile a quello di iptables di netfilter.

Gestisce insiemi di regole in tabelle con catene e obbiettivi, usando strumenti in spazio utente, ma in questo caso non è presente in un'installazione Debian standard ed è necessario aggiungerlo:

% aptitude update
% aptitude install ebtables

Per una spiegazione più dettagliata del suo uso, guardare la onnipresente pagina di manuale e visitare il sito web ufficiale (vedere la sezione sui collegamenti).

Ci sono documenti che spiegano come integrare ebtables e iptables, usando il modulo iptables physdev.

Firewall per applicazioni

Per salire di livello e manipolare il Layer 7 del modello OSI e poter definire regole a livello di applicazioni, sono necessari altri strumenti.

Per esempio... si apre la porta 80 ai propri utenti, ma non si vuole che essi possano scaricare file .exe da Internet. È necessario un firewall per applicazioni o un proxy.

Il kernel predefinito in Debian no ha patch per il Layer 7, ma si possono installare proxy in spazio utente per gestire questo tipo di filtri.

Ci sono opzioni come squid, dans guardian, zorp, ecc.

  • ?Zorp è scritto in Python ed è stato aggiunto a Debian a partire dalla versione 5.0.

Vedere anche la sezione dei collegamenti esterni per il progetto l7-filter.

Risoluzione di problemi software e suggerimenti

Alcuni strumenti utili (e quasi indispensabili) sono:

  • ip(8): (pacchetto: iproute) per elencare interfacce, indirizzi, tabelle di indirizzamento, ecc.

  • nc(1): (pacchetto: netcat) per testare connessioni tcp e udp, aprire porte, ecc.

  • ping(8): per testare il traffico ICMP (non tcp o udp).

  • tail(1): e altri strumenti per monitorare i file di registro.

  • tcpdump(8): (pacchetto: tcpdump) per monitorare pacchetti "raw", traffico, ecc. usando filtri ed espressioni regolari.

È molto facile perdere connettività quando si configura inizialmente un firewall. Più il firewall è complesso e più è probabile che ciò accada.

Una qualità base necessaria per risolvere i problemi di un firewall è sapere in quali punti il traffico passi, venga girato, indirizzato, rifiutato, ecc. E sapere come monitorare questi punti e cosa accada in essi.

L'approccio più efficace è analizzare il traffico dall'inizio alla fine, a partire dalla richiesta iniziale, il DNS, le interfacce attraverso le quali deve passare, le traduzioni che devono essere fatte, il registro del traffico rifiutato, le regole di instradamento, ecc.

Un trucchetto comune quando si progettano insiemi di regole è di creare un compito di cron che ripulisce tutte le regole ad intervalli di qualche minuto, in caso si faccia un errore (lavorando in remoto).

Applicazioni grafiche e frontend

Esistono alcuni strumenti per configurare firewall usando frontend e procedure guidate.

Alcuni di essi sono:

Cercare firewall in packages.debian.org

Ci sono anche strumenti di "alto livello" a riga di comando per evitare la sintassi di "basso livello" o per semplificare alcuni compiti. Comunque la grande potenza del sistema è nel vasto numero di moduli e opzioni per i programmi base a riga di comando che spesso non vengono gestiti dai frontend.

Articoli correlati

  • HowTo/shorewall - Configurare il proprio firewall

  • HowTo/dnsmasq - Aggiungere DHCP e DNS al proprio firewall

  • ?HowTo/dansguardian - Aggiungere il filtraggio dei contenuti web

  • ?HowTo/openvpn - Aggiungere un server SSL VPN (soluzione VPN preferita dall'autore)

  • HowTo/openswan - Aggiungere un server IPSEC VPN

  • ?HOWTO/DynamicBlockSSHddos - Semplice script per bloccare attacchi ddos dinamici ssh

Collegamenti esterni

Informazioni sulla rete :

Ebtables :

Netfilter (iptables/ip6tables) :

Layer 7 :

Nota

Questa pagina è stata completamente modificata da ?PoisonBit 2009-05-10 18:35:50. Ha un contenuto orientato agli utenti. Si potrebbe voler migliorarla e aggiungere riferimenti ad essa in pagine correlate o aggiungere qui riferimenti ad altre pagine. Si potrebbe voler creare un pagina sui firewall orientata agli sviluppatori.


CategorySystemAdministration | CategorySystemSecurity | CategoryRedundant: Unire con DebianFirewall