Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
NFtables-IPtables-integration-script — Script per implementare Q-Feeds direttamente su NFtables o IPtables | Kitploit
Strumenti/GitHubGitHub/q-feeds/nftables-iptables-integration-script
Strumenti DifensiviScripting e AutomazioneAudit di ConfigurazioneSicurezza di ReteThreat IntelligenceRisposta agli Incidenti
GitHubq-feeds/nftables-iptables-integration-script

NFtables-IPtables-integration-script

Script per implementare Q-Feeds direttamente su NFtables o IPtables

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Vedi RepositorySito web
21 mese faNon ancora revisionato
Condividi

🛡️ Integrazione della Blocklist del Firewall Linux di Q-Feeds

Blocklist automatica di IP malware per server Linux — supporta nftables e iptables+ipset

Licenza Linux


📋 Indice dei contenuti

  • Avvio Rapido
  • Panoramica
  • Come Funziona
  • Prerequisiti
  • Installazione Dettagliata
  • Configurazione
  • Utilizzo e Verifica
  • Risoluzione dei Problemi
  • Disinstallazione
  • Licenza

🚀 Avvio Rapido

Passaggio 1: Ottieni il tuo token API

Ottieni una chiave API gratuita su tip.qfeeds.com.

Passaggio 2: Scarica gli script```bash

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

root@kitploit:~
### Passaggio 3: Esegui l'installer come root```bash
sudo ./qfeeds-installer.sh

L'installer:

  1. Rileva automaticamente il tuo backend firewall (nftables o iptables)
  2. Ti chiederà il tuo token API, le opzioni di blocco e una whitelist opzionale
  3. Installa tutte le dipendenze, lo script di aggiornamento e il job cron
  4. Esegue immediatamente la prima sincronizzazione completa

Passo 4: Completato

Il tuo server è ora protetto. Il job cron controlla gli aggiornamenti ogni 20 minuti (configurabile), e le chiamate API effettive avvengono solo quando la tua licenza lo consente.


📖 Panoramica

Questa soluzione scarica periodicamente il feed di threat intelligence più recente da Q-Feeds e lo applica come regole firewall, permettendoti di:

  • ✅ Bloccare le connessioni in entrata da IP dannosi noti
  • ✅ Bloccare le connessioni in uscita verso IP dannosi noti
  • ✅ Inserire in whitelist i tuoi IP/CIDR per non bloccarti mai fuori
  • ✅ Pianificazione automatica basata sulla tua licenza Q-Feeds
  • ✅ Aggiornamenti incrementali tramite sincronizzazione basata su differenze per un utilizzo minimo delle risorse

Perché questo approccio?

  • ✅ Rilevamento automatico del backend — funziona su nftables o iptables+ipset senza selezione manuale
  • ✅ Veloce — carica oltre 400.000 IP in secondi usando set hash ottimizzati (nftables) o ipset (iptables)
  • ✅ Sicuro — usa tabelle/set dedicati — non tocca mai le tue regole firewall esistenti
  • ✅ Efficiente — gli aggiornamenti basati su differenze elaborano solo le modifiche, non l'intera lista
  • ✅ Affidabile — auto-riparante: rileva un set locale vuoto o incompleto (es. dopo un riavvio) e lo ricostruisce, con fallback automatico a una sincronizzazione completa se una differenza fallisce
  • ✅ Flessibile — scegli il blocco in entrata/in uscita, whitelist opzionale

🔧 Come Funziona

Rilevamento del Backend

L'installer rileva automaticamente quale backend firewall è disponibile:

PrioritàRilevamentoBackend
1°Comando nft trovatonftables
2°Comando iptables trovatoiptables+ipset
—Nessuno trovatoErrore (uscita)

Il backend rilevato viene memorizzato nel file di configurazione. Gli script di aggiornamento e disinstallazione lo utilizzano per eseguire i comandi firewall corretti.

Architettura: Due Tipi di Set

