
NFtables या IPtables पर सीधे Q-Feeds लागू करने की स्क्रिप्ट
Linux सर्वरों के लिए स्वचालित मैलवेयर IP ब्लॉकलिस्ट — nftables और iptables+ipset का समर्थन
tip.qfeeds.com पर एक निःशुल्क API कुंजी प्राप्त करें।
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
### चरण 3: इंस्टॉलर को root के रूप में चलाएँ```bash
sudo ./qfeeds-installer.sh
इंस्टॉलर निम्नलिखित कार्य करेगा:
आपका सर्वर अब सुरक्षित है। क्रॉन जॉब हर 20 मिनट (कॉन्फ़िगरेबल) में अपडेट की जाँच करता है, और वास्तविक API कॉल केवल तब होती हैं जब आपका लाइसेंस अनुमति देता है।
यह समाधान समय-समय पर Q-Feeds से नवीनतम खतरा खुफिया फ़ीड डाउनलोड करता है और इसे फ़ायरवॉल नियमों के रूप में लागू करता है, जिससे आप यह कर सकते हैं:
इंस्टॉलर स्वचालित रूप से पता लगाता है कि कौन सा फ़ायरवॉल बैकएंड उपलब्ध है:
| प्राथमिकता | पता लगाना | बैकएंड |
|---|---|---|
| 1st | nft कमांड मिला | nftables |
| 2nd | iptables कमांड मिला | iptables+ipset |
| — | कोई नहीं मिला | त्रुटि (बाहर निकलें) |
पता लगाया गया बैकएंड कॉन्फ़िगरेशन फ़ाइल में संग्रहीत किया जाता है। अपडेटर और अनइंस्टॉलर स्क्रिप्ट सही फ़ायरवॉल कमांड चलाने के लिए इसका उपयोग करते हैं।
दोनों बैकएंड अधिकतम प्रदर्शन के लिए समान स्प्लिट-सेट रणनीति का उपयोग करते हैं:
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 │ └─────────────────────────────────────────────────────────┘
**iptables+ipset बैकएंड:**```
┌──────────────────────────────────────────────────────────┐
│ 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) │
└──────────────────────────────────────────────────────────┘
IPv6 के लिए भी यही संरचना मौजूद है (ip6 qfeeds तालिका या ip6tables + family inet6 ipsets)।
दो सेट प्रकार क्यों?
┌──────────────────────────────────────────────────────┐ │ 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 │ └──────────────────────────────────────────────────────┘
### पूर्ण सिंक बनाम डिफ सिंक