Iptables per principianti

Iptables per principianti
Gli iptables sono considerati una delle principali risorse difensive per molti amministratori di sistema nonostante siano stati sostituiti da NfTables. I principali produttori di networking hanno incorporato iptables per hardware ancora in ambienti di produzione.

Iptables è altamente versatile e accetta comandi diretti dall'utente che può caricare e scaricare le regole in base alla necessità.

Questo tutorial mostra Come proteggere un server web, Connessioni in avanti agli indirizzi IP interni dalla nostra LAN e offrono servizi specifici solo agli indirizzi IP con whitelist.

Nota: Questo tutorial iptables è stato rilasciato per la prima volta due anni fa e aggiornato il 23/05/2021 con esempi migliorati e screenshot di migliore qualità.

Come installare

Iptables sono omessi per impostazione predefinita nelle distribuzioni che incorporano NfTables.

Per installare iptables sulle distribuzioni Linux basate su Debian, eseguire il seguente comando:

Sudo Apt Update && Apt Installa iptables

Apertura delle porte HTTP e HTTPS

Prima di tutto, aggiungiamo tutte le politiche di accettazione che iniziano con il server web.

Nota: Se crei uno script con le regole, non è necessario utilizzare sudo.

sudo iptables -a input -p tcp -dport 80 -j accetta
sudo iptables -a input -p tcp -dport 443 -j accetta

Per vedere le regole aggiunte esegui "iptables -l"

Dove:

Iptables = chiama il programma

-UN = aggiunge una regola

INGRESSO = traffico in arrivo

-P = protocollo

-ddport = porta di destinazione

-J = specificare il "target"; L'obiettivo è il tipo di politica: accettare, rilasciare, rifiutare (integrato) ..

Iptables -l = elenca tutte le regole caricate iptables (Iptables -l -v = lo stesso con verbosità.)

Nell'esempio sopra, istruiamo iptables ad aggiungere una regola per il traffico in arrivo tramite il protocollo TCP e le porte 80 (HTTP) e 443 (HTTPS) di essere accettata.

Possiamo modificare il comando per accettare la connessione solo da un IP specifico aggiungendo il parametro "-S":

sudo iptables -a input -s 127.0.0.1 -P TCP - -Dport 80 -J Accetta

Dove:

S = fonte

Puoi anche testare il tuo firewall con NMAP:

Nota: Nell'esempio sopra, la porta 443 non è mostrata perché il server non ha un certificato SSL adeguatamente configurato.

Nota: Per ulteriori informazioni su NMAP, puoi leggere questo.

Proteggere il tuo server con iptables:

#Open HTTP e HTTPS Services.
iptables -a input -p tcp -dport 80 -j accetta
iptables -a input -p tcp -dport 443 -j accetta
#Open SSH Port Service
iptables -a input -p tcp -dport 22 -m Conntrack -ctstate new, stabilito -j accetta

Dove sono i nuovi parametri:

-m significa "Match" e viene utilizzato per chiamare estensioni iptables come Conntrack, che non fa parte delle funzioni di base iptables.

Conntrack = Consente le informazioni di tracciamento su connessioni come indirizzi specifici o, in questo caso, lo stato della connessione. Questo deve essere usato attentamente poiché molte regole per difendere i server da alcuni attacchi utilizzano Conntrack mentre l'hardware ne limita l'uso e tale limitazione può essere utilizzata per sovraccaricare le risorse del server.

-ctstate = determina lo stato della regola da abbinare; I possibili stati sono: NUOVO, STABILITO, IMPARENTATO E NON VALIDO.

#Protetta il tuo servizio SSH contro gli attacchi di forza bruta consentendo solo un IP specifico
per accedere a iptables -a input -p tcp -s x.X.X.X - -DPORT 22 -M Conntrack - -CTSTATE NUOVO,
Stabilito -j accetta
#Protetta il tuo servizio SSH contro gli attacchi di forza bruta limitando i tentativi di connessione
Iptables -a input -p tcp -m tcp -dport 22 -m conntrack -ctstate new -j 22 -test
Iptables -a 22 -test -m recenti -Name Connections -Set -Mask 255.255.255.255 - -rsource
Iptables -a 22 -test -m recenti -Name Connections -Richeck -Mask 255.255.255.255
--RSOURCE -Secondi 30 - -HITCOUNT 3 -J 22 -Protection
Iptables -a 22 -test -j accetta
Iptables -a 22 -protection -j drop

