Ir para conteúdo
Facebook Whatsapp Twitter Youtube

Filtro AntiDDos [Perl] Resposta rápida


deprox
 Compartilhar

Posts Recomendados

  • 7 meses depois...

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 para o comentário
Compartilhar em outros sites

Participe da Conversa

Você pode postar agora e se cadastrar mais tarde. Cadastre-se Agora para publicar com Sua Conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.

 Compartilhar



Suporte GM

Comunidade de Perfect World do Brasil

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

Links

×
×
  • Criar Novo...