Debian e iptables: differenze tra le versioni

Riga 242: Riga 242:
==== Uso di una VPN commerciale ====
==== Uso di una VPN commerciale ====


Prima di procedere nella lettura si tenga presente che quanto qui di seguito scritto presuppone che il servizio di VPN sottoscritto supporti come client anche '''openvpn''' (cosa generalmente vera).
Questo esempio si basa sulla precedente configurazione (''Wireless access point e ADSL'') per adattarla al caso in cui si decida di configurare il proprio gateway per far transitare tutto il traffico della propria LAN attraverso un tunnel VPN. Si ipotizza inoltre che sul computer che agisce come gateway sia in funzione un servizio che richiede di accettare nuove connessioni dall'esterno attraverso la porta 6666 e che il proprio fornitore di VPN permetta di reindirizzare una sola porta, la 6666 appunto (motivo per cui è stato eliminata la parte di configurazione relativa al forwording delle nuove connessioni come quelle basate sulla porta 20800).
{{Suggerimento|Prima di procedere si consiglia la lettura della corrispondente sezione presente nella guida dedicata a [[Openvpn]].}}
{{Box|Nota|La seguente configurazione farà si che tutte le connessioni provenienti da internet non transitanti per il tunnel VPN saranno rifiutate.
}}


Se si è sottoscritta una VPN commerciale è generalmente conveniente effettuare il collegamento al server VPN dal router, in modo da avere un unico tunnel da cui far passare tutto il traffico in uscita invece che creare un tunnel per ogni dispositivo. Tale scelta è particolarmente conveniente se il proprio fornitore di VPN limita il massimo numero di connessioni che possono essere attive contemporaneamente (che è la prassi).
<pre>
Sebbene più ordinata come soluzione tale approccio potrebbe generare problemi nel caso si abbiano dei servizi aperti verso internet, tipo un webserver, infatti in genere ogni fornitore configura i client della propria VPN in modo che tutto il traffico sia automaticamente dirottato attraverso il tunnel VPN. Il problema è che non è scontato che dia anche la possibilità di aprire le porte necessarie, o quanto meno un numero adeguato.
#!/bin/bash
Se non si ha questo tipo di problema non ci sono praticamente differenze con il caso senza VPN, l'unico accorgimento sarà cambiare le regole che specificano <code>ppp0</code> come interfaccia in modo che invece facciano riferimento a <code>tun0</code>.
#
Se al contrario ci si trova nella situazione sopra descritta ci sono tre modi di procedere:
# INTERFACCE: br0 è l'interfaccia LAN, mentre ppp0 quella ADSL
* Si trova il modo di applicare regole personalizzate in base al tipo di applicazione. Auguri (fattibile, ma richiede un livello di padronanza di iptable decisamente alto).
 
* Si cambia fornitore di VPN con uno che offra la possibilità di reindirizzare un numero di porte adeguato. Non è difficile, ma il nuovo fornitore potrebbe costare di più o apparirvi meno affidabile.
# ------------
* Si configura una VM o altro dispositivo nella LAN al solo fine di far girare il client di openvpn. Tale macchina avrà come gateway il normale gateway della propria LAN, ma tutti i dispositivi che si vuole  comunichino con l'esterno attraverso la VPN dovranno avere come gateway il suddetto dispositivo/VM. Eventuali applicativi P2P verrebbero quindi fatti girare su tale macchina, mentre altri come webserver e simili sul normale PC usato per connettersi al proprio ISP.
# FILTER TABLE
Maggiori informazioni sull'uso di OpenVPN possono essere trovate nell'apposita guida: [[Openvpn]]
# ------------
 
# INPUT chain
# -----------
 
# Politica del negare in modo .predefinito quando non esplicitamente permesso
iptables -P INPUT DROP
 
# Permette tutto il traffico su loopback (lo0) ed elimina tutto il traffico che non usa lo0 verso 127/8
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
 
# Accetta tutte le nuove connessioni che NON provengono da internet
iptables -A INPUT -m state --state NEW -i br0 -j ACCEPT
# Accetta tutte le connessioni già stabilite
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Accetta anche le nuove connessioni per la porta 6666
iptables -A INPUT -i tun0 -m state --state NEW -p tcp --dport 6666 -j ACCEPT
 
# Permettere ping
# notare che bloccare altri tipi di pacchetti icmp è considerata da alcuni una cattiva idea
# rimuovere -m icmp --icmp-type 8 da questa riga per permettere tutti i tipi di icmp:
# https://security.stackexchange.com/questions/22711
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
 
# Registrare le sole chiamate negate (accesso via il comando 'dmesg')
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Respingere tutto il resto del traffico in entrata: politica del negare
# in modo predefinito quando non esplicitamente permesso
iptables -A INPUT -j REJECT
 
 
# OUTPUT chain
# ------------
 
# Imposta il comportamento predefinito (accetta tutto)
iptables -P OUTPUT ACCEPT
 
 
# FORWARD chain
# -------------
 
# Imposta il comportamento predefinito (scarta tutto)
iptables -P FORWARD DROP
 
# Accetta tutto il traffico entrante diretto alla lan (br0),
# purché veicolato da connessioni già stabilite o ad esse riconducibile
iptables -A FORWARD -i ppp0 -o br0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Non inoltrare il restante traffico in entrata
iptables -A FORWARD -i tun0 -o br0 -j REJECT
# Inoltra tutto il traffico uscente proveniente dalla LAN
iptables -A FORWARD -i br0 -o tun0 -j ACCEPT
# Inoltra tutto il traffico proveniente da wlan0 a eth0 e viceversa (quindi entrante e uscente
# da br0)
iptables -A FORWARD -i br0 -o br0 -j ACCEPT
 
 
# ---------
# NAT table
# ---------
 
# POSTROUTING chain
# -----------------
 
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
</pre>


== Approfondimenti ==
== Approfondimenti ==
3 155

contributi