Firewall

Rispondi
cmo
Reactions score: 0
mag 2020 05 07:47

Firewall

Messaggio da cmo

Una macchina connessa a Internet che non è protetta da un firewall è un disastro in attesa di accadere. E non dovrai aspettare molto. Un recente studio di Internet Storm Center ha dimostrato che i computer Windows senza patch sono durati solo 20 minuti prima di essere infettati da malware. Se stai usando Linux, avrai più tempo, ma è inevitabile che accada qualcosa di brutto. Il risultato più probabile di essere là fuori non protetto è un attacco denial of service. Gli script kiddie non sono schizzinosi riguardo alla macchina a cui fanno fuori linea. In realtà, la maggior parte di questi giovani criminali informatici non sa nemmeno come sono in grado di farlo. Sanno solo che i simpatici giocattoli che scaricanolo farà. Se non vuoi avere la tua scatola in balia di un bambino antisociale che si bagna molto meno frequentemente di te, è tempo di imparare come far funzionare un firewall.

Netfilter e iptables

Lo strumento migliore attualmente disponibile per creare un firewall è la combinazione Netfilter / iptables. Netfilter è un software che funziona con il kernel per controllare i pacchetti di rete. iptables consente di creare regole per filtrare i pacchetti e il contenuto dei pacchetti in base a una serie di criteri. Dovrai installare il pacchetto iptables. Questo è disponibile come RPM su sistemi basati su Fedora, come pacchetto Debian e, ovviamente, nel modulo del codice sorgente da: http://www.netfilter.org/
Il filtro pacchetti coinvolge direttamente il kernel, quindi ciò significa che dovremo configurare e compilare un nuovo kernel per farlo funzionare. Sebbene le più recenti distribuzioni Linux di solito ti forniscano un kernel con alcune opzioni di Netfilter abilitate, una persona con conoscenze avanzate di Linux dovrebbe davvero entrare e dargli alcune modifiche extra. Non eseguiremo tutti i passaggi per compilare un kernel qui, ma ti mostreremo le opzioni che devi abilitare per eseguire il tuo firewall con Netfilter / iptables.

Opzioni del kernel

Al momento in cui scrivo, l'ultima versione principale del kernel è la 2.6. Le impostazioni del kernel di cui parliamo si riferiranno a questo kernel.

A questo punto, dovresti aver scaricato l'ultima versione del kernel 2.6 dahttp://www.kernel.org. Trovo che il modo più semplice per configurare il kernel sia usare il comando: make menuconfig Questo fa apparire l'interfaccia tradizionale basata su ncurses. Ci sono altre interfacce dall'aspetto più moderno per gli strumenti di configurazione del kernel, ma trovo questo il migliore (e francamente, ci sono abituato). Se hai esperienza nella compilazione di versioni del kernel precedenti a questa, le opzioni relative a iptables / Netfilter potrebbero essere un po 'più difficili da trovare, ma sono lì. Nel menu principale, segui semplicemente: Driver di dispositivo --- & gt; Supporto di rete --- & gt; Opzioni di rete --- & gt; Filtro pacchetti di rete (sostituisce ipchains) --- & gt; IP: Configurazione Netfilter --- & gt; e lì troverai le opzioni di posta. Nella mia esperienza, ho scoperto che la maggior parte delle opzioni di cui abbiamo bisogno sono selezionate come moduli di default. Se non lo sono,
Ora sei pronto per compilare il nuovo kernel. Per quelli di voi che hanno familiarità con la serie 2.4 e precedenti, quando compilate un kernel 2.6, non c'è più un comando 'make dep'. Andiamo subito a costruire con 'make bzImage'. Supponendo che non si siano verificati errori, al termine della compilazione, eseguire 'make modules' e 'make modules_install' sia per compilare che per installare quelle opzioni compilate come moduli. Ora posiziona il tuo nuovo kernel in / boot e, a seconda che tu usi 'grub' o 'lilo', apporta le modifiche appropriate in grub.conf o lilo.conf. Coloro che usano 'lilo' dovrebbero digitare 'lilo' a questo punto per preparare il nuovo kernel per l'uso.

A partire da iptables

Partiamo dal presupposto che tu abbia riavviato e sia tutto pronto per il tuo nuovo kernel. Per iniziare, proviamo un comando molto semplice per elencare le regole del firewall che hai attualmente sul tuo sistema. A questo punto, non ci dovrebbero essere regole attive, quindi eseguendo questo comando:

Codice:

Codice: Seleziona tutto

iptables -L

dovrebbe mostrare l'output in questo modo:
Codice:

Codice: Seleziona tutto

Chain INPUT (policy ACCEPT)
target    prot opt source              destination      
 
Chain FORWARD (policy ACCEPT)
target    prot opt source              destination      
 
