Esempio Iptables: Personal Firewall

Vediamo un esempio pratico di configurazione di Iptables per un personal firewall, quindi da applicare su una macchina desktop che deve poter navigare e liberamente agire in Internet e che non deve esporre alcun servizio.
In un caso simile ci si deve concentrare sulle catene INPUT e FORWARD della tabella FILTER.

Configurazione essenziale
Una configurazione minima può essere molto semplice, l'output che segue è quello di iptables-save, per utilizzarlo copiarlo in un file (es: /etc/firewall) e applicarlo con iptables-restore < /etc/firewall).
In pratica:
- Di default si blocca il traffico in ingresso e destinato ad attraversa l'host
- Si lascia aperto il traffico in uscita dal proprio host
- Si permette in INPUT tutto il traffico di ritorno relativo a connessioni già esistenti
- Si permette il traffico sulla interfaccia di loopback, necessario per il buon funzionamento di alcuni programma di sistema:
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
COMMIT


Configurazione più elaborata
Un esempio più elaborato e con un controllo più stringente sul traffico può prevedere:
- Default DROP su tutte le catene
- Si permette in INPUT tutto il traffico di ritorno relativo a connessioni già esistenti
- Si permette il traffico sulla interfaccia di loopback  (si interviene sia in INPUT che in OUTPUT)
- Si permette in uscita solo il traffico generato da applicativi usati dall'utente con UserID 501 (attenzione, questo limite potrebbe compromettere il funzionamento di alcun programmi non previsti, che magari girano come root (UID 0) o con altri utenti di sistema)
- Si permette l'aggiornamento del sistema (in questo esempio via http all'indirizzo arbitrario 213.215.144.242)
- Si loggano tutti i pacchetti, esclusi quelli di broadcast, droppati.
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m pkttype --pkt-type ! broadcast -j LOG --log-prefix "INPUT DROP: "
-A FORWARD -m pkttype --pkt-type ! broadcast -j LOG --log-prefix "FORWARD DROP: "
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -m owner --uid-owner 501 -j ACCEPT
-A OUTPUT -p tcp --dport 80 -d 213.215.144.242 -j ACCEPT
-A OUTPUT -m pkttype --pkt-type ! broadcast -j LOG --log-prefix "OUTPUT DROP: "
COMMIT

Privacy Policy