treeru.com
네트워크

OPNsense IDS를 AI로 30분 만에 실전 차단으로 — 방화벽 켜놓고 방치하지 않기

2026-04-06
Treeru

방화벽을 설치하고 IDS를 켜놓는 것만으로는 충분하지 않습니다. 저도 OPNsense에 Suricata IDS를 활성화한 뒤 한동안 방치했습니다. 알림은 65건이 쌓여 있었고, 전부 allowed 상태였습니다. 공격이든 정상 트래픽이든 구분 없이 그냥 통과시키고 있었던 겁니다.

AI와 OPNsense REST API를 조합해 상태 파악부터 DROP 규칙 적용, 정상 트래픽 suppress, cron 자동화까지 약 30분으로 마무리한 과정을 공유합니다.

22건

실제 공격 차단

2,310개

DROP 규칙 활성화

30분

AI와 대화 소요 시간

매일

규칙 자동 업데이트

1방화벽을 켜놓기만 하면 끝인가

OPNsense에는 Suricata 기반의 IDS/IPS가 내장되어 있습니다. 메뉴에서 활성화하고 ruleset을 다운받으면 알림이 쌓이기 시작합니다. 여기까지만 하고 넘어가는 경우가 많습니다.

문제는 IDS는 탐지(Detection)만 하고, 차단(Prevention)은 별도 설정이 필요하다는 겁니다. 기본 상태에서는 의심스러운 패킷을 발견해도 로그에만 남길 뿐 통과를 허용합니다. 수개월간 IDS를 켜놓고도 실질적인 차단이 전혀 없었던 이유가 여기 있었습니다.

점검 전 상태

IDS 알림 65건 — 전부 allowed. 공격 시도와 정상 트래픽이 같은 처리를 받고 있었습니다. DROP 규칙 0개. 규칙 파일은 3개월 이상 업데이트 없음.

2IDS를 켜놓고도 안 막히는 이유 3가지

Policy Action을 Drop으로 바꿔도 규칙 파일에 반영 안 됨

OPNsense GUI에서 Policy → Action을 Drop으로 변경해도, 변경 사항은 즉시 적용되지 않습니다. configctl ids update 명령으로 규칙 파일을 재생성해야 실제로 DROP이 작동합니다. 설정 저장과 규칙 적용은 별개 단계입니다.

규칙 자동 업데이트 cron이 비활성화 상태

IDS 탐지 능력은 규칙 파일의 최신성에 달려 있습니다. 설치 직후 cron을 활성화하지 않으면, 처음 다운받은 규칙 파일 그대로 수개월이 지나갑니다. 새로운 CVE 탐지 규칙이 전혀 추가되지 않은 상태에서 운영됩니다.

정상 트래픽 suppress 미처리

백업 서버로의 SSH 연결, GitHub CDN에 대한 npm 패키지 다운로드 등은 IDS가 의심 트래픽으로 감지합니다. suppress 설정 없이 전체 DROP을 걸면 이 트래픽까지 차단됩니다. 정상/비정상 분류 없이는 실전에 쓸 수 없습니다.

3준비 — SSH 키 등록과 API 접근

AI가 OPNsense를 직접 제어하려면 두 가지 접근 방법이 필요합니다. SSH를 통한 직접 명령 실행과, REST API를 통한 설정 변경입니다.

SSH 키 등록

서버에서 공개키를 확인한 뒤, OPNsense 웹 GUI의 System → Access → Users → root → Authorized keys에 붙여넣으면 됩니다. 간단해 보이지만 OPNsense가 FreeBSD 기반이라 몇 가지 주의가 필요합니다.

FreeBSD 기반 주의사항

  • sed -i 명령이 동작하지 않습니다 (GNU sed와 BSD sed 차이)
  • 기본 셸이 csh이므로 bash 스크립트 직접 실행에 주의
  • 패키지 관리자가 apt가 아니라 pkg
  • 파일 편집은 GUI Authorized keys 항목을 직접 사용하는 것이 가장 안전

API 키 생성

OPNsense 웹 GUI에서 System → Access → Users의 API 탭에서 API Key와 API Secret을 생성합니다. 생성 즉시 다운로드되며, 이후에는 Secret을 다시 확인할 수 없습니다.

4OPNsense API 활용

OPNsense는 대부분의 기능을 REST API로 제어할 수 있습니다. AI에게 API_KEY와 API_SECRET 변수를 환경변수로 전달하면, curl 한 줄로 방화벽 상태를 조회하고 설정을 변경할 수 있습니다.

