Pesquisa de site

25 regras úteis de firewall IPtable que todo administrador Linux deve saber


Gerenciar o tráfego de rede é uma das tarefas mais difíceis que um administrador de sistema tem que enfrentar. Ele deve configurar o firewall de forma que atenda aos requisitos do sistema e dos usuários tanto para conexões de entrada quanto de saída, sem deixar o sistema vulnerável a ataques.

É aqui que o iptables se torna útil. Iptables é um firewall de linha de comando do Linux que permite aos administradores de sistema gerenciar o tráfego de entrada e saída por meio de um conjunto de regras de tabela configuráveis.

Iptables usa um conjunto de tabelas que possuem cadeias que contêm um conjunto de regras internas ou definidas pelo usuário. Graças a eles, um administrador de sistema pode filtrar adequadamente o tráfego de rede de seu sistema.

De acordo com o manual do iptables, existem atualmente 3 tipos de tabelas:

    1. FILTER – esta é a tabela padrão, que contém as cadeias integradas para:

      1. INPUT  – pacotes destinados a soquetes locais
      2. FORWARD – pacotes roteados através do sistema
      3. OUTPUT – pacotes gerados localmente
    2. NAT – tabela que é consultada quando um pacote tenta criar uma nova conexão. Possui o seguinte integrado:

      1. PREROUTING – usado para alterar um pacote assim que ele é recebido
      2. OUTPUT – usado para alterar pacotes gerados localmente
      3. POSTROUTING – usado para alterar pacotes quando eles estão prestes a sair
    3. MANGLE – esta tabela é usada para alteração de pacotes. Até a versão do kernel 2.4 esta tabela tinha apenas duas cadeias, mas agora são 5:

      1. PREROUTING – para alterar conexões de entrada
      2. OUTPUT – para alterar pacotes gerados localmente
      3. INPUT – para pacotes recebidos
      4. POSTROUTING – para alterar pacotes quando eles estão prestes a sair
      5. FORWARD – para pacotes roteados através da caixa

Neste artigo, você verá alguns comandos úteis que o ajudarão a gerenciar o firewall da sua caixa Linux através do iptables. Para os fins deste artigo, começarei com comandos mais simples e irei para os mais complexos até o final.

1. Iniciar/Parar/Reiniciar o Firewall Iptables

Primeiro, você deve saber como gerenciar o serviço iptables em diferentes distribuições Linux. Isso é bastante fácil:

Em distribuições Linux baseadas em SystemD

------------ On Cent/RHEL 7 and Fedora 22+ ------------
systemctl start iptables
systemctl stop iptables
systemctl restart iptables

Em distribuições Linux baseadas em SysVinit

------------ On Cent/RHEL 6/5 and Fedora ------------
/etc/init.d/iptables start 
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2. Verifique todas as regras de firewall do IPtables

Se você quiser verificar suas regras existentes, use o seguinte comando:

iptables -L -n -v

Isso deve retornar uma saída semelhante a esta abaixo:

Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
 0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
 0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination 
 0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
 0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
 pkts bytes target prot opt in out source destination

Se preferir verificar as regras de uma tabela específica, você pode usar a opção -t seguida da tabela que deseja verificar. Por exemplo, para verificar as regras na tabela NAT, você pode usar:

iptables -t nat -L -v -n

3. Bloquear endereço IP específico no firewall IPtables

Se você encontrar uma atividade incomum ou abusiva em um endereço IP, poderá bloquear esse endereço IP com a seguinte regra:

iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Onde você precisa alterar "xxx.xxx.xxx.xxx" pelo endereço IP real. Tenha muito cuidado ao executar este comando, pois você pode bloquear acidentalmente seu próprio endereço IP. A opção -A anexa a regra no final da cadeia selecionada.

Caso você queira bloquear apenas o tráfego TCP desse endereço IP, você pode usar a opção -p que especifica o protocolo. Dessa forma o comando ficará assim:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4. Desbloquear endereço IP no Firewall IPtables

Se você decidiu que não deseja mais bloquear solicitações de endereços IP específicos, poderá excluir a regra de bloqueio com o seguinte comando:

iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

