Rendere iptables più facile da mantenere


13

La mia rete è completamente bloccata ad eccezione di alcuni siti che sono autorizzati. Questo è tutto fatto tramite iptables, che assomiglia a questo:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

Ovviamente quegli indirizzi sono ipotetici, ma hai capito. Il mio firewall sta diventando enorme. Sarebbe molto più facile da mantenere se solo potessi fare questo:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

Credo che sia possibile, dal momento che man iptablesdice:

L'indirizzo può essere un nome di rete, un nome host (tenere presente che specificare un nome da risolvere con una query remota come DNS è una pessima idea), un indirizzo IP di rete (con / maschera) o un indirizzo IP semplice.

Ma ciò di cui mi preoccupo è la parte che dice "specificare qualsiasi nome da risolvere con ... DNS è una pessima idea". Perché questa è una cattiva idea? Rallenta tutto?

Se davvero non dovessi usare i nomi host nelle regole di iptables, cosa dovrei fare per semplificare il mio firewall?


Otterrai una risposta migliore su security.stackexchange.com
Jim B,

Potresti avere ragione sul fatto che questa domanda appartenga a quel sito, ma se hai un problema con la risposta accettata, spiega perché.
Big McLargeHuge

Se vuoi sapere come bloccare la tua rete e come farlo, chiedi sulla sicurezza, se vuoi usare iptables (invece di usare IPtables), questo è il posto giusto.
Jim B,

Risposte:


27
  • I nomi DNS vengono risolti quando vengono aggiunte le regole, non quando vengono controllati i pacchetti. Questo viola le aspettative della maggior parte delle persone.
    • La regola non viene aggiornata per riflettere i risultati DNS modificati. Viene risolto quando aggiunto e basta. Dovrai ricaricare periodicamente le regole, altrimenti alcuni siti potrebbero non funzionare.
  • C'è un piccolo problema di sicurezza in quanto stai sostanzialmente delegando il controllo delle regole del firewall a un'entità esterna.
    • Che cosa succede se il server DNS padre è compromesso e restituisce dati falsi.

Se il tuo scopo è bloccare l'accesso HTTP, di solito sei molto meglio di impostare un software progettato per filtrare a quel livello (es. Squid + squidquard).


1) Vedo come questo potrebbe essere un problema - google.com potrebbe risolvere oggi alla 1.2.3.4 ma domani quell'indirizzo non è valido. Il riavvio del firewall si occuperebbe semplicemente di questo? 2) È ancora un problema di sicurezza se il server DNS è ben noto, come DNS di Google o OpenDNS?
Big McLargeHuge

Ho contrassegnato questo come risposta perché spiega perché non dovrei usare i nomi host nelle regole di iptables e mi dà una linea di condotta per semplificare il mio firewall.
Big McLargeHuge

Vorrei aggiungere il mio supporto per Squid. Ho implementato Squid per il mio ufficio e, una volta impostato, è molto facile da mantenere per gli host in whitelist (anche se lo uso per la lista nera). Sembra che tu abbia un'impresa monumentale tra le mani; Non saprei nemmeno da dove iniziare ad autorizzare Google, ad esempio. www.google.com risolve solo 5 IP, vale a dire nulla per ssl.gstatic.com, e tutti gli altri host coinvolti nell'autenticazione, G +, ecc. che probabilmente si risolvono in più IP ciascuno.
s.co.tt,

Monumentale è un buon modo per dirlo. Ma stavo solo usando Google come esempio. Una struttura di base del mio firewall è la seguente: se la destinazione del pacchetto è autorizzata, accettala. In caso contrario, inviarlo tramite un server proxy.
Big McLargeHuge

C'è anche il problema dei sistemi che utilizzano DNS per il bilanciamento del carico. Potresti non ottenere gli stessi risultati se cerchi un dominio del genere due volte di seguito, quindi una singola ricerca non ti fornirà nemmeno un elenco esaustivo di indirizzi IP che il dominio potrebbe eventualmente risolvere.
cdhowie,

9

Se usi nomi host nel tuo firewall, il tuo firewall ora dipende dal DNS. Questo apre il firewall a una serie di problemi:

  • Le ricerche DNS in volumi elevati potrebbero causare latenza.
  • Le modifiche DNS non si propagano all'istante. Quindi il tuo firewall potrebbe utilizzare gli IP memorizzati nella cache.
  • Il DNS può essere falsificato, dirottato, compromesso.
  • Il DNS può fallire, il che significa che il firewall non funziona.
  • Le regole del firewall sono ora controllate da una terza parte.

Se si utilizzano nomi host e non si controlla il DNS, qualcun altro controlla efficacemente le regole di IPtables. Errori, errori o problemi di sicurezza alla fine diventano problemi per te.

L'unica volta che ho visto i nomi host usati bene è per le operazioni interne. Ho lavorato in un ufficio in cui IP e nomi host sono stati assegnati tramite DHCP. I firewall hanno utilizzato nomi host per creare barriere tra diversi gruppi. Dato che tutto ciò era controllato internamente, ha funzionato bene.


2
Questa è una buona risposta ma manca la parte che mi aiuterebbe a semplificare il firewall.
Big McLargeHuge

3

È possibile utilizzare un wrapper per iptables come shorewall per semplificare la gestione delle regole.


Questa è una buona idea ma non mi hai detto perché non dovrei usare i nomi host nelle regole di iptables.
Big McLargeHuge

Non so molto su Shorewall, ma ho l'impressione che davidkennedy85 avrebbe ancora bisogno di mantenere elenchi di ogni indirizzo IP di un servizio che vorrebbe consentire all'interno delle configurazioni di Shorewall. Potrebbe rendere un po 'più semplice la gestione di netfilter [& etc], ma non risolverebbe il suo problema principale, che è un enorme elenco di IP.
s.co.tt,

1

Come hanno già detto gli altri, non devi usare nomi risolvibili DNS nelle regole di iptables. Sono inaccurati, controllati da terze parti e sono generalmente una cosa negativa (tm). Aggiungo anche che il tuo DNS potrebbe non riuscire o potrebbe essere irraggiungibile all'avvio del servizio iptables. Nel qual caso la regola non verrà affatto aggiunta e potrebbe verificarsi un nuovo tipo di problemi (come perdere l'accesso a ssh dopo il riavvio).

Quello che puoi fare è:

  1. Utilizzare catene personalizzate per separare logicamente le regole
  2. Usa ipsets per raggruppare e separare gli indirizzi dalle regole
  3. Aggiungi commenti alle regole

Inoltre, nessuno ha detto nulla di negativo sui nomi host che non sono stati risolti dal DNS (ovvero sono specificati in hosts. Puoi usarli se ne hai davvero bisogno.


1

Personalmente assegno manualmente un nome host a un ip in / etc / hosts e quindi lo uso in iptables.

In questo modo tu

  1. Non scaricare le regole del firewall su un'entità esterna
  2. Hanno iptables facilmente gestibili
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.