Chain OUTPUT (policy ACCEPT)
target    prot opt source              destination

Ciò significa essenzialmente che non stai eseguendo un firewall. Questo non va bene, quindi abbiamo bisogno di alcune regole di base in esecuzione in modo da non essere vulnerabile agli attacchi.

Uno script firewall semplice

Di seguito troverai uno script firewall semplice. Contiene commenti esplicativi per ogni regola. Studiatelo per un po 'e poi ne discuteremo dopo.

Codice: Seleziona tutto

#!/bin/sh
 
IPTABLES=/sbin/iptables
 
# start by flushing the rules
-F
 
## allow packets coming from the machine
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
 
# allow outgoing traffic
-A OUTPUT -o eth0 -j ACCEPT
 
# block spoofing
-A INPUT -s 127.0.0.0/8 -i ! lo -j DROP
-A INPUT -s 192.168.0.3 -j DROP
 
# stop bad packets
-A INPUT -m state --state INVALID -j DROP
 
# NMAP FIN/URG/PSH
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
# stop Xmas Tree type scanning
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL ALL -j DROP
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
# stop null scanning
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags ALL NONE -j DROP
# SYN/RST
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
# SYN/FIN
/sbin/iptables -A INPUT -i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
# stop sync flood
/sbin/iptables -N SYNFLOOD
/sbin/iptables -A SYNFLOOD -p tcp --syn -m limit --limit 1/s -j RETURN
/sbin/iptables -A SYNFLOOD -p tcp -j REJECT --reject-with tcp-reset
/sbin/iptables -A INPUT -p tcp -m state --state NEW -j SYNFLOOD
# stop ping flood attack
/sbin/iptables -N PING
/sbin/iptables -A PING -p icmp --icmp-type echo-request -m limit --limit 1/second -j RETURN
/sbin/iptables -A PING -p icmp -j REJECT
/sbin/iptables -I INPUT -p icmp --icmp-type echo-request -m state --state NEW -j PING
 
#################################
## What we allow
#################################
 
# tcp ports
 
# smtp
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# http
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# pop3
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# imap
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
# ldap
-A INPUT -p tcp -m tcp --dport 389 -j ACCEPT
# https
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# smtp over SSL
-A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
# line printer spooler
-A INPUT -p tcp -m tcp --dport 515 -j ACCEPT
# cups
-A INPUT -p tcp -m tcp --dport 631 -j ACCEPT
 
## restrict some tcp things ##
 
# ssh
-A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 22 -j ACCEPT
# samba (netbios)
-A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 137:139 -j ACCEPT
# ntop
-A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 3000 -j ACCEPT
# Hylafax
-A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 4558:4559 -j ACCEPT
# webmin
-A INPUT -p tcp -m tcp -s 192.168.0.0/16 --dport 10000 -j ACCEPT
 
# udp ports
# DNS
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
# DHCP
-A INPUT -p udp -m udp --dport 67:68 -j ACCEPT
# NTP
-A INPUT -p udp -m udp --dport 123 -j ACCEPT
# SNMP
-A INPUT -p udp -m udp --dport 161:162 -j ACCEPT
 
## restrict some udp things ##
 
# Samba (Netbios)
-A INPUT -p udp -m udp -s 192.168.0.0/16 --dport 137:139 -j ACCEPT
-A INPUT -p udp -m udp --sport 137:138 -j ACCEPT
 
# finally - drop the rest
 
/sbin/iptables -A INPUT -p tcp --syn -j DROP

Nella prima parte dello script, ciò che facciamo è gestire le attività "amministrative" del firewall. Questi includono, come puoi vedere dai commenti, svuotare le regole, per eliminare il sistema da eventuali regole rimanenti che potrebbero essere in conflitto con quelle nello script del firewall. Successivamente, lasciamo che i pacchetti si muovano liberamente se generati dalla macchina stessa (indicato da 'lo' o localhost). Quindi consentiamo ai pacchetti di lasciare la macchina sulla nostra scheda di rete (in questo caso, eth0).

Successivamente, iniziamo a prevenire alcune delle vulnerabilità di rete più comuni. Il primo è lo spoofing o la possibilità di creare pacchetti appare come se provenissero dal tuo computer o dalla tua rete. Poiché è pratica comune essere un po 'più tolleranti verso quelli della propria rete, coloro che intendono irrompere proveranno prima la routine di spoofing. Successivamente, blocchiamo qualsiasi pacchetto errato - punto. Un altro modo di attaccare una rete è di sopraffarla con la spazzatura. Qui controlleremo questo. Per terminare questa sezione del firewall, abbiamo aggiunto la protezione contro vari metodi di attacco popolari come il cosiddetto "ping of death", gli attacchi di syn-fin e altri citati nei commenti.
La seconda parte del firewall si occupa di consentire e controllare l'accesso a determinati servizi in esecuzione sulla macchina. I commenti sopra ogni regola mostrano quali servizi sono trattati con ciascuno di essi.traffico tcp e udp. Alcuni servizi sono offerti al pubblico e altri no. Noterai che verso la fine, limitiamo l'accesso a ssh, samba e altri alla rete locale. In questo caso particolare, nessuno dall'esterno dovrebbe avere accesso a questi e nel tuo caso puoi scegliere di limitare un numero maggiore o minore di servizi, ma il punto è che iptables ci offre anche la possibilità di fare restrizioni basate sull'indirizzo IP.

