Quando você percebe que as visitas no seu site aumentam gradativa e constantemente, você sabe que está indo no caminho certo, este comportamento positivo significa que seu conteúdo está atingindo cada vez mais pessoas, e seu produto/negócio está crescendo.

O efeito negativo disto, é o aumento de visibilidade, que faz com que você fique mais exposto a ataques, conforme seu site atrai cada vez mais pessoas, fica cada vez mais interessante para atacantes com perfis de Phishing por exemplo, se alguém chegasse a burlar seu firewall e comprometer seu site com um ataque deste tipo, todos seus clientes e potenciais clientes viram alvo de ataques também.

Neste segundo post, vou revisitar o Firewall, não porque haja esquecido de alguma coisa, o primeiro post foi uma simples introdução, porém desta vez vou mostrar como aproveitar uma ferramenta que automatiza vários aspectos do firewall, para que possamos proteger nossa informação, e garantir a segurança dos nossos clientes.

Surge então a necessidade de ter uma solução dinâmica, que entenda ataques de força bruta, identifique e bloqueie IPs se baseando no histórico de acessos, entre outras questões que, se formos atender manualmente, deveríamos ficar o dia todo na frente do console, contando a quantidade de tentativas, bloqueando manualmente cada endereço IP ou bloco de IPs, etc.

A ferramenta se chama ConfigServer Firewall (a partir de agora vamos chamar de CSF), basicamente (muito basicamente), nada mais é do que um conjunto de scripts que vão automatizar todas estas operações tediosas que compõem a gestão do seu firewall.

O primeiro que vamos entender é a instalação do CSF, que é muito simples. É um script que verifica algumas situações para ajustar a instalação e configuração de acordo com o que está instalado. O script vai verificar se no seu servidor já foi instalado o cPanel ou WebMin, e efetuará ajustes para que o CSF se integre de maneira transparente com o software já instalado no server.

Instalação

Começamos com os comandos necessários para efetuar a instalação:

cd /usr/src
rm -fv csf.tgz
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

O script de instalação vai trazer todos os pacotes e resolverá todas as dependências, e executará o CSF. É importante ressaltar que se você está instalando via SSH, não precisa se preocupar como ficar de fora do server, o script irá analisar as configurações do SSH e habilitará a porta, além de colocar na lista de IPs conhecidos o IP que da sessão conectada (Ainda bem, né?)

Configuração básica

Após a instalação, temos um firewall dinâmico superpoderoso rodando no nosso servidor, e agora? Neste ponto o CSF está rodando no default, as configurações são setadas no arquivo de configuração /etc/csf/csf.conf, as portas disponíveis por default são as seguintes:

TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995"
TCP_OUT = "20,21,22,25,53,80,110,113,443"
UDP_IN = "20,21,53"
UDP_OUT = "20,21,53,113,123"

Quando o CSF detecta software compatível com ele, esta lista pode ser maior, porque serão acrescentadas as portas de cada software detectado. Se você quiser, pode colocar outras portas nesta configuração, abaixo estão as portas mais comuns:

Acesso Web:

TCP_IN: "80,443"

Conexões FTP:

TCP_IN: "20,21"
TCP_OUT: "20,21"
UDP_IN: "20,21"
UDP_OUT:"20,21"

Conexões de e-mail:

TCP_IN: "25,110,143,587,993,995"
TCP_OUT: "25,110"

Conexão de Banco MySQL (depende também da liberação no banco de dados)

TCP_IN: "3306"
TCP_OUT: "3306"

Com as opções de acesso bem definidas, vamos ver algumas configurações mais avançadas, começando com a filtragem de tráfego que talvez não seja bom receber:

ICMP_IN na opção 1 aceita requisições de ICMP (o velho e querido PING), e na opção 0 as rejeitadas. Quando hospedamos serviços para terceiros, é interessante aceitar estas requisições, porque nossos clientes, e até nós mesmos podemos ter interesse em monitorar o servidor.

