• Immutable Page
  • Info
  • Attachments

STOP! Perché questa guida si trova sotto la pagina Cestino?. Una guida può essere cestinata dal Gruppo Documentazione se contiene istruzioni compatibili solo con rilasci non più supportati di Ubuntu oppure perché non si ha certezza che lo siano per i rilasci attualmente supportati. Queste pagine richiedono un aggiornamento e una verifica delle istruzioni contenute. Se vuoi riesumare una di queste guide contatta il Gruppo Documentazione nella board sul forum.


Introduzione

È possibile ottimizzare un sistema Linux per la sua implementazione come firewall o IDS (Intrusion Detection System) in un nodo di una LAN. tuttavia si ricorda che le soluzioni più professionali sono quelle costituite da hardware dedicato (anche molti dei router in commercio incorporano tali funzioni e sono in grado di assicurare una maggiore efficienza del servizio).

In una rete informatica, le informazioni scambiate possono essere di varia natura e non sempre si vuole che un dato nodo renda disponibili in lettura queste informazioni (o ne riceva altre) agli altri nodi della rete.

Firewall

Un firewall è un sistema che consente di filtrare le informazioni scambiate tra due reti. Il suo compito è quello di filtrare le informazioni uscenti ed entranti da o verso un nodo, stabilendo quali informazioni vengono accettate da quali nodi e quali informazioni condividere con altri nodi della rete.

Tale filtro opera su ogni pacchetto di dati in ingresso o uscita da un dato sistema, mediante l'applicazione di regole specifiche su cosa far passare e cosa escludere. Pertanto il compito dell'utente amministratore consiste nello stabilire delle regole di filtraggio, in base, ad esempio, a criteri di sicurezza.

IDS

Un IDS, o sistema anti-intrusione, è un sistema in grado di ispezionare tutti i pacchetti che transitano per un dato sistema (sfruttando lo stack TCP-IP) e selezionare quelli potenzialmente sospetti in base ad un insieme di regole stabilite internamente al software. Il programma più comunemente diffuso in Linux è snort.

Tale sistema IDS avverte l'amministratore dell' host (sistema residente in un nodo della rete) degli eventuali tentativi di intrusione in una rete. Questo ha infatti l'abilità di catturare tutti i pacchetti che transitano attraverso un'interfaccia di rete, o che sono a questa destinati. Questa modalità viene chiamata promiscua e consente di rilevare i tentativi di intrusione su tutto il perimetro che delimita la LAN. Pertanto se un host viene violato, l'IDS rileva tale violazione registrandola in un file di log (/var/log/snort/alert).

Cosa configurare

Le regole dei filtri possono basarsi su:

  • Indirizzo IP del mittente
  • Indirizzo IP del destinatario
  • Porta sorgente
  • Porta di destinazione
  • Flags
  • Interfaccia di ingresso del pacchetto
  • Interfaccia di uscita del pacchetto

Tipi di firewall:

  • Packet filter: lavora a livello 3 modello OSI (network)

  • Proxy firewall: lavora a livello 7 modello OSI (application)

In questa sede ci si occuperà della tipologia packet filter.

Strategie di base

Cosa serve per costruire un sistema di difesa:

  • Fare un elenco completo dei servizi che devono essere accessibili dalla rete.
  • Fare un elenco di situazioni particolari.

La migliore strategia di difesa è:

  • Bloccare tutti i pacchetti che non siano diretti verso servizi pubblici.

Installazione e configurazione dell'IDS

Per installare il software IDS, aprire un terminale e al prompt dei comandi digitare:

sudo apt-get install snort

questo installerà i pacchetti necessari per il servizio anti-intrusione.

Alla fine dell'installazione del pacchetto snort, verrà avviato il sistema anti-intrusione nella sua configurazione predefinita.

Durante la configurazione di snort è necessario rispondere alle seguenti richieste di informazione:

  • quale sia l'interfaccia di rete in ascolto

    (eth0 per host con un'interfaccia di rete locale)

  • quale rete considerare trusted (ovvero fidata). In caso di dubbio, immettere «any» , in tal modo il servizio IDS considererà come sospetti anche i pacchetti provenienti dall'interno della LAN.

  • a chi indirizzare i report dell'IDS via email (di norma dovrebbe essere l'utente root)

A questo punto il sistema IDS è configurato e perfettamente funzionante. Per configurare correttamente il firewall passare al paragrafo successivo.

Abilitazione del firewall

Non è necessario installare sul sistema pacchetti specifici poiché il cuore stesso del firewall è il pacchetto iptables, che è parte integrante del kernel di ogni sistema Linux. Tuttavia è bene conoscere quali moduli caricare nel kernel, affinché vengano abilitate le funzionalità di firewalling con iptables.

Configurazione del firewall

Consultare la guida a Firestarter.

Moduli da caricare nel kernel

  • IP: advanced router
  • IP: policy routing
  • IP: netfilter
  • IP: TCP syncookie support
  • Connection tracking
  • IP tables support
  • Netfilter MARK match support
  • Connection state match support
  • Packet filtering
  • Full NAT
  • Packet mangling

