PROTEGGERE LA RETE

Precedente
Programma
Seguente
Bastard Operator From Hell!
firewall.sh
 

E' uno script che imposta un firewall (piuttosto restrittivo) su una macchina (con un unica interfaccia ethernet (eth0)) che può essere usata come server WEB.
La prima parte può essere valida per qualsiasi server pubblico. L'ultimo set di regole si applica ad un server web.
FLUSHING CHAIN: Azzera e ripulisce ogni possibile regola esistente.
DEFAULT CHAIN: Imposta le regole di default (drop di tutti i pacchetti).
SETTINGS: Imposta particolari opzioni sul kernel, operando direttamente sul proc filesystem.
VARIABLES: Definisce come variabili vari indirizzi IP, che vanno cambiati dall'utente.
LOCALHOST: Non filtra i pacchetti che hanno sorgente 127.0.0.1
SSH RULE: Permette l'accesso SSH (porta 22) da GW1 e GW2
DNS RULE: Permette all'host di eseguire query DNS.
ICMP RULE: Permette pacchetti ICMP dalle reti LINEA1 e LINEA2.
NTP RULE: Permette all'host di essere NTP client per il server NTP_SRV
MAILSEND RULE: Permette all'host di inviare mail a server che hanno IP compresi in LINEA1 e LINEA2
WEB SERVER RULE: Permette l'accesso al web server locale da Internet (porte 80 e 443)

masquerading.sh
  E' uno script che permette ad una macchina Linux con due interfacce (una su Internet con IP pubblico, una su LAN interna con IP riservato) di fare da gateway per tutta la rete interna, mascherando gli IP locali con un unico IP pubblico.
