본문으로 건너뛰기
n8n.io 인기 템플릿 해부 · 12/40시리즈 보기 →

n8n Shodan 보안 모니터링 — 매주 열린 포트를 스캔해 TheHive에 자동 접수하기

· 약 8분
Datapopcorn CEO / AI automation educator
이 글과 연결된 글 보기
7편 · 21개 연결
100%
n8n 워크플로우 자동복구 템플릿 — AI가 승인 없이 운영 워크플로우를 직접 고친다n8n Calendly 링크 자동생성 — 웹훅 요청 하나로 1회용 예약 링크 만들기n8n 고객 온보딩 자동화 — HubSpot 등록과 이메일 드립 시퀀스, AI 없이 만들기폼 제출 한 번으로 서버에 Docker 앱을 배포하는 n8n 워크플로우 — Hostinger 공식 템플릿, 셀프호스팅과 유료 VPS 둘 다 필요n8n Jamf 패치 관리 자동화 — 슬랙으로 받는 소프트웨어 컴플라이언스 리포트n8n Shodan 보안 모니터링 — 매주 열린 포트를 스캔해 TheHive에 자동 접수하기n8n으로 반복업무 자동화 포트폴리오 만들기

드래그로 이동 · 휠/두 손가락으로 확대 · 방향키로 글 선택 · 0으로 맞춤. 실선: 본문 링크, 점선: 시리즈·주제의 대표 연결.

표시된 글 7편 목록
전체 글 연결 탐색

n8n.io 공식 템플릿을 가져오면, 매주 월요일 아침 감시 대상 IP 목록을 Shodan API로 스캔해서 원래 열려 있어야 할 포트 목록과 다른 포트가 발견됐을 때만 보안 인시던트 대응 플랫폼 TheHive에 알림 케이스를 자동으로 만들 수 있습니다.

이 템플릿 하나로 보여줄 수 있는 것​

면접에서 "SecOps(보안 운영) 자동화도 해보셨어요?"라는 질문은 흔치 않지만, 나오면 답할 수 있는 사람이 거의 없어서 오히려 눈에 띕니다. 이 템플릿은 "회사가 외부에 노출한 서버의 포트를 매주 스캔해서, 예상하지 못한 포트가 열리면 보안 인시던트 케이스로 자동 접수되게 만들었습니다"라고 답할 수 있게 해줍니다.

문장 하나지만 안에 들어간 역량은 세 가지입니다.

  • 외부 스캔 API 연동 — Shodan처럼 사람이 매번 웹사이트에 접속해 조회하던 정보를, IP 목록을 순회하며 자동으로 조회하는 흐름을 구성한 경험
  • 기준값 비교로 노이즈 줄이기 — 전체 스캔 결과가 아니라 "원래 있어야 할 목록과 다른 것"만 걸러내 알림으로 만드는 설계 경험
  • 인시던트 플랫폼 연동 — 알림을 슬랙 메시지 한 줄로 끝내지 않고, 제목·설명·심각도·태그를 갖춘 정식 케이스로 다른 시스템(TheHive)에 등록하는 흐름을 구성한 경험

이 세 가지는 보안 모니터링뿐 아니라 SSL 인증서 만료 감시, 도메인 만료 감시, 경쟁사 웹사이트 변경 감지처럼 "정기적으로 바깥을 스캔하고 달라진 것만 알린다" 유형의 자동화 전부에 그대로 쓰입니다.

이 템플릿은 무엇인가​

이 워크플로우는 데이터팝콘이 만든 게 아닙니다. n8n 공식 템플릿 마켓플레이스(n8n.io/workflows)에 Weekly Shodan query - report accidents라는 이름으로 공개된 템플릿이고, 카테고리는 SecOps로 등록돼 있습니다.

이 템플릿을 다른 편과 조금 다르게 소개하는 이유가 있습니다. 제작자(CREATED BY) 항목에 개인 커뮤니티 제작자 이름이 아니라 n8n Team이 올라가 있습니다. 즉 커뮤니티 사용자가 자기 워크플로우를 공개한 게 아니라, n8n이 자사 마켓플레이스에 SecOps 도메인의 참고 사례로 직접 만들어 올린 템플릿입니다. 그만큼 노드 구성이 임시방편이 아니라 하나의 표준 패턴으로 참고하기 좋다는 뜻이기도 합니다.

공식 설명에 따르면 이 워크플로우는 매주 월요일 오전 5시에 실행되며, IP 주소와 거기 연결된 포트를 살펴 네트워크 보안 상태를 점검합니다. 조회는 Shodan(인터넷에 연결된 장치를 검색할 수 있는 검색엔진)으로 하고, 결과에서 원래 예상하던 포트 목록과 다른 포트가 나온 경우에만 TheHive(보안 인시던트 대응 플랫폼)에 알림 케이스를 만듭니다.

