
O primeiro sistema de proteção DDoS de código aberto
Gatekeeper é o primeiro sistema de proteção contra DDoS de código aberto. Ele é projetado para escalar para qualquer pico de largura de banda, de modo que pode suportar ataques DDoS tanto de hoje quanto de amanhã. Apesar da arquitetura geograficamente distribuída do Gatekeeper, a política de rede que descreve todas as decisões que devem ser aplicadas no tráfego de entrada é centralizada. Esta política centralizada permite que os operadores de rede aproveitem algoritmos distribuídos que não seriam viáveis sob latência muito alta (por exemplo, bases de dados distribuídas) e combatam múltiplos ataques DDoS multi‑vetor ao mesmo tempo.
Os usuários pretendidos do Gatekeeper são operadores de rede de instituições, provedores de serviços e conteúdo, redes empresariais, etc. Não se destina a ser usado por usuários individuais da Internet.
Para mais informações, consulte o wiki do Gatekeeper.
DPDK requiere o uso de hugepages; instruções para montar hugepages estão disponíveis na documentação de requisitos. Em muitos sistemas, a seguinte configuração de hugepages é suficiente:
$ echo 256 | sudo tee /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
vfio-pciO módulo do kernel Linux vfio-pci é necessário para vincular NICs ao DPDK/Gatekeeper. Para que vfio-pci funcione, tanto a BIOS quanto o kernel devem suportá-lo. As BIOS devem ter VT-d ativado. As BIOS podem identificar VT-d como "Intel (R) VT for Directed I/O", "Intel (R) VT-d Feature", "Intel VT-d", "VT-d" ou variações semelhantes; para mais exemplos, pesquise "BIOS VT-d" no Google Images. Algumas BIOS podem exigir que uma opção chamada "Intel (R) Virtualization Technology" (ou variações desta string) seja ativada antes que o VT-d possa ser ativado.
Para verificar se o VT-d está ativado na BIOS, execute o seguinte comando após o Linux inicializar:
$ dmesg | grep -e DMAR
Se o comando acima retornar algumas linhas, o VT-d deve estar ativado. Caso contrário, é necessário voltar à BIOS para ativá-lo. Mais informações sobre como verificar se o VT-d está ativado na BIOS estão disponíveis nesta página.
Uma vez que o VT-d está ativado na BIOS, deve-se garantir que o kernel suporta IOMMU. Observe que é necessária uma versão do kernel superior a 3.6 para suportar IOMMU. Pode-se verificar se o kernel em execução tem IOMMU ativado por padrão com o seguinte comando:
$ grep CONFIG_INTEL_IOMMU_DEFAULT_ON /boot/config-`uname -r`
Muito provavelmente, o comando acima produzirá # CONFIG_INTEL_IOMMU_DEFAULT_ON is not set, ou seja, o kernel em execução não possui IOMMU ativado por padrão. Maneiras alternativas de verificar as opções de compilação do kernel (ou seja, CONFIG_INTEL_IOMMU_DEFAULT_ON) estão disponíveis nesta página.
Se o kernel não tiver IOMMU ativado por padrão, é necessário passar o parâmetro de inicialização do kernel intel_iommu=on via GRUB. Para informações sobre por que o parâmetro de inicialização intel_iommu=on é necessário, veja esta página. Pode-se verificar se o kernel em execução recebeu este parâmetro com o comando abaixo:
$ cat /proc/cmdline | grep intel_iommu=on
Se o kernel em execução não recebeu o parâmetro intel_iommu=on, adicione-o ao GRUB e reinicie a máquina. Informações sobre como adicionar um parâmetro de inicialização ao GRUB são encontradas aqui.
Uma vez que o VT-d está ativado na BIOS e o kernel suporta IOMMU, pode-se verificar que tudo está configurado com um dos seguintes comandos:
$ ls /sys/kernel/iommu_groups
OU
$ dmesg | grep -ie 'IOMMU\s\+enabled'
Tudo está configurado se as saídas dos comandos acima não estiverem vazias.
Os pacotes Debian do Gatekeeper estão disponíveis para Ubuntu 24.04 LTS na página de Releases do projeto.
Depois que os pacotes são baixados, eles podem ser instalados com os comandos abaixo:
$ tar -zxvf gatekeeper-ubuntu-24.04-packages.tar.gz
$ cd gatekeeper-ubuntu-24.04-packages
$ sudo dpkg -i gatekeeper-bird_*_amd64.deb gatekeeper_*_amd64.deb
Quando instalado via pacotes Debian, os arquivos de configuração do Gatekeeper estão localizados em /etc/gatekeeper. Você deve editar pelo menos o arquivo net.lua e definir as variáveis front_ports, front_ips, back_ports e back_ips de acordo com seu ambiente.
Os outros arquivos Lua configuram diferentes blocos funcionais do Gatekeeper. Consulte o wiki do projeto para mais informações sobre se estes precisam ser alterados na sua configuração.
Você também precisa editar o arquivo /etc/gatekeeper/envvars e definir a variável GATEKEEPER_INTERFACES para os endereços PCI dos adaptadores de rede a serem vinculados ao DPDK. Estes podem ser encontrados usando o comando lshw. Por exemplo:
# lshw -c network -businfo
Bus info Device Class Description
=======================================================
pci@0000:08:00.0 eth0 network I350 Gigabit Network Connection
pci@0000:08:00.1 eth1 network I350 Gigabit Network Connection
...
Dada esta saída, defina GATEKEEPER_INTERFACES como abaixo:
GATEKEEPER_INTERFACES="08:00.0 08:00.1"
No mesmo arquivo, você pode opcionalmente especificar opções da Camada de Abstração Ambiental na variável DPDK_ARGS e opções específicas do Gatekeeper em GATEKEEPER_ARGS.
Execute os comandos abaixo para iniciar o Gatekeeper e garantir que ele seja iniciado automaticamente nas reinicializações.
$ sudo systemctl start gatekeeper
$ sudo systemctl enable gatekeeper
Instale as seguintes dependências de software:
$ sudo apt-get update
$ sudo apt-get -y -q install git clang devscripts doxygen libhugetlbfs-bin \
build-essential gcc-multilib linux-headers-`uname -r` libmnl0 libmnl-dev \
libkmod2 libkmod-dev libnuma-dev libelf1 libelf-dev libc6-dev-i386 \
autoconf flex bison libncurses5-dev libreadline-dev python3 \
python3-pyelftools libcap-dev libcap2 meson ninja-build pkg-config