A opção -D exclui uma ou mais regras da cadeia selecionada. Se preferir usar a opção mais longa, você pode usar --delete.

5. Bloquear porta específica no firewall IPtables

Às vezes você pode querer bloquear conexões de entrada ou saída em uma porta específica. É uma boa medida de segurança e você deve realmente pensar nisso ao configurar seu firewall.

Para bloquear conexões de saída em uma porta específica, use:

iptables -A OUTPUT -p tcp --dport xxx -j DROP

Para permitir conexões de entrada, use:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

Em ambos os exemplos, altere "xxx" pela porta real que você deseja permitir. Se você deseja bloquear o tráfego UDP em vez de TCP, basta alterar "tcp" por "udp" no campo acima da regra iptables.

6. Permitir múltiplas portas em IPtables usando Multiport

Você pode permitir múltiplas portas ao mesmo tempo, usando multiporta, abaixo você encontra essa regra para conexões de entrada e saída:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7. Permitir intervalo de rede específico em porta específica em IPtables

Você pode querer limitar certas conexões em uma porta específica para uma determinada rede. Digamos que você queira permitir conexões de saída na porta 22 para a rede 192.168.100.0/24.

Você pode fazer isso com este comando:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8. Bloqueie o Facebook no Firewall IPtables

Alguns empregadores gostam de bloquear o acesso ao Facebook de seus funcionários. Abaixo está um exemplo de como bloquear o tráfego para o Facebook.

Nota: Se você é um administrador de sistema e precisa aplicar essas regras, lembre-se de que seus colegas podem parar de falar com você :)

Primeiro encontre os endereços IP usados pelo Facebook:

host facebook.com 
facebook.com has address 66.220.156.68
whois 66.220.156.68 | grep CIDR
CIDR: 66.220.144.0/20

Você pode então bloquear essa rede do Facebook com:

iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP

Tenha em mente que o intervalo de endereços IP usado pelo Facebook pode variar em seu país.

9. Configure o encaminhamento de porta em IPtables

Às vezes você pode querer encaminhar o tráfego de um serviço para outra porta. Você pode conseguir isso com o seguinte comando:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

O comando acima encaminha todo o tráfego de entrada na interface de rede eth0, da porta 25 para a porta 2525. Você pode alterar as portas pelas que você precisa.

10. Bloqueie inundação de rede na porta Apache com IPtables

Às vezes, os endereços IP podem solicitar muitas conexões para portas da web no seu site. Isso pode causar vários problemas e, para evitá-los, você pode usar a seguinte regra:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

O comando acima limita as conexões de entrada de por minuto para 100 e define um limite de rajada para 200. Você pode editar o limite e o limite de acordo com seus próprios requisitos específicos.

11. Bloqueie solicitações de ping recebidas em IPtables

Alguns administradores de sistema gostam de bloquear solicitações de ping recebidas devido a questões de segurança. Embora a ameaça não seja tão grande, é bom saber como bloquear tal solicitação:

iptables -A INPUT -p icmp -i eth0 -j DROP

12. Permitir acesso de loopback

O acesso loopback (acesso a partir de 127.0.0.1) é importante e você deve sempre deixá-lo ativo:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

13. Mantenha um registro de pacotes de rede descartados em IPtables

Se quiser registrar os pacotes descartados na interface de rede eth0, você pode usar o seguinte comando:

iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"

Você pode alterar o valor após "--log-prefix" com algo de sua escolha. As mensagens são registradas em /var/log/messages e você pode pesquisá-las com:

grep "IPtables dropped packets:" /var/log/messages

14. Bloqueie o acesso a endereços MAC específicos em IPtables

Você pode bloquear o acesso ao seu sistema a partir de um endereço MAC específico usando:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

Claro, você precisará alterar "00:00:00:00:00:00" pelo endereço MAC real que deseja bloquear.

15. Limite o número de conexões simultâneas por endereço IP

Se você não quiser ter muitas conexões simultâneas estabelecidas a partir de um único endereço IP em determinada porta, você pode usar o comando abaixo:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

O comando acima não permite mais de 3 conexões por cliente. Claro, você pode alterar o número da porta para corresponder a diferentes serviços. Além disso, o --connlimit-above deve ser alterado para atender às suas necessidades.

