Ricerca nel sito web

Come eseguire il filtraggio dei pacchetti, la traduzione degli indirizzi di rete e l'impostazione dei parametri di runtime del kernel - Parte 2


Come promesso nella Parte 1 (“Configurazione del routing di rete statico”), in questo articolo (Parte 2 della serie RHCE) inizieremo presentando i principi del filtraggio dei pacchetti e della traduzione degli indirizzi di rete (NAT) in Red Hat Enterprise Linux 7, prima di approfondire l'impostazione dei parametri del kernel runtime per modificare il comportamento di un kernel in esecuzione se determinate condizioni cambiano o si presentano necessità.

Filtraggio dei pacchetti di rete in RHEL 7

Quando parliamo di filtraggio dei pacchetti, ci riferiamo a un processo eseguito da un firewall in cui legge l'intestazione di ogni pacchetto di dati che tenta di attraversarlo. Quindi filtra il pacchetto eseguendo l'azione richiesta in base alle regole precedentemente definite dall'amministratore di sistema.

Come probabilmente saprai, a partire da RHEL 7, il servizio predefinito che gestisce le regole del firewall è firewalld. Come iptables, comunica con il modulo netfilter nel kernel Linux per esaminare e manipolare i pacchetti di rete. A differenza di iptables, gli aggiornamenti possono avere effetto immediato senza interrompere le connessioni attive: non è nemmeno necessario riavviare il servizio.

Un altro vantaggio di firewalld è che ci permette di definire regole basate su nomi di servizi preconfigurati (ne parleremo più avanti tra poco).

Nella Parte 1, abbiamo utilizzato il seguente scenario:

Tuttavia, ricorderai che abbiamo disabilitato il firewall sul router n. 2 per semplificare l'esempio poiché non avevamo ancora trattato il filtraggio dei pacchetti. Vediamo ora come abilitare i pacchetti in entrata destinati ad uno specifico servizio o porta di destinazione.

Innanzitutto, aggiungiamo una regola permanente per consentire il traffico in entrata da enp0s3 (192.168.0.19) a enp0s8 (10.0.0.18 forte>):

firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

Il comando precedente salverà la regola in /etc/firewalld/direct.xml:

cat /etc/firewalld/direct.xml

Quindi abilita la regola affinché abbia effetto immediato:

firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

Ora puoi effettuare il telnet al server web dalla casella RHEL 7 ed eseguire nuovamente tcpdump per monitorare il traffico TCP tra le due macchine, questa volta con il firewall nel router n. 2 abilitato.

telnet 10.0.0.20 80
tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

Cosa succede se desideri consentire solo le connessioni in entrata al server web (porta 80) da 192.168.0.18 e bloccare le connessioni da altre fonti in 192.168.0.0/ 24 rete?

Nel firewall del server web, aggiungi le seguenti regole:

firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept' --permanent
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop' --permanent

Ora puoi effettuare richieste HTTP al server web, da 192.168.0.18 e da qualche altra macchina in 192.168.0.0/24. Nel primo caso la connessione dovrebbe completarsi con successo, mentre nel secondo prima o poi andrà in timeout.

Per fare ciò, uno qualsiasi dei seguenti comandi funzionerà:

telnet 10.0.0.20 80
wget 10.0.0.20

Ti consiglio vivamente di controllare la documentazione di Firewalld Rich Language nel Wiki del progetto Fedora per ulteriori dettagli sulle regole avanzate.

Traduzione degli indirizzi di rete in RHEL 7

La Network Address Translation (NAT) è il processo in cui a un gruppo di computer (può anche essere solo uno di essi) in una rete privata viene assegnato un indirizzo IP pubblico univoco. Di conseguenza, all’interno della rete vengono ancora identificati in modo univoco tramite il proprio indirizzo IP privato, ma all’esterno “sembrano” tutti uguali.