FIREWALL LINUX
IP TABLES LINUX
Ti è mai capitato di avere un IP pubblico attestato ad un Apache Linux e voler permettere ad esempio l’utilizzo della porta SSH a determinati indirizzi? Segui questa guida e scopri il firewall IP TABLES.
Componenti Neccessari:
- Una qualsiasi macchina Linux con IP pubblico (es. VPS Debian)
- Una connessione internet con IP pubblico.
Conoscenze necessarie:
- Fondamenti di Base del Network (Modello OSI, Flow Diagram del Firewall, Subnetting.)
- Conoscenza base del Terminale Linux.
- Conoscenza base IPv6.
Livello difficoltà: Medio-basso
Supponiamo di richiedere ad un Hosting, 6 Indirizzi IPv4 (/29) e 8 indirizzi IPv6 (/125) da annunciare su un Apache server.
Il NOC dell’Hosting ci risponde che su singola vM possono fornire un solo IPv4 /32 e un IPv6/128 però ci mette a disposizione un router virtuale interconnesso al Server Apache su cui poter gestire firewall della parte IPv4 e nattare le porte necessarie ai vari server da un unico indirizzo IP.
Visto la proposta economica vantaggiosa decidiamo di accettare queste condizioni e sviluppiamo il tutto.
Come da diagramma ci troveremo sull’interfaccia ens1 del nostro Apache, un ip pubblico IPv6/28 e sull’interfaccia ens2 ci troviamo un IPv4 privato su cui viene nattato il traffico verso l’IPv4 pubblico e viene esposta la sola porta 443 TCP.
In questo scenario avremo tutti i servizi chiusi dall’esterno in IPv4 tranne la porta 443 TCP, ma tutti i servizi esposti in IPv6.
Come potremo fare per filtrare i servizi esposti in IPv6 essendo direttamente connessi al DATACENTER?
Usiamo IPtables, in questo caso ip6tables visto che andremo a filtrare IPv6.
Prima di procedere è fondamentale conoscere i principi generali del firewall e la funzione legate alle corrispettive chain.
Nell’immagine proposta qui sopra, viene riepilogato un attimo il flusso su cui i pacchetti attraversano il Firewall.
Le basi del Firewall:
Non spaventatevi, oggi vedremo in breve solo il firewall base che comprende le chain di:
- FILTER INPUT (sono i pacchetti destinati alla macchina in oggetto)
- FILTER FORWARD (sono i pacchetti che attraversano la macchina in oggetto)
- FILTER OUTPUT (sono i pacchetti che dalla macchina vanno verso l’esterno)
Come vediamo dal diagramma queste regole sono indicate in verde e lavorano dopo il connection-tracking. Queste sono le regole più utilizzate, che però in alcuni casi, possono generare un bel carico sulla CPU delle nostre macchine per cui sarà necessario intervenire prima del Connection-Tracking (RAW Prerouting).
Cosa è il Connection-tracking??
Il connection-tracking è un servizio che analizza le connessioni in ingresso e il loro stato che può assumere i vari stati:
- new (il pacchetto avvia la prima connessione)
- established (il pacchetto stabilisce la connessione)
- related (il pacchetto riesegue una riconnessione ma è assocciata ad una connessione già esistente)
- invalid (il pacchetto è invalido, non è assocciato a nessuna connessione tra quelle note)
- untracked (il pacchetto attruibisce lo stato no-track è potrebbe non essere nota la sua destinazione)
Installazione:
Installiamo ora IP TABLES sulla nostra Distro Linux o verifica che non sia già installata, su alcune versioni veniva installata di default.
Per vedere se IP TABLES è installato, digita nel terminale con utente root:
sudo iptables -L -n
Se il comando viene riconosciuto, appariranno le regole di default.
Diversamente installa IP TABLES con il seguente comando:
apt-get update && sudo apt-get install iptables
Dopo aver installato il software, possiamo digitare i seguenti comandi per interrogare le regole attualmente attive:
iptables -L -v iptables -L --line-numbers -n
Se volessimo bloccare tutto il traffico in entrata possiamo inserire la seguente regola:
iptables -P INPUT DROP
Questa regola da sola non darebbe un ottimo risultato in quanto bloccherebbe anche la navigazione la navigazione internet.
Andrebbe preceduto da delle regole di firewall che accettano le porte necessarie per un normale utilizzo e le connessioni established e related.
N.B nel firewall le regole vengono analizzate dall’alto verso il basso, quindi dobbiamo prima accettare quanto necessario, e rifiutare il resto.
Inoltre se volessimo lavorare sul firewall IPv4 utilizziamo i comandi iptables, se volessimo lavorare su IPv6, utilizziamo i comandi ip6tables.
Ad esempio, sul server in oggetto, se volessimo accettare solo le porte 80,443, dovremo inserire le regole in questa maniera:
sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo ip6tables -A INPUT -p tcp -j DROP
sudo ip6tables -A INPUT -p udp -j DROP
Ora per vedere la correttezza delle regole le interroghiamo con il comando proposto precedentemente:
ip6tables -L --line-numbers -n
Dovrebbe apparire il seguente risultato:
Come potremo notare le regole sono state applicate correttamente.
Se volessimo ad esempio eliminare la regola numero 2, digitiamo il seguente comando:
sudo ip6tables -D INPUT 2
Come da immagine precedente, la regola è stata rimossa correttamente.
Ora vediamo come rendere permanenti le regole del firewall in modo che siano nuovamente attive al prossimo riavvio.
Salvataggio regole:
apt-get install iptables-persistent
sudo systemctl is-enabled netfilter-persistent.service
sudo iptables-save > /etc/iptables/rules.v6
sudo sh -c '/sbin/ip6tables-save > /etc/iptables/rules.v6'
Qui di seguito riepilogo qualche comando e la loro funzione:
Inserimento regole:
iptables -A CATENA ...
– Aggiunge una regola alla fine della catena indicataiptables -I CATENA [#] ...
– Inserisce alla riga # (default 1) una regola nella catena indicataiptables -N CATENA
– Crea una nuova catenaiptables -P CATENA TARGET
– Imposta il target di default per la catena indicata
Rimozione regole:
iptables -F [catena]
– Ripulisce tutte le catene (o quella indicata)iptables -X [catena]
– Ripulisce tutte le catene personalizzate (o quella indicata)iptables -Z [catena]
– Azzera i contatori sulle cateneiptables -D catena #
– Cancella la regola numero # dalla catena indicata
Interrogazione:
iptables -L
– Elenca le regole esistentiiptables -L -n -v
– Elenca, senza risolvere gli host, in modo verboso le regole esistenti.
Il carattere ! si usa come negazione (NOT logico):
Criteri di match standard:-p [!] proto
– Protocollo IP (es: tcp, udp, gre, ipsec, ecc.)-s [!] address[/mask]
– Indirizzo IP sorgente (o network con maschera di sottorete)-d [!] address[/mask]
– Indirizzo IP destinazione (o network)-i [!] interface[+]
– Interfaccia di rete di entrata ([+] wildcard)-o [!] interface[+]
– Interfaccia di rete di uscita ([+] wildcard)-f
– Frammento di pacchetto
--sport port[:port]
– La porta o il range di porte TCP sorgenti (Per un range da 1 a 1024: 1:1024
--dport port[:port]
– La porta o il range di porte TCP di destinazione --tcp-flags flag
– I flag TCP del pacchetto attivi (SYN, ACK, FIN, RST, URG, PSH) --syn
– Pacchetti con solo SYN attivo (nuove connessioni)--tcp-option option
– Match per specifiche opzioni della intestazione TCP
Di seguito alcuni esempi:
Rifiutare tutti i pacchetti TCP in entrata su un range di porte:iptables -I INPUT -p tcp --syn --dport 1:1000 -j DROP
Accettare i pacchetti UDP in entrata su un range di porte:iptables -I INPUT -p udp --sport 32769:65535 --dport 33434:33523 -j ACCEPT
Accettare i pacchetti ping e traceroute in entrata:iptables -I INPUT -p icmp -j ACCEPT
Target principali:
-j ACCEPT
– Il pachetto matchato viene accettato e procede verso la sua destinazione. Si usa per definire il traffico permesso.
-j DROP
– Il pacchetto viene rifiutato e scartato, senza alcuna notifica al mittente. Si usa, in alternativa a REJECT, per bloccare traffico.
-j REJECT
– Il pacchetto viene rifiutato. Al mittente viene mandato un pacchetto (configurabile) di notifica tipo ICMP port-unreachable (--reject-with icmp-port-unreachable
)
-t LOG
– Il pacchetto viene loggato via syslog e procede l’attraversamento della catena. Opzioni: (--log-level
, --log-prefix
, --log-tcp-sequence
, --log-tcp-options
, --log-ip-options
)
-j DNAT
– Viene modificato l’IP di destinazione del pacchetto. Target disponibile solo in nat / PREROUTING e nat / OUTPUT. L’opzione --to-destination IP:porta
definisce il nuovo IP di destinazione. Si usa tipicamente su network firewall che nattano server di una DMZ
-j SNAT
– Viene modificato l’IP sorgente. Solo in nat / POSTROUTING. Prevede l’opzione --to-source IP:porta
. Si usa per permettere l’accesso a Internet da una rete locale con IP privati.
-j MASQUERADE
– Simile a SNAT, si applica quando i pacchetti escono da interfacce con IP dinamico (dialup, adsl, dhcp…). Si usa solo in nat / POSTROUTING e prevede l’opzione --to-ports porte
.
-j REDIRECT
– Redirige il pacchetto ad una porta locale. Usabile solo in nat / PREROUTING e nat / OUTPUT è previsto per fare un transparent proxy (con proxy server in esecuzione sulla macchina con iptables)
-j RETURN
– Interrompe l’attraversamento della catena. Se questa è una secondaria, il pacchetto torna ad attraversare la catena madre da punto in cui aveva fatto il salto nella secondaria. Se il RETURN è in una delle catene di default, il pacchetto interrompe l’attraversamento e segue la policy di default.
-j TOS
– Usabile solo nella tabella mangle, permette di cambiare il TOS (Type Of Service) di un pacchetto con l’opzione --set-tos
.
Per un elenco dei parametri disponibili: iptables -j TOS -h
-j MIRROR
– Curioso e sperimentale, questo target invia un pacchetto speculare al mittente. In pratica è come se facesse da specchio per tutti i pacchetti ricevuti. Da usare con cautela, per evitare attacchi DOS indiretti.
Comandi:
-A, --append
Aggiunge una regola in fondo alla catena-D, --delete
Cancella una regola-R, --replace
Esegue il replace di una regola -I, --insert
Inserisce la regola all’inizio della catena o alla posizione indicata.-L, --list
Visulizza l’elenco delle regole inserite-F, --flush
Svuota le catene predefinite-Z, --zero
Azzera i contatori di ogni catena-N, --new-chain
Crea una nuova catena custom-X, --delete-chain
Cancella una catena (creata dall’utente)-P, --policy
Setta la policy di default per una catena
Non rimane che mettersi a lavoro per testare questo potentissimo strumento.
Vuoi ulteriori infomazioni su questa configurazione, o vuoi fare qualche domanda per approfondire?
Scrivi nei commenti o contattami attraverso la sezione Contatti.
Ti è piaciuta questa guida LINUX IPTABLES? Segui tutte le guide su Linux alla pagina: GUIDE LINUX.
E’ ora disponibile il nuovo canale telegram, dove puoi rispondere a dei quiz inerenti a Mikrotik e alle reti in generale. Iscriviti Subito!
Puoi inviare il tuo contributo Paypal oppure commenta e condividi questo contenuto.
Hai riscontrato errori in questa guida?? segnalacelo tramite la scheda CONTATTI
Scopri hAP ax lite, il nuovo router Mikrotik con potente processore ARM.
Copyright © 2023 foisfabio.it | Powered by Fabio Fois
Quanto è stato utile questo post?
Clicca su una stella per valutarla!
Voto medio 0 / 5. Conteggio dei voti: 0
Nessun voto finora! Sii il primo a valutare questo post.