Entrambi i backend utilizzano la stessa strategia di set divisi per le massime prestazioni:

Backend nftables:``` ┌─────────────────────────────────────────────────────────┐ │ table ip qfeeds │ │ │ │ ┌─────────────────────────┐ ┌───────────────────────┐ │ │ │ qfeeds_blacklist_v4 │ │ qfeeds_blacklist_v4 │ │ │ │ (hash set) │ │ _nets (interval set) │ │ │ │ │ │ │ │ │ │ Individual IPs │ │ CIDR ranges │ │ │ │ ~99% of entries │ │ ~1% of entries │ │ │ │ O(1) lookup & insert │ │ O(log n) lookup │ │ │ └─────────────────────────┘ └───────────────────────┘ │ │ │ │ ┌─────────────────────────┐ │ │ │ qfeeds_whitelist_v4 │ │ │ │ (interval set) │ │ │ │ Your allowed IPs/CIDRs │ │ │ └─────────────────────────┘ │ │ │ │ chain input-chain (hook input, priority 0, accept) │ │ → ip saddr @qfeeds_whitelist_v4 accept │ │ → ip saddr @qfeeds_blacklist_v4 drop │ │ → ip saddr @qfeeds_blacklist_v4_nets drop │ │ │ │ chain output-chain (if enabled) │ │ → ip daddr @qfeeds_whitelist_v4 accept │ │ → ip daddr @qfeeds_blacklist_v4 drop │ │ → ip daddr @qfeeds_blacklist_v4_nets drop │ └─────────────────────────────────────────────────────────┘

root@kitploit:~
**iptables+ipset backend:**```
┌──────────────────────────────────────────────────────────┐
│  ipset sets                                              │
│                                                          │
│  ┌─────────────────────────┐  ┌────────────────────────┐ │
│  │ qfeeds_blacklist_v4     │  │ qfeeds_blacklist_v4    │ │
│  │ (hash:ip)               │  │ _nets (hash:net)       │ │
│  │ maxelem 1000000         │  │ maxelem 65536          │ │
│  │                         │  │                        │ │
│  │ Individual IPs          │  │ CIDR ranges            │ │
│  └─────────────────────────┘  └────────────────────────┘ │
│                                                          │
│  ┌─────────────────────────┐                             │
│  │ qfeeds_whitelist_v4     │                             │
│  │ (hash:net)              │                             │
│  └─────────────────────────┘                             │
│                                                          │
│  iptables: INPUT/OUTPUT jump to a dedicated chain        │
│  (jump rule tagged -m comment "qfeeds"):                 │
│                                                          │
│  chain QFEEDS_INPUT (rebuilt each run, in order):        │
│    -m set --match-set whitelist_v4 src -j ACCEPT         │
│    -m set --match-set blacklist_v4 src -j DROP           │
│    -m set --match-set blacklist_v4_nets src -j DROP      │
│    (QFEEDS_OUTPUT mirrors this with dst, if enabled)     │
└──────────────────────────────────────────────────────────┘

La stessa struttura esiste per IPv6 (tabella ip6 qfeeds o ip6tables + ipsets family inet6).

Perché due tipi di set?

  • Set hash memorizzano singoli IP con inserimento e ricerca O(1) — caricare oltre 400k IP richiede secondi
  • Set net/intervallo sono usati solo per il piccolo numero di intervalli CIDR nel feed
  • Questo evita costose operazioni di merge che rallenterebbero un singolo set con centinaia di migliaia di voci

