Qual è il modo canonico per memorizzare le regole di iptables


8

iptables, il firewall standard di Linux, non salva le regole tra i riavvii. Devi occupartene tu stesso. Ci sono molti modi per farlo. Qual è il modo canonico per farlo? Quali sono le migliori pratiche?

Risponderò con la mia soluzione, ma sono interessato ad altre / soluzioni migliori.


Risposte:


6

Ecco alcune regole di esempio. Salvali in /etc/iptables.rules

# Generated by iptables-save v1.3.6 on Wed Oct 24 17:07:29 2007
*filter
:INPUT ACCEPT [89458:132056082]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [263904:15667452]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 
-A INPUT -j DROP 
COMMIT
# Completed on Wed Oct 24 17:07:29 2007

aggiungi questa riga alla fine di / etc / network / interfaces

pre-up iptables-restore < /etc/iptables.rules

1
Sottolineerò che questo è specifico di Ubuntu. Per le varianti di Red Hat e Fedora, guarderai invece a / etc / sysconfig / iptables.
esm,

Intendi invece /etc/iptables.rules? Ciò non è determinato da Ubuntu, l'ho scelto da solo.
amarillion,

4
Mi riferivo all'aggiunta a / etc / network / interfaces; le mie scuse, avrei dovuto essere più chiaro. Fedora e RHEL hanno un initscript (abilmente chiamato "iptables";) che, se abilitato, esegue essenzialmente un ripristino iptables di / etc / sysconfig / iptables.
esm,

3