Dove:

Nella prima riga, la nostra regola dice "-M Conntrack -ctState Nuovo, " Ciò significa che se la connessione è nuova, passa alla regola "22-test".

La seconda riga dice pacchetti netmask 255.255.255.255 sono nominati come Connessioni.

La terza riga dice se a Connessioni è oltre 3 volte entro 30 secondi, il firewall continua ad applicare la catena 22-protezione. La quarta riga dice se il Connessioni Non sono stati visti più di 3 volte entro 30 secondi, potrebbero essere accettati.

La quinta riga, che appartiene al 22-protezione catena, dice di cadere Connessioni Se sembrano essere più di 3 volte entro 30 secondi.

Ora per finire, rifiutiamo tutte le connessioni in arrivo non attenti e permettiamo tutto il traffico in uscita:

iptables -p output accetta
iptables -P Drop di input

P si riferisce alla politica della catena; Ricorda che l'obiettivo è la politica, accetta, rilascia, rifiuta. In questo caso, stiamo dicendo che la politica predefinita per il traffico in uscita è accettare e la politica predefinita per il traffico in arrivo è quella di rifiutare se non abbiamo specificato qualcosa di diverso nelle regole precedenti. Questo è un firewall molto semplice che non include regole per molti attacchi, a fini di apprendimento e non per la produzione; Alla fine dell'articolo, allego un firewall che ho usato per la produzione su un server; Ha commenti che spiegano ogni regola.

Inoltro di una connessione a una porta specifica a un indirizzo IP specifico

Questo è anche molto utile per gli utenti desktop che desiderano incoraggiare una connessione tramite un dispositivo specifico; Può essere utile anche per i giocatori; Di solito, lo facciamo dalle impostazioni del router, ma supponiamo che il dispositivo di routing stia eseguendo iptables.

iptables -a prerouting -t nat -p tcp -d x.X.X.X - -dport 8080 -j dnat -per destinazione y.Y.Y.Y: 80
iptables -a postrouting -t nat -p tcp -j snat -to -source x.X.X.X