16. Pesquise na regra IPtables

Depois de definir as regras do iptables, você desejará pesquisar de vez em quando e poderá precisar alterá-las. Uma maneira fácil de pesquisar dentro de suas regras é usar:

iptables -L $table -v -n | grep $string

No exemplo acima, você precisará alterar $table pela tabela real na qual deseja pesquisar e $string pela string real que você está procurando.

Aqui está um exemplo:

iptables -L INPUT -v -n | grep 192.168.0.100

17. Definir nova cadeia IPTables

Com o iptables, você pode definir sua própria cadeia e armazenar regras personalizadas nela. Para definir uma cadeia, use:

iptables -N custom-filter

Agora você pode verificar se o seu novo filtro está lá:

iptables -L
Saída de amostra
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain custom-filter (0 references)
target prot opt source destination

18. Limpar cadeias ou regras de firewall do IPtables

Se quiser liberar suas cadeias de firewall, você pode usar:

iptables -F

Você pode liberar cadeias de uma tabela específica com:

iptables -t nat -F

Você pode alterar "nat" pela tabela real cujas cadeias você deseja liberar.

19. Salve as regras do IPtables em um arquivo

Se quiser salvar suas regras de firewall, você pode usar o comando iptables-save. Você pode usar o seguinte para salvar e armazenar suas regras em um arquivo:

iptables-save > ~/iptables.rules

Depende de você onde armazenará o arquivo e como irá nomeá-lo.

20. Restaurar regras de IPtables de um arquivo

Se você deseja restaurar uma lista de regras do iptables, você pode usar iptables-restore. O comando fica assim:

iptables-restore < ~/iptables.rules

É claro que o caminho para o seu arquivo de regras pode ser diferente.

21. Configure regras de IPtables para conformidade com PCI

Alguns administradores de sistema podem ser obrigados a configurar seus servidores para serem compatíveis com PCI. Existem muitos requisitos de diferentes fornecedores de conformidade com PCI, mas existem poucos requisitos comuns.

Em muitos casos, você precisará ter mais de um endereço IP. Você precisará aplicar as regras abaixo para o endereço IP do site. Tenha muito cuidado ao usar as regras abaixo e use-as somente se tiver certeza do que está fazendo:

iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP

Se você usa cPanel ou painel de controle semelhante, pode ser necessário bloquear suas portas também. Aqui está um exemplo:

iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP

Observação: para garantir que você atenda aos requisitos do fornecedor de PCI, verifique o relatório cuidadosamente e aplique as regras exigidas. Em alguns casos, você também pode precisar bloquear o tráfego UDP em determinadas portas.

22. Permitir conexões estabelecidas e relacionadas

Como o tráfego de rede é separado em entrada e saída, você desejará permitir o tráfego de entrada estabelecido e relacionado. Para conexões de entrada faça isso com:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Para uso de saída:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

23. Descarte pacotes inválidos em IPtables

É possível ter alguns pacotes de rede marcados como inválidos. Algumas pessoas podem preferir registrar esses pacotes, mas outras preferem descartá-los. Para descartar pacotes inválidos, você pode usar:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 

24. Bloquear conexão na interface de rede

Alguns sistemas podem ter mais de uma interface de rede. Você pode limitar o acesso a essa interface de rede ou bloquear conexões de determinado endereço IP.

Por exemplo:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

Altere “xxx.xxx.xxx.xxx ” pelo endereço IP real (ou rede) que você deseja bloquear.

25. Desative e-mails de saída por meio de IPTables

Se o seu sistema não enviar e-mails, você pode bloquear portas de saída nas portas SMTP. Por exemplo, você pode usar isto:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

Conclusão

Iptables é um firewall poderoso do qual você pode se beneficiar facilmente. É vital que todo administrador de sistema aprenda pelo menos o básico do iptables. Se você quiser encontrar informações mais detalhadas sobre o iptables e suas opções é altamente recomendável ler seu manual:

man iptables

Se você acha que deveríamos adicionar mais comandos a esta lista, compartilhe-os conosco, enviando-os na seção de comentários abaixo.