Guia do csf.conf: portas, modo de teste, bloqueio por senha errada, proteção contra flood, listas allow e deny e bloqueio por país no firewall CSF.
Toda a configuração do CSF fica no arquivo /etc/csf/csf.conf. Você pode editá-lo de dois jeitos: pela tela WHM » Plugins » ConfigServer Security & Firewall » Firewall Configuration (cada opção tem a explicação ao lado e o botão Change no fim) ou direto no arquivo, pelo SSH. Nos dois casos, as mudanças só valem depois de reiniciar:
csf -ra
Se o CSF ainda não está instalado, comece pelo guia de como instalar o CSF.
Antes de começar
- Faça uma cópia do arquivo:
cp -a /etc/csf/csf.conf /root/csf.conf.$(date +%F). - Deixe o seu IP liberado:
csf -a 203.0.113.50 "meu IP"(descubra o seu em pophosting.com.br/meu-ip). - Tenha um acesso de emergência (console do provedor), caso uma regra corte o SSH.
Modo de teste: TESTING e TESTING_INTERVAL
Com TESTING = "1", o CSF agenda uma limpeza de todas as regras a cada TESTING_INTERVAL minutos (o padrão é 5). Se você se trancar fora, basta esperar. A contrapartida é grande: nesse modo o lfd não roda, então ninguém é bloqueado. Ajuste as portas, confirme que tudo funciona e passe para TESTING = "0".
Portas abertas: TCP_IN, TCP_OUT, UDP_IN e UDP_OUT
São listas de portas separadas por vírgula. Faixas usam dois pontos (49152:65534). Numa instalação nova, a lista de entrada vem assim:
TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,853,993,995,2077,2078,2079,2080,2082,2083,2086,2087,2095,2096,8443"
- Feche o que você não usa. Sem FTP, tire 20 e 21. Sem DNS no servidor, tire 53 de
TCP_INeUDP_IN. - Mudou a porta do SSH? Adicione a porta nova, reinicie, teste a conexão numa segunda janela e só então retire a 22. O passo a passo está em como alterar a porta do SSH.
- FTP passivo precisa de uma faixa de portas própria. Veja FTP com firewall CSF.
- IPv6: se o servidor tem IPv6, ligue
IPV6 = "1"e mantenhaTCP6_INeTCP6_OUTcoerentes com as listas IPv4.
A lista completa das portas de cada serviço do painel está em portas usadas pelo cPanel.
Ping: ICMP_IN e ICMP_IN_RATE
ICMP_IN = "1" permite que o servidor responda ao ping. Não desligue: monitores de disponibilidade dependem dele. ICMP_IN_RATE = "1/s" limita a um ping por segundo por IP. Se o seu monitoramento acusa perda de pacotes que não existe, aumente o valor (por exemplo, "5/s") ou use "0" para tirar o limite.
Bloqueio por senha errada (lfd)
Com LF_TRIGGER = "0", que é o padrão, cada serviço tem o próprio limite de falhas dentro da janela LF_INTERVAL (3600 segundos):
| Opção | Serviço | Padrão |
|---|---|---|
LF_SSHD | SSH | 5 |
LF_FTPD | FTP | 10 |
LF_SMTPAUTH | envio de e-mail autenticado | 5 |
LF_POP3D e LF_IMAPD | leitura de e-mail | 10 |
LF_CPANEL | login no cPanel e no WHM | 5 |
LF_MODSEC | disparos do ModSecurity | 5 |
Cada uma tem o par _PERM (por exemplo, LF_SSHD_PERM): "1" bloqueia para sempre; um número maior, como "3600", bloqueia por esse tempo em segundos. Em servidor de hospedagem compartilhada, bloqueios temporários no e-mail e no FTP evitam que um cliente com senha velha no celular fique bloqueado para sempre.
LF_PERMBLOCK = "1" transforma em permanente o IP que levou mais de LF_PERMBLOCK_COUNT bloqueios temporários (4) em LF_PERMBLOCK_INTERVAL (86400 segundos).
Tamanho das listas de bloqueio: DENY_IP_LIMIT e LF_IPSET
DENY_IP_LIMIT (padrão 200) é o máximo de IPs no csf.deny; ao chegar no limite, os mais antigos saem. DENY_TEMP_IP_LIMIT (100) faz o mesmo com os temporários. Há uma troca aqui: limite baixo faz um atacante antigo voltar mais rápido; limite alto deixa o servidor exposto a quem forja linhas de log para provocar bloqueios em massa (a própria documentação do CSF recomenda valores baixos por isso). Se precisar de listas grandes, instale o ipset (dnf install ipset), ligue LF_IPSET = "1" e só então aumente o limite. Sem ipset, milhares de regras soltas no iptables deixam a rede lenta.
Proteção contra flood e conexões em excesso
- CONNLIMIT limita conexões novas simultâneas por IP numa porta. Formato
porta;limite. Exemplo:CONNLIMIT = "22;5,80;50". - PORTFLOOD limita conexões por intervalo de tempo. Formato
porta;protocolo;conexões;segundos. Exemplo:PORTFLOOD = "22;tcp;5;300"bloqueia na porta 22 quem abrir mais de 5 conexões em 300 segundos. Mantenha o número de conexões abaixo de 20, que é o máximo que o módulo do kernel consegue contar. - CT_LIMIT conta todas as conexões de cada IP e bloqueia quem passar do limite (veja
CT_INTERVAL,CT_PORTSeCT_BLOCK_TIME). Comece alto, perto de 300, e observe: FTP, IMAP e sites com muitos arquivos abrem muitas conexões legítimas. - SYNFLOOD só deve ser ligado durante um ataque de SYN flood, porque ele desacelera as conexões novas de todo mundo.
Rode perl /etc/csf/csftest.pl antes: CONNLIMIT e PORTFLOOD dependem de módulos que podem faltar em VPS de contêiner.
Listas: csf.allow, csf.deny e csf.ignore
/etc/csf/csf.allow: IPs e faixas (CIDR, como203.0.113.0/24) sempre liberados no firewall. Um por linha, com comentário depois de#./etc/csf/csf.deny: bloqueios permanentes. Se o comentário da linha contiverdo not delete, o CSF não remove esse IP quando a lista atingir o limite./etc/csf/csf.ignore: IPs que o lfd nunca bloqueia, como o do seu escritório ou o do seu monitoramento. Estar nocsf.allownão basta para isso.
Pela linha de comando, prefira csf -a, csf -d e csf -dr, que já aplicam a regra na hora.
Bloqueio por país: CC_DENY e CC_ALLOW_PORTS
CC_DENY = "XX,YY" bloqueia países inteiros pelo código de duas letras. Uma alternativa mais fina é deixar o SSH aberto só para o Brasil: retire a porta do SSH de TCP_IN, ponha CC_ALLOW_PORTS = "BR" e a porta em CC_ALLOW_PORTS_TCP. Com CC_SRC = "2" (padrão) as bases de países são baixadas sem cadastro; o valor "1" usa a MaxMind e exige uma chave em MM_LICENSE_KEY. Listas de países grandes também pedem LF_IPSET = "1".
Alertas por e-mail
LF_ALERT_TO define para quem vão os avisos do lfd. Vazio, eles vão para o root do servidor. Os detalhes estão em alertas de e-mail do CSF e do lfd.
Problemas comuns
Mudei a configuração e nada aconteceu
Faltou reiniciar com csf -ra, ou o CSF está desligado (existe o arquivo /etc/csf/csf.disable; religue com csf -e).
Um cliente diz que foi bloqueado e não errou a senha
Rode csf -g IP-DO-CLIENTE. A saída mostra a regra e o motivo. O caso mais comum é um celular ou um Outlook insistindo com a senha antiga do e-mail. Para clientes da POP, o desbloqueio está em como liberar o IP pela Área do Cliente.