Flusso di aggiornamento```

┌──────────────────────────────────────────────────────┐ │ 1. Check license schedule (licenses.php API) │ │ → Skip run if not yet time for next update │ │ 2. Determine sync mode (full or diff) │ │ 3. Fetch IPv4 feed (ipv6=0) and IPv6 feed │ │ (ipv6=only) separately │ │ 4. Separate IPs from CIDRs in awk │ │ 5. Batch-load into hash set (IPs) and net/interval │ │ set (CIDRs) │ │ 6. Update whitelist sets from config │ │ 7. Persist rules │ └──────────────────────────────────────────────────────┘

root@kitploit:~
### Sincronizzazione Completa vs Differenziale

| Modalità | Quando | Cosa fa |
|------|------|-------------|
| **Sincronizzazione completa** | Prima esecuzione, aggiornamento forzato, dopo un fallimento della sincronizzazione differenziale, quando il set locale ha perso la baseline (vuoto o molto più piccolo del previsto), o quando l'ultima sincronizzazione è più vecchia di `FULL_SYNC_MAX_AGE` (default 24h) | Recupera e convalida prima ogni feed, poi svuota e ricarica i set di blacklist. Il set viene svuotato solo dopo aver ottenuto dati validi, quindi un recupero fallito non ti lascia mai senza protezione |
| **Sincronizzazione differenziale** | Esecuzioni successive (solo feed `malware_ip`) con un set locale integro | Recupera solo le aggiunte (`+`) e le rimozioni (`-`) dall'ultimo pull |

La sincronizzazione differenziale è **per chiave API** — l'API tiene traccia del tuo ultimo pull riuscito e restituisce solo le modifiche successive. Se una sincronizzazione differenziale fallisce, lo script torna automaticamente a una sincronizzazione completa.

> **Auto-riparazione:** Gli aggiornamenti differenziali aggiornano solo il set esistente. Se quel set viene perso o troncato, ad esempio a causa di un riavvio in cui le regole del firewall non sono state mantenute, un flush manuale o una sincronizzazione parziale precedente, l'aggiornatore rileva la baseline mancante (il conteggio degli elementi live è 0 o molto inferiore all'ultimo conteggio registrato) e forza una ricostruzione completa invece di applicare le differenze su un set vuoto. Come ulteriore rete di sicurezza, forza anche una sincronizzazione completa periodica (ogni 24 ore per impostazione predefinita, tramite `FULL_SYNC_MAX_AGE`).

### Pianificazione Basata sulla Licenza

L'aggiornatore controlla l'API delle licenze Q-Feeds (`licenses.php`) prima di ogni esecuzione. Se il timestamp `next_update` della tua licenza non è stato ancora raggiunto, lo script termina anticipatamente senza effettuare chiamate API non necessarie. Il cron job viene eseguito frequentemente (default: ogni 20 minuti), ma gli aggiornamenti effettivi avvengono solo quando la tua licenza lo consente.

---

## ✅ Prerequisiti

Prima dell'installazione, assicurati di avere:

- [x] **Server Linux** con **nftables** o **iptables** (Debian, Ubuntu, CentOS, Fedora, Arch, Alpine)
- [x] **Accesso root** — il programma di installazione e l'aggiornatore devono essere eseguiti come root
- [x] **Token API Q-Feeds** — ottieni il tuo gratuito su [tip.qfeeds.com](https://tip.qfeeds.com/)
- [x] **Accesso a Internet** — il server deve poter raggiungere `api.qfeeds.com`

Il programma di installazione installerà automaticamente le dipendenze necessarie:
- **Backend nftables**: `nftables`, `curl`, `jq`, `util-linux`
- **Backend iptables**: `iptables`, `ipset`, `curl`, `jq`, `util-linux`

---

## 📝 Guida di Installazione Dettagliata

### 1. Ottieni il Tuo Token API

Visita [tip.qfeeds.com](https://tip.qfeeds.com/) per ottenere il tuo token API Q-Feeds gratuito.

### 2. Scarica ed Esegui```bash
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
sudo ./qfeeds-installer.sh

3. Prompt dell'installatore

L'installatore chiederà le seguenti domande:

API Token (obbligatorio)```

Enter your Q-Feeds API Token:

root@kitploit:~
Il tuo token da [tip.qfeeds.com](https://tip.qfeeds.com/). Il programma di installazione rifiuta di proseguire se vuoto.

#### Tipo di Feed```
Enter feed type [default: malware_ip]:

Predefinito è malware_ip. Cambia solo se Q-Feeds ti ha fornito un tipo di feed diverso.

Limite IP```

Enter the limit of IPs to fetch (leave empty for no limit):

root@kitploit:~
Premi Invio per nessun limite (consigliato). Inserisci un numero per limitare la dimensione del feed.

#### Blocco direzionale```
Block INCOMING connections from malicious IPs? [Y/n]:
Block OUTGOING connections to malicious IPs? [y/N]:
  • In entrata (predefinito: sì) — blocca il traffico da IP inseriti nella blacklist verso il tuo server
  • In uscita (predefinito: no) — blocca il traffico dal tuo server verso IP inseriti nella blacklist

Whitelist (opzionale)```

Configure a whitelist of IPs/CIDRs that must NEVER be blocked? [y/N]: Enter IPv4 whitelist (comma-separated, e.g. 1.2.3.4,5.6.7.8): Enter IPv6 whitelist (comma-separated, e.g. 2001:db8::1):

root@kitploit:~
Add your management IP(s) here to ensure you are never locked out, even if they appear in the feed. Whitelist rules are always checked **before** blacklist rules.

#### Programma Cron```
Enter cron schedule (e.g., '*/20 * * * *') [default: */20 * * * *]:

How often the updater checks for new data. The default is every 20 minutes. The license-based scheduling ensures the API is only called when your license allows an update.

Re-eseguire l'installer con un crontab personalizzato: Se esiste già una voce cron di Q-Feeds, l'installer chiede prima di modificarla:

root@kitploit:~
An existing Q-Feeds cron entry was found in the current crontab.
Replace it with a fresh default entry? Choosing 'no' keeps your crontab unchanged [y/N]:

Rispondi no (il predefinito) per mantenere il tuo crontab esistente. Una prima installazione pulita non ha voci esistenti e salta questa richiesta. Per installazioni automatizzate, imposta QFEEDS_SKIP_CRON=1 per lasciare il crontab intatto senza richieste.


⚙️ Configurazione

Tutte le impostazioni sono memorizzate in /etc/qfeeds/qfeeds_config.conf. Puoi modificare questo file direttamente senza rieseguire l'installer. Le modifiche hanno effetto alla successiva esecuzione del cron.

Riferimento del file di configurazione

VariabileDescrizionePredefinito
BACKENDBackend firewall (nftables o iptables)(rilevato automaticamente)
API_TOKENIl tuo token API di Q-Feeds(richiesto)
FEED_TYPETipo di feed da recuperaremalware_ip
LIMITNumero massimo di IP da recuperare (vuoto = nessun limite)(vuoto)
BLOCK_INCOMINGBlocca il traffico in entrata dagli IP nella blacklistyes
BLOCK_OUTGOINGBlocca il traffico in uscita verso gli IP nella blacklistno
WHITELIST_V4Whitelist IPv4 separata da virgole(vuoto)
WHITELIST_V6Whitelist IPv6 separata da virgole(vuoto)
LOG_FILEPercorso del file di log/var/log/qfeeds_blocklist.log
FULL_SYNC_MAX_AGEEtà massima in secondi prima che venga forzata una risincronizzazione completa (difesa in profondità)86400 (24h)

File creati dall'installer

PercorsoScopo
/etc/qfeeds/qfeeds_config.confFile di configurazione
/etc/qfeeds/.last_syncFile di stato per il tracciamento della sincronizzazione completa/differenziale
/etc/qfeeds/.last_countUltimo conteggio di elementi riuscito, utilizzato per rilevare una baseline persa
/usr/local/bin/update_qfeeds_blocklist.shScript di aggiornamento (eseguito tramite cron)
/var/log/qfeeds_blocklist.logFile di log

🎯 Utilizzo e verifica

