IPTABLES è lento dopo aver aggiunto '-A INPUT -j DROP' all'elenco delle regole


8

Sto appena iniziando con iptables e mi sono imbattuto in qualcosa che non capisco davvero.

Cordiali saluti, ho seguito le istruzioni di IptablesHowTo del wiki di Ubuntu .

Le tabelle nat e mangle sono vuote, sto lavorando solo con la tabella dei filtri in questo momento.

Il problema

Se aggiungo le seguenti regole iptables:

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

... poi ho ancora accesso alla mia macchina tramite ssh, tuttavia tutti i comandi di iptables impiegano circa un minuto o due per essere eseguiti. Non è un problema DNS, -nnon lo cambia.

La soluzione

Se svuoto la tabella e aggiungo invece queste tre regole, tutto funziona bene:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

Qualcuno può spiegarmi, perché la prima regola ha un impatto così grande su iptables? Comprendo che consente alle sessioni stabilite di ricevere traffico, ma perché ne ho bisogno se ssh è aperto?


In alcuni casi, sudoesegue ricerche DNS e se questi sono bloccati, il comando sarà lento. Tutti gli altri tuoi iptablescomandi hanno il prefisso sudo?
Ladadadada,

Esegui sudo strace …(da una shell di root) per vedere su cosa sta bloccando.
Gilles 'SO- smetti di essere malvagio' il

Risposte:


3

Sta eseguendo una ricerca DNS e poiché la risposta è bloccata, ci vuole un po 'di tempo per il timeout.

Prova a fare iptables -n ... per impedire la ricerca DNS.

Il conntrack consente di ricevere connessioni sulla porta effimera che è stata creata per le risposte alle richieste avviate dal computer (in questo caso la richiesta DNS). Senza consentire connessioni STABILITE o CORRELATE, anche le risposte alle tue richieste vengono bloccate.

Ad esempio: se si tenta di accedere a un sito Web, anche se si è in grado di inviare la richiesta per il sito Web, la risposta del sito Web verrà bloccata.


4

Con

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

la macchina lascerà cadere ogni pacchetto in arrivo a meno che non provenga dalla porta SSH. È una buona idea se si desidera che quella macchina comunichi solo tramite SSH. Altrimenti devi aggiungere

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

questo ti assicurerà che ti collegherai ad un server web piuttosto che essere connesso da qualcuno.


Mentre un buon consiglio in generale, questo non risponde alla domanda che è stata effettivamente posta.
Shadur,

@Shadur conntrack fa la differenza. Questo si oppone a tutto.
Nils,

Se invii una richiesta generica a un server Web attraverso una macchina come in questo caso, quest'ultima non mostrerà nulla poiché il firewall non consente l'invio di pacchetti a una macchina con una connessione stabilita.
Edmz,

Ma anche se consentirei solo a ssh di usare solo i primi due comandi, perché i comandi iptables impiegano molto più tempo rispetto alla regola conntrack ... E la regola conntrack significa che potrei collegarmi a un server web? Ciò non renderebbe inutile la regola di rilascio?
Mohrphium,

No, non lo sarebbe. Con -m conntrackte puoi avere un'altra "possibilità" che i pacchetti vengano accettati prima che vengano eliminati di sicuro. Sul computer client, devi avere iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT se vuoi vedere una risposta. Sul lato server, basta consentire la connessione SSH in entrata e rilasciare tutto il resto (se il server agisce solo come SSH). Spero sia tutto chiaro.
edmz,
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.