Qual é a regra do iptables correta para permitir que o apt-get baixe programas?

12

Quando digito algo como sudo apt-get install firefox, tudo funciona até que me pergunte:

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

Em seguida, as mensagens de erro são exibidas: Failed to fetch: <URL>

Minhas regras do iptables são as seguintes:

-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

O que devo adicionar para permitir ao apt-get baixar atualizações? obrigado

anthony01
fonte

Respostas:

17

O apt-get quase sempre baixa por HTTP, mas também pode usar FTP, então a resposta curta é provavelmente permitir conexões HTTP de saída ... e também DNS, é claro.

A configuração que você tem agora não permite todo o tráfego de saída da rede (a ESTABLISHEDregra que você possui na OUTPUTcadeia não é eficaz, pois nenhuma sessão será estabelecida). Você precisa permitir APENAS atualizações do apt-get enquanto ainda não permite todo o resto? iptablesé provavelmente a ferramenta errada para esse trabalho, pois não vai realmente interpretar URLs e permitir transferências HTTP seletivamente. Você deseja usar um servidor proxy HTTP para este trabalho.

Você pode usar uma configuração mais simples que permitirá downloads apt-get, mas lembre-se de que isso também permite todas as outras conexões DNS e HTTP de saída, que podem não ser o que você deseja.

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 suas fontes APT incluírem fontes HTTPS ou FTP ou fontes HTTP em portas diferentes de 80, você precisará adicionar essas portas também.

Em seguida, você terá que permitir o tráfego de retorno. Você pode fazer isso com esta regra única que permite qualquer conexão estabelecida:

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

(É seguro permitir todas as conexões estabelecidas de entrada ao usar o rastreamento de conexões, porque somente as conexões que você permitiu de outra maneira chegarão ao estado ESTABELECIDO.)

Celada
fonte
Oi, obrigado pela sua resposta. Funcionou, mas você acha que poderia haver alguma preocupação de segurança com a abertura dessas portas de SAÍDA? Graças
anthony01
1
A maioria dos firewalls, incluindo praticamente todas as caixas no estilo SOHO, permite conexões de saída irrestritas. As pessoas geralmente não têm necessidade de restringir o tráfego de saída. Mas isso depende de suas necessidades. Sua configuração existente impede que os usuários na estação de trabalho em questão naveguem na Internet. Se é isso que você precisa fazer, não poderá usar esta solução baseada em iptables, pois isso permite a navegação na web.
Celada
E se a intenção é bloquear a navegação na web, essa é a ferramenta errada. Usar o NetFilter / IPTables para bloquear todas as conexões de saída, a fim de impedir a navegação na web pela equipe, é como usar uma bazuca para abrir uma noz. Você precisa de um proxy da web transparente que faça logon para uso inadequado, permitindo a navegação relacionada ao trabalho para usuários autorizados.
Magellan
Após horas de pesquisa, essa resposta finalmente me ajudou a resolver problemas com meu próprio servidor local. Não importa o que eu fiz, todo o tráfego de saída foi bloqueado até eu permitir explicitamente as conexões DNS via porta 53. No entanto, faz sentido, porque meu gerenciador de pacotes reclamou que não conseguia resolver os hosts.
Cebola