Ano a ano vemos em jornais e blogs, incontáveis situações onde grandes redes de computadores são comprometidas, causando inúmeros problemas, parando bancos, hospitais e indústrias de primeiro nível. Por cada um destes eventos, ocorrem outros milhares de casos que não chegam nos titulares, mas que poderiam ter sido evitados com algumas simples (e as vezes nem tão simples) ações que ajudem a reforçar segurança das nossas implementações.

Partindo dessa premissa, abro uma sequência de artigos mostrando como podemos tomar pequenas ações para aumentar a segurança do seu Cloud Server.

Vamos começar pelo primeiro, o essencial, o básico. O Firewall.

O Firewall não é novo. Nem um pouco. Na verdade, ele existe desde finais dos anos 80. A curiosidade das pessoas que na época tinham acesso às primeiras redes de computadores, foi o combustível que impulsionou os primeiros acessos não permitidos a sistemas de terceiros, sistemas que na época só o governo e algumas universidades usavam.

Surgiu então a necessidade de identificar, filtrar e bloquear requisições maliciosas ou não permitidas a uma determinada rede de computadores. Devido à semelhança do acionar deste sistema com a funcionalidade de uma porta antichama, que separa e protege partes vitais de um prédio de serem consumidas pelas chamas, foi criado o termo que todos hoje conhecemos.

Então, vamos ver como o Firewall pode nos ajudar a proteger nosso Cloud Server?

O primeiro que vamos fazer é desabilitar o FirewallD, esta nova implementação de firewall é muito interessante, porém vamos conversar sobre ele em outro momento. Como ele conflita com o iptables, vamos desabilitá-lo:

$ systemctl stop firewalld
$ systemctl mask firewalld

Com o FirewallD parado e desabilitado, vamos instalar o pacote iptables-services, para que o SystemD entenda como trabalhar com o iptables como serviço:

$ yum install -y iptables-services

Após a instalação, vamos configurar o iptables para inicializar automaticamente com o sistema:

$ systemctl enable iptables
$ systemctl enable ip6tables

A partir deste momento, temos um firewall zerado e pronto para configurar, então vamos criar algumas regras básicas.

Podemos definir regras de duas maneiras, via comando na CLI (do tipo iptables -I INPUT xxx.xxx.xxx.xxx…), ou também podemos criar um arquivo de configuração. Eu recomendo esta metodologia porque permite ter mais visibilidade e entender melhor as regras do firewall, além de facilitar o backup e restauração de regras de maneira rápida e simples.

Neste exemplo vamos permitir conexões na porta 80, 443 e 22, com o objetivo de garantir o acesso remoto via SSH, e o acesso as portas padrão de acesso à servidores http. Lembrando que este é um simples exemplo e podemos adaptá-lo de maneira que atenda a sua necessidade:

/etc/sysconfig/iptables:
$ cat /etc/sysconfig/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [214:43782]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
COMMIT
/etc/sysconfig/ip6tables:
$ cat /etc/sysconfig/ip6tables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [214:43782]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

Após salvar os arquivos, vamos fazer que o iptables leia e implemente as novas regras, para isto precisamos reiniciar o serviço:

$ systemctl restart iptables
$ systemctl restart ip6tables

Para verificar se o serviço está ativo e rodando, podemos verificar seu status:

$ systemctl status iptables
$ systemctl status ip6tables

Para ver as regras configuradas e ativas, podemos utilizar a seguinte consulta:

$ iptables -L
$ ip6tables -L

Caso o serviço não rode corretamente, ou não reinicie depois de editar as configurações, podemos consultar o Log de erro do serviço com o seguinte comando:

$ journalctl -f -u iptables.service
$ journalctl -f -u ip6tables.service

Procuramos sempre deixar a menor quantidade de serviços expostos e abertos, e sempre que possível, recomendamos trocar a porta padrão dos serviços para uma completamente diferente.

Com estes exemplos acredito que fica claro como funciona e como adaptar o firewall conforme sua necessidade. A partir disso você poderá criar regras para permitir a resposta a pacotes ICMP, por exemplo, ou, se você possui IP fixo no seu local de trabalho, poderá também criar regras de conexão que permitam o gerenciamento do servidor, unicamente desde seu endereço.

Com certeza você terá de acrescentar outras regras específicas ao seu uso, porém, através de regras simples e claras, você terá total controle sobre o acesso ao seu servidor.

Obrigado pela leitura e até a próxima!