Qual è la regola iptables giusta per consentire a apt-get di scaricare programmi?


12

Quando scrivo qualcosa del genere sudo apt-get install firefox, tutto funziona finché non mi viene chiesto:

After this operation, 77 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y

Quindi vengono visualizzati i messaggi di errore: Failed to fetch: <URL>

Le mie regole di iptables sono le seguenti:

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

-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT

-A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Cosa devo aggiungere per consentire a apt-get di scaricare gli aggiornamenti? Grazie

Risposte:


17

apt-get scarica quasi sempre su HTTP ma può anche usare FTP, quindi la risposta breve è probabilmente quella di consentire connessioni HTTP in uscita ... e anche DNS, ovviamente.

La configurazione che hai ora non consente tutto il traffico di rete in uscita (la ESTABLISHEDregola che hai sulla OUTPUTcatena non è efficace poiché nessuna sessione verrà mai stabilita). Devi consentire SOLO gli aggiornamenti di apt-get pur non consentendo tutto il resto? iptablesè probabilmente lo strumento sbagliato per quel lavoro in quanto non interpreterà davvero gli URL e consentirà i trasferimenti HTTP in modo selettivo. Si desidera utilizzare un server proxy HTTP per questo lavoro.

È possibile utilizzare una configurazione più semplice che consentirà download apt-get, ma tenere presente che ciò consente anche tutte le altre connessioni DNS e HTTP in uscita, che potrebbero non essere quelle desiderate.

iptables -F OUTPUT  # remove your existing OUTPUT rule which becomes redundant
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

Se le tue fonti APT includono origini HTTPS o FTP o fonti HTTP su porte diverse da 80, dovrai aggiungere anche quelle porte.

Successivamente, dovrai consentire il traffico di ritorno. Puoi farlo con questa singola regola che consente qualsiasi connessione stabilita:

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

(È sicuro consentire tutte le connessioni stabilite in entrata quando si utilizza il monitoraggio delle connessioni, poiché solo le connessioni che altrimenti sono state autorizzate raggiungeranno lo stato STABILITO.)


Ciao, grazie per la tua risposta. Ha funzionato, ma pensi che potrebbe esserci qualche problema di sicurezza con l'apertura di queste porte OUTPUT? Grazie
anthony01

1
La maggior parte dei firewall, inclusi praticamente tutti i box in stile SOHO, consente connessioni in uscita illimitate. Le persone di solito non hanno l'obbligo di limitare il traffico in uscita. Ma dipende dalle tue esigenze. La configurazione esistente impedisce agli utenti della workstation in questione di navigare in Internet. Se questo è ciò che devi fare, non puoi utilizzare questa soluzione basata su iptables perché fa sì che la navigazione web sia autorizzata.
Celada,

E se l'intento è quello di bloccare la navigazione web, è comunque lo strumento sbagliato. Utilizzare NetFilter / IPTables per bloccare tutte le connessioni in uscita al fine di prevenire la navigazione del personale è come usare un bazooka per aprire una noce. È necessario un proxy Web trasparente che accederà per un utilizzo inappropriato, consentendo al contempo la navigazione relativa al lavoro per gli utenti autorizzati.
Magellan,

Dopo ore di ricerche, questa risposta finalmente mi ha aiutato a risolvere i problemi con il mio server locale. Indipendentemente da ciò che ho fatto, tutto il traffico in uscita è stato bloccato fino a quando non ho autorizzato esplicitamente le connessioni DNS tramite la porta 53. Ha senso però, perché il mio gestore di pacchetti si è lamentato del fatto che non era in grado di risolvere gli host.
Cipolla
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.