De scripts zijn open source en staan op GitHub: Q-Feeds/NFtables-IPtables-integration-script. Haal ze daar altijd op, dan heeft u zeker de actuele versie. U heeft root-toegang nodig, uitgaand HTTPS naar api.qfeeds.com en een Q-Feeds API-token. Zie Uw threat feeds ophalen. De installer vraagt u eerst om onze Algemene voorwaarden en de EULA te accepteren.
Vereisten
- OS: Linux met nftables of met iptables plus ipset
- Distributies: Debian, Ubuntu, CentOS, RHEL, AlmaLinux, Rocky Linux, Fedora, openSUSE Leap, SLES, Arch Linux, Alpine
- Rechten: root voor installatie, updates en firewallwijzigingen
- Feed: malware-IP-lijst (
feed_type=malware_ip) - Pakketten: die installeert het script voor u, u hoeft dus niets voor te bereiden. Bij nftables zijn dat
nftables,curl,jqenutil-linux. Bij iptables zijn datiptables,ipset,curl,jqenutil-linux.
Optionele test vooraf:
curl -v -u api_token:YOUR_TOKEN "https://api.qfeeds.com/api?feed_type=malware_ip&limit=1000"
Scripts ophalen
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
Staat git niet op de server? Download dan de ZIP van de repositorypagina en pak die uit.
Installeren
sudo ./qfeeds-installer.sh
De installer bepaalt welke firewall u gebruikt, stelt een paar vragen, plaatst het updatescript met een cronjob en doet meteen een eerste volledige sync, zodat de blocklist direct actief is. De vragen op rij:
- Voorwaarden en EULA: typ
yesom verder te gaan. - API-token: uw Q-Feeds token. Laat u dit leeg, dan stopt de installer.
- Feed type: standaard
malware_ip. Pas dit alleen aan als u van ons een ander feed type heeft gekregen. - Aantal IP's: druk op Enter voor geen limiet, dat is onze aanbeveling.
- Inkomend blokkeren (standaard ja): verkeer van geblokkeerde IP's naar uw server wordt gedropt.
- Uitgaand blokkeren (standaard nee): verkeer van uw server naar geblokkeerde IP's wordt gedropt.
- Whitelist (optioneel): IPv4- en IPv6-adressen of CIDR's die nooit geblokkeerd mogen worden, gescheiden door komma's. Zet hier uw eigen beheer-IP's in, dan sluit u zichzelf nooit buiten.
- Cron-schema: standaard
*/10 * * * *, dus elke tien minuten. Vaak draaien is geen probleem, want het updatescript belt de API alleen als uw licentie een nieuwe update toestaat.
Waarschuwingen over CIDR-notatie tijdens het ophalen van de feed zijn onschuldig en kunt u negeren. Draait u de installer opnieuw op een host waar al een Q-Feeds cronregel staat, dan vraagt hij eerst om toestemming en laat hij uw crontab standaard ongemoeid. Voor onbewaakte installaties zet u QFEEDS_SKIP_CRON=1, dan wordt die stap zonder vraag overgeslagen.
Hoe het werkt
- Firewall bepalen: is het commando
nftaanwezig, dan gebruikt de installer nftables, anders valt hij terug op iptables met ipset. De keuze komt alsBACKENDin het configuratiebestand te staan; het updatescript en de uninstaller volgen die. - Eigen regels: nftables krijgt eigen tabellen
ip qfeedsenip6 qfeeds. Bij iptables staan de blokkeerregels in aparte chainsQFEEDS_INPUTenQFEEDS_OUTPUT, met één gemarkeerde jump-regel inINPUTenOUTPUT. Uw bestaande firewallregels blijven onaangeroerd. - Twee soorten sets: losse adressen gaan in een hashset en het kleine aantal CIDR-reeksen in een aparte netwerkset. Daardoor duurt het laden van 400.000 adressen of meer seconden in plaats van minuten.
- Whitelist gaat voor: whitelistregels worden vóór de blocklist beoordeeld, dus een adres op de whitelist komt altijd door.
- Volledige sync en diff-sync: de eerste run laadt de hele feed, latere runs halen alleen de toevoegingen en verwijderingen sinds uw vorige ophaalactie op. Een volledige sync wordt pas doorgevoerd als de nieuwe data binnen en gecontroleerd is, dus een mislukte download laat u nooit onbeschermd achter.
- Zelfherstellend: is de set leeg of veel kleiner dan verwacht, bijvoorbeeld na een reboot waarbij de regels niet bewaard zijn, dan bouwt het script de set volledig opnieuw op in plaats van een lege set bij te werken. Standaard volgt er ook elke 24 uur een volledige sync.
- Op basis van uw licentie: voor elke run kijkt het script wanneer uw licentie de volgende update toestaat. Is het nog niet zover, dan stopt het zonder de API te bellen.
Controleren
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 met 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
Voor beide
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
Het laatste commando forceert een volledige sync en negeert het licentieschema. Dat is de snelste manier om te zien of alles van begin tot eind werkt.
Configuratie
Alle instellingen staan in /etc/qfeeds/qfeeds_config.conf. U kunt dat bestand gewoon aanpassen in plaats van de installer opnieuw te draaien; de wijziging geldt vanaf de volgende run.
| Instelling | Omschrijving | Standaard |
|---|---|---|
BACKEND | Firewall, nftables of iptables | automatisch bepaald |
API_TOKEN | Uw Q-Feeds API-token | verplicht |
FEED_TYPE | Feed die wordt opgehaald | malware_ip |
LIMIT | Maximaal aantal IP's, leeg is geen limiet | leeg |
BLOCK_INCOMING | Verkeer van geblokkeerde IP's blokkeren | yes |
BLOCK_OUTGOING | Verkeer naar geblokkeerde IP's blokkeren | no |
WHITELIST_V4 | IPv4-adressen of CIDR's, gescheiden door komma's | leeg |
WHITELIST_V6 | IPv6-adressen of CIDR's, gescheiden door komma's | leeg |
LOG_FILE | Pad naar het logbestand | /var/log/qfeeds_blocklist.log |
FULL_SYNC_MAX_AGE | Aantal seconden voordat opnieuw een volledige sync volgt | 86400 |
Bestands- en maplocaties
- Configuratie:
/etc/qfeeds/qfeeds_config.conf - Syncstatus:
/etc/qfeeds/.last_syncen/etc/qfeeds/.last_count - Updatescript:
/usr/local/bin/update_qfeeds_blocklist.sh - Log:
/var/log/qfeeds_blocklist.log - Lockbestand:
/var/lock/qfeeds_blocklist.lock - Cron: root crontab
- Bewaren van regels:
netfilter-persistentals dat aanwezig is, anders/etc/nftables.confbij nftables of/etc/ipset.confmet/etc/iptables.rulesen/etc/ip6tables.rulesbij iptables
De-installeren
sudo ./qfeeds-uninstaller.sh
De uninstaller leest welke firewall is ingesteld en ruimt daarop af. Bij nftables verwijdert hij de tabellen ip qfeeds en ip6 qfeeds met alle chains, regels en sets. Bij iptables haalt hij de gemarkeerde jump-regels weg, leegt en verwijdert hij de chains QFEEDS_INPUT en QFEEDS_OUTPUT en verwijdert hij alle qfeeds_-sets. In beide gevallen gaan ook de configuratiemap, het updatescript, de cronjob, het log en het lockbestand weg. Ontbreekt het configuratiebestand, dan ruimt hij voor de zekerheid beide varianten op.
Systeempakketten blijven staan. Verwijder ze zelf als u ze niet meer nodig heeft:
- 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
Wees voorzichtig met iptables, nftables, curl en jq: andere onderdelen van uw systeem hebben die vrijwel zeker nodig.
Probleemoplossing
- Sets zijn leeg na de installatie: bekijk
sudo tail -50 /var/log/qfeeds_blocklist.log, controleer uw API-token en draai daarnasudo QFEEDS_FORCE_UPDATE=1 /usr/local/bin/update_qfeeds_blocklist.sh. - "Not time yet. Next update scheduled at ...": dat is normaal. De cronjob heeft gedraaid, maar uw licentie staat nog geen nieuwe update toe. De volgende run kijkt opnieuw.
- Regels zijn weg na een herstart: het script bewaart de regels automatisch en ziet bij de volgende run dat de set leeg is, waarna het die opnieuw opbouwt. Controleer voor de zekerheid of
netfilter-persistentis geïnstalleerd of denftables-service actief is. - "Batch nft -f failed. Falling back to per-command execution": onschuldig. Dit gebeurt vooral in LXC-containers met een beperkte netlink-buffer. Ook dan zijn 400.000 adressen of meer in ongeveer tien seconden geladen. Datzelfde geldt voor "Message too long".
- "ipset restore failed": controleer met
command -v ipsetof ipset aanwezig is en metlsmod | grep ip_setof de kernelmodule geladen is. - Geen regels te zien in INPUT: bij iptables staan de blokkeerregels in
QFEEDS_INPUT. InINPUTstaat alleen de jump-regel, gemarkeerd met de opmerkingqfeeds. Controleer beide metsudo iptables -L INPUT -n | grep qfeedsensudo iptables -L QFEEDS_INPUT -n. - Installatie stopt met "Unable to locate package": uw distributie is niet herkend. Installeer
curl,jqenutil-linuxhandmatig, plusnftablesofiptablesmetipset, en draai de installer opnieuw. - Support: support@qfeeds.com of de supportpagina. Een fout in de scripts gevonden? Meld die als issue in de GitHub-repository.
Download de volledige pdf-handleiding Bekijk de scripts op GitHub