GNU/Linux >> Linux Esercitazione >  >> Linux

Linux IPTables:come aggiungere regole firewall (con esempio Consenti SSH)

Questo articolo spiega come aggiungere regole firewall iptables utilizzando il comando "iptables -A" (append).

"-A" sta per aggiungere. Se ti è più facile ricordare "-A" come regola di aggiunta (invece di regola di aggiunta), va bene. Ma tieni presente che "-A" aggiunge la regola alla fine della catena.

Ancora una volta, è molto importante ricordare che -A aggiunge la regola alla fine.

In genere l'ultima regola sarà quella di eliminare tutti i pacchetti. Se hai già una regola per eliminare tutti i pacchetti e se provi a utilizzare "-A" dalla riga di comando per creare una nuova regola, finirai per aggiungere la nuova regola dopo l'attuale regola "elimina tutti i pacchetti", il che renderà la tua nuova regola praticamente inutile.

Una volta che hai padroneggiato iptables e quando lo stai implementando in produzione, dovresti usare uno script di shell, in cui usi il comando -A per aggiungere tutte le regole. In quello script di shell, l'ultima riga dovrebbe sempre essere la regola "elimina tutti i pacchetti". Quando vuoi aggiungere nuove regole, modifica lo script della shell e aggiungi le nuove regole sopra la regola "elimina tutti i pacchetti".

Sintassi:

iptables -A chain firewall-rule
  • -A catena:specifica la catena in cui deve essere aggiunta la regola. Ad esempio, usa la catena INPUT per i pacchetti in entrata e OUTPUT per i pacchetti in uscita.
  • regola del firewall:vari parametri costituiscono la regola del firewall.

Se non sai cosa significa catena, è meglio leggere prima i fondamenti di iptables.

Parametri delle regole del firewall

I seguenti parametri sono disponibili per tutti i tipi di regole del firewall.

-p è per il protocollo

  • Indica il protocollo per la regola.
  • I valori possibili sono tcp, udp, icmp
  • Usa "tutto" per consentire tutti i protocolli. Quando non specifichi -p, per impostazione predefinita verranno utilizzati i protocolli "tutti". Non è buona norma usare "tutto" e specificare sempre un protocollo.
  • Utilizza il nome (ad esempio:tcp) o il numero (ad esempio:6 per tcp) per il protocollo.
  • Il file
  • /etc/protocols contiene tutti i nomi e i numeri di protocollo consentiti.
  • Usi anche –protocollo

-s è per la sorgente

  • Indica l'origine del pacchetto.
  • Può essere un indirizzo IP, un indirizzo di rete o un nome host
  • Ad esempio:-s 192.168.1.101 indica un indirizzo IP specifico
  • Per la maschera di rete usa /mask. Ad esempio:"-s 192.168.1.0/24" rappresenta una maschera di rete di 255.255.255.0 per quella rete. Corrisponde alla rete 192.168.1.x.
  • Quando non specifichi una fonte, corrisponde a tutte le fonti.
  • Puoi anche usare –src o –source

-d è per la destinazione

  • Indica la destinazione del pacchetto.
  • È uguale a "-s" (tranne che rappresenta l'host di destinazione, l'indirizzo IP o la rete)
  • Puoi anche usare –dst o –destination

-j è l'obiettivo

  • j sta per "salta al bersaglio"
  • Questo specifica cosa deve accadere al pacchetto che corrisponde a questa regola del firewall.
  • I valori possibili sono ACCEPT, DROP, QUEUE, RETURN
  • Puoi anche specificare un'altra catena definita dall'utente come valore target.

-i è per l'interfaccia in

  • i sta per "interfaccia di input"
  • Potresti dare un'occhiata a questo e presumere che "-i" sia per l'interfaccia. Si noti che sia -i che -o sono per le interfacce. Tuttavia, -i per l'interfaccia di input e -o per l'interfaccia di output.
  • Indica l'interfaccia attraverso la quale i pacchetti in arrivo arrivano attraverso la catena INPUT, FORWARD e PREROUTING.
  • Ad esempio:-i eth0 indica che questa regola dovrebbe considerare i pacchetti in entrata che arrivano attraverso l'interfaccia eth0.
  • Se non specifichi l'opzione -i, tutte le interfacce disponibili sul sistema verranno considerate per i pacchetti di input.
  • Puoi anche usare –in-interface

-o è per la nostra interfaccia

  • o sta per "interfaccia di output"
  • Indica l'interfaccia attraverso la quale i pacchetti in uscita vengono inviati attraverso la catena INPUT, FORWARD e PREROUTING.
  • Se non specifichi l'opzione -o, tutte le interfacce disponibili sul sistema verranno considerate per i pacchetti di output.
  • Puoi anche usare –out-interface

Opzioni aggiuntive per i parametri del firewall

Alcuni dei parametri del firewall di cui sopra a loro volta hanno le proprie opzioni che possono essere passate insieme a loro. Di seguito sono elencate alcune delle opzioni più comuni.

Per utilizzare queste opzioni di parametro, devi specificare il parametro corrispondente nella regola del firewall. Ad esempio, per utilizzare l'opzione "–sport", dovresti aver specificato il parametro "-p tcp" (o "-p udp") nella regola del firewall.

Nota:tutte queste opzioni hanno due trattini davanti. Ad esempio, ci sono due trattini davanti allo sport.

