
ioc2rpz는 위협 인텔리전스가 DNS를 만나는 곳입니다.
ioc2rpz™: DNS 보안 솔루션 - ioc2rpz™는 위협 지표를 실행 가능한 응답 정책 영역(RPZ) 피드로 변환하는 강력한 DNS 서버입니다. 업데이트 프로세스를 자동화하여 악성 도메인 및 IP 주소를 포함한 최신 위협으로부터 네트워크를 보호합니다. IOC 피드를 RPZ로 변환함으로써 ioc2rpz™는 위협 인텔리전스와 DNS 보안 간의 중요한 연결 고리 역할을 하며, ISC Bind 또는 PowerDNS와 같은 RPZ 지원 DNS 서버와 호환됩니다.
DNS는 인터넷의 제어 평면입니다. 일반적으로 DNS는 좋은 목적으로 사용되지만:

ISC Bind는 사실상 네임서버의 표준입니다. ISC BIND 9.8에 응답 정책 영역이 도입되면서 DNS 계층에서 멀웨어를 모니터링하고 차단하는 것이 간단한 작업이 되었습니다. RPZ는 PowerDNS 리커서 4.0.0 이상에서 지원되며, Knot DNS도 부분적으로 RPZ를 지원합니다.
기존 네트워크 보호 솔루션과 비교할 때, DNS 서버는 성능 저하 없이 수백만 개의 지표를 처리할 수 있지만, 주 DNS 서버에서 응답 정책 영역을 유지 관리하는 자동화되고 효율적인 방법은 없었습니다.
일반적으로 침해 지표는 일반 텍스트로 배포되지만 형식이 다르며, IOC 제공업체 중 일부만이 RPZ를 통해 제공합니다.
ioc2rpz™는 다양한 소스의 지표(예: 악성 FQDN, IP)를 RPZ 피드로 자동 변환하고 자동으로 유지/업데이트하는 맞춤형 DNS 서버입니다. 이 피드는 ISC Bind, PowerDNS 등 RPZ를 지원하는 모든 오픈 소스 및/또는 상용 DNS 서버에 배포할 수 있습니다. 라우터, 데스크탑, 서버, 심지어 Raspberry Pi에서도 RPZ 필터링이 가능한 자체 DNS 서버를 실행할 수 있습니다. 시스템 메모리만이 유일한 제한 사항입니다.
ioc2rpz™를 사용하여 자체 피드와 작업을 정의하고 원치 않는 통신을 방지할 수 있습니다.
ioc2rpz™는 IOC 피드를 응답 정책 영역(RPZ)으로 변환합니다. 여러 피드를 혼합하여 단일 RPZ 또는 여러 RPZ를 생성할 수 있습니다. 신뢰할 수 있는 도메인과 IP는 화이트리스트에 추가할 수 있습니다. ioc2rpz™는 지표의 만료를 지원하고 그에 따라 영역을 재구축합니다.
현재 릴리스는 다음을 지원합니다: 로컬 파일, http/https/ftp를 통한 파일/요청, 그리고 다른 리소스 유형에 접근하기 위한 셸 스크립트. 지표를 추출하기 위해 REGEX를 작성할 수 있고 지표가 개행 문자 및/또는 캐리지 리턴 문자(/n, /r, /r/n)로 구분되어 있다면 어떤 파일 형식이든 사용할 수 있습니다.
ioc2rpz는 Erlang/OTP 위에 구축되어 있으며, 오류 허용 및 자동 복구를 보장하는 감독 트리를 갖추고 있습니다. 전체 세부 사항은 docs/architecture.md를 참조하십시오.``` ioc2rpz_app (application) └── ioc2rpz_sup (supervisor) ├── ioc2rpz_db_sup — ETS table heir process ├── ioc2rpz_tcp_sup — TCP listener pool (5 workers) ├── ioc2rpz_udp_sup — UDP listener ├── ioc2rpz_tls_sup — TLS/DoT listener pool (5 workers) [if cert configured] └── ioc2rpz_rest_sup — Cowboy HTTPS (REST API + DoH) [if cert configured]
Key modules:
| 모듈 | 담당 |
|--------|---------------|
| `ioc2rpz.erl` | TCP/TLS DNS 작업자 — 수락, 구문 분석, 검증, 응답 |
| `ioc2rpz_udp.erl` | UDP DNS 수신기 — SOA 질의 |
| `ioc2rpz_conn.erl` | IOC 소스 가져오기 (HTTP/HTTPS/파일/셸) |
| `ioc2rpz_db.erl` | ETS 기반 영역 및 패킷 캐시 |
| `ioc2rpz_sup.erl` | 메인 감독자, 구성 로딩, 영역 스케줄링 |
| `ioc2rpz_rest.erl` | REST 관리 API (Cowboy) |
| `ioc2rpz_doh.erl` | DNS-over-HTTPS 핸들러 |
## ioc2rpz™ 사용 방법
ioc2rpz™는 응답 정책 영역(Response Policy Zones)을 지원하는 모든 DNS 서버와 함께 사용할 수 있습니다. 예를 들어 최신 버전의 ISC BIND, PowerDNS 및 이러한 제품 기반의 상용 DNS 서버(예: Infoblox, Blue Cat, Efficient IP)가 있습니다. 샘플 BIND 구성 파일(named.conf)이 cfg 폴더에 제공됩니다.
<p align="center"><a href="http://www.youtube.com/watch?feature=player_embedded&v=bvhyMFa_mBM" target="_blank"><img src="https://raw.githubusercontent.com/Homas/ioc2rpz/master/ioc2rpz_demo.png"></a></p>
## ioc2rpz™ 웹 인터페이스
[ioc2rpz.gui](https://github.com/Homas/ioc2rpz.gui)는 별도 프로젝트로 개발된 관리 웹 인터페이스입니다. ioc2rpz™ 실행에 필수적이지 않습니다.
## 프로토콜 지원
ioc2rpz™는 여러 전송 프로토콜을 수신합니다. 모든 전송은 동일한 쿼리 처리 파이프라인을 공유합니다: 속도 제한, TSIG 검증, 영역 조회, 응답 생성. 전체 프로토콜 문서는 [docs/protocols.md](https://github.com/homas/ioc2rpz/blob/master/docs/protocols.md)를 참조하십시오.
### 포트 요약
| 포트 | 프로토콜 | 서비스 | 조건 |
|------|----------|---------|-----------|
| 53 | UDP | DNS 질의 (SOA만) | 항상 |
| 53 | TCP | DNS 질의, AXFR/IXFR 영역 전송, 관리 | 항상 |
| 853 | TCP+TLS | DoT — TCP와 동일하나 암호화됨 | `cert` 구성 필요 |
| 443/8443 | TCP+TLS | DoH (`/dns-query`) 및 REST API | `cert` 구성 필요 |
### UDP (포트 53)
UDP는 경량 DNS 질의, 주로 SOA 조회에 사용됩니다. 512바이트(또는 EDNS0에서 알린 버퍼 크기)를 초과하는 응답은 RFC 1035 §4.2.1에 따라 TC(절단) 비트를 설정하여 클라이언트가 TCP를 통해 재시도하도록 합니다. 관리 명령은 UDP를 통해 지원되지 않습니다.```bash
dig @127.0.0.1 zone.ioc2rpz SOA -y hmac-sha256:keyname:base64key
TCP는 zone transfers (AXFR/IXFR), SOA queries 및 management commands를 처리합니다. 5개의 pre-spawned accept workers로 구성된 pool이 들어오는 연결을 처리합니다.```bash
dig @127.0.0.1 zone.ioc2rpz AXFR +tcp -y hmac-sha256:keyname:base64key
dig @127.0.0.1 zone.ioc2rpz IXFR=12345 +tcp -y hmac-sha256:keyname:base64key
### DNS over TLS / DoT (포트 853)
ioc2rpz™는 DoT를 통한 RPZ 배포를 지원합니다. TLS 리스너는 구성에 `cert` 레코드가 있을 때 포트 853에서 자동으로 시작됩니다. DoT는 TCP와 동일한 작업(AXFR, IXFR, SOA, 관리)을 지원합니다.
- 지원되는 TLS 버전: 1.2 및 1.3 (`?TLSVersion = 'tlsv1.2-1.3'`)
- RFC 7858 §3.4에 따른 연결 재사용 지원 (TLS 세션당 여러 쿼리, 30초 유휴 시간 제한)
- TLS PIN은 지원되지 않습니다
- DNS NOTIFY 메시지는 암호화되지 않은 상태로 전송됩니다 (일반 UDP)
- 인증서는 디스크에서 파일이 교체될 때 자동으로 새로고침됩니다 (Erlang SSL 캐싱으로 인해 최대 약 2분 지연)
인증서 설정에 대한 자세한 내용은 [인증서 설정](#certificate-setup)을 참조하세요.```bash
# SOA query over DoT
kdig @127.0.0.1 -p 853 zone.ioc2rpz SOA +tls -y hmac-sha256:keyname:base64key
# AXFR over DoT
dig @127.0.0.1 -p 853 zone.ioc2rpz AXFR +tls +tcp -y hmac-sha256:keyname:base64key
DoH는 /dns-query 엔드포인트를 통해 HTTPS를 이용한 DNS 해석을 제공합니다. 지원되는 메서드:
?dns= 쿼리 파라미터에 base64url로 인코딩된 DNS 메시지 사용Content-Type: application/dns-message 본문 사용 (최대 4096 바이트; 더 큰 페이로드는 HTTP 413 수신)응답은 Content-Type: application/dns-message를 사용합니다. DoH는 전체 DNS wire-format 메시지를 전달하며 Do53/DoT와 동일한 경로로 처리되므로 동일한 TSIG 인증을 상속합니다. 영역 전송(AXFR/IXFR)은 TCP 전용으로 유지되며 DoH를 통해 제공되지 않습니다.```bash
curl -H "Accept: application/dns-message"
"https://127.0.0.1:443/dns-query?dns=AAABAAABAAAAAAAAA3d3dwdleGFtcGxlA2NvbQAAAQAB" -k
curl -X POST -H "Content-Type: application/dns-message"
--data-binary @dns_query.bin "https://127.0.0.1:443/dns-query" -k
### 속도 제한
DNS 질의는 지능형(하이브리드) 키를 사용하여 속도가 제한되므로, 합법적인 다중 영역 클라이언트는 불이익을 받지 않으면서 질의 이름 변형 남용이 차단됩니다: