Introdução
A firewall is a system that provides network security by filtering incoming and outgoing network traffic based on a set of user-defined rules. In general, the purpose of a firewall is to reduce or eliminate the occurrence of unwanted network communications while allowing all legitimate communication to flow freely. In most server infrastructures, firewalls provide an essential layer of security that, combined with other measures, prevent attackers from accessing your servers in malicious ways.
Este guia irá discutir como os firewalls funcionam, com foco em firewalls de software stateful, como iptables e FirewallD, no contexto de servidores em nuvem. Começaremos com uma breve explicação sobre pacotes TCP e os diferentes tipos de firewalls. Em seguida, discutiremos uma variedade de tópicos relevantes para firewalls stateful. Por fim, forneceremos links para outros tutoriais que o ajudarão a configurar um firewall em seu próprio servidor.
Pacotes de Rede TCP
Antes de discutirmos os diferentes tipos de firewalls, vamos dar uma rápida olhada em como é o tráfego de rede do Protocolo de Controle de Transporte (TCP).
O tráfego de rede TCP move-se em uma rede em pacotes, que são contêineres que consistem em um cabeçalho do pacote – isso contém informações de controle, como endereços de origem e destino, e informações de sequência do pacote – e os dados (também conhecidos como carga útil). Enquanto as informações de controle em cada pacote ajudam a garantir que seus dados associados sejam entregues corretamente, os elementos que ele contém também fornecem aos firewalls uma variedade de maneiras de corresponder pacotes às regras do firewall.
É importante notar que receber com sucesso pacotes TCP de entrada requer que o receptor envie de volta pacotes de reconhecimento de saída para o remetente. A combinação das informações de controle nos pacotes de entrada e saída pode ser usada para determinar o estado da conexão (por exemplo, novo, estabelecido, relacionado) entre o remetente e o receptor.
Tipos de Firewalls
Vamos discutir rapidamente os três tipos básicos de firewalls de rede: filtragem de pacotes (sem estado), stateful e de camada de aplicação.
A filtragem de pacotes, ou sem estado, os firewalls funcionam inspecionando pacotes individuais de forma isolada. Como tal, eles não têm consciência do estado da conexão e só podem permitir ou negar pacotes com base nos cabeçalhos individuais dos pacotes.
Os firewalls stateful são capazes de determinar o estado da conexão dos pacotes, o que os torna muito mais flexíveis do que os firewalls sem estado. Eles funcionam coletando pacotes relacionados até que o estado da conexão possa ser determinado antes que quaisquer regras de firewall sejam aplicadas ao tráfego.
Os firewalls de aplicação vão um passo além, analisando os dados transmitidos, o que permite que o tráfego de rede seja correspondido às regras de firewall específicas para serviços ou aplicativos individuais. Esses também são conhecidos como firewalls baseados em proxy.
Além do software de firewall, que está disponível em todos os sistemas operacionais modernos, a funcionalidade de firewall também pode ser fornecida por dispositivos de hardware, como roteadores ou dispositivos de firewall. Novamente, nossa discussão será focada em firewalls de software stateful que são executados nos servidores que eles pretendem proteger.
Regras do Firewall
Como mencionado acima, o tráfego de rede que atravessa um firewall é correspondido com base em regras para determinar se deve ser permitido ou não. Uma maneira fácil de explicar como são as regras de firewall é mostrar alguns exemplos, então faremos isso agora.
Suponha que você tenha um servidor com esta lista de regras de firewall que se aplicam ao tráfego de entrada:
- Aceitar tráfego de entrada novo e estabelecido na interface de rede pública na porta 80 e 443 (tráfego da web HTTP e HTTPS)
- Descartar tráfego de entrada dos endereços IP dos funcionários não técnicos em seu escritório para a porta 22 (SSH)
- Aceitar tráfego de entrada novo e estabelecido do intervalo de IP do seu escritório para a interface de rede privada na porta 22 (SSH)
Note que a primeira palavra em cada um destes exemplos é “aceitar”, “rejeitar” ou “descartar”. Isso especifica a ação que o firewall deve fazer no caso de um pedaço de tráfego de rede corresponder a uma regra. Aceitar significa permitir o tráfego, rejeitar significa bloquear o tráfego, mas responder com um erro “inacessível”, e descartar significa bloquear o tráfego e não enviar nenhuma resposta. O restante de cada regra consiste na condição que cada pacote é correspondido.
Como acontece, o tráfego de rede é correspondido a uma lista de regras de firewall em uma sequência, ou cadeia, do primeiro ao último. Mais especificamente, uma vez que uma regra é correspondida, a ação associada é aplicada ao tráfego de rede em questão. Em nosso exemplo, se um funcionário de contabilidade tentasse estabelecer uma conexão SSH com o servidor, eles seriam rejeitados com base na regra 2, antes mesmo que a regra 3 seja verificada. Um administrador do sistema, no entanto, seria aceito porque eles corresponderiam apenas à regra 3.
Política Padrão
É típico que uma cadeia de regras de firewall não cubra explicitamente todas as condições possíveis. Por esse motivo, as cadeias de firewall devem sempre ter uma política padrão especificada, que consiste apenas em uma ação (aceitar, rejeitar ou descartar).
Suponha que a política padrão para a cadeia de exemplo acima tenha sido definida como drop. Se algum computador fora do seu escritório tentasse estabelecer uma conexão SSH com o servidor, o tráfego seria descartado porque não corresponde às condições de nenhuma regra.
Se a política padrão fosse definida como accept, qualquer pessoa, exceto seus próprios funcionários não técnicos, seria capaz de estabelecer uma conexão com qualquer serviço aberto em seu servidor. Isso seria um exemplo de um firewall muito mal configurado porque apenas mantém um subconjunto de seus funcionários fora.
Tráfego de Entrada e Saida
Como o tráfego de rede, do ponto de vista de um servidor, pode ser de entrada ou de saída, um firewall mantém um conjunto distinto de regras para cada caso. O tráfego que se origina em outro lugar, tráfego de entrada, é tratado de forma diferente do tráfego de saída que o servidor envia. É típico para um servidor permitir a maioria do tráfego de saída porque o servidor geralmente é confiável para si mesmo. Ainda assim, o conjunto de regras de saída pode ser usado para evitar comunicações indesejadas no caso de um servidor ser comprometido por um invasor ou um executável malicioso.
Para maximizar os benefícios de segurança de um firewall, você deve identificar todas as formas pelas quais deseja que outros sistemas interajam com seu servidor, criar regras que permitam explicitamente essas interações e, em seguida, descartar todo o tráfego restante. Lembre-se de que as regras de saída apropriadas devem estar em vigor para que um servidor permita o envio de reconhecimentos de conexões de entrada apropriadas. Além disso, como um servidor geralmente precisa iniciar seu próprio tráfego de saída por diversos motivos, como baixar atualizações ou conectar-se a um banco de dados, é importante incluir esses casos em seu conjunto de regras de saída.
Escrevendo Regras de Saída
Suponha que nosso exemplo de firewall esteja configurado para descartar o tráfego de saída por padrão. Isso significa que nossas regras de entrada aceitar seriam inúteis sem regras de saída complementares.
Para complementar as regras de firewall de entrada do exemplo (1 e 3), da seção Regras de Firewall, e permitir que a comunicação adequada ocorra nesses endereços e portas, poderíamos usar estas regras de firewall de saída:
- Aceitar tráfego de saída estabelecido para a interface de rede pública na porta 80 e 443 (HTTP e HTTPS)
- Aceitar tráfego de saída estabelecido para a interface de rede privada na porta 22 (SSH)
Note que não precisamos escrever explicitamente uma regra para o tráfego de entrada que é descartado (regra de entrada 2) porque o servidor não precisa estabelecer ou reconhecer essa conexão.
Software e Ferramentas de Firewall
Agora que explicamos como os firewalls funcionam, vamos dar uma olhada nos pacotes de software comuns que podem nos ajudar a configurar um firewall eficaz. Embora existam muitos outros pacotes relacionados a firewalls, estes são eficazes e são os que você encontrará com mais frequência.
Iptables
O Iptables é um firewall padrão incluído na maioria das distribuições Linux por padrão (uma variante moderna chamada nftables começará a substituí-lo). Na verdade, é uma interface para os ganchos netfilter em nível de kernel que podem manipular o conjunto de pilha de rede do Linux. Ele funciona combinando cada pacote que atravessa a interface de rede com um conjunto de regras para decidir o que fazer.
Para aprender a implementar um firewall com iptables, confira estes links:
- Como Configurar um Firewall Usando o IPTables no Ubuntu 14.04
- Como Implementar um Modelo Básico de Firewall com Iptables no Ubuntu 14.04
- Como Configurar um Firewall Iptables para Proteger o Tráfego Entre Seus Servidores
UFW
O UFW, que significa Firewall Descomplicado, é uma interface para o iptables que visa simplificar o processo de configuração de um firewall.
Para saber mais sobre o uso do UFW, confira este tutorial: Como Configurar um Firewall com UFW em um Servidor na Nuvem Ubuntu e Debian.
FirewallD
O FirewallD é uma solução de firewall completa disponível por padrão em servidores CentOS 7. Por coincidência, o FirewallD utiliza o iptables para configurar o netfilter.
Para saber mais sobre o uso do FirewallD, confira este tutorial: Como Configurar o FirewallD para Proteger seu Servidor CentOS 7.
Se estiver a executar o CentOS 7, mas preferir usar iptables, siga este tutorial: Como migrar do FirewallD para Iptables no CentOS 7.
Fail2ban
O Fail2ban é um software de prevenção de intrusões que pode configurar automaticamente o seu firewall para bloquear tentativas de login por força bruta e ataques de DDOS.
Para saber mais sobre o Fail2ban, consulte estes links:
- Como o Fail2ban funciona para proteger serviços em um servidor Linux
- Como Proteger o SSH com o Fail2Ban no Ubuntu 14.04
- Como Proteger um Servidor Nginx com o Fail2Ban no Ubuntu 14.04
- Como Proteger um Servidor Apache com o Fail2Ban no Ubuntu 14.04
Conclusão
Agora que você entende como os firewalls funcionam, você deve procurar implementar um firewall que irá melhorar a segurança da configuração do seu servidor usando os tutoriais acima.
Se você quiser aprender mais sobre como os firewalls funcionam, confira estes links:
Source:
https://www.digitalocean.com/community/tutorials/what-is-a-firewall-and-how-does-it-work