Backend nftables```bash

Show the table structure and rules

nft list table ip qfeeds

Count loaded IPv4 IPs (individual addresses)

nft list set ip qfeeds qfeeds_blacklist_v4 | grep -oP '\d+.\d+.\d+.\d+' | wc -l

Show loaded CIDR ranges

nft list set ip qfeeds qfeeds_blacklist_v4_nets | head -20

Count loaded IPv6 addresses

nft list set ip6 qfeeds qfeeds_blacklist_v6 | wc -l

root@kitploit:~
### iptables+ipset backend```bash
# List all Q-Feeds ipsets and their sizes
ipset list -t | grep -A4 qfeeds

# Count loaded IPv4 IPs
ipset list qfeeds_blacklist_v4 | tail -n +9 | wc -l

# Show loaded CIDR ranges
ipset list qfeeds_blacklist_v4_nets | tail -n +9 | head -20

# Show the qfeeds jump rule in INPUT, then the dedicated chain's block rules
iptables -L INPUT -n --line-numbers | grep qfeeds
iptables -L QFEEDS_INPUT -n
ip6tables -L QFEEDS_INPUT -n

Comandi comuni (entrambi i backend)```bash

Check the log (last 20 entries)

tail -20 /var/log/qfeeds_blocklist.log

Check for errors

grep -i "error" /var/log/qfeeds_blocklist.log

Normal run (respects license schedule)

sudo /usr/local/bin/update_qfeeds_blocklist.sh

Force a full sync (ignores schedule, reloads everything)

sudo QFEEDS_FORCE_UPDATE=1 /usr/local/bin/update_qfeeds_blocklist.sh

Verify cron is set up

sudo crontab -l | grep qfeeds

root@kitploit:~
---

## 🔍 Risoluzione dei problemi

### Generale

**L'installazione fallisce con "Unable to locate package"**
- Il programma di installazione rileva automaticamente la tua distribuzione (Debian/Ubuntu, CentOS/RHEL, Fedora, Arch, Alpine). Se il rilevamento fallisce, installa le dipendenze manualmente: `curl`, `jq`, `util-linux` (per `flock`), più `nftables` o `iptables`+`ipset`.

**I set sono vuoti dopo l'installazione**
- Controlla il log: `tail -50 /var/log/qfeeds_blocklist.log`
- Verifica che il tuo token API sia corretto
- Prova un aggiornamento forzato: `sudo QFEEDS_FORCE_UPDATE=1 /usr/local/bin/update_qfeeds_blocklist.sh`

**"Non è ancora il momento. Prossimo aggiornamento programmato per..."**
- L'updater rispetta la pianificazione della tua licenza. Questo messaggio significa che il cron è stato eseguito, ma la tua licenza non consente ancora un aggiornamento. È normale — la prossima esecuzione del cron controllerà di nuovo.
- Il programma di installazione Linux mantiene un indice locale `licenses.php` in cache e utilizza il `next_update` memorizzato come gate della pianificazione. Dopo un prelievo riuscito, aggiorna quell'indice locale per il ciclo successivo.

**Le regole non persistono dopo il riavvio**
- Se `netfilter-persistent` è installato, le regole vengono salvate automaticamente
- **nftables**: se `netfilter-persistent` è assente, l'updater ora scrive automaticamente l'intero ruleset in `/etc/nftables.conf` e abilita il servizio `nftables`; puoi comunque salvare manualmente con `nft list ruleset > /etc/nftables.conf`
- **iptables**: l'updater salva con `ipset save > /etc/ipset.conf` e `iptables-save`; puoi anche salvare manualmente
- Anche se la persistenza fallisce completamente, l'updater si auto-ripara: alla prossima esecuzione rileva il set vuoto dopo il riavvio e lo ricostruisce con una sincronizzazione completa

### Specifiche per nftables

**"Batch nft -f fallito. Ripiego all'esecuzione per comando..."**
- Questo è normale, specialmente su contenitori LXC dove il buffer netlink del kernel (`wmem_max`) è limitato. Il fallback per comando funziona correttamente ed è veloce (~10 secondi per oltre 400k IP).

**Errore di sintassi: "stringa inaspettata"**
- Assicurati di eseguire una versione recente di nftables. Lo script utilizza la sintassi `ip saddr`/`ip daddr` che richiede nftables 0.9+.

**"Errore: Impossibile elaborare la regola: Messaggio troppo lungo"**
- Questo è il limite del buffer netlink, tipico nei contenitori LXC. Lo script passa automaticamente all'esecuzione per comando. Se vedi questo nel log insieme a un caricamento riuscito, funziona come previsto.

### Specifiche per iptables+ipset

**"ipset restore fallito"**
- Verifica che `ipset` sia installato: `command -v ipset`
- Controlla il log per errori specifici: `grep -i "error" /var/log/qfeeds_blocklist.log`
- Assicurati che il modulo ipset sia caricato: `lsmod | grep ip_set`

**Le regole iptables non vengono visualizzate**
- Le regole di blocco risiedono nelle catene dedicate `QFEEDS_INPUT` / `QFEEDS_OUTPUT`; `INPUT`/`OUTPUT` contengono solo un salto `-j QFEEDS_INPUT` taggato con il commento `qfeeds`
- Verifica con: `iptables -L INPUT -n | grep qfeeds` (il salto) e `iptables -L QFEEDS_INPUT -n` (le regole di blocco)
- La regola di salto utilizza `-m comment --comment "qfeeds"` per l'identificazione
- Assicurati che il modulo `xt_set` sia caricato: `modprobe xt_set`

**"ipset create ... fallito"**
- Su kernel molto vecchi, i tipi `hash:ip` o `hash:net` potrebbero non essere disponibili. Aggiorna il kernel o installa `ipset` da un repository più recente.

---

## 🗑️ Disinstallazione```bash
sudo ./qfeeds-uninstaller.sh