ICMP_IN_LIMIT esta opção configura até quantas requisições ICMP vamos responder (por origem), normalmente não é preciso mexer com o default (1 por segundo ou 1/s).

DENY_IP_LIMIT aqui podemos definir até quantos IPs vamos monitorar nos bloqueios, este limite existe porque se houver milhares de IPs no arquivo Deny, o sistema terá que gastar muito processamento para bloquear todos os endereços listados.

DENY_TEMP_IP_LIMIT mesma configuração que a opção anterior, porém para bloqueios temporários.

PACKET_FILTER Filtra pacotes inválidos ou ilegais.

SYNFLOOD / SYNFLOOD_RATE / SYNFLOOD_BURST estas configurações protegem de ataques do SYN Flooding, porém só devem ser habilitadas se você tiver certeza que está sofrendo um ataque do tipo.

CONNLIMIT limita a quantidade de configurações que podem ser atendidas por cada porta, por exemplo:

CONNLIMIT = "22;10;443;20;80;20"

Esta configuração define que a porta 22 (SSH) aceitará até 10 conexões, a 443 (HTTPS) aceitará até 20 e a 80 (HTTP) até 20 também.

PORTFLOOD limita o número de conexões estabelecidas em cada porta por cada IP e bloqueia IPs que excedam este limite por um intervalo de tempo definido, pode ser configurado da seguinte maneira:

PORTFLOOD = "443;tcp;5;10"

Digamos que o IP 123.123.123.123 abre 5 conexões ou mais em 10 segundos, o IP será banido, e o sistema aguardará outros 10 segundos de “silencio” para liberar o IP novamente, tem que ajustar este parâmetro com cuidado porque pode entrar em loop e causar dores de cabeça.

O CSF tem muitas outras funcionalidades que não serão incluídas aqui. As opções default já atenderão a maioria das necessidades.

Aplicando as Configurações

Assim que concluirmos todas as configurações, devemos aplicar as mudanças, para isto executaremos o seguinte comando:

csf -r

Após recarregar as configurações e fazer uma rodada de testes para garantir que tudo está funcionando conforme esperado, podemos desativar o modo de teste do firewall, e aplicar definitivamente as configurações da seguinte maneira:

vi /etc/csf/csf.conf

Localize a linha TESTING = “1” e mudar para “0”, para que fique da seguinte maneira:

TESTING = "0"

Novamente precisamos recarregar as configurações do CSF:

csf -r

Listas de Bloqueio ou Exclusão

Para bloquear IPs, basta executar o seguinte comando:

csf -d 123.123.123.123 #IP de Fulano

Alternativamente, podemos popular o arquivo “/etc/csf/csf.deny” com uma lista de IPs e blocos CIDR que precisemos bloquear. Permitir IPs é igual de simples,

csf -a 123.123.123.123 #IP de Fulano

Alternativamente, podemos popular o arquivo “/etc/csf/csf.allow” com uma lista de IPs e blocos CIDR que precisemos bloquear.

Existem situações onde precisamos ignorar o tráfego vindo de algum IP confiável, para isto não há um comando (alias) porque é uma operação muito sensível, caso precise disto, devemos colocar os IPs necessários no arquivo “/etc/csf/csf.ignore”.

Atalhos

Por último, seguem alguns atalhos para facilitar a nossa vida.

Para verificar se um IP especifico está bloqueado no nosso firewall, podemos usar o grep interno do CSF:

csf -g 123.123.123.123

Para remover do bloqueio o IP em questão:

csf -tr 123.123.123.123 # Remove dos bloqueios temporários
csf -dr 123.123.123.123 # Remove dos bloqueios permanentes

Para permitir um IP permanentemente:

csf -a 123.123.123.123 # Coloca no /etc/csf/csf.allow

Para remover todos os bloqueios temporários:

csf -tf

Por enquanto é isso, fique atento aos próximos releases desta série de artigos sobre segurança, obrigado pela leitura!