Pesquisa de site

Como configurar um firewall Iptables básico no Centos 6


Status: Obsoleto

Este artigo aborda uma versão do CentOS que não é mais suportada. Se você estiver operando um servidor executando o CentOS 6, recomendamos atualizar ou migrar para uma versão suportada do CentOS.

Razão:

Veja em vez disso:

  • Iptables Essentials: regras e comandos comuns de firewall
  • Como funciona o firewall Iptables.
  • Como configurar um firewall usando o FirewallD no CentOS 7

Introdução

Este artigo mostrará como criar um firewall simples em um Centos VPS. Ele só abrirá as portas que queremos e fechará outros serviços. Também mostrarei como evitar ataques mais simples e como entrar novamente no VPS se você negar o acesso a si mesmo por acidente.

O tutorial não é de forma alguma exaustivo e apenas mostra como abrir algumas portas de entrada: para apache, SSH e e-mail e fechar todas as outras. Não bloquearemos nenhum tráfego de saída e apenas criaremos algumas regras mais comuns para bloquear os scripts e bots comuns que procuram por VPS vulneráveis.

O iptables é um firewall simples instalado na maioria das distribuições Linux. A página de manual do linux para iptables diz que é uma ferramenta de administração para filtragem de pacotes IPv4 e NAT, que, na tradução, significa que é uma ferramenta para filtrar e bloquear o tráfego da Internet . O firewall iptables é incluído por padrão nas imagens do Linux Centos 6.4 fornecidas pela DigitalOcean.

Vamos configurar o firewall uma a uma regra. Para simplificar: um firewall é uma lista de regras, portanto, quando uma conexão de entrada é aberta, se corresponder a qualquer uma das regras, esta regra pode aceitar essa conexão ou rejeitá-la. Se nenhuma regra for atendida, usamos a regra padrão.

Observação: Este tutorial aborda a segurança do IPv4. No Linux, a segurança do IPv6 é mantida separadamente do IPv4. Por exemplo, \iptables\ só mantém regras de firewall para endereços IPv4, mas tem uma contraparte IPv6 chamada \ip6tables\, que pode ser usada para manter regras de firewall para endereços de rede IPv6.

Se o seu VPS estiver configurado para IPv6, lembre-se de proteger as interfaces de rede IPv4 e IPv6 com as ferramentas apropriadas. Para obter mais informações sobre ferramentas IPv6, consulte este guia: Como configurar ferramentas para usar IPv6 em um Linux VPS

Decida quais portas e serviços abrir

Para começar, queremos saber quais serviços queremos abrir ao público. Vamos usar o típico servidor de hospedagem na web: é um servidor da web e de e-mail, e também precisamos nos deixar entrar pelo servidor SSH.

Primeiro, queremos deixar a porta SSH aberta para que possamos nos conectar ao VPS remotamente: ou seja, a porta 22.

Além disso, precisamos das portas 80 e 443 (porta SSL) para o tráfego da web. Para enviar e-mail, abriremos as portas 25 (SMTP normal) e 465 (SMTP seguro). Para permitir que os usuários recebam e-mails, abriremos as portas normais 110 (POP3) e 995 (porta POP3 segura).

Além disso, portas IMAP abertas, se tivermos instalado: 143 para IMAP e 993 para IMAP sobre SSL. Nota: Recomenda-se permitir apenas protocolos seguros, mas isso pode não ser uma opção, se não pudermos influenciar os usuários do serviço de e-mail alterem seus clientes de e-mail.

Bloqueie os ataques mais comuns

Os VPSs da DigitalOcean geralmente vêm com a configuração vazia: todo o tráfego é permitido. Apenas para ter certeza disso, podemos limpar as regras do firewall - ou seja, apagá-las todas:

iptables -F

Podemos então adicionar algumas regras simples de firewall para bloquear os ataques mais comuns, para proteger nosso VPS de script-kiddies. Não podemos realmente contar apenas com o iptables para nos proteger de um DDOS em grande escala ou similar, mas podemos pelo menos adiar os bots de varredura de rede usuais que eventualmente encontrarão nosso VPS e começarão a procurar falhas de segurança para explorar. Primeiro, começamos com o bloqueio de pacotes nulos.

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

Dissemos ao firewall para pegar todos os pacotes recebidos com sinalizadores tcp NENHUM e apenas DROP. Pacotes nulos são, simplesmente, pacotes de reconhecimento. Os padrões de ataque usam isso para tentar ver como configuramos o VPS e descobrir pontos fracos. O próximo padrão a ser rejeitado é um ataque syn-flood.

iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Pacotes XMAS, também um pacote recon.

iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

Descartamos pelo menos alguns dos padrões usuais que encontram vulnerabilidades em nosso VPS.

Abra portas para serviços selecionados

Agora podemos começar a adicionar serviços selecionados ao nosso filtro de firewall. A primeira dessas coisas é uma interface localhost:

iptables -A INPUT -i lo -j ACCEPT