–sport è per la porta di origine (per -p tcp o -p udp)

  • Per impostazione predefinita, tutte le porte di origine sono abbinate.
  • Puoi specificare il numero della porta o il nome. Ad esempio, per utilizzare la porta SSH nella regola del firewall, utilizza "–sport 22" o "–sport ssh".
  • Il file
  • /etc/services contiene tutti i nomi e i numeri di porta consentiti.
  • L'utilizzo del numero di porta nella regola è migliore (per le prestazioni) rispetto all'utilizzo del nome della porta.
  • Per abbinare l'intervallo di porte, usa i due punti. Ad esempio, 22:100 corrisponde al numero di porta da 22 a 100.
  • Puoi anche usare –source-port

–dport è per la porta di destinazione (per -p tcp o -p udp)

  • Tutto è uguale a –sport, tranne che per i porti di destinazione.
  • Puoi anche usare –destination-port

–tcp-flags è per i flag TCP (per -p tcp)

  • Questo può contenere più valori separati da virgola.
  • I valori possibili sono:SYN, ACK, FIN, RST, URG, PSH. Puoi anche usare TUTTO o NESSUNO

–il tipo icmp è per il tipo ICMP (per -p icmp)

  • Quando utilizzi il protocollo icmp “-p icmp”, puoi anche specificare il tipo ICMP usando il parametro “–icmp-type”.
  • Ad esempio:usa “–icmp-type 0” per “Echo Reply” e “–icmp-type 8” per “Echo”.

Esempio di regola firewall per consentire connessioni SSH in entrata

Ora che conosci i vari parametri (e le relative opzioni) della regola del firewall, costruiamo una regola del firewall di esempio.

In questo esempio, consentiamo solo la connessione SSH in entrata al server. Tutte le altre connessioni verranno bloccate (incluso il ping).

ATTENZIONE:Giocare con le regole del firewall potrebbe rendere il tuo sistema inaccessibile. Se non sai cosa stai facendo, potresti bloccare te stesso (e tutti gli altri) fuori dal sistema. Quindi, fai tutto il tuo apprendimento solo su un sistema di test che non è utilizzato da nessuno e hai accesso alla console per riavviare iptables, se rimani bloccato.

1. Elimina le regole esistenti

Se disponi già di alcune regole di iptables, esegui un backup prima di eliminare le regole esistenti.

Elimina tutte le regole esistenti e consenti al firewall di accettare tutto. Usa iptables flush come abbiamo discusso in precedenza per ripulire tutte le tue regole esistenti e ricominciare da zero.

Prova per assicurarti di essere in grado di eseguire ssh e ping su questo server dall'esterno.

Quando avremo finito con questo esempio, sarai in grado di inviare SSH solo a questo server. Non potrai eseguire il ping di questo server dall'esterno.

2. Consenti solo SSH

Consenti solo la connessione SSH in entrata a questo server. Puoi inviare ssh a questo server da qualsiasi luogo.

iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

Il comando iptables sopra ha i seguenti 4 componenti.

  • “-A INPUT” – Indica che stiamo aggiungendo una nuova regola (o aggiungendo) alla catena INPUT. Quindi, questa regola è per il traffico in entrata.
  • “-i eth0” – I pacchetti in arrivo attraverso l'interfaccia eth0 verranno controllati rispetto a questa regola.
  • “-p tcp –dport 22” – Questa regola è per i pacchetti TCP. Questo ha un'opzione TCP chiamata "–dport 22", che indica che la porta di destinazione per questa regola sul server è 22 (che è ssh).
  • “-j ACCEPT” – Salta per accettare, che ACCETTA semplicemente il pacchetto.

In parole povere, la regola di cui sopra può essere dichiarata come:Tutti i pacchetti in arrivo tramite eth0 per ssh saranno accettati.

3. Elimina tutti gli altri pacchetti

Dopo aver specificato le regole personalizzate per accettare i pacchetti, dovresti anche avere una regola predefinita per eliminare tutti gli altri pacchetti.

Questa dovrebbe essere la tua ultima regola nella catena INPUT.

Per eliminare tutti i pacchetti in arrivo, procedi come segue.

iptables -A INPUT -j DROP

4. Visualizza la regola SSH e prova

Per visualizzare le regole del firewall iptables correnti, usa il comando "iptables -L".

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

Come puoi vedere dall'output sopra, ha le seguenti due regole in sequenza.

  • Accetta tutte le connessioni ssh in entrata
  • Elimina tutti gli altri pacchetti.

Invece di aggiungere le regole del firewall dalla riga di comando, potrebbe essere meglio creare uno script di shell che contenga le tue regole come mostrato di seguito.

# vi iptables.sh
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

# sh -x iptables.sh
+ iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
+ iptables -A INPUT -j DROP

# iptables -L INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
DROP       all  --  anywhere             anywhere

Simile al comando append/add di iptables, ci sono pochi altri comandi disponibili per iptables. Li tratterò nei prossimi articoli della serie iptables. Fornirò anche diversi esempi pratici di regole firewall che saranno utili in scenari di vita reale.

Articoli precedenti nella serie iptables:

  • Esercitazione sul firewall di Linux:tabelle IPTables, catene, nozioni fondamentali sulle regole
  • IPTables Flush:elimina/rimuove tutte le regole su RedHat e CentOS Linux

Linux
  1. Come aggiungere regole iptables personalizzate in CSF Firewall

  2. Come creare thread in Linux (con un programma di esempio C)

  3. Come registrare i pacchetti eliminati dal firewall di Linux IPTables in un file di registro

  4. CentOS / RHEL:come aggiungere regole iptable

  5. Come aggiungere shebang #! con script php su Linux?

Come configurare il firewall con UFW su Linux

Come configurare il firewall con Gufw su desktop Linux

Come configurare un firewall con GUFW su Linux

Come proteggere un firewall Linux con le regole IPtables

Cron Vs Anacron:come configurare Anacron su Linux (con un esempio)

Come configurare un firewall sul tuo server Linux