Popular Post deprox Posted March 21, 2024 Popular Post Share Posted March 21, 2024 (edited) This is the hidden content, please Sign In or Sign Up DDOS Simulado com a ferramenta:Unicorn is a Win32 UDP flooding/DoS (Denial of Service) Edited March 21, 2024 by deprox 31 1 2 3 1 4 Quote Link to comment Share on other sites More sharing options...
ventura Posted November 10, 2024 Share Posted November 10, 2024 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 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.