Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
NFtables-IPtables-integration-script — Q-Feeds를 NFtables 또는 IPtables에 직접 구현하는 스크립트 | Kitploit
도구/GitHubGitHub/q-feeds/nftables-iptables-integration-script
Defensive ToolsScripting & AutomationConfiguration AuditingNetwork SecurityThreat IntelligenceIncident Response
GitHubq-feeds/nftables-iptables-integration-script

NFtables-IPtables-integration-script

Q-Feeds를 NFtables 또는 IPtables에 직접 구현하는 스크립트

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기웹사이트
269일 전아직 검토되지 않음

🛡️ Q-Feeds Linux 방화벽 차단 목록 통합

Linux 서버용 자동화된 악성코드 IP 차단 목록 — nftables 및 iptables+ipset 지원

License Linux


📋 목차

  • 빠른 시작
  • 개요
  • 작동 방식
  • 사전 요구 사항
  • 상세 설치
  • 구성
  • 사용 및 검증
  • 문제 해결
  • 제거
  • 라이선스

🚀 빠른 시작

1단계: API 토큰 받기

tip.qfeeds.com에서 무료 API 키를 발급받으세요.

2단계: 스크립트 다운로드

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로 설치 프로그램 실행

sudo ./qfeeds-installer.sh

설치 프로그램은 다음을 수행합니다:

  1. 자동 감지 방화벽 백엔드 (nftables 또는 iptables)
  2. API 토큰, 차단 옵션, 선택적 화이트리스트를 묻는 프롬프트 표시
  3. 모든 종속성, 업데이터 스크립트, cron 작업 설치
  4. 즉시 첫 번째 전체 동기화 수행

4단계: 완료

이제 서버가 보호됩니다. cron 작업은 20분마다(구성 가능) 업데이트를 확인하며, 실제 API 호출은 라이선스가 허용할 때만 발생합니다.


📖 개요

이 솔루션은 주기적으로 Q-Feeds에서 최신 위협 인텔리전스 피드를 다운로드하여 방화벽 규칙으로 적용합니다(단계별 가이드: NFtables/IPtables 설정). 이를 통해 다음을 수행할 수 있습니다:

  • ✅ 알려진 악성 IP로부터의 수신 연결 차단
  • ✅ 알려진 악성 IP로의 발신 연결 차단
  • ✅ 자신의 IP/CIDR을 화이트리스트에 추가하여 스스로 잠기는 일 방지
  • ✅ Q-Feeds 라이선스에 따른 자동 스케줄링
  • ✅ 증분 업데이트 — 최소 리소스 사용을 위한 diff 기반 동기화

이 접근 방식의 이유

  • ✅ 백엔드 자동 감지 — 수동 선택 없이 nftables 또는 iptables+ipset에서 작동
  • ✅ 빠름 — 최적화된 해시 세트(nftables) 또는 ipset(iptables)을 사용하여 40만 개 이상의 IP를 몇 초 만에 로드
  • ✅ 안전 — 전용 테이블/세트 사용 — 기존 방화벽 규칙을 절대 건드리지 않음
  • ✅ 효율적 — diff 기반 업데이트는 전체 목록이 아닌 변경 사항만 처리
  • ✅ 신뢰성 — 자가 복구: 비어 있거나 불완전한 로컬 세트(예: 재부팅 후)를 감지하여 재구성하며, diff 실패 시 자동으로 전체 동기화로 폴백
  • ✅ 유연성 — 수신/발신 차단 선택, 선택적 화이트리스트

🔧 작동 방식

백엔드 감지

설치 프로그램은 사용 가능한 방화벽 백엔드를 자동으로 감지합니다:

우선순위감지백엔드
1순위nft 명령어 발견nftables
2순위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).

왜 두 가지 set 유형인가?

  • Hash sets는 개별 IP를 O(1) 삽입 및 조회로 저장합니다 — 400k+ IP를 로드하는 데 몇 초밖에 걸리지 않습니다
  • Net/interval sets는 피드에 있는 소수의 CIDR 범위에만 사용됩니다
  • 이는 수십만 개의 항목이 있는 단일 set을 느리게 만들 수 있는 값비싼 병합 작업을 피합니다

업데이트 흐름

┌──────────────────────────────────────────────────────┐
│  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                                    │
└──────────────────────────────────────────────────────┘

전체 동기화 vs 차분 동기화

모드시점수행 작업
전체 동기화최초 실행, 강제 업데이트, 차분 실패 후, 로컬 세트가 기준선을 잃었을 때(비어 있거나 예상보다 훨씬 작을 때), 또는 마지막 동기화가 FULL_SYNC_MAX_AGE(기본값 24시간)보다 오래된 경우각 피드를 먼저 가져와 검증한 다음, 블랙리스트 세트를 비우고 다시 로드합니다. 유효한 데이터를 확보한 후에만 세트를 비우므로, 가져오기 실패로 인해 보호되지 않는 상태가 되는 일은 없습니다
차분 동기화이후 실행(malware_ip 피드만 해당) 중 로컬 세트가 정상일 때마지막 가져오기 이후의 추가(+) 및 제거(-) 항목만 가져옵니다

차분 동기화는 API 키별로 이루어집니다 — API는 마지막 성공적인 가져오기를 추적하며 그 이후의 변경 사항만 반환합니다. 차분 동기화가 실패하면 스크립트는 자동으로 전체 동기화로 폴백합니다.

자가 복구: 차분 업데이트는 기존 세트만 패치합니다. 해당 세트가 손실되거나 잘린 경우 — 예를 들어 방화벽 규칙이 유지되지 않은 재부팅, 수동 초기화, 또는 이전의 부분 동기화 — 업데이터는 누락된 기준선(실시간 요소 수가 0이거나 마지막으로 기록된 수보다 훨씬 낮음)을 감지하고 빈 세트에 차분을 적용하는 대신 전체 재구성을 강제합니다. 추가 안전망으로 주기적인 전체 동기화도 강제합니다(기본적으로 24시간마다, FULL_SYNC_MAX_AGE를 통해).

라이선스 기반 스케줄링

업데이터는 매 실행 전에 Q-Feeds 라이선스 API(licenses.php)를 확인합니다. 라이선스의 next_update 타임스탬프에 아직 도달하지 않았다면, 스크립트는 불필요한 API 호출 없이 조기 종료합니다. cron 작업은 자주 실행되지만(기본값: 20분마다), 실제 업데이트는 라이선스가 허용할 때만 발생합니다.


✅ 사전 요구 사항

설치하기 전에 다음 사항을 확인하세요:

  • nftables 또는 iptables를 갖춘 Linux 서버 (Debian, Ubuntu, CentOS, Fedora, Arch, Alpine)
  • 루트 접근 권한 — 설치 프로그램과 업데이터는 루트로 실행해야 합니다
  • Q-Feeds API 토큰 — tip.qfeeds.com에서 무료로 발급받으세요
  • 인터넷 접속 — 서버가 api.qfeeds.com에 접속할 수 있어야 합니다
도구 다운로드