Segurança · 10 min read · Dec 02, 2025

Aprimorando o Servidor Perfeito - Debian Squeeze [ISPConfig 3] - Página 5

11. Fortalecendo seu sistema

Primeiramente, certifique-se de que você definiu o nível de segurança como Alto, na Configuração do Servidor - Web (aba) do painel ISPConfig3.

As seguintes instruções são apenas uma demonstração. Por favor, compreenda-as completamente (lendo a documentação na Internet) antes de aplicá-las e usá-las.

Em geral, se você segui-las, pode limitar a taxa de tráfego em portas específicas, reduzir conexões SYN e prevenir intrusões que utilizam pacotes ruins conhecidos. Para aplicá-las, crie a pasta /root/scripts (se não existir) e os seguintes 5 arquivos. (loadfw, unloadfw, IPs, fwrules e reloadfail2ban). O primeiro conterá o script para carregar as regras, o segundo o script para descarregar as regras, o terceiro conterá os IPs e redes “RUINS”, o quarto as regras personalizadas e o quinto alguns comandos para recarregar tudo (incluindo fail2ban).

mkdir /root/scripts  
touch /root/scripts/loadfw  
touch /root/scripts/unloadfw  
touch /root/scripts/IPs  
touch /root/scripts/fwrules  
touch /root/scripts/reloadfail2ban  
cd /root/scripts  
nano loadfw

Cole o seguinte:

#!/bin/bash  
# Script simples de carregamento de IP/sub-rede do iptables  
# ----------------------------------------------------------  

cd /root/scripts/  

IPT=/sbin/iptables  
DROPMSG="fwBLOCKED "  
BADIPS=$(egrep -v -E "^#|^$" /root/scripts/IPs)  
  
while read fwrule  
do  
  $IPT -I INPUT $fwrule  
  
done < /root/scripts/fwrules  
  
for ipblock in $BADIPS  
do  
   $IPT -I INPUT -s $ipblock -j DROP  
   $IPT -I INPUT -s $ipblock -j LOG --log-prefix "$DROPMSG"  
done  

Edite unloadfw:

nano unloadfw

Cole o seguinte:

#!/bin/bash  
# Script simples de descarregamento de IP/sub-rede do iptables  
# ---------------------------------------------------------  
  
cd /root/scripts/  
  
IPT=/sbin/iptables  
DROPMSG="fwBLOCKED "  
BADIPS=$(egrep -v -E "^#|^$" /root/scripts/IPs)  
  
while read fwrule  
do  
  $IPT -D INPUT $fwrule  
  
done < /root/scripts/fwrules  
for ipblock in $BADIPS  
do  
   $IPT -D INPUT -s $ipblock -j DROP  
   $IPT -D INPUT -s $ipblock -j LOG --log-prefix "$DROPMSG"done

Edite IPs:

nano IPs

Cole os IPs incômodos (por exemplo, IPs banidos várias vezes pelo fail2ban) ou redes inteiras. Você pode adicionar aqui IPs ou redes a qualquer momento, mas antes de fazer qualquer modificação (especialmente se você remover algo) você deve executar “/root/scripts/unloadfw”. Depois, você pode editar o arquivo, inserindo IPs ou redes e finalmente você deve executar “/root/scripts/loadfw” (veja abaixo)

#IP  
x.y.z.w  
x.q.a.r  
  
#redes  
d.r.t.h/24  
  
#servidores de email  
a.g.h.j

