SIEM & outras integrações

Ligar o Q-Feeds ao Linux (NFtables / IPtables)

O nosso instalador de código aberto deteta sozinho se o servidor usa nftables ou iptables com ipset, carrega a lista de bloqueio de IP maliciosos em conjuntos próprios e agenda as atualizações, para que o host descarte tráfego de endereços reconhecidamente maliciosos.

Os scripts são de código aberto e estão no GitHub: Q-Feeds/NFtables-IPtables-integration-script. Descarregue-os sempre de lá para ter a certeza de que tem a versão atual. Precisa de acesso root, HTTPS de saída para api.qfeeds.com e um token API da Q-Feeds. Consulte Obter os seus threat feeds. O instalador pede-lhe primeiro que aceite os nossos Termos e condições e o EULA.

Requisitos

  • SO: Linux com nftables, ou com iptables e ipset
  • Distribuições: Debian, Ubuntu, CentOS, RHEL, AlmaLinux, Rocky Linux, Fedora, openSUSE Leap, SLES, Arch Linux, Alpine
  • Privilégios: root para a instalação, as atualizações e as alterações à firewall
  • Feed: lista de IP maliciosos (feed_type=malware_ip)
  • Pacotes: é o script que os instala, não tem de preparar nada. Com nftables são nftables, curl, jq e util-linux. Com iptables são iptables, ipset, curl, jq e util-linux.

Teste opcional antes de instalar:

curl -v -u api_token:YOUR_TOKEN "https://api.qfeeds.com/api?feed_type=malware_ip&limit=1000"

Obter os scripts

git clone https://github.com/Q-Feeds/NFtables-IPtables-integration-script.git
cd NFtables-IPtables-integration-script
chmod +x qfeeds-installer.sh qfeeds-uninstaller.sh

Não tem git no servidor? Descarregue o ficheiro ZIP da página do repositório e descompacte-o.

Instalação

sudo ./qfeeds-installer.sh

O instalador deteta a sua firewall, faz algumas perguntas, coloca o script de atualização com a respetiva tarefa cron e executa logo uma primeira sincronização completa, para que a lista de bloqueio fique ativa de imediato. As perguntas, por ordem:

  1. Termos e EULA: escreva yes para continuar.
  2. Token API: o seu token da Q-Feeds. Se o deixar vazio, o instalador para.
  3. Feed type: por omissão malware_ip. Altere apenas se lhe tivermos indicado outro tipo de feed.
  4. Número de IP: prima Enter para não definir limite, é o que recomendamos.
  5. Bloquear entrada (sim por omissão): o tráfego dos IP listados para o seu servidor é descartado.
  6. Bloquear saída (não por omissão): o tráfego do seu servidor para os IP listados é descartado.
  7. Lista branca (opcional): endereços IPv4 e IPv6 ou intervalos CIDR que nunca podem ser bloqueados, separados por vírgulas. Coloque aqui os seus próprios IP de gestão e nunca se fecha fora do servidor.
  8. Agendamento cron: por omissão */10 * * * *, ou seja a cada dez minutos. Correr com frequência não é problema, porque o script só contacta a API quando a sua licença permite uma nova atualização.

Os avisos sobre notação CIDR durante a descarga do feed são inofensivos e pode ignorá-los. Se executar novamente o instalador num host que já tem uma linha cron da Q-Feeds, ele pergunta primeiro e, por omissão, deixa a sua crontab intacta. Em instalações não assistidas, defina QFEEDS_SKIP_CRON=1 para saltar esse passo sem perguntas.

Como funciona

  • Deteção da firewall: se o comando nft existir, o instalador usa nftables; caso contrário recorre a iptables com ipset. O resultado fica como BACKEND no ficheiro de configuração, e o script de atualização e o de desinstalação seguem essa escolha.
  • Regras próprias: o nftables recebe as tabelas ip qfeeds e ip6 qfeeds. No iptables, as regras de bloqueio ficam em cadeias dedicadas QFEEDS_INPUT e QFEEDS_OUTPUT, com uma única regra de salto marcada em INPUT e OUTPUT. As suas regras de firewall existentes nunca são tocadas.
  • Dois tipos de conjuntos: os endereços individuais vão para um conjunto hash e os poucos intervalos CIDR para um conjunto de redes separado. É por isso que carregar 400.000 endereços ou mais leva segundos em vez de minutos.
  • Lista branca primeiro: as regras da lista branca são avaliadas antes da lista de bloqueio, por isso um endereço autorizado passa sempre.
  • Sincronização completa e diferencial: a primeira execução carrega o feed inteiro e as seguintes obtêm apenas as adições e remoções desde a última descarga. Uma sincronização completa só é aplicada depois de os dados válidos estarem descarregados, por isso uma descarga falhada nunca o deixa sem proteção.
  • Auto-reparação: se o conjunto estiver vazio ou muito menor do que o esperado, por exemplo após um reinício em que as regras não foram guardadas, o script reconstrói tudo em vez de completar um conjunto vazio. Por omissão, força também uma sincronização completa a cada 24 horas.
  • De acordo com a sua licença: antes de cada execução o script verifica quando a licença permite a próxima atualização. Se ainda não for o momento, termina sem contactar a API.

Verificação

nftables

sudo nft list table ip qfeeds
sudo nft list set ip qfeeds qfeeds_blacklist_v4 | grep -oP '\d+\.\d+\.\d+\.\d+' | wc -l
sudo nft list set ip qfeeds qfeeds_blacklist_v4_nets | head -20
sudo nft list table ip6 qfeeds

iptables com ipset