# 기본 설정
API="https://192.168.1.1/api"
AUTH="$API_KEY:$API_SECRET"

# 펌웨어 상태 확인
curl -sk "$API/core/firmware/status" -u "$AUTH"

# IDS 알림 조회 (최근 100건)
curl -sk "$API/ids/service/queryAlerts" \
  -u "$AUTH" -X POST \
  -d '{"current":1,"rowCount":100}'

# 규칙 업데이트 적용
curl -sk "$API/ids/service/updateRules" \
  -u "$AUTH" -X POST

# IDS 서비스 재시작
curl -sk "$API/ids/service/restart" \
  -u "$AUTH" -X POST

AI가 이 API들을 순서대로 호출하면서 현재 상태를 파악하고, 변경 사항을 적용하고, 결과를 검증하는 흐름으로 진행됩니다. 사람이 GUI를 클릭하는 것보다 훨씬 빠르고 일관성 있게 처리됩니다.

자체 서명 인증서 처리

OPNsense는 기본으로 자체 서명 인증서를 사용합니다. curl -sk -k 플래그로 인증서 검증을 건너뜁니다. 내부 네트워크에서만 사용하므로 보안 위험은 낮습니다.

5AI가 수행한 과정

AI에게 API 접근 정보를 주고 “방화벽 보안 상태를 점검하고 실전 차단 체계를 만들어달라”고 요청했습니다. 약 30분의 대화 동안 아래 순서로 진행됐습니다.

01

전체 상태 파악

펌웨어 버전, 인터페이스 구성, 게이트웨이 상태, 현재 IDS 알림 65건, NAT 설정, WireGuard VPN 상태, ZFS 풀 상태를 일괄 조회했습니다.

02

IDS 알림 65건 분석 및 분류

알림을 외부 공격(CVE 익스플로잇, 포트 스캔, Zmap)과 정상 트래픽(내부 백업 SSH, GitHub npm CDN)으로 분류했습니다. 차단해야 할 트래픽과 오탐으로 suppress해야 할 트래픽을 구분했습니다.

03

IDS 정책 변경 및 규칙 업데이트

Policy Action을 Alert에서 Drop으로 변경하고, ids/service/updateRules API로 규칙 파일을 재생성했습니다. 이 단계에서 2,310개의 DROP 규칙이 활성화됐습니다.

04

정상 트래픽 suppress 처리

외부 백업 서버 2대의 SSH 접속(sig_id 2001978)과 GitHub Actions SSH(20.200.245.247)를 suppress 규칙으로 등록해 오탐 알림을 제거했습니다.

05

규칙 자동 업데이트 cron 활성화

매일 00:00에 IDS 규칙을 자동 업데이트하도록 cron을 활성화했습니다. 이후부터는 새로운 CVE 탐지 규칙이 자동으로 반영됩니다.

6설정 후 결과

설정 전후를 비교하면 변화가 명확합니다. 65건 전부 통과에서 22건 차단, 15건 정상 허용으로 정리됐습니다.

항목설정 전설정 후
IDS 알림 처리65건 전부 allowed22건 blocked, 15건 allowed
DROP 규칙 수미적용 (0개)2,310개 활성
규칙 업데이트수동 (3개월 이상 방치)매일 00:00 자동
정상 트래픽 분류미처리suppress 3건 처리
점검 기록없음날짜별 마크다운 저장

Suppress 설정 예시

sig_id 2001978은 “ET POLICY SSH session in progress on non-standard port” 규칙입니다. 외부 백업 서버 2대가 SSH로 접속하는 트래픽이 이 규칙에 걸렸습니다. 정상 트래픽이므로 해당 목적지 IP만 예외 처리했습니다.

# OPNsense IDS Suppress 설정
suppress gen_id 1, sig_id 2001978, track by_dst, ip 14.51.225.150   # 외부 백업 서버 A
suppress gen_id 1, sig_id 2001978, track by_dst, ip 211.213.5.223   # 외부 백업 서버 B
suppress gen_id 1, sig_id 2001978, track by_dst, ip 20.200.245.247  # GitHub SSH

7차단된 실제 공격

DROP 규칙 적용 직후부터 실제 공격이 차단되기 시작했습니다. 공인 IP(218.48.87.25)로 향하는 트래픽 중 아래 공격들이 IDS에 의해 차단됐습니다.

차단된 공격 (blocked)