여기서 미리 콜아웃해둘 게 하나 있습니다. 이 템플릿을 그대로 따라 하려면 TheHive 계정 또는 인스턴스가 있어야 합니다. TheHive는 슬랙이나 노션처럼 가입만 하면 바로 쓰는 SaaS가 아니라, 케이스·태스크·관측값을 관리하는 별도의 보안 인시던트 관리 플랫폼입니다. 오픈소스로 공개돼 있어 무료로 직접 호스팅하는 방법이 있지만, 그 경우 서버를 준비하고 직접 운영해야 합니다. 구체적인 요금제나 클라우드형 가격은 이 글에서 확인한 범위를 벗어나므로 다루지 않습니다.

n8n 설치나 기본 노드 조작법은 n8n으로 반복업무 자동화 포트폴리오 만들기에 정리돼 있으니, 이 글은 이 템플릿의 구조 자체에 집중합니다.

구조 — Trigger / Task / Target​

이 템플릿의 공식 페이지에는 다른 템플릿과 달리 번호가 매겨진 "How it works" 다이어그램이 없습니다. 대신 워크플로우가 어떻게 동작하는지를 8개 문장으로 풀어 쓴 서술형 문단만 있습니다. 아래 다이어그램은 그 문단을 데이터팝콘 방식인 Trigger/Task/Target 세 칸으로 재구성한 것이며, 공식 페이지가 원래 이런 그림을 제공한 건 아니라는 점을 먼저 밝혀둡니다. 카드 미리보기에는 "HTTP Request, Edit Fields (Set), Loop Over Items (Split in Batches), +6 more"까지만 나와 있어서, 트리거 노드 이름이나 TheHive로 전송하는 노드의 정확한 종류처럼 미리보기에 없는 세부 사항은 기능 단위로만 표시했습니다.

  • Trigger — 정확한 노드명은 확인되지 않았지만, "매주 월요일 오전 5시에 실행된다"는 공식 설명에 따라 정기 실행 트리거로 시작하는 구조입니다.
  • Task — 감시 대상 IP·포트 목록을 조회하고, IP마다 순서대로(Loop Over Items) Shodan에 물어봐서 그 IP에 열려 있는 포트 정보를 받습니다. 받은 데이터에서 포트 배열을 뽑아 Filter 노드로 원래 예상 목록과 비교하고, 일치하지 않는(예상 밖) 포트만 남깁니다. 남은 포트마다 IP, 호스트명, 포트 번호, 서비스 설명, Shodan이 준 상세 정보(HTTP 상태 코드, 날짜·시간, 헤더)를 모아 HTML 테이블로 만든 뒤 마크다운으로 바꿉니다.
  • Target — 완성된 마크다운 테이블을 설명(description)으로 넣어 TheHive에 알림 케이스를 만듭니다. 제목은 "해당 IP에서 발견된 예상 밖 포트"이고, 심각도는 medium, TLP(Traffic Light Protocol)는 Amber, 상태는 new, 유형은 "Unexpected open port", 출처는 "n8n"으로 채워집니다. 같은 IP에서 같은 케이스가 중복 생성되지 않도록 IP와 현재 유닉스 시간을 조합한 고유 참조값(source reference)도 함께 넣습니다.

만들기​

먼저 밝혀둘 것이 있습니다. 이 템플릿의 공식 페이지에는 번호가 매겨진 Setup 섹션이 없습니다. "어떻게 동작하는지"를 설명하는 문단만 있고, "무엇을 먼저 준비해야 하는지"는 그 문단 안에서 독자가 직접 추려내야 합니다. 아래 단계는 그 문단에서 필요한 준비물과 확인 사항을 데이터팝콘이 순서대로 재구성한 것이지, n8n이 원래 이렇게 번호를 매겨 안내한 게 아닙니다.

1. 감시 대상 IP·포트 목록 준비​

워크플로우 맨 앞의 HTTP Request 노드가 감시할 IP 주소와 각 IP에서 원래 열려 있어야 할 포트 목록을 조회합니다. 공식 설명에는 이 목록을 정확히 어디서 가져오는지(구글시트인지, 별도 데이터베이스인지, 자체 API인지)가 나와 있지 않습니다. HTTP Request로 가져온다는 것만 확인되므로, 구글시트에 API로 접근하거나 Airtable, 자체 백엔드 중 무엇으로 대체해도 구조상 문제없습니다. 실습이라면 회사에서 외부에 공개한 IP 두세 개와, 각 IP에서 원래 열려 있어야 하는 포트(예: 웹서버라면 HTTP·HTTPS 포트)를 정리한 간단한 목록이면 충분합니다.

2. Shodan 계정과 API 키​

Shodan은 인터넷에 연결된 장치를 검색할 수 있는 검색엔진으로, 특정 IP를 조회하면 그 IP에서 관찰된 열린 포트와 서비스 정보를 돌려줍니다. 이 템플릿은 IP마다 Shodan에 GET 요청을 보내 상세 정보를 받아오므로, Shodan 계정을 만들고 API 키를 발급받아야 합니다.

3. TheHive 인스턴스와 API 크리덴셜​

앞서 콜아웃한 것처럼 TheHive 계정 또는 인스턴스가 필요합니다. 무료로 직접 호스팅하는 오픈소스 옵션이 있지만, 클라우드 SaaS처럼 가입만으로 끝나지 않고 인스턴스를 준비해야 한다는 점을 감안해야 합니다. 인스턴스가 준비되면 케이스 생성 API를 호출할 수 있는 API 키를 발급받아 n8n 크리덴셜로 등록합니다.

