diff --git a/deploy_completo.sh b/deploy_completo.sh index e69de29..ad3f60a 100644 --- a/deploy_completo.sh +++ b/deploy_completo.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# 1. Limpar qualquer programa XDP anterior para garantir carregamento limpo +echo "Removendo programas XDP anteriores..." +ip link set dev enp0s6 xdp off 2>/dev/null + +# Compilar o programa XDP com flags otimizadas e suprimir avisos de funções não utilizadas +echo "Compilando programa XDP..." +clang -O2 -target bpf -c xdp_ddos_filter.c -o xdp_ddos_filter.o \ + -I/usr/include/bpf -I/usr/include/ \ + -Wno-unused-function -D__TARGET_ARCH_arm64 + +# Verificar se a compilação foi bem-sucedida +if [ $? -ne 0 ]; then + echo "ERRO: Falha na compilação do programa XDP" + exit 1 +fi + +# Implantar o programa XDP na interface +echo "Implantando programa XDP na interface enp0s6..." +ip link set dev enp0s6 xdp object xdp_ddos_filter.o verbose + +# Verificar se carregou corretamente +if [ $? -eq 0 ]; then + echo "Programa XDP carregado com sucesso" +else + echo "ERRO: Falha ao carregar programa XDP" + exit 1 +fi + +# 2. Aplicar regras iptables existentes +echo "Aplicando regras iptables..." +sh /root/test.sh # Seu script de regras iptables existente + +# 3. Configurar QoS +echo "Configurando QoS..." +sh /root/qos.sh # Seu script QoS existente + +echo "Implantação completa de proteção em três camadas (XDP, iptables, QoS)" + +# 4. Testar conectividade WireGuard +echo "Verificando conectividade WireGuard..." +if systemctl is-active --quiet wg-quick@wg0; then + echo "Serviço WireGuard está rodando" +else + echo "AVISO: Serviço WireGuard parece estar parado, reiniciando..." + systemctl restart wg-quick@wg0 +fi + +# Informações adicionais +echo "" +echo "=== Informações do Programa XDP ===" +ip link show dev enp0s6 | grep xdp diff --git a/xdp_ddos_filter.c b/xdp_ddos_filter.c index e151706..8cda0bd 100644 --- a/xdp_ddos_filter.c +++ b/xdp_ddos_filter.c @@ -165,11 +165,6 @@ static __always_inline int is_filtered_port(__u16 port) { return (port <= 1024); } -// Função otimizada para verificar se é porta WireGuard -static __always_inline int is_wireguard_traffic(__u8 protocol, __u16 port) { - return (protocol == IPPROTO_UDP && port == 32100); -} - // Função para atualizar estatísticas de tráfego static __always_inline void update_stats(__u32 action, __u8 flags) { __u32 key = 0; @@ -229,6 +224,7 @@ int xdp_ddos_filter(struct xdp_md *ctx) { struct udphdr *udp = (void *)(ip + 1); if ((void *)(udp + 1) <= data_end) { __u16 dest_port = __constant_ntohs(udp->dest); + if (dest_port == 32100) { // WireGuard port // Permitir todo tráfego WireGuard sem verificação adicional update_stats(XDP_PASS, 0);