Il programma di disinstallazione rimuove tutto in base al backend rilevato:

Backend nftables:

  • Elimina le tabelle ip qfeeds e ip6 qfeeds (incluse tutte le catene, regole e set)

Backend iptables:

  • Rimuove tutte le regole iptables/ip6tables contrassegnate con il commento qfeeds (incluse le regole di salto)
  • Svuota e cancella le catene QFEEDS_INPUT / QFEEDS_OUTPUT
  • Distrugge tutti i set ipset (qfeeds_blacklist_v4, qfeeds_blacklist_v4_nets, qfeeds_whitelist_v4 e gli equivalenti IPv6)

Entrambi i backend:

  • Directory di configurazione (/etc/qfeeds/)
  • Script di aggiornamento (/usr/local/bin/update_qfeeds_blocklist.sh)
  • Job cron, file di log e file di lock

Se il file di configurazione è assente, il programma di disinstallazione tenta la pulizia per entrambi i backend.

Nota: Il programma di disinstallazione non rimuove i pacchetti di sistema (curl, jq, ipset, ecc.) installati come dipendenze.


📄 Licenza

Questo progetto è concesso in licenza secondo i termini della Apache License 2.0 - consultare il file LICENSE per i dettagli.


⚠️ Disclaimer

Utilizzo a proprio rischio.

Si prega di testare questi script nel proprio ambiente prima di implementarli in produzione. L'autore non è responsabile per eventuali problemi o danni che potrebbero derivare dal loro utilizzo.

Assistenza AI: Parti di questo progetto (codice, correzioni e documentazione) sono state scritte con l'aiuto di strumenti AI e successivamente revisionate dai maintainer. Sebbene testiamo e revisioniamo le modifiche, ti invitiamo a rivedere tu stesso gli script prima di eseguirli e a segnalare eventuali anomalie.


Segnala un bug · Richiedi una funzionalità

Scarica lo strumento