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

14

Eu tenho que configurar um firewall em um servidor Linux (toda a minha experiência anterior é com o Windows). Minhas regras são bem simples - proíbam tudo, permitem algumas portas com todas, permitem algumas portas para sub-redes IP específicas, enquanto a rede é pequena, mas complexa (cada host tem IPs em pelo menos 2 192.168 ... redes, todos podem interconectar muitas maneiras diferentes). Acho que o uso de wrappers do iptables pode complicar demais o sistema, introduzindo logicamente 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 de iptables?

    
por Ivan 09.07.2010 / 02:37

3 respostas

25

Links para a documentação oficial e recomendada documentação existem no site do Netfilter.

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

A maioria dos comandos básicos é bastante intuitiva e pode ser facilmente referenciada à página do manual .

O

netfilter, que é a tecnologia de nível do kernel que permite a filtragem de pacotes, é bastante avançado. Existem tabelas adicionais que podem distorcer pacotes, converter pacotes e afetar o roteamento. O utilitário iptables é a ferramenta userland para interagir com o netfilter. Se você deseja aprender sobre funcionalidade avançada, sugiro que você faça referência à documentação mencionada anteriormente. Para uma introdução à funcionalidade básica, leia mais.

Para listar todas as regras existentes:

iptables -L -n

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

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

As cadeias são em grande parte auto-explicativas. A cadeia INPUT afeta os pacotes que entram, a cadeia OUTPUT afeta os pacotes gerados localmente e, finalmente, o FORWARD para quaisquer pacotes que roteiem pelo sistema.

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

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

Observe que -A significa anexar ao final da cadeia. Se você deseja inserir no topo, você pode usar -I . Todas as regras são processadas de cima para baixo. -D para exclusão.

Para DROP um pacote de entrada vindo do 192.168.235.235 :

iptables -A INPUT -s 192.168.235.235 -j DROP

Isso salta para a meta DROP de todos os protocolos provenientes desse IP.

Para aceitar:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

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

iptables -A OUTPUT -d 192.168.235.235 -j DROP

Você pode especificar o protocolo -p , a origem -s do pacote, o destino -d do pacote, a porta de destino --dport , a porta de origem --sport e muitos outros sinalizadores que serão afeta como os pacotes são tratados pela regra.

Se sua política INPUT padrão fosse DROP e você quisesse permitir que todos na sub-rede 192.168.123.0/24 acessassem o SSH em 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 do CIDR também!

Em geral, a melhor política padrão é DROP para todas as cadeias. Cada cadeia tem uma política padrão, que é especificada pelo sinalizador -P . Mesmo se você tiver sua política definida como padrão DROP , ainda é aconselhável que a entrada final em uma cadeia também seja DROP .

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

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

Tenha cuidado , se você especificar a política padrão de DROP para INPUT em um sistema remoto sem antes se permitir o acesso SSH, poderá evitar o acesso ao sistema. Se em um sistema remoto, você poderia especificar um crontab temporário para liberar todas as regras a cada 5 minutos como um teste de segurança.

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

Note que -X remove todas as cadeias criadas. -F libera todas as regras.

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

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

    
por 09.07.2010 / 02:41
1

Eu encontrei o link útil recentemente. Eu não acho que nada aí é especialmente específico do Ubuntu.

    
por 09.07.2010 / 09:28
1
por 09.07.2010 / 12:45