Você pode recomendar uma boa introdução ao iptables? [fechadas]

15

Eu tenho que configurar um firewall em um servidor Linux (toda a minha experiência anterior é com o Windows). Minhas regras devem ser bem simples - proibir tudo, permitir algumas portas com todas, permitir algumas portas para sub-redes IP específicas, enquanto a rede é pequena, mas complexa (cada host possui IPs em pelo menos 2 192.168 ... redes, todos podem interconecte muitas maneiras diferentes). Eu acho que o uso de wrappers iptables pode complicar demais o sistema, introduzindo muitas entidades desnecessárias e seria melhor mantê-lo simples e usar o iptables diretamente.

Você pode recomendar uma boa introdução rápida sobre como escrever regras do iptables?

Ivan
fonte

Respostas:

26

Existem links para a documentação oficial e recomendada no site da Netfilter.

Este não é um assunto novo, os recursos são ilimitados .

A maioria dos comandos básicos é bastante intuitiva e pode ser facilmente referência à página de manual .

O netfilter, que é a tecnologia no nível do kernel que permite a filtragem de pacotes, é bastante avançado. Existem tabelas adicionais que podem manipular pacotes, converter pacotes e afetar o roteamento. O iptablesutilitário é a ferramenta da terra do usuário para interagir com o netfilter. Se você deseja aprender sobre funcionalidades avançadas, sugiro que você faça referência à documentação mencionada acima. Para uma introdução à funcionalidade básica, leia mais.

Para listar todas as regras existentes:

iptables -L -n

-n impede que o iptables resolva ips, o que produz uma saída mais rápida.

A tabela padrão é a filtertabela, que é usada para aplicar regras básicas de firewall às três cadeias. As três cadeias de padrão na filtertabela são INPUT, OUTPUTe FORWARD.

As cadeias são amplamente auto-explicativas. A cadeia INPUT afeta os pacotes que chegam, a cadeia OUTPUT afeta os pacotes gerados localmente e, finalmente, FORWARD para todos os pacotes que são roteados pelo sistema.

Entre os alvos que você pode especificar, você pode DROPpacotes, o que significa simplesmente ignorar e não responder. Você pode REJECTpacotes, onde uma resposta icmp seria enviada para a fonte da negação. Finalmente, você pode ACCEPT, o que permite que os pacotes continuem roteando.

Freqüentemente, com um firewall externo, a opção padrão será o DROPcontrário REJECT, pois reduz a área visível da sua rede na Internet. Por exemplo, um IP que de outra forma limita os serviços a um host específico teria menos visibilidade DROP.

Nota, -Asignifica acrescentar ao final da cadeia. Se você deseja inserir no topo, você pode usar -I. Todas as regras são processadas de cima para baixo. -Dpara exclusão.

Para DROPum pacote recebido vindo de 192.168.235.235:

iptables -A INPUT -s 192.168.235.235 -j DROP

Isso salta para o DROPdestino de todos os protocolos provenientes desse IP.

Aceitar:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

Para impedir o acesso a esse IP a partir do seu servidor ou rede local:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

Você pode especificar o -pprotocolo, a -sorigem do pacote, o -ddestino do pacote, a porta de destino --dport, a porta de origem --sporte muitos outros sinalizadores que afetarão como os pacotes são tratados pela regra.

Se sua INPUTpolítica padrão era DROPe você queria permitir que todos na 192.168.123.0/24sub-rede acessassem o SSH no seu servidor, aqui está um exemplo:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

É isso mesmo, você pode usar a notação CIDR também!

De um modo geral, a melhor política padrão é DROPpara todas as cadeias. Toda cadeia tem uma política padrão, especificada pelo -Psinalizador. Mesmo se você tiver sua política definida como padrão DROP, ainda é recomendável que a entrada final em uma cadeia também seja uma DROP.

Por exemplo, para alterar a política DROPpara as cadeias INPUT, FORWARD e OUTPUT:

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

Cuidado , se você especificar a política padrão do DROP for INPUT em um sistema remoto sem primeiro permitir o acesso SSH, poderá impedir o acesso ao sistema. Se estiver em um sistema remoto, você pode especificar um crontab temporário para liberar todas as regras a cada 5 minutos como à prova de falhas.

Para excluir todas as regras e permitir todo o tráfego:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

Observe que -Xremove todas as cadeias criadas. -Flibera todas as regras.

Existem ferramentas nativas para salvar e restaurar as regras. Particularmente, iptables-savee iptables-restore. A maioria das distribuições modernas de Linux possui savee restorefunciona dentro de um arquivo init do iptables fornecido com o sistema.

Existem outras práticas recomendadas de firewall, como descartar pacotes malformados e outro tipo de tráfego indesejável. Essa é uma vantagem do uso de um utilitário de front-end como o Shorewall , pois implementará muitas dessas políticas por padrão. No entanto, concordo com sua abordagem e prefiro manter minhas próprias regras diretamente também, e essas mesmas práticas recomendadas podem ser implementadas sem um front end.

Warner
fonte
2
Só me deparei com essa resposta enquanto procurava algumas coisas aleatórias sobre iptables aqui (eu pesquiso mais no SF / SO antes do Google!), E essa resposta muito detalhada parece merecer mais amor por votação, então eu dei algumas!
Andrew Barber
+1 boa resposta. Eu mencionaria o Debian WIKI também.
michal.kreuzman
1

Encontrei https://help.ubuntu.com/community/IptablesHowTo útil recentemente. Eu não acho que nada lá seja especialmente específico do Ubuntu.

gbroiles
fonte
Eu uso o Arch no meu laptop, mas um Ubuntu Lucid Server é exatamente o que a tarefa de configurar é. Portanto, isso pode acontecer se não for obsoleto (ele aborda o Ubuntu 8.04 até onde eu sei).
1013 Ivan Ivan