Dizemos ao iptables para adicionar (-A) uma regra à tabela de filtro de entrada (INPUT) qualquer tráfego que chegue à interface localhost (-i lo) e aceitá-lo (-j ACCEPT). Localhost é frequentemente usado para, ou seja. seu site ou servidor de e-mail se comunicando com um banco de dados instalado localmente. Dessa forma, nosso VPS pode usar o banco de dados, mas o banco de dados está fechado para exploits da internet.

Agora podemos permitir o tráfego do servidor web:

iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

Adicionamos as duas portas (porta http 80 e porta https 443) à cadeia ACCEPT - permitindo o tráfego nessas portas. Agora, vamos permitir que os usuários usem nossos servidores SMTP:

iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 465 -j ACCEPT

Como dito antes, se podemos influenciar nossos usuários, devemos usar a versão segura, mas muitas vezes não podemos ditar os termos e os clientes se conectarão usando a porta 25, que é muito mais fácil de detectar senhas. Agora, permitimos que os usuários leiam e-mails em seus servidores:

iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT

Essas duas regras permitirão o tráfego POP3. Novamente, poderíamos aumentar a segurança do nosso servidor de e-mail usando apenas a versão segura do serviço. Agora também precisamos permitir o protocolo de correio IMAP:

iptables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT

Limitando o acesso SSH

Também devemos permitir o tráfego SSH, para que possamos nos conectar ao VPS remotamente. A maneira simples de fazer isso seria com este comando:

iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Agora dissemos ao iptables para adicionar uma regra para aceitar o tráfego tcp que entra na porta 22 (a porta SSH padrão). É aconselhável alterar a configuração do SSH para uma porta diferente, e esse filtro de firewall deve ser alterado de acordo, mas a configuração do SSH não faz parte deste artigo.

No entanto, poderíamos fazer mais uma coisa sobre isso com o próprio firewall. Se nosso escritório tiver um endereço IP permanente, só poderíamos permitir conexões SSH a partir dessa fonte. Isso permitiria que apenas pessoas de nossa localização se conectassem.

Primeiro, descubra seu endereço IP externo. Certifique-se de que não é um endereço da sua LAN ou não funcionará. Você pode fazer isso simplesmente visitando o site whatismyip.com. Outra maneira de descobrir é digitar:

w

no terminal, devemos nos ver logados (se fosse o único logado e nosso endereço IP anotado.

A saída se parece com isto:

root@iptables# w
 11:42:59 up 60 days, 11:21,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root   pts/0    213.191.xxx.xxx  09:27    0.00s  0.05s  0.00s w

Agora, você pode criar a regra de firewall para permitir apenas o tráfego para a porta SSH se vier de uma fonte: seu endereço IP:

iptables -A INPUT -p tcp -s YOUR_IP_ADDRESS -m tcp --dport 22 -j ACCEPT

Substitua YOUR_IP_ADDRESS pelo IP atual, é claro.

Poderíamos abrir mais portas em nosso firewall conforme necessário alterando os números das portas. Dessa forma, nosso firewall permitirá o acesso apenas aos serviços que desejamos. No momento, precisamos adicionar mais uma regra que nos permitirá usar conexões de saída (ou seja, ping do VPS ou executar atualizações de software);

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Isso permitirá que qualquer conexão de saída estabelecida receba respostas do VPS do outro lado dessa conexão.

iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Agora temos nossas regras de firewall em vigor.

Salve a configuração

Agora que temos toda a configuração, podemos listar as regras para ver se falta alguma coisa.

iptables -L -n

A opção -n aqui é porque precisamos apenas de endereços IP, não de nomes de domínio. ou seja se houver um IP nas regras assim: 69.55.48.33: o firewall iria procurá-lo e veria que era um IP linux-console.net. Não precisamos disso, apenas do próprio endereço. Agora podemos finalmente salvar nossa configuração de firewall:

iptables-save | sudo tee /etc/sysconfig/iptables

O arquivo de configuração iptables no CentOS está localizado em /etc/sysconfig/iptables. O comando acima salvou as regras que criamos nesse arquivo. Apenas para garantir que tudo funcione, podemos reiniciar o firewall:

service iptables restart

As regras salvas persistirão mesmo quando o VPS for reinicializado.

Dê descarga para se desbloquear

Se cometemos um acidente em nossa configuração, podemos ter nos impedido de acessar o VPS. Talvez tenhamos inserido o endereço IP incorreto para que o firewall não permita conexões de nossa estação de trabalho. Agora não podemos alcançar essas regras e, se as salvarmos, nem mesmo uma reinicialização nos ajudará. Felizmente, a interface web do DO nos permite conectar ao servidor via console:

Uma vez conectado, efetuamos login como root e emitimos o seguinte comando:

iptables -F

Isso limpará os filtros e poderemos entrar no VPS novamente.

Conclusão

Este artigo não é exaustivo e apenas arranhou a superfície da execução de um firewall simples em uma máquina Linux. Ele fará o suficiente para um cenário típico de servidor de web e e-mail para um desenvolvedor não familiarizado com a linha de comando linux ou iptables.

No entanto, muito mais poderia ser feito. Existem bons tutoriais e exemplos na internet para nos ajudar a fornecer uma configuração mais robusta. Para ambientes de produção, seria aconselhável criar uma configuração mais detalhada ou ter um especialista em segurança preparando a configuração.