I seguenti sono i nomi dei moduli da caricare manualmente nel kernel utilizzando il comando modprobe:

  • Ip_tables

  • Iptable_nat

  • Ip_conntrack

  • Ip_conntrack_ftp

  • Ip_nat_ftp

  • Ipt_MASQUERADE

Configurazione del firewall con iptables

Il comando principale per la configurazione del vostro firewall è iptables.

La struttura di un comando iptables è la seguente:

iptables -t table command chain rule-specification [options]

Per esaminare le regole presenti sul proprio sistema utilizzare l'opzione -L come segue:

sudo iptables -L

comparirà l'elenco delle regole del vostro firewall.

Fare attenzione alle policy di ogni regola (le catene di default sono 3 , INPUT, FORWARD e OUTPUT corrispondenti ai 3 flussi di dati in ingresso, attraverso e in uscita dal sistema). Se il sistema non ha firewall, le policy dovrebbero essere impostate su ACCEPT (ovvero che tutto il traffico è permesso da, verso e attraverso il sistema).

Un'altra opzione utile è -F:

sudo iptables -F

che azzera tutte le regole presenti nel firewall , anche se non reimposta al valore di default le policy (pertanto se la vostra policy è DROP resterà DROP anche dopo l'applicazione del comando).

Comandi e opzioni di iptables

  • Comandi di iptables:

    -A: append
    -D: delete
    -C: check
    -I: insert
    -R: replace
    -F: flush
    -L: list
    -N: new
    -X: erase user-defined chain
    -P: policy
    -E: chain renaming
    -h: help
  • Opzioni di iptables:

    -p protocol
    -s address
    -d address
    -i inputinterfacename
    -o outputinterfacename
    -j target (ACCEPT,DROP.QUEUE,RETURN)
    -v
    --sport
    --dport
    --tcp-flags
    --syn
    --icmp-type ICMP type
    --mac-source mac-address
    --limit rate
    --limit-burst number
    --port
    --state state
    --tos tos
  • Iptables targets:

    MARK
    LOG
    REJECT
    TOS
    MIRROR
    SNAT
    DNAT
    MASQUERADE
    REDIRECT

Esempio di configurazione di un firewall

A questo punto si esaminano le regole di un semplice firewall.

  • Le regole richieste sono le seguenti:

    Rete interna : 209.191.169.128/25
    Rete esterna : 209.191.169.0/25
    Bastion host : foo con eth0 (209.191.169.1) e eth1(209.191.169.129)
  • Progettazione :

    Criterio predefinito: DENY
    Anonymous FTP: interno (port forward attraverso firewall verso 209.191.169.135)
    http: interno (port forward attraverso firewall verso 209.191.169.136 alla porta 8080 https sulla porta 443 non viene offerto)
    Ssh: rifiuto e logging di telnet
    Smtp: interno (port forward attraverso firewall verso 209.191.169.137)
    Popd: interno (port forward attraverso firewall verso 209.191.169.137)
    DNS: solo interno 
    nntp: no accesso dall'interno
    Ping in ingresso eliminato
  • Implementazione dei criteri:
    • Esame regole esistenti e reset. I comandi da eseguire come root sono i seguenti

      iptables -F
      iptables -t mangle -F
      iptables -t nat -F
      iptables -X
      iptables -t mangle -X
      iptables -t nat -X
    • Per effettuare il blocco del ping in ingresso vengono eseguiti i comandi:

      iptables -N scans
      iptables -A scans -m state --state INVALID -j DROP
      iptables -A scans -m unclean -j DROP
      iptables -A scans -p icmp -icmp-type echo-request -i eth1 -j DROP
      iptables -A INPUT -j scans
      iptables -A FORWARD -j scans
    • Passare traffico dall'interno all'esterno:

      iptables -N passthis
      iptables -N blockthis
      iptables -A passthis -s 209.191.169.1/25 -p icmp -i eth0 -j ACCEPT
      iptables -A passthis -s 209.191.169.1/25 -p tcp -sport ! 119 -d 0/0 -i eth0 -j ACCEPT
      iptables -A blockthis -s 209.191.169.1/25 -p tcp -sport 119 -j REJECT -reject-with-icmp-port-unreachable
      iptables -A FORWARD -j passthis
      iptables -A OUTPUT -j passthis
    • Blocco servizi telnet e imap:

      iptables -A blockthis -i eth1 -s 0/0 -d 209.191.169.1/25 -p tcp -sport 23 -j DROP
      iptables -A blockthis -i eht1 -s 0/0 -d 209.191.169.1/25 -p tcp -sport imap -j DROP
      iptables -A FORWARD -j blockthis
    • Accetta DNS, ssh:

      iptables -I passthis 1 -m state --state ESTABLISHED,RELATED -j ACCEPT
      iptables -A passthis -i eht0 -p tcp -s 209.191.169.1/25 -d 0/0 -dport domain -j ACCEPT
      iptables -A passthis -i eth0 -p udp -s 209.191.169.1/25 -d 0/0 -dport domain -j ACCEPT
      iptables -N passthisin
      iptables -I passthisin blockthis
      iptables -A passthisin -p tcp -dport 22 -j ACCEPT
      iptables -A blockthis -i eht1 -p tcp -dport 6000:6010 -j DROP
      iptables -A blockthis -i eht1 -p udp -dport 111 -j DROP
      iptables -A passthis -p tcp -m multiport -dport 25,110 -i !eth1 -j ACCEPT 
    • Criteri predefinit per DROP:

      iptables -P FORWARD DROP
      iptables -P INPUT DROP
    • Inoltro traffico a server mail e http:

      iptables -t nat -A PREROUTING -p tcp -dport 21 -j DNAT -to-destination 209.191.169.135
      iptables -t nat -A PREROUTING -p tcp -dport 80 -j DNAT -to-destination 209.191.169.136:8080
      iptables -t nat -A PREROUTING -m multiport -p tcp -dport 25,110 -j DNAT -to-destination 209.191.169.137

Ottimizzazioni

  • Minimo ritardo per traffico http, telnet e ssh:

    iptables -t mangle -A PREROUTING -m multiport -p tcp -dport 80,23,22 -j TOS -set-tos 16
    iptables -t mangle -A PREROUTING -m multiport -p tcp -sport 80,23,22 -j TOS -set-tos 16
  • Massima velocità trasmissione per FTP:

    iptables -t mangle -A PREROUTING -p tcp -dport ftp-data -j TOS -set-tos 8
  • Massima affidabilità per SMTP:

    iptables -t mangle -A PREROUTING -p tcp -dport smtp -j TOS -set-tos 4
  • Minimo costo per pop3:

    iptables -t mangle -A PREROUTING -p tcp -dport 110 -j TOS -set-tos 2
  • Anti-spoofing rules:

    iptables -I FORWARD -i eth1 -s 192.168.0.0/24 -j DROP
    iptables -I FORWARD -i eht1 -s 127.0.0.0/8 -j DROP
    iptables -I INPUT -i ! Lo -s 127.0.0.1 -j DROP 
  • È necessario abilitare il forwarding altrimenti niente potrà passare attraverso il firewall. Per farlo usare i seguenti comandi:

    Echo 1 > /proc/sys/net/ipv4/ip_forward 
    Echo 1 > /proc/sys/net/ipv4/conf/rp_filter/all

Traduzione e mascheramento indirizzi LAN

Gli hosts di una LAN possono navigare in Internet pur avendo indirizzi IP privati (ovvero non ufficialmente validi nella rete mondiale).

Questo è possibile attraverso il meccanismo di natting , ovvero di traduzione degli indirizzi degli hosts privati in un indirizzo IP pubblico, e precisamente quello dell'host che fa da gateway verso Internet per la vostra LAN.

Il "natting" interviene anche quando un server Web aziendale debba essere visibile e raggiungibile anche da Internet pur stando su LAN (ed avendo pertanto indirizzo IP privato). L'indirizzo IP del destinatario viene modificato da quello del gateway a quello (privato) del server Web interno alla LAN.

Il primo meccanismo prende il nome di SNAT ( Source Network Address Translation , ovvero traduzione degli indirizzi dei mittenti), mentre il secondo prende il nome di DNAT (Destination NAT , oovvero traduzione degli indirizzi dei destinatari).

SNAT

Problema: è necessario fare in modo che tutto il traffico della LAN sembri originato dall'interfaccia eth0 dell'host con indirizzo IP 209.127.112.150.

Il comando da eseguire per effettuare il SNAT è:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT -- to 209.127.112.150

Tutto il traffico proveniente dalla intranet appare agli hosts su Internet come generato dall'IP 209.127.112.150

Quando si esegue il SNAT va utilizzata la chain POSTROUTING (il pacchetto viene modificato dopo essere stato processato dal kernel).

DNAT

Problema: è necessario fare in modo che tutti i pacchetti indirizzati verso la porta 80 del gateway vengano reindirizzati al server Web interno alla LAN (indirizzo IP 192.168.0.2).

Il comando da eseguire per effettuare il DNAT è:

iptables -t NAT -A PREROUTING -p tcp -dport 80 -i eth0 -j DNAT - - to 192.168.0.2:80

Tutto il traffico in ingresso verso la LAN diretto sulla porta 80 appare come generato dalla porta 80 dell'IP 192.168.0.2

In caso di DNAT è necessario applicare sempre la chain PREROUTING (il pacchetto viene modificato prima di venire processato dal kernel).

IP masquerading

L'IP masquerading è un sistema che permette agli hosts di una LAN di navigare in Internet attraverso la traduzione del loro indirizzo IP privato in quello pubblico del gateway.

È pertanto un caso particolare di SNAT:

iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0 -s 192.168.0.0/24 -d 0/0 

Questo comando dice al firewall di mascherare l'IP del mittente (host appartenenti alla subnet 192.168.0.0/24) con quello del gateway per tutto il traffico diretto all'esterno che passa attraverso l'interfaccia esterna del gateway (indicata qui con ppp0, ovvero un modem ADSL).

Ulteriori risorse


CategoryDaCancellare