Puoi consigliare una buona introduzione a iptables? [chiuso]


15

Devo installare un firewall su un server Linux (tutta la mia esperienza precedente è con Windows). Le mie regole sono pensate per essere piuttosto semplici: vietare tutto, consentire alcune porte con tutti, consentire alcune porte per sottoreti IP specifiche, mentre la rete è piccola ma complessa (ogni host ha IP in almeno 2 192.168 ... reti, tutti possono interconnettere in molti modi diversi). Penso che l'uso dei wrapper di iptables possa complicare eccessivamente il sistema introducendo molte entità non necessarie e sarebbe meglio mantenerlo semplice e usare direttamente iptables.

Puoi consigliarmi una rapida introduzione su come scrivere le regole di iptables?

Risposte:


26

Link alla documentazione ufficiale e raccomandata esistono sul sito Web Netfilter.

Questo non è un nuovo argomento, le risorse sono illimitate .

La maggior parte dei comandi di base sono abbastanza intuitivi e possono essere facilmente riferiti alla manpage .

netfilter, che è la tecnologia a livello di kernel che abilita il filtraggio dei pacchetti, è piuttosto avanzato. Esistono tabelle aggiuntive che possono manipolare i pacchetti, tradurre i pacchetti e influire in altro modo sul routing. L' iptablesutilità è lo strumento userland per interagire con netfilter. Se desideri conoscere le funzionalità avanzate, ti suggerisco di fare riferimento alla documentazione di cui sopra. Per un'introduzione alla funzionalità di base, leggi di più.

Per elencare tutte le regole esistenti:

iptables -L -n

-n impedisce a iptables di risolvere ips, producendo un output più veloce.

La tabella predefinita è la filtertabella, che viene utilizzata per applicare le regole del firewall di base alle tre catene. Le tre catene predefinite della filtertabella sono INPUT, OUTPUTe FORWARD.

Le catene sono ampiamente autoesplicative. La catena INPUT influenza i pacchetti in arrivo, la catena OUTPUT influenza i pacchetti generati localmente e infine FORWARD per tutti i pacchetti che attraversano il sistema.

Tra gli obiettivi che è possibile specificare, è possibile DROPpacchetti, il che significa semplicemente ignorare e non rispondere. Puoi REJECTpacchetti, in cui una risposta icmp verrebbe inviata alla fonte del rifiuto. Infine, puoi farlo ACCEPT, il che consente ai pacchetti di continuare il routing.

Spesso con un firewall rivolto verso l'esterno la scelta predefinita sarà DROPal contrario REJECT, in quanto riduce l'impronta visibile della tua rete su Internet. Ad esempio, un IP che altrimenti limiti i servizi a un host specifico avrebbe meno visibilità DROP.

Nota, -Asignifica aggiungere alla fine della catena. Se si desidera inserire nella parte superiore, è possibile utilizzare -I. Tutte le regole vengono elaborate dall'alto verso il basso. -Dper la cancellazione.

A DROPun pacchetto in arrivo proveniente da 192.168.235.235:

iptables -A INPUT -s 192.168.235.235 -j DROP

Questo passa alla DROPdestinazione per tutti i protocolli provenienti da quell'IP.

Accettare:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

Per impedire l'accesso a tale IP dal server o dalla rete locale:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

È possibile specificare il -pprotocollo, l' -sorigine del pacchetto, la -ddestinazione per il pacchetto, la porta di destinazione --dport, la porta di origine --sporte molti altri flag che influenzeranno il modo in cui i pacchetti vengono trattati dalla regola.

Se la tua INPUTpolitica di default era DROPe volevi consentire a tutti gli utenti della 192.168.123.0/24sottorete di accedere a SSH sul tuo server, ecco un esempio:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

Esatto, puoi usare anche la notazione CIDR !

In generale, la migliore politica di default è DROPper tutte le catene. Ogni catena ha una politica di default, che è specificata dal -Pflag. Anche se il criterio è impostato sul valore predefinito DROP, si consiglia comunque di includere anche la voce finale in una catena DROP.

Ad esempio, per modificare il criterio in DROPper le catene INPUT, FORWARD e OUTPUT:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Fai attenzione , se specifichi la politica di default di DROP per INPUT su un sistema remoto senza prima concederti l'accesso SSH, potresti impedirti di accedere al sistema. Se su un sistema remoto, è possibile specificare un crontab temporaneo per svuotare tutte le regole ogni 5 minuti come fail-safe.

Per eliminare tutte le regole e consentire tutto il traffico:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

Nota, -Xrimuove tutte le catene create. -Felimina tutte le regole.

Esistono strumenti nativi per salvare e ripristinare le regole. In particolare, iptables-savee iptables-restore. La maggior parte delle moderne distribuzioni Linux hanno savee restorefunzionano all'interno di un file init iptables fornito con il sistema.

Esistono altre best practice per i firewall, come l'eliminazione di pacchetti non validi e altri tipi di traffico indesiderato. Questo è uno dei vantaggi dell'utilizzo di un'utilità front-end come Shorewall , poiché implementerà molte di queste politiche per impostazione predefinita. Tuttavia, sono d'accordo con il tuo approccio e preferisco mantenere anche le mie regole direttamente, e queste stesse migliori pratiche possono essere implementate senza un front-end.


2
Ho appena trovato questa risposta mentre cercavo alcune cose casuali di iptables qui (cerco più SF / SO prima di Google!), E questa risposta molto dettagliata sembra meritare più amore per il voto, quindi le ho date!
Andrew Barber,

+1 bella risposta. Vorrei citare anche Debian WIKI .
michal.kreuzman,


1

Ho trovato https://help.ubuntu.com/community/IptablesHowTo utile di recente. Non credo che nulla sia specifico per Ubuntu.


Uso Arch sul mio laptop, ma un Ubuntu Lucid Server è esattamente il compito da configurare. Quindi questo può venire in mano se non obsoleto (per quanto posso vedere si rivolge a Ubuntu 8.04).
Ivan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.