Condividere la connessione a internet: differenze tra le versioni

m
→‎Masquerading: errori nomi script (segnalato in pagina discussione)
Nessun oggetto della modifica
m (→‎Masquerading: errori nomi script (segnalato in pagina discussione))
 
(7 versioni intermedie di 3 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili|Jessie|Stretch|Buster}}
 
== Premessa ==
== Premessa ==
Oggi che la maggior parte degli utenti domestici ha la possibilità di accedere ad Internet con connessioni a [http://it.wikipedia.org/wiki/Larghezza_di_banda banda] larga (ad esempio [http://it.wikipedia.org/wiki/ADSL ADSL]) e che è sempre più frequente avere a disposizione almeno un paio di computer, si avverte la necessità di poter condividere la connessione tra i vari computer della nostra rete domestica.
Oggi che la maggior parte degli utenti domestici ha la possibilità di accedere ad Internet con connessioni a [http://it.wikipedia.org/wiki/Larghezza_di_banda banda] larga (ad esempio [http://it.wikipedia.org/wiki/ADSL ADSL]) e che è sempre più frequente avere a disposizione almeno un paio di computer, si avverte la necessità di poter condividere la connessione tra i vari computer della nostra rete domestica.
Riga 18: Riga 17:
Il motivo è semplice: per accedere a internet è necessario avere un [http://it.wikipedia.org/wiki/Indirizzo_IP indirizzo IP] di tipo pubblico, che il nostro ISP ci fornisce. Per permettere anche ai computer sprovvisti di indirizzo pubblico di navigare, dobbiamo fare in modo che i loro indirizzi di tipo privato vengano "nascosti" dietro a quello pubblico.
Il motivo è semplice: per accedere a internet è necessario avere un [http://it.wikipedia.org/wiki/Indirizzo_IP indirizzo IP] di tipo pubblico, che il nostro ISP ci fornisce. Per permettere anche ai computer sprovvisti di indirizzo pubblico di navigare, dobbiamo fare in modo che i loro indirizzi di tipo privato vengano "nascosti" dietro a quello pubblico.


=== Masquerading: configurazione automatica ===
=== Masquerading ===
Per fare masquerading è necessario utilizzare il firewall di Linux, ''Netfilter'', tramite il comando apposito, che per i kernel recenti è <tt>iptables</tt>.
Con [[privilegi di amministrazione]] digitiamo il seguente comando:
 
Ci sono molti pacchetti in grado di impostare il firewall, in modo più o meno approfondito e più o meno user-friendly, ma la funzionalità richiesta in questa sede è molto semplice, e se non siamo interessati ad aspetti legati alla sicurezza e al filtraggio di pacchetti forse non vale la pena di installare nulla.
 
Nonostante questo, però, segnalo il pacchetto '''ipmasq''', che è una collezione di script già impostati per gestire il firewall, e che già di default fornisce il masquerading e l'ip_forwarding (vedi più avanti), oltre ad un minimo di protezione di base, essenzialmente contro alcuni errori di configurazione. Per avere il masquerading funzionante basta quindi installarlo:
<pre>
# aptitude install ipmasq
</pre>
se poi volete usare anche le funzionalità avanzate potete sbizzarrirvi: la flessibilità di ''ipmasq'' è totale, ma sarà necessario studiare un po'. La documentazione per ''ipmasq'', come al solito, è in <tt>/usr/share/doc/ipmasq</tt>.
 
=== Masquerading: configurazione manuale ===
Se invece vogliamo procedere a mano, logghiamoci come utente '''root''' e digitiamo il seguente comando:
<pre># iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</pre>
<pre># iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE</pre>
questo abilita il mascheramento degli indirizzi privati.
questo abilita il mascheramento degli indirizzi privati.
Riga 44: Riga 32:
Poi ad ogni avvio dovremo richiamare il seguente comando:
Poi ad ogni avvio dovremo richiamare il seguente comando:
<pre>
<pre>
# cat /etc/iptables-save | iptables-restore
# iptables-restore < /etc/iptables-save
</pre>
</pre>


Questo comando si può inserire in uno script di avvio come <tt>/etc/init.d/bootmisc</tt>, ma forse è più logico inserirlo in <tt>/etc/init.d/networking</tt> anche perché, in tal modo, riavviando la rete vengono anche reimpostate le regole di iptables. Per inserire il comando in <tt>/etc/init.d/networking </tt>scorrete il file fin quasi alla fine, dove troverete le seguenti righe:
Basta creare uno script in <code>/etc/network/if-up.d/</code> che esegua tale comando. Per esempio:
<pre>
# touch /etc/network/if-up.d/restore-iptables
</pre>


E poi modificare <code>/etc/network/if-up.d/restore-iptables</code> con il proprio editor di testo preferito (per esempio [[nano]]):
<pre>
<pre>
case "$1" in
#! /bin/sh
    start)
 
</pre>
readonly CONFIG_FILE="/etc/iptables-save"


ora appena prima di:
# execute the script only if $CONFIG_FILE exists
test -f "$CONFIG_FILE" || exit 0


<pre>;;
# restore IP tables
stop)
printf %s " * Loading iptables saved state... "
iptables-restore < "$CONFIG_FILE" &&
printf %s\\n "[ OK ]"
</pre>
</pre>


si potrà inserire questo codice (al posto del singolo comando) per maggiore eleganza:
E renderlo eseguibile:
 
<pre>
<pre>
        # Carica le regole di iptables salvate
# chmod a+x /etc/network/if-up.d/restore-iptables
if [ -r /etc/iptables-save ]; then
    echo -en " * Loading iptables saved state ... "
    cat /etc/iptables-save | iptables-restore &&\
    echo "[ OK ]"
fi
</pre>
</pre>
   
   
in questo modo la regola verrà caricata ad ogni avvio del sistema, senza che sia necessario digitarla nuovamente, e solo se il file <tt>/etc/iptables-save</tt> esiste ed è leggibile.
La regola verrà caricata ad ogni avvio del sistema, senza che sia necessario digitarla nuovamente, e solo se il file <code>/etc/iptables-save</code> esiste.


=== Ip Forwarding ===
=== Ip Forwarding ===
Configurare ''iptables'' non è però sufficiente. I comuni Pc, infatti, non devono essere in grado di comportarsi come i [http://it.wikipedia.org/wiki/Router router] e cioè non devono poter [[routing|instradare]] pacchetti da una rete all'altra.<br>
Configurare ''iptables'' non è però sufficiente. I comuni PC, infatti, non devono essere in grado di comportarsi come i [http://it.wikipedia.org/wiki/Router router] e cioè non devono poter [[routing|instradare]] pacchetti da una rete all'altra.<br>
Dato che per noi è fondamentale abilitare questa possibilità, dobbiamo agire su un parametro del kernel che regola questa funzione: l' '''ip-forwarding'''.
Dato che per noi è fondamentale abilitare questa possibilità, dobbiamo agire su un parametro del kernel che regola questa funzione: l' '''ip-forwarding'''.


Riga 81: Riga 70:
così facendo, però, ad ogni riavvio dovremo reimpostare la variabile.
così facendo, però, ad ogni riavvio dovremo reimpostare la variabile.


==== Impostare l'<tt>ip-forwarding</tt> al boot: <tt>/etc/sysctl.conf</tt> ====
==== Impostare l'<code>ip-forwarding</code> al boot: <code>/etc/sysctl.conf</code> ====


Se avete installato ''ipmasq'', l'ip-forwarding è già abilitato: passate alle misure di sicurezza.
Se avete installato ''ipmasq'', l'ip-forwarding è già abilitato: passate alle misure di sicurezza.


Il metodo più semplice, consigliato nella maggior parte dei casi, per impostare l'ip-forwarding ad ogni boot è di inserire in <tt>/etc/sysctl.conf</tt>:
Il metodo più semplice, consigliato nella maggior parte dei casi, per impostare l'ip-forwarding ad ogni boot è di inserire in <code>/etc/sysctl.conf</code>:


<pre>
<pre>
Riga 91: Riga 80:
net/ipv4/ip_forward = 1
net/ipv4/ip_forward = 1
</pre>  
</pre>  
In questo caso si abilita unicamente per IPv4; è necessario, se si desidera, abilitarlo anche per IPv6.


È opportuno impostare anche alcune misure di sicurezza:
È opportuno impostare anche alcune misure di sicurezza (le prime due dovrebbero essere già attive di default):
 
<pre>
<pre>
## Ignora finti messaggi di errore ICMP
## Ignora finti messaggi di errore ICMP
Riga 103: Riga 92:
## Non accetta pacchetti ICMP di route redirection
## Non accetta pacchetti ICMP di route redirection
net/ipv4/conf/all/accept_redirects = 0
net/ipv4/conf/all/accept_redirects = 0
</pre>


Oltre a queste regole, Debian imposta per default la protezione dallo [http://it.wikipedia.org/wiki/IP_spoofing spoofing] degli indirizzi. Per completezza di informazione, comunque, questa regola risulta essere la seguente:
<pre>
## Protezione anti spoofing  
## Protezione anti spoofing  
net/ipv4/conf/all/rp_filter = 1
net/ipv4/conf/all/rp_filter = 1
</pre>
</pre>


Per un approfondimento riguardante i parametri del kernel networking modificabili a run-time, vi rimandiamo alla guida [[Parametri a run-time per Netfilter]].
==== Impostare l'<code>ip-forwarding</code> al boot: script ====
 
==== Impostare l'<tt>ip-forwarding</tt> al boot: script ====
 
È possibile anche abilitare l'ip-forwarding associando uno script alla creazione delle interfacce di rete in fase di boot. Questo metodo è consigliato solo in caso di setup più complessi, in cui si vogliono impostare regole diverse a seconda dell'interfaccia di rete che si attiva.
È possibile anche abilitare l'ip-forwarding associando uno script alla creazione delle interfacce di rete in fase di boot. Questo metodo è consigliato solo in caso di setup più complessi, in cui si vogliono impostare regole diverse a seconda dell'interfaccia di rete che si attiva.


Riga 147: Riga 129:
<pre># touch /etc/network/iface-secure</pre>
<pre># touch /etc/network/iface-secure</pre>


Dopodiché rendiamolo eseguibile con:
Dopodiché rendiamolo eseguibile e scrivibile per [[root]] con:


<pre># chmod +x /etc/network/iface-secure</pre>
<pre># chmod 755 /etc/network/iface-secure</pre>


All'interno di questo file scriveremo il nostro comando per abilitare l' ip-forwarding:
All'interno di questo file scriveremo il nostro comando per abilitare l' ip-forwarding:


<pre>
<pre>
#! /bin/sh
### Abilita il forwarding di pacchetti non locali - FONDAMENTALE
### Abilita il forwarding di pacchetti non locali - FONDAMENTALE
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
Riga 181: Riga 165:
Per prima cosa installiamo ''bind9'' ed alcuni strumenti utili:
Per prima cosa installiamo ''bind9'' ed alcuni strumenti utili:


<pre># apt-get install bind9 bind9-host dnsutils</pre>
<pre># apt install bind9 dnsutils</pre>


Ora configuriamo il server in modo che faccia le sue richieste ai server [[DNS]] che vogliamo noi anziché ai ROOT SERVERS (sono pochi in tutto il mondo, molto stressati e aggiornati più lentamente di altri). Tutto quello che dobbiamo fare è editare la sezione '''options''' del file <code>/etc/bind/named.conf.options</code>:
Ora configuriamo il server in modo che faccia le sue richieste ai server [[DNS]] che vogliamo noi anziché ai ROOT SERVERS (sono pochi in tutto il mondo, molto stressati e aggiornati più lentamente di altri). Tutto quello che dobbiamo fare è editare la sezione '''options''' del file <code>/etc/bind/named.conf.options</code>:
Riga 199: Riga 183:
Ora non ci resta che riavviare ''bind'' con il comando:
Ora non ci resta che riavviare ''bind'' con il comando:


<pre># /etc/init.d/bind9 restart</pre>
<pre># service bind9 restart</pre>


e configurarlo come [[DNS]] sui PC della nostra rete.
e configurarlo come [[DNS]] sui PC della nostra rete.
Riga 218: Riga 202:
==== IRC ====
==== IRC ====
Dovreste essere in grado di usare IRC senza problemi dai PC della vostra LAN. In caso contrario potreste provare a caricare manualmente i moduli che servono al router per gestire le connessioni ad IRC:
Dovreste essere in grado di usare IRC senza problemi dai PC della vostra LAN. In caso contrario potreste provare a caricare manualmente i moduli che servono al router per gestire le connessioni ad IRC:
<pre>
<pre>
# modprobe ip_conntrack_irc ports=5555,6666,6667,6668,6669,7000  
# modprobe ip_conntrack_irc ports=5555,6666,6667,6668,6669,7000  
# modprobe ip_nat_irc
# modprobe ip_nat_irc
</pre>
</pre>
dove, con la direttiva "ports=" indichiamo le porte generalmente utilizzate dai server IRC.
dove, con la direttiva "ports=" indichiamo le porte generalmente utilizzate dai server IRC.


Riga 292: Riga 274:


Per fare questo avremo bisogno di alcuni tra i più usati strumenti diagnostici: '''ping''' e '''nslookup''', ma non preoccupatevi: il primo viene installato automaticamente ed il secondo abbiamo provveduto ad installarlo contestualmente a ''bind''.
Per fare questo avremo bisogno di alcuni tra i più usati strumenti diagnostici: '''ping''' e '''nslookup''', ma non preoccupatevi: il primo viene installato automaticamente ed il secondo abbiamo provveduto ad installarlo contestualmente a ''bind''.
{{Warningbox| L'eseguibile <code>/bin/ping</code> deve avere il bit suid impostato per funzionare da utente normale. }}


=== Comunicazione tra router e client ===
=== Comunicazione tra router e client ===
Riga 378: Riga 358:
Buona Navigazione!
Buona Navigazione!


----
{{Autori
Autore: [[Utente:Guide @ Debianizzati.Org|Debianizzati.Org]]<br>
|Autore = [[Utente:Guide @ Debianizzati.Org|Debianizzati.Org]]
Revisione: [[Utente:Keltik|keltik]]<br>
|Estesa_da =
Revisione: [[Utente:TheNoise|The Noise]]
:[[Utente:Keltik|keltik]]
:[[Utente:TheNoise|The Noise]]
|Verificata_da=
:[[Utente:Clockwork orange|Clockwork Orange]]
:[[Utente:HAL 9000|HAL 9000]] 10:40, 7 set 2019 (CEST)
|Numero_revisori = 2
}}


Verificato da: [[Utente:Clockwork orange|Clockwork Orange]]
[[Categoria:Configurazione ethernet]]
[[Categoria:Configurazione ethernet]]
[[Categoria:Reti con Windows]]
[[Categoria:Reti con Windows]]
3 581

contributi