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.