Come configurare iptables per utilizzare apt-get in un server?

Sto iniziando a utilizzare iptables (newbie) per proteggere un server linux (in particolare Debian 5.0). Prima di configurare le impostazioni di iptables, posso utilizzare apt-get senza alcun problema. Ma dopo aver configurato l'iptables, l'apt-get smette di funzionare. Ad esempio uso questo script in iptables:

#!/bin/sh IPT=/sbin/iptables ## FLUSH $IPT -F $IPT -X $IPT -t nat -F $IPT -t nat -X $IPT -t mangle -F $IPT -t mangle -X $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT $IPT -A INPUT -p tcp --dport 22 -j ACCEPT $IPT -A OUTPUT -p tcp --sport 22 -j ACCEPT $IPT -A INPUT -p tcp --dport 80 -j ACCEPT $IPT -A OUTPUT -p tcp --sport 80 -j ACCEPT $IPT -A INPUT -p tcp --dport 443 -j ACCEPT $IPT -A OUTPUT -p tcp --sport 443 -j ACCEPT # Allow FTP connections @ port 21 $IPT -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT # Allow Active FTP Connections $IPT -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT # Allow Passive FTP Connections $IPT -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT #DNS $IPT -A OUTPUT -p udp --dport 53 --sport 1024:65535 -j ACCEPT $IPT -A INPUT -p tcp --dport 1:1024 $IPT -A INPUT -p udp --dport 1:1024 $IPT -A INPUT -p tcp --dport 3306 -j DROP $IPT -A INPUT -p tcp --dport 10000 -j DROP $IPT -A INPUT -p udp --dport 10000 -j DROP 

allora quando faccio funzionare apt-get ottengo:

 core:~# apt-get update 0% [Connecting to ftp.us.debian.org] [Connecting to security.debian.org] [Conne 

e si ferma. Quali regole che devo configurare per far funzionare?

Grazie

Addendum:

Dopo alcuni tentativi, trovo che il problema si trova nella politica INPUT e non nell' OUTPUT, se si modifica l'opzione $ IPT -P OUTPUT a $ IPT -P OUTPUT ACCEPT il problema persiste. Ma se cambio l'ingresso $ IPT -P INPUT a $ IPT -P INPUT ACCEPT, allora inizia a funzionare.

  • "\ Root" fa qualsiasi cosa in / etc / aliases?
  • Quanto dovrebbe essere la partizione di swap?
  • tcpdump tronca a 1472 byte i dati utili nei pacchetti UDP durante la cattura
  • Strumento di row di command per Linux per verificare il raggio di Windows
  • Comportmento ARP in Linux
  • Sistema di file alternativo / gestore di volume per la RAM ZFS w / non ECC?
  • Come dormo per un millisecondo in bash o ksh
  • avahi-daemon si lega alle porte eth0 udp 5353 e 53791
  • 10 Solutions collect form web for “Come configurare iptables per utilizzare apt-get in un server?”

    È necessario consentire al primo pacchetto di aprire una connessione HTTP OUT, quindi lasciare in risposta le risposte.

    Provare:

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

    Per risolvere questo problema è necessario aggiungere le seguenti regole nel tuo IPT:

     # Apt-Get without problem $IPT -A OUTPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 

    Forse Apt non è in grado di risolvere i nomi host con DNS. Provi ad aggiungere questa row nella sezione DNS del tuo ruleset:

    $IPT -A INPUT -p udp --sport 53 --dport 1024:65535 -j ACCEPT

    Sono necessarie due porte per un'installazione Debian predefinita per get gli aggiornamenti:

    • HTTP (port TCP 80)
    • DNS (port 53 di udp)

    Soluzione con stato -m:

     $IPT -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p tcp --sport 80 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p udp --dport 53 --sport 32768:61000 -m state --state NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p udp --sport 53 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT 

    o con conntrack -m:

     $IPT -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p tcp --sport 80 --dport 32768:61000 -m conntrack --ctstate ESTABLISHED -j ACCEPT $IPT -A OUTPUT -p udp --dport 53 --sport 32768:61000 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT $IPT -A INPUT -p udp --sport 53 --dport 32768:61000 -m conntrack --ctstate ESTABLISHED -j ACCEPT 

    Apt usa solitamente la buona port 80 vecchia, ma si dovrebbe controllare apt.conf per vedere come è impostato, in quanto può utilizzare uno qualsiasi di molti. Controllare anche /etc/apt/sources.list

    Credo che avresti bisogno di regole di output in cui le porte ad alta sorgente permettono. Quando l'apt si connette a http, Linux gli darà una port ad alta sorgente random (superiore a qualsiasi cosa è in /proc/sys/net/ipv4/ip_local_port_range ). (Non può essere random, non ricordo). ftp ha modalità passive e attive pure, vorrei raccomandare sorgenti http nelle vostre sources.list in questo caso.

    Quindi, se si cambiano le fonti in http, e imposta la regola di output per tutte le porte effimere. Sanetworking tutti impostati. Se si utilizza ftp, è necessario scoprire se è attivo o passivo e quindi aggiungere le regole di conseguenza. Vedere questo collegamento per una spiegazione delle modalità attive / passive. Vedo che hai quelli attualmente elencati, ma sembrano essere dalla prospettiva che la casella sia un server, non un client. Con l'apt sei il cliente.

    Quindi per le porte di origine http:

     $ cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000 $IPT -A OUTPUT -p tcp --dport 80 --sport 32768:61000 -j ACCEPT 

    Infine, è ansible registrare i pacchetti scartati come strumento di risoluzione dei problemi di iptables generale. Vedi questo link .

    Utilizzando DROP come criterio predefinito per le catene OUTPUT sembra un po 'eccessivo per me.

    Suggerisco di cambiare la politica di OUTPUT predefinita in ACCEPT e quindi controllare il traffico e filtrare le porte specifiche se necessario. Altrimenti, è molto difficile tenere traccia di tutte le connessioni in output e permettere ad ognuna di esse il tuo firewall.

    Dopo tutto, il trucco è quello di non permettere a nessuno, non impedire loro di uscire.

    So che questo è probabilmente un po 'tardi, ma questo thread continuava a venire nelle mie ricerche google, quindi sto postando quello che ha funzionato per me:

     iptables -A OUTPUT -p tcp --dport 80 --sport 32786:61000 -j ACCEPT iptables -A INPUT -p tcp --dport 80 --sport 32786:61000 -j ACCEPT iptables -A OUTPUT -p tcp --dport 32786:61000 --sport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 32786:61000 --sport 80 -j ACCEPT 

    Ho avuto un problema chiuso. Sto utilizzando CSF ​​e ho configurato il codice cc_allow_filter con il valore BR pensando che questo sia per SSH e dopo aver letto la scoperta dei documenti è per tutte le connessioni nel server. La mia è bloccata perché gli specchi che uso per apt-get sono da un altro paese e il CSF stava bloccando. Dopo aver rimosso il paese bloccando tutto stella funziona normalmente di nuovo.

    Penso di aver risolto il problema.

    $ IPT -A INPUT –sport 80 -j ACCEPT e adatto funzionano correttamente

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.