Infine con l'ultima regola eliminiamo tutti i pacchetti che non sono destinati alle porte che consentiamo. Questa è una buona regola empirica di base per la sicurezza. Ciò che non è permesso è proibito.

Sebbene sia una sceneggiatura di base, offre una buona protezione. Potresti anche voler migliorare is e aggiungere regole. Ci occuperemo di quello dopo.

Aggiunta di regole

Quello che abbiamo fatto con lo script sopra è "aggiungi" le regole al firewall durante il caricamento. Questo è ciò che rappresenta l'interruttore '-A'. Tuttavia, potrebbero esserci momenti in cui si desidera aggiungere regole a un firewall in esecuzione. Supponiamo che qualche pessimo spammer stia eseguendo un attacco del dizionario su di te e dai registri del tuo server di posta vedi che si sta connettendo a te da 222.111.222.111. Ora, nel nostro script firewall, consentiamo a chiunque di connettersi al nostro server di posta (porta 25). È solo normale. Non si sa mai da dove arriverà la posta, quindi quella porta è generalmente lasciata aperta al pubblico. Tuttavia, se vediamo che qualcuno sta abusando del servizio, come uno spammer, allora possiamo disattivare il suo accesso ad esso in modo che non sarà in grado di connettersi al nostro server di posta (fino a quando, ovviamente, non cambia il suo indirizzo IP). Quello che vorremmo fare è ' inserisci "una regola nel nostro firewall in esecuzione per far fronte a questa situazione imprevista. La regola è sostanzialmente la stessa, ma invece dell'opzione '-A', useremo l'opzione '-I' (per inserimento):

Codice:

Codice: Seleziona tutto

iptables -I INPUT -p tcp --syn -s 222.111.222.111 -j DROP

In realtà, questa regola non specifica la porta 25, sebbene fosse da lì che proveniva il problema. Questa regola nega l'accesso a tutti i pacchetti che arrivano al nostro computer provenienti da quell'indirizzo IP. Questo è davvero ciò che lo spammer merita. Lo svantaggio è che se c'è un traffico legittimo proveniente da quell'indirizzo IP (anche se in questo caso è dubbio), sarebbero bloccati. Se sei stato in grado di isolare un netblock da cui operavano frequentemente gli spammer (dai PC zombi, ad esempio), potresti inserire una regola per gestire porte specifiche

Codice:

Codice: Seleziona tutto

iptables -I INPUT -p tcp --syn -s 222.111.222.0/24 --dport 25 -j DROP

Ciò bloccherebbe le connessioni al server di posta preservando tutti gli altri servizi pubblici. In questo modo, il danno collaterale, per così dire, non è così grande. Non vogliamo confondere i colpevoli con i senza colpa.

Rimozione delle regole

Supponiamo che tu abbia deciso di dedicare un intero computer alla pubblicazione di pagine Web. Quindi le regole del firewall devono essere modificate. È possibile farlo temporaneamente, fino a quando non si è riavviato il computer, eliminando prima la regola che fornisce l'accesso alle porte 80 e 443 e quindi inserendo una regola eliminando i pacchetti la cui destinazione sono quelle porte. Per eliminare, utilizziamo l'opzione '-D':

Codice:

Codice: Seleziona tutto

iptables -D INPUT -p tcp --dport 25 -j ACCEPT
iptables -D INPUT -p tcp --dport 443 -j ACCEPT

Queste sono le stesse regole che hanno dato accesso a questi servizi. Abbiamo appena sostituito l'opzione '-D', come puoi vedere. Ora rilasciamo i pacchetti su quelle porte:

Codice:

Codice: Seleziona tutto

iptables -I INPUT -p tcp --dport 25 -j DROP
iptables -I INPUT -p tcp --dport 443 -j DROP

Abbastanza buona protezione

La combinazione netfilter / iptables offre alla macchina una possibilità di combattimento quando è esposta al mondo esterno, ma nessuna macchina sarà protetta al 100%. Per questo motivo, dobbiamo ancora monitorare gli attacchi mentre si verificano. Nella prossima sezione vedremo la maggior parte degli strumenti per il monitoraggio e la protezione da intrusioni indesiderate.

Rispondi