Usiamo molte regole di iptables , quindi per facilitare l'amministrazione facciamo quanto segue:

  • Le regole sono tutte richiamate dagli script - gli script sono chiamati da /etc/init.d/firewall (script personalizzato)
  • Un file di nomi di server / nomi di rete (variabili dell'indirizzo ip) viene conservato e incluso in ogni script iptables per coerenza.
  • script separati sono conservati per ogni sottorete (es. private / DMZ / VPN, ecc.) per facilitare la ricerca delle cose. Le regole che appartengono a 2 script (come quelle che limitano la comunicazione b / n private e DMZ) vengono inserite nello script della rete più "sicura"
  • ove possibile, vengono utilizzati loop e loop nidificati per mantenere gli script il più brevi possibile.
  • ogni nuova regola o modifica è documentata con commenti che precedono la sezione appropriata dello script.

Non so se questo è il modo migliore per farlo, ma ha funzionato bene per noi.


3

Mentre è vero che questo dipende dall'ambiente e dalla piattaforma, ho visto due buoni approcci, a seconda della piattaforma:

  • RHEL / CentOS: memorizza tutte le regole in un singolo file / etc / sysconfig / iptables che viene letto dallo script di avvio di iptables.

  • Debian / Ubuntu: memorizza tutte le regole in file specifici del servizio separati nella directory /etc/iptables.d/. Ad esempio, /etc/iptables.d/port_http, /etc/iptables.d/port_dns, dove port_service esegue il mapping a un nome di servizio in / etc / services.

In entrambi i casi, il file oi file sono gestiti da uno strumento di configurazione come Chef o Puppet e letti dallo script di avvio 'master' per iptables che viene eseguito all'avvio.


2
Starei molto attento con la tua denominazione nel tuo esempio Debian / Ubuntu. Questo è il tipo di posto in cui si desidera aggiungere il prefisso ai nomi delle regole con 00, 04, 22, ecc. Ci sono molte regole iptables che dipendono dall'ordine e se le si carica nell'ordine sbagliato, si avrà roba rotta. Suggerirei di memorizzarli in un singolo file a meno che tu non sappia davvero cosa stai facendo.
Christopher Cashell,

1

Oltre a iptables-save(e iptables-restore), i complicati schemi di firewall sono gestiti meglio con programmi dedicati. Ad esempio, abbiamo usato shorewall("iptables made easy") per configurare iptables.

Strumenti più semplici sono anche disponibili, come Firestarter e kmyfirewall .


6
Non sono d'accordo. I casi semplici possono essere facilmente gestiti con i programmi dedicati, ma per una regola complessa, non riesco a pensare a qualcosa di più chiaro di iptables (significato più chiaro non ambiguo, non necessario per i principianti)
Mikeage,

2
Dipende dal motivo per cui si desidera semplificare le regole. Penso che il file iptables.rules possa essere perfettamente leggibile. È importante sfruttare gli argomenti dei commenti per dare un senso a tutto.
spoulson,

Non sono d'accordo con il tuo disaccordo. Se ti concentri sul rendere leggibili i tuoi comandi iptables, non li ordinerai né utilizzerai le catene, quindi le regole sono efficienti quanto potrebbero essere.
Zoredache,

1
Zoredache - Penso che Mikeage abbia più ragione che torto qui. le regole di iptables possono essere piuttosto inequivocabili, anche se sarebbero (per una persona meno abile come me) difficile da leggere. Non credo che Mikeage fosse facile da leggere.
Michael Kohne,

1

Questo dipende dalla distribuzione che usi. Alcune distribuzioni, in particolare quelle basate su una distribuzione Red Hat, mantengono automaticamente le regole di iptables ma nella propria directory speciale. Conosco molto bene RHEL e le regole di iptables sono disponibili in / etc / sysconfig / iptables. Acquisire familiarità con la sintassi delle regole di iptables può essere inizialmente complicato, ma è abbastanza facile una volta capito.

Il sito web netfilter ha molta documentazione su iptables, tra cui alcune presentazioni. Se sei pronto per leggere un po 'puoi trovare molte buone informazioni qui: http://www.netfilter.org/documentation/


Su redhat potresti anche voler mantenere aggiornato / etc / sysconfig / system-config-securitylevel. Qui è dove system-config-securitylevel-tui ottiene le sue regole all'avvio. Se non mantieni aggiornato / etc / sysconfig / system-config-securitylevel, se qualcuno esegue system-config-securitylevel-tui potresti perdere le regole memorizzate in / etc / sysconfig / iptables.
Jason Tan,

1

Questa domanda è molto simile a un duplicato di 4934 ed è correlata a 397 .

Uso firehol combinato con un'interfaccia web che ho sviluppato per gestire il file di configurazione.

Mi piace davvero firehol, fornisce una sintassi più semplice rispetto all'utilizzo diretto di iptables.

  • È possibile utilizzare il comando debug di firehol esattamente per quali comandi iptables vengono generati
  • Se si verifica un errore nella configurazione e si avvia il firewall, firehol rileva l'errore e torna allo stato precedente.
  • Firehol ha un comando 'prova' che puoi usare per avviare il firewall da remoto, se le tue modifiche uccidono la tua connessione, firehol tornerà allo stato precedente, se non hai ucciso la tua connessione ti chiederà di confermare la modifica.
  • Firehol ha una vasta gamma di servizi predefiniti, quindi non devi ricordare esattamente quali porte devi avere quali porte aprire per un protocollo oscuro.

1

Usiamo uno script-init personalizzato, ovviamente. Posso usare for-loops per scorrere su un elenco di porte, analizzare altri file di configurazione come gli utenti vpn, ecc. Eccellente!

E iptables-restore è sicuramente il modo più "canonico" di salvarlo.

Cosa voglio aggiungere:

Si noti che l'attuale versione di iptables chiederà ad ogni singolo invocazione il kernel di restituire l'elenco completo delle catene. Quindi farà l'unica modifica che gli chiedi di fare. Quindi caricherà di nuovo l'elenco.

Questo è lento (O (n ^ 2)), per noi ha bisogno di 5 secondi che è troppo lungo ;-)

Se usi iptables-restore, tutto passa in una sola operazione veloce.

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.