Bloquear ataques DDoS com bloqueio de range de IPs e avisar por e-mail
Publicado por marcio mendes mendes (última atualização em 09/12/2015)
[ Hits: 10.264 ]
Homepage: https://www.conectadohost.com
Olá amigos do VOL, trago para vocês um excelente script desenvolvido por mim para bloquear ataques DDos.
Nosso script fará o bloqueio de todo o range de IPs, dessa forma não será necessário ficar bloqueando ip por ip. O bloqueio será feito pelo iptables, é uma ótima ferramenta, claro que se o ataque for bem distribuído serão necessárias outras ferramentes, mas mesmo que seja um ataque com vários ips, certamente não conseguirá atacar com o mesmo range de ips, pois o bloqueio será feito pelo range.
Nosso sistema será construído em 2 etapas:
- na primeira será um script para verificar as conexões e a segunda etapa será responsável por bloquear o ip e todo seu range.
O script que verifica as conexões chamamos de block-ddos.sh e o script que fará o bloqueio será bloqueando-ddos.sh.
Em nosso exemplo o bloqueio se dará quando um determinado ip tiver mais de 250 conexões no servidor. Quando isso ocorrer o ip e todo seu range serão bloqueados e o administrador será informado por e-mail, conforme exemplo abaixo:
O Ip 192.168.1.1 Tem 269 Conexões E Está Conectado Nas Portas Abaixo
O IP 192.168.1.1 Foi Bloqueado Por Questões De Segurança
1 tcp 0 0 192.168.1.2:80 192.168.1.1:32783 TIME_WAIT -
1 tcp 0 0 192.168.1.2:80 192.168.1.1:33286 TIME_WAIT -
1 tcp 0 0 192.168.1.2:80 192.168.1.1:33287 TIME_WAIT -
Obs.: em nosso exemplo o ip 192.168.1.2 fica sendo o ip do servidor e o ip 192.168.1.1 fica sendo o ip do atacante apenas como exemplo não usamos os ips reais por questões de privacidades.
Antes de instalar o script é necessário criar os seguintes arquivos:
echo -n > /home/pega-ddos.txt
echo -n > /home/pega-ddos2.txt
echo -n > /home/result2.txt
echo -n > /home/result-ddos.txt
echo -n >/home/meus-ips.txt
Obs.: dentro do arquivo meus-ips.txt coloque todos os ips do seu servidor. Supondo que o ip do seu servidor seja 192.168.1.1, coloque da seguinte forma: ip 192.168.1.1 e desse modo 192.168.1.0/24, isso é para que não bloqueie o ip do seu servidor, pois muitas vezes o Apache pode ter varias conexões vindas do próprio ip.
Criar o cron para executar somente um script a cada minuto, ou o tempo que achar necessário.
*/1 * * * * /bin/bloqueando-ddos.sh
E como bônus fiz um terceiro script de regras para DDos. Esse script para regras DDos deve ser executado somente uma vez, para inserir as regras em seu iptables.
Primeiro script block-ddos.sh responsavel por verificar as conexões
#!/usr/bin/perl
# attackers 2, with ipv6 support.
# output connection information from netstat
#
use strict;
sub run {
my @netstat = `netstat -pant`;
my $portcheck = $ARGV[0];
if ( $portcheck =~ /^[0-9]+$/ ) {
my %ports;
my %ips;
foreach (@netstat) {
my ($port, $ip);
if ( /^tcp\s+\d\s+\d\s+[0-9\.|0-9A-Za-z\.:]+:${portcheck}\s+([0-9\.|0-9A-Za-z\.:]+):/ ) {
chomp;
$ip = $1;
if ( $ip !~ /^::$/ ) {
$ips{$ip}++;
}
}
}
my $count;
print "[+] Highest connections on port $portcheck\n";
foreach my $number ( sort {$ips{$b} <=> $ips{$a}} keys %ips ) {
if ( $count <= 10 ) {
if ($number) {
print "\t$ips{$number} $number\n";
$count++;
}
}
}
my $total;
foreach my $key ( keys %ips ) {
if ($key) {
$total += $ips{$key};
}
}
print "\n[+] TOTAL: $total\n";
} else {
my %ports;
my %ips;
foreach (@netstat) {
my ($port, $ip);
if ( /^tcp\s+\d\s+\d\s+[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}:([0-9]+)\s+([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}):[0-9]+\s+/ ) {
chomp;
$port = $1;
$ip = $2;
} elsif ( /^tcp\s+\d\s+\d\s+[0-9\.|0-9A-Za-z\.:]+:([0-9]+)\s+([0-9\.|0-9A-Za-z\.:]+):[0-9]+\s+/ ) {
chomp;
$port = $1;
$ip = $2;
}
$ports{$port}++;
$ips{$ip}++;
}
my $count;
print "[+] Número de Conexões por IP:\n";
foreach my $number ( sort {$ips{$b} <=> $ips{$a}} keys %ips ) {
if ( $count <= 10 ) {
if ($number) {
print "\mk $ips{$number} jk $number\n";
$count++;
}
}
}
}
}
run();
Segundo script responsável por bloquear os ips
#!/bin/bash
SHELL=/bin/sh
PATH=/sbin:/usr/sbin:/usr/bin:/bin
rm /home/pega-ddos.txt -f
let linhas=`block-ddos.sh |wc -l`-1
block-ddos.sh|tail -$linhas|sed 's/%//'|sed 's/G//g'|
while read Tam mk jk
do
echo $jk $mk
if [ "$mk" -gt "250" ]
then
echo " $jk " >> /home/pega-ddos.txt
sed 's/[^0-9.]//g' /home/pega-ddos.txt > /home/pega-ddos2.txt
MMM="`cat /home/pega-ddos2.txt` "
netstat -anp | grep $MMM | sort | uniq -c | sort -n > /home/result2.txt
RESUL2=" `cat /home/result2.txt` "
MOSTRA=" `cat /home/pega-ddos2.txt` "
echo -e " O Ip $MOSTRA Tem $mk Conexões E Está Conectado Nas Portas Abaixo \n \n O IP $MOSTRA Foi Bloqueado Por Questões De Segurança \n \n$RESUL2\n" >> /home/result-ddos.txt
sed -i 's/\(\w.*\)\.\(\w.*\)\.\(\w.*\)\.\(\w.*\)/\1.\2.\3.0\/24/' /home/pega-ddos2.txt
for ACCT in `cat /home/pega-ddos2.txt` ; do iptables -I INPUT -s $ACCT -j DROP ; done && echo "ips bloqueados com sucesso" && for ACCT in `cat /home/meus-ips.txt` ; do iptables -D INPUT -s $ACCT -j DROP ; done && echo "ips Desbloqueados com sucesso"
echo -e | cat /home/result-ddos.txt | mail -s " IPS TENTANDO ATACAR COM DDOS " coloque seu email aqui && echo -n > /home/result2.txt && echo -n > /home/result-ddos.txt && echo -n > /home/pega-ddos2.txt
fi
done
script bonus para regras DDos
echo " Adicionando Regras Iptables para proteção "
###### Protege contra synflood
iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -p tcp --syn -j DROP
iptables -A INPUT -m state --state INVALID -j DROP
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
###### Protecao contra ICMP Broadcasting
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
###### Prote.. Contra IP Spoofing
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
###### Protecao diversas contra portscanners, ping of death, ataques DoS, pacotes danificados e etc.
iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -i eth1 -p icmp --icmp-type echo-reply -m limit --limit 1/s -j DROP
iptables -A FORWARD -p tcp -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
iptables -A FORWARD --protocol tcp --tcp-flags ALL SYN,ACK -j DROP
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -N VALID_CHECK
iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags ALL ALL -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags ALL FIN -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A VALID_CHECK -p tcp --tcp-flags ALL NONE -j DROP
echo ""
echo " Regras Anti DDOS Adicionadas com sucesso"
mkzeowmp - zeo mount point para PZP (python, zope e plone)
Free VPN - download de VPNs do vpnbook.com
Adicionar/Deletar Usuarios Samba/Sistema
Script que gera um relatório diário do sistema!!!
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
Problemas com Driver NVIDIA (0)
Programa fora de escala na tela do pc (19)
Fedora KDE plasma 42 X Módulo de segurança BB (Warsaw-2) (1)