Le regole sopra invocano NAT (traduzione dell'indirizzo di rete) per specificare le connessioni tramite il protocollo TCP all'indirizzo x.X.X.X e la porta 8080 verranno reindirizzati per affrontare Y.Y.Y.Y, porta 80. La seconda regola specifica che le risposte devono essere inviate all'indirizzo di origine (x.X.X.X). Possiamo utilizzare queste regole per consentire l'accesso a una fotocamera IP, abilitare i giochi online con reti esterne, ecc.

Questo tutorial doveva introdurre i principianti agli iptables e spiega solo un numero limitato di basi. Di seguito puoi vedere un campione di un firewall ben pianificato utilizzato per un server di produzione; Include alcune delle regole che abbiamo già visto a regole più complesse per prevenire i DDO, tra gli altri tipi di attacchi.

Bonus: campione di firewall di produzione

iptables -f
#---- Abilita la protezione del messaggio di errore cattivo
abilita/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
#---- Accendi il filtro del percorso inverso. Più sicuro, ma interrompe il routing asimmetrico e/o ipsec
abilita/proc/sys/net/ipv4/conf/*/rp_filter
#---- Non accettare i pacchetti instradati di origine. Il routing di origine viene utilizzato raramente per legittimo
scopi Disabilita/Proc/sys/net/ipv4/conf/*/accet_source_route
#---- Disabilita l'accettazione di reindirizzamento ICMP che può essere utilizzato per modificare le tabelle di routing
disabilita/proc/sys/net/ipv4/conf/*/accet_redirects
#---- Dato che non accettiamo i reindirizzamenti, non inviare nemmeno messaggi di reindirizzamento
disabilita/proc/sys/net/ipv4/conf/*/send_redirects
#---- Ignora i pacchetti con indirizzi impossibili
disabilita/proc/sys/net/ipv4/conf/*/log_martians
#---- Proteggi dai numeri di sequenza di avvolgimento e dalla misurazione del tempo di andata e ritorno
Abilita/proc/sys/net/ipv4/tcp_timestamps
#---- Aiuto contro gli attacchi DOS o DDoS di Syn-Flood usando particolari scelte di iniziale
Numeri di sequenza TCP abilita/proc/sys/net/ipv4/tcp_syncookies
#---- Usa ACK selettivo che può essere utilizzato per significare che mancano pacchetti specifici
disabilita/proc/sys/net/ipv4/tcp_sack
MODPROBE NF_CONNTRACK_IPV4
MODPROBE NF_NAT
# MODPROBE NF_CONNTRACK_IPV6
# modprobe nf_conntrack_amanda
# modprobe nf_nat_amanda
MODPROBE NF_CONNTRACK_H323
MODPROBE NF_NAT_H323
MODPROBE NF_CONNTRACK_FTP
MODPROBE NF_NAT_FTP
# modprobe nf_conntrack_netbios_ns
# modprobe nf_conntrack_irc
# modprobe nf_nat_irc
# modprobe nf_conntrack_proto_dccp
# MODPROBE NF_NAT_PROTO_DCCP
MODPROBE NF_CONNTRACK_NETLINK
# modprobe nf_conntrack_pptp
# modprobe nf_nat_pptp
# modprobe nf_conntrack_proto_udplite
# modprobe nf_nat_proto_udplite
# modprobe nf_conntrack_proto_gre
# modprobe nf_nat_proto_gre
# MODPROBE NF_CONNTRACK_PROTO_SCTP
# MODPROBE NF_NAT_PROTO_SCTP
# modprobe nf_conntrack_sane
MODPROBE NF_CONNTRACK_SIP
MODPROBE NF_NAT_SIP
# modprobe nf_conntrack_tftp
# modprobe nf_nat_tftp
# MODPROBE NF_NAT_SNMP_BASIC
#Now Possiamo iniziare ad aggiungere servizi selezionati al nostro filtro firewall. La prima cosa del genere
è un'interfaccia locale iptables -a input -i lo -j accetta
#Abbiamo detto al firewall di prendere tutti i pacchetti in arrivo con bandiere TCP nessuno e semplicemente lasciarli cadere.
iptables -a input -p tcp ! -M Conntrack -CtState New -j Drop
#Diciamo a iptables di aggiungere (-a) una regola all'ingresso in arrivo (input)- SSH funziona sulla porta 50683
invece 22.
iptables -a input -p tcp -m tcp -dport 50683 -j accetta
iptables -a input -p tcp -m tcp -s specifico ip -dport 50683 -j accetta
iptables -a input -p tcp -m tcp -s specifico ip -dport 50683 -j accetta
iptables -a input -p tcp -m tcp -s specifico ip -dport 50683 -j accetta
iptables -a input -p tcp - -dport 50683 -m Conntrack - -ctState New -m recente -set
--Nome ssh -j accetta
iptables -a input -p tcp -dport 50683 -m recente -update - -secondi 60 - -hitCount 4
--RTTL -NAME SSH -J LOG - -LOG -PREFIX "SSH_BRUTE_FORCE"
iptables -a input -p tcp -dport 50683 -m recente -update - -secondi 60 - -hitCount 4
--rttl --name ssh -j drop
iptables -a input -p tcp - -dport 50683 -m Conntrack - -ctState New -m recente -set
--Nome ssh
iptables -a input -p tcp - -dport 50683 -M Conntrack - -ctState New -j ssh_whitelist
iptables -a input -p tcp - -dport 50683 -m Conntrack - -ctState New -m Recenti -Accesso
--Secondi 60 - -HITCOUNT 4 - -RTTL --Name SSH -j Ulog --ulog -prefix ssh_bru
iptables -a input -p tcp - -dport 50683 -m Conntrack - -ctState New -m Recenti -Accesso
--Secondi 60 -HITCOUNT 4 - -RTTL --Name SSH -j Drop
#Now permetto IMAP e SMTP.
-Un input -p tcp -dport 25 -j accetta
# Consente le connessioni pop e pops
-Un input -p tcp -dport 110 -j accetta
-Un input -p tcp -dport 995 -j accetta
############Ma e iMaps ############
-Un input -p tcp -dport 143 -j accetta
-Un input -p tcp -dport 993 -j accetta
########### Mysql ######################
iptables -a input -i eth0 -p tcp -m tcp -dport 3306 -j accetta
########## R1Soft Sistema CDP ################
iptables -a input -p tcp -m tcp -s specifico ip -dport 1167 -j accetta
############### in uscita ###################
iptables -i input -m conntrack -ctstate stabilito, correlato -j accetta
### Consentire, blocco in corso in arrivo non definito ###
iptables -p output accetta
iptables -P Drop di input
iptables -l -n
iptables-save | tee /etc /iptables.test.regole
Restore iptables < /etc/iptables.test.rules
#Service Iptables Riavvia