regola iptables per consentire tutto il traffico di origine locale in uscita?


11

Mi chiedevo se qualcuno potesse aiutarmi con la seguente regola iptables:

Vorremmo consentire QUALSIASI e TUTTO il traffico originario locale (come in, sul server che esegue iptables).

DNS, HTTP, ecc ... tutto. Qualsiasi connessione avviata dal server che esegue iptables dovrebbe essere consentita.

Attualmente stiamo usando sostanzialmente la politica di default OUTPUT, ACCEPT. È corretto? Gli input sono bloccati, quindi suppongo che ciò significhi che le connessioni (tranne quelle che consentiamo) non possono essere avviate perché verranno eliminate prima che la nostra parte possa colpire la politica OUTPUT?

Spiacenti, le mie abilità su iptables sono deboli;)

Grazie gentilmente

Risposte:


26

Sono necessarie due regole per farlo:

iptables -I OUTPUT -o eth0 -d 0.0.0.0/0 -j ACCEPT
iptables -I INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

Alcune note

  • Le regole preesistenti che potresti avere potrebbero già farlo, ma sembrano diverse.
  • Questo usa -Iper forzare queste regole ad essere le prime. iptablesle regole vengono valutate dall'alto verso il basso.
  • I flag -oe -isignificano rispettivamente "out" e "in". Sostituire eth0con il nome dell'interfaccia ethernet corretto.

abbiamo entrambi :) non sono riuscito a menzionare il secondo perché come ho detto ... le mie capacità di iptables sono un debole. grazie per il chiarimento :)
anonimo-uno

2
-d 0.0.0.0/0è ridondante e non necessario.
zapstar,

Bella risposta. Ma ora sono in grado di eseguire il ping del server e non capisco perché. Puoi spiegare?
Daniel,

@Daniel Perché se consenti solo il traffico in uscita, la risposta al ping verrà eliminata dal filtro pacchetti quando raggiunge l'host. Per evitare ciò, è inoltre necessario consentire il traffico in entrata associato alla stessa sessione o correlato a tutto il traffico in uscita. In altre parole, poiché la risposta del ping è correlata alla richiesta di ping, dovrebbe essere consentita. Se è presente una richiesta di ping in entrata e nessun ping in uscita registrato nella tabella delle sessioni, il pacchetto in entrata verrebbe eliminato. Spero che abbia un senso!
Bahamat,

@bahamat: dopo aver provato di nuovo, ho scoperto che devo consentire esplicitamente il traffico icmp. E stavo parlando della possibilità di eseguire il ping del server, dove ho implementato le regole sopra. Non riesco a riprodurlo tra l'altro, forse ho fatto un errore da qualche parte. Grazie comunque.
Daniel,

0

Attualmente stiamo usando sostanzialmente la politica di default OUTPUT, ACCEPT.

Questo è abbastanza per OUTPUT perché Netfilter non ha bisogno di regole speciali per avviare il tracciamento delle connessioni stateful.

Ma se si desidera filtrare il traffico in entrata in base alla politica di " rifiuto predefinito ", è possibile passare da INPUT-chain a DROP:iptables -P INPUT DROP

Successivamente tutto sarebbe impostato con solo 2 regole :

iptables -A INPUT -j ACCEPT -i lo
iptables -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED

Presta attenzione alla regola che consente il traffico di input sull'interfaccia di loopback - come ho sottolineato nel mio blog che pubblica " Firewall minimo per l'utente finale ", a meno che non sia esplicitamente consentito, il traffico di loopback non verrà gestito dal controllo dello stato "stabilito", rispetto alla restituzione traffico attraverso, diciamo, eth0.

Per garantire che questo set di regole minimo sia caricato "così com'è " senza interferire con le regole che potrebbero essere già presenti, è conveniente utilizzare iptables-restorenella sessione SHELL:

lptables-restore <<__EOF__
-P INPUT DROP
-A INPUT -j ACCEPT -i lo
-A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
__EOF__

Prima di farlo assicurati di non interrompere la tua connessione di rete 1 , anche se le sessioni SSH già aperte dovrebbero continuare a funzionare normalmente, i tentativi di aprirne di nuovi non funzioneranno.

__

  1. Ovviamente puoi aggiungere altre regole per consentire tali connessioni. Può essere semplice come solo -A INPUT -j ACCEPT -p tcp --dport 22- non c'è bisogno di armeggiare con -m statequi. Inoltre, non dimenticare di fissare lptables-restoredi nuovo a iptables-restoreprima di provarlo;)
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.