Jump to content
Facebook Whatsapp Twitter Youtube

Filtro AntiDDos [Perl] Resposta rápida


deprox
 Share

Recommended Posts

  • 7 months later...

Este script em Perl é uma implementação básica de um servidor que monitora e bloqueia IPs com base no número de conexões feitas a ele. A seguir, uma explicação detalhada de cada parte do código:
 

Citar

1. Importação de módulos:

use strict;
use warnings;
use POSIX ":sys_wait_h";
use Socket;
use IO::Handle;

  • strict e warnings: Impõem regras rigorosas de sintaxe e emitiram avisos para possíveis erros de programação.
  • POSIX ":sys_wait_h": Importa funções de manipulação de processos e espera de status, embora não esteja sendo usado diretamente aqui.
  • Socket: Módulo utilizado para manipulação de sockets TCP.
  • IO::Handle: Fornece métodos para trabalhar com objetos de fluxo de entrada/saída (não utilizado explicitamente no código, mas geralmente presente quando você deseja usar funções como flush).

2. Configuração de variáveis:

Citar

my $limite_conexoes = 50;
my $tempo_bloqueio = 4 * 3600;

  • $limite_conexoes: Número máximo de conexões permitidas de um único IP (50 neste caso).
  • $tempo_bloqueio: O tempo durante o qual o IP ficará bloqueado após ultrapassar o limite de conexões, configurado como 4 horas (4 * 3600 segundos). 

3. Armazenamento das conexões:

Citar

my %conexoes_por_ip;

%conexoes_por_ip: Um hash para armazenar o número de conexões feitas por cada IP.

4. Configuração de regras no iptables:

Citar

system("iptables -F");
system("iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT");
system("iptables -A INPUT -j DROP");
system("iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above $limite_conexoes -j REJECT --reject-with tcp-reset");

  • iptables -F: Limpa todas as regras do iptables anteriores.
  • iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT: Aceita conexões de entrada que já estejam estabelecidas ou relacionadas a uma conexão existente.
  • iptables -A INPUT -j DROP: Bloqueia todas as outras conexões de entrada.
  • iptables -A INPUT -p tcp --syn -m connlimit --connlimit-above $limite_conexoes -j REJECT --reject-with tcp-reset: Limita o número de conexões simultâneas de um único IP, rejeitando aquelas que excedem o limite definido.

5. Configuração do socket e aceitação de conexões:

Citar

my $socket;
socket($socket, PF_INET, SOCK_STREAM, getprotobyname('tcp')) or die ": $!";
setsockopt($socket, SOL_SOCKET, SO_REUSEADDR, 1) or die ": $!";

my $endereco = sockaddr_in(0, INADDR_ANY);
bind($socket, $endereco) or die ": $!";
listen($socket, SOMAXCONN) or die ": $!";
 

  • socket: Cria um novo socket TCP.
  • setsockopt: Permite a reutilização de endereços e portas.
  • bind: Associa o socket ao endereço e porta definidos (no caso, qualquer endereço INADDR_ANY e porta 0).
  • listen: Coloca o socket em modo de escuta para aceitar conexões.

6. Loop para aceitar conexões:

Citar

while (1) {
    my $cliente = accept(NOVACONEXAO, $socket);
    my ($porta_cliente, $endereco_cliente) = sockaddr_in($cliente);
    my $ip_cliente = inet_ntoa($endereco_cliente);

    $conexoes_por_ip{$ip_cliente}++;

    if ($conexoes_por_ip{$ip_cliente} > $limite_conexoes) {
        bloquear_ip($ip_cliente);
    }

    print "Conexão de $ip_cliente na porta $porta_cliente aceita.\n";

    close(NOVACONEXAO);
}

 

  • O script entra em um loop infinito onde fica aceitando conexões.
  • accept: Aceita uma nova conexão do cliente.
  • sockaddr_in e inet_ntoa: Obtêm a porta e o IP do cliente.
  • $conexoes_por_ip{$ip_cliente}++: Incrementa o contador de conexões para o IP do cliente.
  • Se o número de conexões do cliente ultrapassar o limite, o IP é bloqueado.

7. Função de bloqueio do IP:

Citar

sub bloquear_ip {
    my $ip = shift;

    open(my $ban_fh, '>>', $arquivo_ban) or die "Não foi possível abrir o arquivo $arquivo_ban: $!";
    print $ban_fh "$ip\n";
    close($ban_fh);

    system("iptables -A INPUT -s $ip -j DROP");

    print "IP $ip bloqueado por $tempo_bloqueio segundos.\n";

    sleep($tempo_bloqueio);

    system("iptables -D INPUT -s $ip -j DROP");

    print "IP $ip desbloqueado.\n";
}

 

  • open e print: Registra o IP bloqueado no arquivo ban.txt.
  • system("iptables -A INPUT -s $ip -j DROP"): Adiciona uma regra ao iptables para bloquear o IP.
  • sleep($tempo_bloqueio): Espera o tempo de bloqueio configurado (4 horas).
  • system("iptables -D INPUT -s $ip -j DROP"): Remove a regra do iptables e desbloqueia o IP.

Considerações:

  • Este script age como um servidor simples, monitorando as conexões e bloqueando IPs que ultrapassam o limite de conexões definidas.
  • O bloqueio é temporário (4 horas), após o qual o IP é desbloqueado.
  • O arquivo ban.txt mantém um registro dos IPs bloqueados.

Se você tiver alguma dúvida ou quiser fazer ajustes no código, é só avisar!

Fonte : Chat GPT

  • Curtir 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



Suporte GM

Comunidade de Perfect World do Brasil

Copyright © 2023-2024 SuporteGM Powered by Invision Community
Поддержка Invision Community в России

Links

×
×
  • Create New...