소스 IP국가 / 출처공격 유형결과
188.132.249.102터키CVE-2020-10173 Command Injectionblocked
86.183.56.241영국CVE-2020-10173 Command Injectionblocked
102.210.56.230아프리카CVE-2020-10173 Command Injectionblocked
20.65.195.112AzureZmap 포트 스캔blocked
45.33.109.8LinodeZmap 포트 스캔blocked
40.76.124.166AzureZmap 포트 스캔blocked
172.202.118.20AzureZmap 포트 스캔blocked

정상 트래픽 (allowed 유지)

소스 IP용도결과
199.232.162.172GitHub CDN (npm 패키지 다운로드)allowed
3.129.187.38SSH on 443 — 정보성 감지, 차단 불필요allowed

CVE-2020-10173이란

Comtrend VR-3033 라우터의 Command Injection 취약점입니다. 2020년에 공개된 취약점임에도 터키, 영국, 아프리카 등 다양한 국가에서 여전히 스캐닝이 이루어지고 있습니다. IDS 규칙 업데이트가 없었다면 탐지조차 못 했을 공격입니다.

8방화벽 관리 팁

emerging-policy.rules는 DROP에 넣지 말 것

Emerging Threats의 emerging-policy.rules는 SSH 세션 감지, ZIP 내 EXE 파일 감지 등 정보성 규칙을 포함합니다. 이 규칙셋을 DROP 정책에 포함하면 정상적인 SSH 접속과 파일 다운로드가 차단됩니다. 반드시 Alert 또는 제외 처리해야 합니다.

# 정보성 규칙셋 — Alert만 설정, DROP 제외
emerging-policy.rules   → Action: Alert (DROP 아님)
emerging-exploit.rules  → Action: Drop  (실제 공격 탐지)
emerging-scan.rules     → Action: Drop  (포트 스캔 탐지)

점검 결과를 날짜별 마크다운으로 저장

방화벽 점검 결과를 날짜별 마크다운 파일로 기록해두면 두 가지 장점이 있습니다. 추후 보안 감사 때 바로 꺼내 쓸 수 있고, 시간에 따른 공격 패턴 변화를 추적할 수 있습니다.

# 점검 기록 파일 예시
firewall-review/
├── 2026-04-06.md  ← IDS 활성화, DROP 규칙 2310개, suppress 3건
├── 2026-05-01.md
└── 2026-06-01.md

IDS 점검 주기

매일 자동규칙 파일 업데이트 (cron 활성화)
주 1회새로운 blocked 알림 검토 — 오탐 여부 확인 및 suppress 추가
월 1회전체 상태 점검 — 펌웨어, 게이트웨이, VPN, ZFS 포함

정리

IDS는 켜놓는 것과 실제로 작동하는 것 사이에 꽤 큰 차이가 있습니다. Policy 변경 후 규칙 재적용, cron 활성화, suppress 처리 — 이 세 단계가 빠지면 IDS는 로그 수집 도구에 불과합니다.

AI와 API를 활용하면 이 과정을 30분 만에 완료할 수 있습니다. 알림 분류도, suppress 설정도, cron 활성화도 AI가 순서대로 처리합니다. 월 1회 점검 루틴에 AI를 포함시키면 방화벽 관리 부담을 크게 줄일 수 있습니다.

T

Treeru

웹 개발, IT 인프라, AI 솔루션 분야의 실무 인사이트를 공유합니다. 기업의 디지털 전환을 돕는 IT 파트너, Treeru입니다.

공유

댓글

(5)
4.80/ 5

로그인 하면 댓글을 작성할 수 있습니다.

2026-04-15
555.0

점검 결과를 날짜별 마크다운으로 기록하는 팁이 좋네요. 보안 감사 때 바로 꺼내 쓸 수 있겠어요. emerging-policy.rules를 DROP에서 빼야 한다는 것도 실제로 겪어봐야 알 수 있는 내용입니다.

2026-04-13
4.554.5

FreeBSD 기반이라 sed -i 안 되고 기본 셸이 csh인 부분에서 막힌 적 있었는데 잘 정리해주셨네요. Azure IP 대역에서 Zmap 스캔이 이렇게 많이 오는 줄은 몰랐습니다.

2026-04-11
4.554.5

저도 IDS 알림이 수백 건인데 전부 allowed 상태라 뭔가 잘못된 것 같았는데, 이 글 보고 원인을 찾았습니다. 규칙 자동 업데이트 cron이 꺼져 있는 게 저도 문제였네요.

관련 글

© 2026 TreeRU. All rights reserved.

본 콘텐츠의 저작권은 TreeRU에 있으며, 출처를 밝히지 않은 무단 전재 및 재배포를 금합니다. 인용 시 출처(treeru.com)를 반드시 명시해 주세요.