Inoltre viene fatto un destination natting rendendo accessibile da specifici IP pubblici un VPN server (basato su PPTP) sulla rete interna.
In sequenza vengono dati i seguenti comandi:
- FLUSH delle regole e impostazione dei valori di default.
- Abilita sul kernel l'IP FORWARDING, necessario su un host che fa da router/gateway.
- Imposta sul kernel alcuni flag per la sicurezza.
- Definisce le varie variabili utilizzate negli script (cambiare gli IP secondo le proprie esigenze).
- Imposta regole anti-spoofing.
- Permette al loopback di parlare con se stesso.
- Permette il traceroute da locale.
- Permette l'accesso dagli IP interni all'host (per manutenzione) e il forwarding dei pacchetti dalla rete locale a Internet e viceversa (notare la riga che droppa i pacchetti SYN che arrivano dall'esterno).
- Permette la comunicazione dell'host con i server DNS definiri.
- Permette l'accesso SSH da IP considerati trusted.
- Esegue il MASQUERADING di tutta la rete interna.
- Esegue il destination NATTING del VPN server interno (porta pptp 1723), permette il traffico GRE (IP type 47) e limita allo USER con IP definito l'accesso.
Tips & Tricks

Esistono due comandi per salvare e recuperare le regole di firewalling in uso sulla macchina:
iptables-save stampa su stdout le regole correnti del sistema.
iptables-restore imposta sul sistema le regole precedentemente salvate dall'output di iptables-save.

Come in ogni caso in cui si opera su access-list su macchine remote, prestare la massima attenzione alle regole di firewalling che si impostano per evitare di tagliarsi da soli la connessione remota.

Firewalling con LInux

La gestione delle funzioni di packet filtering, natting e forwarding dal kernel 2.4 è affidata al netfilter subsystem, gestibile tramite il comando iptables.
La gestione delle funzioni di firewalling su Linux ha subito nel corso degli anni cambiamenti progressivi.
Nel kernel 2.x questa funzione è affidata ad un comando con sistassi simile: ipchains.Nei kernel precedenti il comando utilizzato era ipfadm.

Iptables basa la sua funzionalità su diverse tables a cui sono applicate delle chains (catene) con le regole di filtering definite dall'utente.
Ogni regola di filtraggio di pacchetti prevede un target, che definisce cosa viene fatta del pacchetto che soddisfa i criteri specificati.

Le tables possono essere:

filter E' la tabella di default, che riguarda il filtraggio di pacchetti. Prevede le chains predefinite: INPUT (per i pacchetti diretti all'host), OUTPUT (per pacchetti generati dall'host) e FORWARD (per pacchetti che attaversano l'host, avendo IP sorgente e destinatario diversi).
nat E' necessaria per natting e masquerading, prevede le tabelle PREROUTING (alterazione degli IP di pacchetti prima che vengono processati da ipfilter), POSTROUTING (alterazione di pacchetti che stanno lasciando l'host), OUTPUT (per modificare prima di routarli pacchetti generati dall'host)
mangle Viene usata per modifiche particolari dei pacchetti (TOS, mirroring ecc). Ha due chains predefinite: PREROUTING (alterazione degli IP di pacchetti prima che vengano processati da netfilter), OUTPUT (per modificare prima di routarli pacchetti generati dall'host).
 
La sintassi di base di iptables è:
iptables [comando] [opzioni]
Ci può essere solo un comando per riga che definisce quale azione eseguire (l'elenco che segue non è completo):
-A regole catena Aggiunge una o più regole alla fine della catena indicata
-D regole catena Cancella una o più regole dalla catena indicata
-F [catena] Cancella tutte le regole o solo quelle della catena indicata
-L [catena] Elenca tutte le regole o solo quelle della catena indicata
-P catena target Definisce il target di default per la catena indicata
-N catena Crea una nuova catena, definita dall'utente, con il nome specificato
Esistono diversi target a cui indirizzare un pacchetto che matcha una regola.
Il target può essere:
1- il nome di una nuova chain;
2- un comportamento base come ACCEPT, DROP, QUEUE (i pacchetti vengono inviati in userspace, per l'elaborazione con programmi esterni), RETURN;
3-
target speciali, correlati a moduli del kernel che vanno appositamente compilati:
LOG Registra tramite syslog il matching del pacchetto
REJECT Elimina il pacchetto e, eventualmente, restituisce un messaggio ICMP (icmp-*-unreachable) configurabile.
TOS Imposta il campo Type Of Service nell'intestazione IP. Valido solo per la tabella mangle.
SNAT Modifica l'IP sorgente (Source natting). Vale solo per la catena POSTROUTING della tabella nat
DNAT Modifica l'IP destinatario (Destination natting). Vale solo per la catena PREROUTING della tabella nat.
MASQUERADE Maschera il pacchetto in modo che sembri provenire dal'host locale. Valido solo per la tabella nat, viene usato per il natting dinamico di intere lreti locali su Internet.
REDIRECT Redireziona il pacchetto ad una porta locale. Necessario per fare transparent proxying.

 

Per identificare i pacchetti nelle singole regole sono disponibili diverse opzioni che definiscono il criterio di corrispondenza. Per quasi tutte è prevista la possibilità del segno ! per identificare tutti i pacchetti tranne quelli specificati.

-p [!] protocollo I pacchetti che corrispono al protocollo definito: tcp, udp, icmp, all (default)
-s [!] indirizzo[/mask] [!] [porta] I pacchetti che hanno l'IP sorgente specificato. La mask può essere sia in format estesa (es: /255.255.255.0) che compatta (es: /24). E' possibile anche specificare la porta sorgente.
-d [!] indirizzo[/mask] [!] [porta] I pacchetti che hanno l'IP e/o la porta di destinazione specificati.
-i [!] interfaccia[+] I pacchetti ricevuti in entrata sull'interfaccia definita. Il + è una wildcard (es: eth+ per tutte le ethernet)
-o [!] interfaccia[+] Tutti i pacchetti in uscita sull'interfaccia specificata.
-j TARGET Salta al TARGET indicato o ad una catena definita dell'utente.
Esistono inoltre criteri più sofisticati per il matching dei pacchetti che possono basarsi sul mac-address, l'icmp type, lo stato della connessione TCP (syn,ack,rst) il TOS ecc.
WEB RESOURCES
http://www.iptables.org/ Home page del progetto netfilter / iptables