(Você pode usar http://www.countryipblocks.net para ver as redes associadas a cada país). Edite fwrules:

nano fwrules

Cole o seguinte (e qualquer outra coisa que possa ser inserida (-I) ou deletada (-D) na cadeia INPUT. As regras são para servidores com uma única interface de rede (eth0). Por favor, altere-as para atender às suas necessidades (por exemplo, mude eth0 se sua interface de rede for diferente).

-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50022 -j DROP  
-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50022 -j LOG --log-prefix "LMfwport50022"  
-p tcp --dport 50022 -i eth0 -m state --state NEW -m recent --set --name fw50022  
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50000 -j DROP  
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50000 -j LOG --log-prefix "LMfwport50000"  
-p tcp --dport 50000 -i eth0 -m state --state NEW -m recent --set --name fw50000  
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw10000 -j DROP  
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw10000 -j LOG --log-prefix "LMfwport10000"  
-p tcp --dport 10000 -i eth0 -m state --state NEW -m recent --set --name fw10000  
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw25 -j DROP  
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw25 -j LOG --log-prefix "LMfwport25"  
-p tcp --dport 25 -i eth0 -m state --state NEW -m recent --set --name fw25  
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw110 -j DROP  
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw110 -j LOG --log-prefix "LMfwport110"  
-p tcp --dport 110 -i eth0 -m state --state NEW -m recent --set --name fw110  
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw50443 -j DROP  
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw50443 -j LOG --log-prefix "LMfwport50443"  
-p tcp --dport 50443 -i eth0 -m state --state NEW -m recent --set --name fw7443  
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw22 -j DROP  
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw22 -j LOG --log-prefix "LMfwport22"  
-p tcp --dport 22 -i eth0 -m state --state NEW -m recent --set --name fw22  
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw20 -j DROP  
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw20 -j LOG --log-prefix "LMfwport20"  
-p tcp --dport 20 -i eth0 -m state --state NEW -m recent --set --name fw20  
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw21 -j DROP  
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw21 -j LOG --log-prefix "LMfwport21"  
-p tcp --dport 21 -i eth0 -m state --state NEW -m recent --set --name fw21  
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 20 --name fw143 -j DROP  
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 20 --name fw143 -j LOG --log-prefix "LMfwport143"  
-p tcp --dport 143 -i eth0 -m state --state NEW -m recent --set --name fw143  
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw53 -j DROP  
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw53 -j LOG --log-prefix "LMfwport53"  
-p tcp --dport 53 -i eth0 -m state --state NEW -m recent --set --name fw53  
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw443 -j DROP  
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw443 -j LOG --log-prefix "LMfwport443"  
-p tcp --dport 443 -i eth0 -m state --state NEW -m recent --set --name fw443  
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --rcheck --seconds 30 --hitcount 20 --name fw8081 -j DROP  
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --update --seconds 30 --hitcount 20 --name fw8081 -j LOG --log-prefix "LMfwport8081"  
-p tcp --dport 8081 -i eth0 -m state --state NEW -m recent --set --name fw8081  
-p icmp -j DROP  
-p icmp -m limit --limit 2/s -j ACCEPT  
-p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j DROP  
-p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j LOG --log-prefix "BLfwsyn80"  
-p tcp --syn --dport 443 -m connlimit --connlimit-above 25 -j DROP  
-p tcp --syn --dport 443 -m connlimit --connlimit-above 25 -j LOG --log-prefix "BLfwsyn443"  
-p tcp --syn --dport 50443 -m connlimit --connlimit-above 25 -j DROP  
-p tcp --syn --dport 50443 -m connlimit --connlimit-above 25 -j  LOG --log-prefix "BLfwsyn50443"  
-p tcp --syn --dport 50022 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 50022 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn50022"  
-p tcp --syn --dport 22 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 22 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn22"  
-p tcp --syn --dport 50000 -m connlimit --connlimit-above 15 -j DROP  
-p tcp --syn --dport 50000 -m connlimit --connlimit-above 15 -j LOG --log-prefix "BLfwsyn50000"  
-p tcp --syn --dport 10000 -m connlimit --connlimit-above 15 -j DROP  
-p tcp --syn --dport 10000 -m connlimit --connlimit-above 15 -j LOG --log-prefix "BLfwsyn10000"  
-p tcp --syn --dport 25 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 25 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn25"  
-p tcp --syn --dport 20 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 20 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn20"  
-p tcp --syn --dport 21 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 21 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn21"  
-p tcp --syn --dport 110 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 110 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn110"  
-p tcp --syn --dport 143 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 143 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn143"  
-p tcp --syn --dport 53 -m connlimit --connlimit-above 10 -j DROP  
-p tcp --syn --dport 53 -m connlimit --connlimit-above 10 -j LOG --log-prefix "BLfwsyn53"  
-i eth0 -p tcp --tcp-flags ALL ALL -j DROP  
-i eth0 -p tcp --tcp-flags ALL ALL -j LOG --log-level 4 --log-prefix "FLAAfw"  
-i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP  
-i eth0 -p tcp --tcp-flags ALL FIN,URG,PSH -j LOG --log-level 4 --log-prefix "FINGfw"  
-i eth0 -f -j DROP  
-i eth0 -f  -m limit --limit 6/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "FRAGfw"  
-i eth0 -p tcp --tcp-flags ALL NONE -j DROP  
-i eth0 -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULLfw"  
-i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP  
-i eth0 -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMASfw"  
-i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j DROP  
-i eth0 -p tcp --tcp-flags SYN,RST SYN,RST -j LOG --log-level 4 --log-prefix "SYNRTSfw"  
-i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP  
-i eth0 -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j LOG --log-level 4 --log-prefix "SYNRTSACKfw"  
-i eth0 -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP  
-i eth0 -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j LOG --log-level 4 --log-prefix "SYNRTSYNSfw"  
-i eth0 -p tcp ! --syn -m state --state NEW -j DROP  
-i eth0 -p tcp ! --syn -m state --state NEW  -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "DROSYNCfw"

Edite reloadfail2ban:

nano reloadfail2ban

Cole o seguinte:

#!/bin/bash  
  
/etc/init.d/fail2ban restart  
sleep 2  
/root/scripts/unloadfw  
sleep 2  
/root/scripts/loadfw

Tenha em mente que o script reloadfail2ban apenas descarrega as regras personalizadas em fwrules, reinicia o fail2ban e carrega as regras em fwrules novamente. Ele não faz uma reinicialização completa do firewall. Portanto, antes de editar as regras neste arquivo (ou no arquivo IPs), descarregue-as com unloadfw. O papel do reloadfail2ban é testar a funcionalidade do fail2ban.

Finalmente, execute:

chmod 700 reloadfail2ban  
chmod 700 unloadfw  
chmod 700 loadfw  
/root/scripts/reloadfail2ban

Se você quiser que as regras personalizadas sejam carregadas após cada reinicialização, cole a linha: /root/scripts/loadfw no final de /etc/init.d/rc.local:

nano /etc/init.d/rc.local

e acrescente:

[...]  
/root/scripts/loadfw

(D)DoS Deflate é um script leve de shell bash projetado para ajudar no processo de bloqueio de um ataque de negação de serviço. Ele cria uma lista de endereços IP conectados ao servidor, juntamente com seu número total de conexões. É uma das soluções mais simples e fáceis de instalar a nível de software.

Endereços IP com mais de um número pré-configurado de conexões são automaticamente bloqueados no firewall do servidor, que pode ser iptables direto ou Advanced Policy Firewall (APF). Para instalar (D)DoS Deflate:

cd /tmp  
wget http://www.inetbase.com/scripts/ddos/install.sh  
chmod 0700 install.sh  
./install.sh

Edite /usr/local/ddos/ddos.conf e aplique as seguintes alterações que desativarão o firewall APF e usarão iptables simples, enviarão eventos por e-mail para root e bloquearão IPs com mais de 100 conexões por minuto.

[...]  
APF_BAN=0  
EMAIL_TO="root"  
NO_OF_CONNECTIONS=100  
[...]  

As acima são apenas uma série de sugestões. Você pode ampliá-las como desejar.

A implementação é apenas uma abordagem de muitas. Você pode usar uma solução de firewall como APF, Shorewall etc. Eu ficaria feliz em incluir mais abordagens diferentes em conjunto com esta.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.