This commit is contained in:
rodrigo committed 2025-02-26 22:41:25 -03:00
1 parent 824fffb2cf
commit b02be8d620
2 files changed
+54 -5

No files matched your search

+53
View File
@@ -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
+1 -5
View File
@@ -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);