Tudo bem, eu não recebi nenhuma resposta boa e foi preciso tentativa e erro, além de monitoramento para determinar o que funciona para isso.
Eu descobri que algumas coisas eram necessárias, então o exemplo acima pode não funcionar em todos os sistemas porque um caminho completo deve ser usado nos executáveis. Além disso, ao especificar um intervalo de portas, você precisa adicionar em --match multiport caso contrário, ele irá ignorar completamente a regra. Por último, eu adicionei em um shebang no topo para garantir que o script será executado corretamente pelo shell.
Então aqui está a versão final:
/usr/local/csf/bin/csfpre.sh
#!/bin/sh
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p all -s 60.168.112.0/20 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 1.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 112.0.0.0/7 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 116.96.0.0/12 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 116.118.0.0/16 -j DROP
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26,110,465,587,995 -s 117.0.0.0/8 -j DROP
Agora, para o detalhamento do que está acontecendo neste servidor cPanel com o CSF instalado para um firewall.
-
O CSF permite adicionar regras personalizadas que são executadas em grupos separados. Todos os grupos são executados pelo iptables. Primeiro, csfpre.sh, depois CSF, depois csfpost.sh.
-
Crie um arquivo csfpre.sh se ele não existir. Você pode colocar isso na pasta / etc / em algum lugar também, mas sempre terá a versão em / usr / local / csf / bin / com prioridade.
-
Adicione a shebang no topo:
! / bin / sh
-
Meu plano é fazer algum bloqueio de porta via csfpre.sh, mas em vez de executar todas as regras, primeiro ele detecta se a conexão é para uma visita à página da web. Ao verificar isso primeiro, reduz o tempo de latência / resposta.
As portas 80 e 443 são para os protocolos HTTP e HTTPS, antes de mais nada, se a entrada for para qualquer uma dessas portas, ACCEPT e pare de verificar regras para este grupo csfpre:
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
-
Agora, poderíamos bloquear totalmente todas as outras portas, exceto 80 e 443, se a próxima linha for assim:
/ sbin / iptables -A INPUT -p all -s 60.168.112.0/20 -j DROP
Como todo o tráfego da web já é aceito, isso não bloqueará o tráfego do website para esse intervalo. Se essa linha chegasse primeiro, bloquearia todo o tráfego, incluindo o tráfego da web. Não quero impedir que usuários bons visualizem sites bloqueando toda a sub-rede em que estão.
- Se o bloqueio for reduzido a portas específicas, poderemos bloquear uma porta específica, um intervalo, uma lista ou uma combinação desses.
Para bloquear apenas o FTP:
/sbin/iptables -A INPUT -p tcp --dport 21 -s 1.0.0.0/8 -j DROP
O FTP na verdade usa algumas portas diferentes para estabelecer uma conexão, e também há SFTP / SSH que normalmente é a porta 22, então é melhor bloquear um intervalo usando a porta inicial separada por dois pontos e depois a porta final:
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26 -s 1.0.0.0/8 -j DROP
Você deve usar o multiport --match se você estiver usando um intervalo ou uma lista. As listas não podem ter mais de 15 portas, e cada porta em um intervalo conta contra o total de 15 portas.
Você também pode bloquear as portas de e-mail SMTP padrão:
/sbin/iptables -A INPUT -p tcp --match multiport --dport 110,465,587,995 -s 117.0.0.0/8 -j DROP
E, de fato, você pode usar intervalos em sua lista para bloquear as portas de FTP e de e-mail em uma regra:
/sbin/iptables -A INPUT -p tcp --match multiport --dport 21:26,110,465,587,995 -s 117.0.0.0/8 -j DROP
-
Salve seu script e reinicie o firewall.
-
Permita que o CSF e o cpHulk bloqueiem endereços IP individuais conforme necessário.
Você pode usar seu smartphone sem usar sua conexão local para testar. Obtenha o endereço IP do seu telefone e verifique se ele não é o mesmo que o computador do qual você trabalhará. Você pode então percorrer todos os cenários, supondo que você tenha o telefone configurado para verificar ou enviar e-mail através do seu servidor e um programa de FTP também.
Para o bloqueio, decidi impedir que sub-redes inteiras acessem o FTP e, para algumas, o SMTP. Para reduzi-lo, analisei todos os alertas recebidos e comparei as piores sub-redes com os países listados neste site: link
O objetivo final é reduzir o número de IPs individuais bloqueados pelo CSF. Bloquear milhares de IPs pode causar um problema de latência, portanto, ter algumas regras padrão para bloquear países repletos de usuários mal-intencionados reduz a necessidade de gerenciar um número tão grande de IPs individuais.
Para recalcular intervalos de sub-rede válidos, use esta ferramenta: link
112.0.0.0/7 expande 112.0.0.0 para 113.255.255.255 , mas 111.0.0.0/7 é um bloqueio inválido, portanto, seria 110.0.0.0 para 111.255.255.255 . É importante que você verifique seus intervalos de sub-rede para que você não acabe bloqueando os IPs errados.