sudo ipset list -t | grep -A4 qfeeds
sudo ipset list qfeeds_blacklist_v4 | tail -n +9 | wc -l
sudo iptables -L INPUT -n --line-numbers | grep qfeeds
sudo iptables -L QFEEDS_INPUT -n
sudo ip6tables -L QFEEDS_INPUT -n

Para ambos

sudo tail -20 /var/log/qfeeds_blocklist.log
sudo grep -i error /var/log/qfeeds_blocklist.log
sudo crontab -l | grep qfeeds
sudo /usr/local/bin/update_qfeeds_blocklist.sh
sudo QFEEDS_FORCE_UPDATE=1 /usr/local/bin/update_qfeeds_blocklist.sh

O último comando força uma sincronização completa e ignora o agendamento da licença. É a forma mais rápida de confirmar que tudo funciona de ponta a ponta.

Configuração

Todas as opções estão em /etc/qfeeds/qfeeds_config.conf. Pode editar esse ficheiro diretamente em vez de executar o instalador outra vez; a alteração entra em vigor na execução seguinte.

OpçãoDescriçãoValor por omissão
BACKENDFirewall, nftables ou iptablesdetetada
API_TOKENO seu token API da Q-Feedsobrigatório
FEED_TYPEFeed que é descarregadomalware_ip
LIMITNúmero máximo de IP, vazio significa sem limitevazio
BLOCK_INCOMINGBloquear tráfego dos IP listadosyes
BLOCK_OUTGOINGBloquear tráfego para os IP listadosno
WHITELIST_V4Endereços IPv4 ou intervalos CIDR, separados por vírgulasvazio
WHITELIST_V6Endereços IPv6 ou intervalos CIDR, separados por vírgulasvazio
LOG_FILECaminho do ficheiro de registo/var/log/qfeeds_blocklist.log
FULL_SYNC_MAX_AGESegundos até ser forçada nova sincronização completa86400

Localização de ficheiros e diretórios

  • Configuração: /etc/qfeeds/qfeeds_config.conf
  • Estado da sincronização: /etc/qfeeds/.last_sync e /etc/qfeeds/.last_count
  • Script de atualização: /usr/local/bin/update_qfeeds_blocklist.sh
  • Registo: /var/log/qfeeds_blocklist.log
  • Ficheiro de bloqueio: /var/lock/qfeeds_blocklist.lock
  • Cron: crontab do root
  • Persistência das regras: netfilter-persistent quando existe; caso contrário /etc/nftables.conf com nftables, ou /etc/ipset.conf com /etc/iptables.rules e /etc/ip6tables.rules com iptables

Desinstalação

sudo ./qfeeds-uninstaller.sh

O desinstalador lê qual a firewall configurada e limpa em conformidade. Com nftables elimina as tabelas ip qfeeds e ip6 qfeeds com todas as cadeias, regras e conjuntos. Com iptables retira as regras de salto marcadas, esvazia e elimina as cadeias QFEEDS_INPUT e QFEEDS_OUTPUT e destrói todos os conjuntos qfeeds_. Nos dois casos também desaparecem o diretório de configuração, o script de atualização, a tarefa cron, o registo e o ficheiro de bloqueio. Se o ficheiro de configuração já não existir, limpa as duas variantes por precaução.

Os pacotes do sistema ficam instalados. Remova-os se já não precisar deles:

  • Ubuntu/Debian: sudo apt-get -y remove ipset netfilter-persistent
  • CentOS/RHEL/Alma/Rocky: sudo yum -y remove ipset
  • Fedora: sudo dnf -y remove ipset
  • openSUSE/SLES: sudo zypper remove ipset
  • Arch: sudo pacman -R ipset

Cuidado com iptables, nftables, curl e jq: é quase certo que outras partes do sistema precisam deles.

Resolução de problemas

  • Os conjuntos estão vazios depois da instalação: veja sudo tail -50 /var/log/qfeeds_blocklist.log, confirme o seu token API e execute sudo QFEEDS_FORCE_UPDATE=1 /usr/local/bin/update_qfeeds_blocklist.sh.
  • «Not time yet. Next update scheduled at ...»: é normal. A tarefa cron correu, mas a sua licença ainda não permite uma nova atualização. A execução seguinte volta a verificar.
  • As regras desaparecem depois de um reinício: o script guarda as regras automaticamente e na execução seguinte deteta o conjunto vazio e reconstrói-o. Por segurança, confirme que o netfilter-persistent está instalado ou que o serviço nftables está ativado.
  • «Batch nft -f failed. Falling back to per-command execution»: inofensivo. Acontece sobretudo em contentores LXC com o buffer netlink limitado. Mesmo assim, 400.000 endereços ou mais são carregados em cerca de dez segundos. O mesmo vale para «Message too long».
  • «ipset restore failed»: confirme com command -v ipset que o ipset existe e com lsmod | grep ip_set que o módulo do kernel está carregado.
  • Não se veem regras no INPUT: no iptables as regras de bloqueio estão em QFEEDS_INPUT. No INPUT está apenas a regra de salto, marcada com o comentário qfeeds. Verifique as duas com sudo iptables -L INPUT -n | grep qfeeds e sudo iptables -L QFEEDS_INPUT -n.
  • A instalação falha com «Unable to locate package»: a sua distribuição não foi reconhecida. Instale curl, jq e util-linux manualmente, além de nftables ou iptables com ipset, e execute o instalador novamente.
  • Suporte: support@qfeeds.com ou a página de suporte. Encontrou um erro nos scripts? Comunique-o como issue no repositório do GitHub.

Transferir o manual PDF completo Ver os scripts no GitHub

Avalie a nossa inteligência hoje mesmo!

Simplifique as suas operações de segurança, inicie a sua avaliação gratuita da Q-Feeds e veja a diferença.

Ativar o acesso gratuito