Como você configura as regras de saída com iptables (no Ubuntu)?

3

Como você configura as regras de saída usando o iptables no Ubuntu?

    
por Adam Brand 29.08.2009 / 21:13

1 resposta

7

Eu estava tentando encontrar informações sobre regras de saída e iptables, mas as informações estavam incompletas ou imprecisas. Depois de cavar um pouco e desconectar minha sessão ssh algumas vezes, percebi e pensei em compartilhá-la no ServerFault.

As regras de saída são essenciais para qualquer política de segurança e necessárias para atender a muitos padrões de segurança (como o PCI DSS).

NOTA: Os comandos aqui assumem uma distribuição baseada no Debian (por exemplo, servidor Ubuntu). Os comandos do iptables devem ser os mesmos em todas as distribuições, mas verifique o guia de referência da sua própria distribuição para saber como salvar e carregar o iptables, já que essas etapas variam. Se alguém quiser wikify isso e adicionar RH ou outras diferenças dist, vá em frente.

No exemplo abaixo, configuraremos regras bastante comuns para um servidor que só precisa receber atualizações de pacote. Lembre-se que estes são comandos que diferenciam maiúsculas e minúsculas, e também que a ordem que você digita é a ordem em que são avaliados (isto é, se você estiver conectando por SSH, não faça o -A OUTPUT -j REJECT primeiro).

Conjunto de regras de amostra

sudo iptables -A OUTPUT -o lo -p all -j ACCEPT 
sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 80 -d security.ubuntu.com -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 80 -d us.archive.ubuntu.com -j ACCEPT
sudo iptables -A OUTPUT -j REJECT

IMPORTANTE: Não adicione as regras security.ubuntu.com ou us.archive.ubuntu.com, a menos que você faça uma entrada /etc/hosts para elas. Tenha em mente que o iptables irá avaliar o IP para esses endereços no momento em que a regra é aplicada. Portanto, se o Ubuntu alterar esses endereços, você precisará recriar essas regras ou reiniciar o computador (as regras são aplicadas na inicialização).

Vamos dar uma olhada em cada uma dessas regras:

Regra de interface local

sudo iptables -A OUTPUT -o lo -p all -j ACCEPT 

Isso está adicionando uma entrada dizendo que devemos aceitar qualquer tráfego que queira ir para a interface local (127.0.0.1). Alguns aplicativos usam essa interface para trocar informações e não queremos violá-los.

Regra do Sauce Secreto (Sessões Estabelecidas / Relacionadas)

sudo iptables -A OUTPUT -m state --state RELATED, ESTABLISHED -j ACCEPT

Esta é a regra que muitas vezes é esquecida, levando a sessões desconectadas e confusão. O que isso significa é permitir tráfego de saída associado a uma sessão já estabelecida ou relacionada a uma sessão estabelecida. Por exemplo, se você tiver SSH em seu servidor, poderá abrir a porta 22 de entrada, mas como o servidor enviará os dados de volta aos clientes (isso pode até sugerir uma porta superior alternativa para as comunicações subseqüentes)? Isso é o que essa regra permite.

Permitindo o Ubuntu apt-get update

sudo iptables -A OUTPUT -p tcp --dport 80 -d security.ubuntu.com -j ACCEPT
sudo iptables -A OUTPUT -p tcp --dport 80 -d us.archive.ubuntu.com -j ACCEPT

Essas regras simplesmente dizem ao iptables para permitir o tráfego que vai para a porta 80 dos servidores de atualização do Ubuntu. Estes podem ser diferentes dependendo da sua região, e pode haver mais, então você terá que fazer um apt-get update depois de fazer isso para ter certeza de que funciona para você. IMPORTANTE: Como mencionei antes, NÃO ative essa regra sem primeiro colocar uma entrada mapeando os IPs apropriados em /etc/hosts . Além disso, se o Ubuntu alterar esses IPs, você precisará atualizar sua entrada de hosts E reiniciar ou recriar essas regras, já que o iptables avalia os endereços quando a regra é aplicada.

A regra "Assassino"

sudo iptables -A OUTPUT -j REJECT

Esta é a regra que mata todo o tráfego restante. Esta deve ser definitivamente a última regra da sua cadeia, ou as outras regras não funcionarão.

Não se esqueça de fazer:

sudo sh -c “iptables-save >/etc/iptables.rules”

se você quiser manter as regras e adicionar:

pre-up iptables-restore < /etc/iptables.rules 

na interface (eth0 ou qualquer outro) em /etc/network/interfaces .

Outras regras de saída

Para permitir que o "ping" funcione (no servidor):

sudo iptables -A OUTPUT -p icmp --icmp echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp echo-reply -j ACCEPT

Para permitir que o DNS funcione (no servidor):

sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

(fique à vontade para adicionar)

    
por 29.08.2009 / 21:13