19456
Comment: sync with english
|
20807
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
Contents
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