Gerenciando o tráfego de rede é uma das tarefas mais difíceis com que um administrador de sistema precisa lidar. Ele deve configurar o firewall de forma a atender aos requisitos do sistema e dos usuários para conexões de entrada e saída, sem deixar o sistema vulnerável a ataques.
Aqui é onde iptables
vir a calhar. 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:
FILTRO
- esta é a tabela padrão, que contém as cadeias integradas para: NAT
- uma tabela que é consultada quando um pacote tenta criar uma nova conexão. Ele tem o seguinte integrado: MANGLE
- esta tabela é usada para alteração de pacotes. Até a versão do kernel 2.4 esta mesa tinha apenas duas cadeias, mas agora são 5: Neste artigo, você verá alguns comandos úteis que o ajudarão a gerenciar o firewall de sua caixa Linux por meio do iptables. Para o propósito deste artigo, começarei com comandos mais simples e irei para os mais complexos até o final.
Primeiro, você deve saber como gerenciar o serviço iptables em diferentes distribuições Linux. Isso é bastante fácil:
No Cent / RHEL 7 e Fedora 22+ # systemctl start iptables. # systemctl stop iptables. # systemctl reinicie o iptables.
No Cent / RHEL 6/5 e Fedora # /etc/init.d/iptables start # /etc/init.d/iptables stop. # /etc/init.d/iptables restart.
Se você quiser verificar as regras existentes, use o seguinte comando:
# iptables -L -n -v.
Isso deve retornar uma saída semelhante a esta abaixo:
Cadeia INPUT (política ACEITAR 1129K pacotes, 415M bytes) pkts bytes destino prot opt in out origem destino 0 0 ACEITAR tcp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 53 0 0 ACEITAR udp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 53 0 0 ACEITAR tcp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 dpt tcp: 67 0 0 ACEITAR udp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 dpt udp: 67
Cadeia FORWARD (política ACEITAR 0 pacotes, 0 bytes) pkts bytes protocolo de destino opt in out destino de origem 0 0 ACEITAR todos - * lxcbr0 0.0.0.0/0 0.0.0.0/0 0 0 ACEITAR todos - lxcbr0 * 0.0.0.0/ 0 0.0.0.0/0
Cadeia SAÍDA (política ACEITA 354 mil pacotes, 185 milhões de bytes) pkts bytes destino prot opt in out origem destino
Se preferir verificar as regras de uma mesa específica, você pode usar o -t
opção seguida pela tabela que você deseja verificar. Por exemplo, para verificar as regras no NAT
mesa, você pode usar:
# iptables -t nat -L -v -n.
Se você encontrar uma atividade incomum ou abusiva de um endereço IP, pode bloquear esse endereço IP com a seguinte regra:
# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP.
Onde você precisa mudar "xxx.xxx.xxx.xxx"
com o endereço IP real. Tenha muito cuidado ao executar este comando, pois você pode bloquear acidentalmente seu próprio endereço IP. O -UMA
opção anexa a regra no final da cadeia selecionada.
Caso você só queira bloquear TCP tráfego desse endereço IP, você pode usar o -p
opção que especifica o protocolo. Dessa forma, o comando ficará assim:
# iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP.
Se você decidiu que não deseja mais bloquear solicitações de um endereço IP específico, pode excluir a regra de bloqueio com o seguinte comando:
# iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP.
O -D
opção exclui uma ou mais regras da cadeia selecionada. Se preferir usar a opção mais longa, você pode usar --excluir
.
À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 SAÍDA -p tcp --dport xxx -j DROP.
Para permitir conexões de entrada, use:
# iptables -A ENTRADA -p tcp --dport xxx -j ACEITAR.
Em ambos os exemplos, mude "xxx"
com a porta real que você deseja permitir. Se você quiser bloquear UDP tráfego em vez de TCP, simplesmente mude "tcp"
com "udp"
na regra de iptables acima.
Você pode permitir várias portas ao mesmo tempo, usando multiporta, abaixo você pode encontrar essa regra para conexões de entrada e saída:
# iptables -A INPUT -p tcp -m multiport --dports 22.80.443 -j ACEITAR. # iptables -A SAÍDA -p tcp -m multiport --sports 22.80.443 -j ACEITAR.
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 SAÍDA -p tcp -d 192.168.100.0/24 --dport 22 -j ACEITAR.
Alguns empregadores gostam de bloquear o acesso a o Facebook para seus funcionários. Abaixo está um exemplo de como bloquear o tráfego para o Facebook.
Observação: Se você for um administrador de sistema e precisar 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 tem o endereço 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 SAÍDA -p tcp -d 66.220.144.0/20 -j DROP.
Lembre-se de que o intervalo de endereços IP usado pelo Facebook pode variar em seu país.
Às vezes, você pode querer encaminhar o tráfego de um serviço para outra porta. Você pode fazer isso com o seguinte comando:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECIONE --para a porta 2525.
O comando acima encaminha todo o tráfego de entrada na interface de rede eth0
, do porto 25
para o porto 2525
. Você pode alterar as portas pelas que você precisa.
Às vezes, os endereços IP podem solicitar muitas conexões para portas da web em seu site. Isso pode causar vários problemas e para evitar tais problemas, você pode usar a seguinte regra:
# iptables -A INPUT -p tcp --dport 80 -m limite --limit 100 / minuto --limit-burst 200 -j ACEITAR.
O comando acima limita as conexões de entrada por minuto para 100
e define um limite de burst para 200
. Você pode editar o limite e o burst de limite de acordo com seus próprios requisitos específicos.
Alguns administradores de sistema gostam de bloquear solicitações de ping de entrada 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.
Acesso de loopback (acesso de 127.0.0.1
) é importante e você deve sempre deixá-lo ativo:
# iptables -A ENTRADA -i lo -j ACEITAR. # iptables -A SAÍDA -o lo -j ACEITAR.
Se você deseja registrar os pacotes descartados na interface de rede eth0
, você pode usar o seguinte comando:
# iptables -A INPUT -i eth0 -j LOG --log-prefix "Pacotes perdidos de IPtables:"
Você pode alterar o valor após "--log-prefix"
com algo de sua escolha. As mensagens estão logadas /var/log/messages
e você pode procurá-los com:
# grep "Pacotes descartados de IPtables:" / var / log / messages.
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á mudar "00:00:00:00:00:00"
com o endereço MAC real que você deseja bloquear.
Se você não quiser que muitas conexões simultâneas sejam estabelecidas a partir de um único endereço IP em uma determinada porta, você pode usar o comando abaixo:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJEITAR.
O comando acima não permite mais do que 3
conexões por cliente. Claro, você pode alterar o número da porta para corresponder a um serviço diferente. Também o --connlimit-above
deve ser alterado para atender às suas necessidades.
Depois de definir suas regras de iptables, você desejará pesquisar de vez em quando e pode 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 $ mesa
com a tabela real na qual você deseja pesquisar e $ string
com a string real que você está procurando.
Aqui está um exemplo:
# iptables -L INPUT -v -n | grep 192.168.0.100.
Com o iptables, você pode definir sua própria cadeia e armazenar regras personalizadas nela. Para definir uma cadeia, use:
# iptables -N filtro personalizado.
Agora você pode verificar se seu novo filtro está lá:
# iptables -L.
Cadeia INPUT (política ACEITAR) destino prot opt origem destino.
Corrente FORWARD (política ACEITAR) destino prot opt origem destino
Cadeia OUTPUT (política ACEITAR) destino prot opt origem destino
Corrente filtro customizado(0 referências) destino prot opt origem destino
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 mudar "nat"
com a tabela real que cadeias você deseja liberar.
Se quiser salvar suas regras de firewall, você pode usar o iptables-save
comando. 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 o nomeará.
Se você quiser restaurar uma lista de regras de iptables, você pode usar iptables-restore
. O comando é parecido com este:
# iptables-restoreÉ claro que o caminho para seu arquivo de regras pode ser diferente.
21. Configurar regras de IPtables para conformidade com PCI
Alguns administradores de sistema podem ser solicitados a configurar seus servidores para serem compiladores de PCI. Existem muitos requisitos de diferentes fornecedores de conformidade com PCI, mas existem alguns 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. Seja extremamente cuidadoso 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 --porta 21,25,110,143,465,587,993,995 -j DROP.Se você usar 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 com atenção e aplique as regras necessárias. Em alguns casos, pode ser necessário bloquear o tráfego UDP também em certas portas.
22. Permitir conexões estabelecidas e relacionadas
Como o tráfego de rede é separado na entrada e na saída, você deve permitir o tráfego de entrada estabelecido e relacionado. Para conexões de entrada, faça-o com:
# iptables -A INPUT -m conntrack --ctstate ESTABELECIDO, RELACIONADO -j ACEITAR.Para uso de saída:
# iptables -A SAÍDA -m conntrack --ctstate ESTABELECIDO -j ACEITAR.23. Eliminar 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 DROP24. 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 determinados endereços IP.
Por exemplo:
# iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP.Mudar “Xxx.xxx.xxx.xxx” com o endereço IP real (ou rede) que você deseja bloquear.
25. Desativar mensagens enviadas por meio de IPTables
Se o seu sistema não deveria enviar e-mails, você pode bloquear as portas de saída nas portas SMTP. Por exemplo, você pode usar isto:
# iptables -A SAÍDA -p tcp --dports 25.465.587 -j REJEITAR.Conclusão
Iptables é um firewall poderoso do qual você pode se beneficiar facilmente. É vital para cada administrador de sistema aprender pelo menos o noções básicas de iptables. Se você deseja encontrar informações mais detalhadas sobre o iptables e suas opções, é altamente recomendável ler o manual:
# man iptables.Se você acha que devemos adicionar mais comandos a esta lista, por favor, compartilhe-os conosco, enviando-os na seção de comentários abaixo.