4. IP별 순회 확인 — Loop Over Items​

카드 미리보기에 "Loop Over Items (Split in Batches)"라고 나와 있는 노드입니다. 이름이 두 개 붙어 있는 이유는, 예전에는 이 노드가 "Split in Batches"라는 이름이었고 지금은 "Loop Over Items"로 이름이 바뀌었기 때문입니다. 역할은 그대로입니다. 감시 IP가 여러 개면 이 노드가 하나씩 순서대로 뒤 단계(Shodan 조회 → 필터 → 알림 조립)를 반복시킵니다. IP가 10개면 10번 순회하고, 그때마다 그 IP만의 예상 밖 포트를 따로 판단합니다.

5. Filter 조건 — 예상 밖 포트만 남기기​

Shodan 응답에서 뽑아낸 포트 배열과, 1번에서 준비한 그 IP의 예상 포트 목록을 Filter 노드로 비교합니다. 예상 목록에 있는 포트(정상)는 걸러내고, 목록에 없는 포트(예상 밖)만 다음 단계로 넘깁니다. 이 필터를 통과하는 게 없으면 그 IP는 이번 주에 이상이 없다는 뜻이라, 뒤의 알림 조립·TheHive 생성 단계도 자연스럽게 건너뛰게 됩니다.

6. TheHive 케이스 생성 노드 설정​

앞서 정리한 마크다운 테이블과 필드값(제목·심각도·TLP·상태·유형·출처·고유 참조값)을 그대로 TheHive 케이스 생성 노드에 채워 넣는 단계입니다. follow 옵션과 JSON 파라미터 옵션도 켜져 있다고 공식 설명에 나와 있는데, 이 옵션이 화면 어디에 있는지는 TheHive 노드(또는 HTTP Request로 TheHive API를 호출하는 노드)의 설정을 직접 열어 확인해야 합니다. 정확한 노드 종류가 카드 미리보기에 나오지 않은 "+6 more" 안에 있기 때문입니다.

주의할 점 · 제약​

공식 페이지에서 확인되는 제약과, 이 템플릿을 그대로 따라 하기 전에 알아둘 점을 정리하면 이렇습니다.

  • TheHive 인스턴스가 필수 전제조건입니다 — 무료 자체 호스팅 옵션이 있지만, 계정 하나로 끝나지 않고 인스턴스를 준비·운영해야 합니다.
  • 감시 목록의 원본이 명시돼 있지 않습니다 — 공식 설명은 "HTTP Request로 IP·포트 목록을 가져온다"까지만 알려줄 뿐, 그 목록을 어디에 두고 관리할지는 이 템플릿을 가져오는 사람이 직접 정해야 합니다.
  • 번호가 매겨진 Setup 안내가 없습니다 — "이 순서대로 크리덴셜을 연결하라"는 공식 가이드가 없어서, 필요한 준비물을 서술형 문단에서 직접 추려야 합니다.
  • 일부 노드의 정확한 종류가 카드 미리보기만으로는 확인되지 않습니다 — 미리보기는 "HTTP Request, Edit Fields (Set), Loop Over Items (Split in Batches), +6 more"까지만 보여줘서, 트리거 노드나 TheHive 연동 노드의 정확한 이름은 직접 임포트해봐야 확인됩니다.

포트폴리오·면접 포인트​

포트폴리오에는 Shodan에서 특정 IP를 조회했을 때 나오는 원본 응답 화면과, 그 결과가 TheHive 케이스로 등록된 화면 두 장이면 충분합니다. 두 화면을 나란히 두면 "스캔 결과를 그냥 보여준 게 아니라, 원래 있어야 할 것과 비교해서 다른 것만 걸러 인시던트로 만들었다"는 설계 의도가 바로 전달됩니다.

면접에서는 "왜 Shodan 결과를 전부 알림으로 보내지 않고 필터링했나요?"라는 질문이 올 수 있습니다. 답은 명확합니다. 서버 하나가 열어둔 포트는 보통 열 개 안팎이고 대부분 원래 그렇게 열려 있어야 하는 정상 포트입니다. 전부 알림으로 보내면 매주 똑같은 목록이 반복돼서 아무도 읽지 않게 되고, 정작 새로 열린 위험한 포트 하나가 그 안에 묻힙니다. "예상 목록과 다른 것만 남긴다"는 이 템플릿의 핵심 설계가 바로 그 문제를 푸는 방법이라고 설명할 수 있으면, 노드를 나열하는 대신 왜 이런 구조인지를 이해했다는 인상을 줍니다.

다음 액션​

다음 편에서는 같은 SecOps 카테고리에서 SSL 인증서 만료를 감시하는 템플릿을 다룹니다. 이번 편이 "예상 밖 포트"로 이상 신호를 걸러냈다면, 다음 편은 "인증서 만료까지 남은 기간"이라는 다른 기준으로 같은 문제를 풉니다.