본문 바로가기
IT

[리눅스 기초 #92] 보이지 않는 침입자를 찾아라: Suricata와 ELK로 구축하는 지능형 침입 탐지 시스템(IDS/IPS)

by sunyjiny 2026. 3. 22.
반응형

리눅스 기초 시리즈의 92번째 시간입니다! 지난 시간에는 Ansible과 AWX를 통해 수백 대의 서버를 손가락 하나로 관리하는 '운영의 자동화'를 배웠습니다. 이제 우리 인프라는 효율성 면에서 무결점에 가까워졌습니다.

하지만 관리가 편해졌다고 해서 위협이 사라진 것은 아닙니다. 오히려 자동화된 인프라일수록 한 번의 침입이 치명적인 연쇄 반응을 일으킬 수 있죠. 오늘은 네트워크의 모든 패킷을 실시간으로 감시하고, 수상한 움직임을 즉각 포착하는 지능형 침입 탐지 시스템(IDS/IPS), **Suricata(수리카타)**와 ELK 스택의 결합을 저의 경험담과 함께 다뤄보겠습니다.


1. 나의 경험담: "로그 뒤에 숨은 그림자를 발견하다"

IT 개발자로 살아가며 가장 식은땀이 나는 순간은 평화로운 주말, 유튜브 쇼츠 자동화 서버의 트래픽이 이유 없이 요동칠 때입니다. 최근 인코딩 워커 서버 한 대가 비정상적인 네트워크 아웃바운드를 발생시키는 것을 목격했습니다. 단순한 버그인 줄 알았으나, 실상은 외부에서 침입한 봇이 제 서버를 경유지로 활용하려던 시도였죠.

당시 프로젝트 마감과 겹쳐 쌓인 스트레스로 역류성 식도염과 위염이 심해졌는데, 서버까지 병드니 정말 속이 타들어 가는 기분이었습니다. 신경 안정을 위해 마그네슘과 아연을 챙겨 먹으며 스스로를 다독였지만, 인프라의 신경계를 지켜줄 무언가도 절실했습니다. 그때 도입한 것이 바로 Suricata였습니다. 영화 **'하빈'**의 안중근 의사가 거사를 위해 적의 동선을 치밀하게 파악하듯, 저도 Suricata를 통해 네트워크의 모든 '발자국'을 추적하기 시작했습니다. 이제 제 서버는 침입자가 문을 두드리기도 전에 경보를 울리는 똑똑한 파수꾼을 얻었습니다.


2. Before: "이미 뚫린 뒤에야 깨닫는 사후약방문"

IDS(침입 탐지 시스템)가 없던 시절에는 보안 사고가 발생해도 그 원인을 파악하는 데 한 세월이 걸렸습니다. 표준 리눅스 로그는 '누가 들어왔는지'는 알려주지만, 그가 네트워크 안에서 '무슨 짓을 하고 있는지'는 알려주지 않았기 때문입니다.

과거의 수동적인 보안 (Before):

  • 가시성 부족: 패킷 내부를 들여다볼 수 없어 암호화되지 않은 공격에도 무방비.
  • 대응 지연: 장애가 발생하거나 데이터가 유출된 후에야 로그를 뒤짐.
  • 자원 낭비: 수동으로 패킷을 캡처(tcpdump)하고 분석하느라 엔지니어의 에너지가 고갈됨.

"서버가 느려진 건 알겠는데, 이게 공격 때문인지 단순 부하인지 알 길이 없네..."


3. Action: Suricata와 Filebeat로 보안 데이터 파이프라인 구축하기

수리카타는 멀티 스레딩을 지원하여 Snort보다 훨씬 빠르고 정교합니다. 이를 리눅스 서버에 설치하고, 탐지된 로그를 ELK 스택으로 보내 시각화하는 핵심 설정을 살펴보겠습니다.

Step 1: Suricata 사용자 정의 룰 작성

특정 패턴의 스캐닝 공격을 감지하는 간단한 규칙을 /etc/suricata/rules/local.rules에 추가합니다.

Bash
 
# 외부에서 내부 웹서버로 SQL 인젝션 패턴이 들어오는지 감시
alert http $EXTERNAL_NET any -> $HTTP_SERVERS any (msg:"ET EXPLOIT Possible SQL Injection Attempt"; content:"union select"; nocase; sid:1000001; rev:1;)

Step 2: Filebeat를 이용한 로그 전송 설정

Suricata가 생성한 eve.json 파일을 분석하여 Elasticsearch로 쏘아 올립니다.

YAML
 
# /etc/filebeat/modules.d/suricata.yml
- module: suricata
  eve:
    enabled: true
    var.paths: ["/var/log/suricata/eve.json"]

<i data-index-in-node="18">(▲ Action: Suricata가 패킷을 분석해 JSON 형태의 로그를 뱉으면, Filebeat가 이를 가로채 ELK로 보냅니다. 이제 우리는 수백만 개의 패킷 속에서 '범죄의 증거'만 골라 대시보드에서 화려한 그래프로 확인할 수 있습니다.)</i>


4. After: "네트워크의 모든 흐름을 지배하는 통찰력"

Suricata와 ELK를 연동한 뒤, 제 보안 운영은 **'사후 대응'**에서 **'실시간 관측'**으로 진화했습니다.

  • 초정밀 가시성: 이제 어떤 국가의 어떤 IP가 우리 서버의 어떤 취약점을 노리는지 실시간 지도로 확인합니다.
  • 자동화된 방어(IPS): 단순히 탐지만 하는 IDS를 넘어, 위험도가 높은 패킷은 커널 레벨에서 즉시 드롭(Drop)시키는 IPS 모드로 전환하여 피해를 원천 차단했습니다.
  • 심리적 안정감: 시스템이 건강하게 돌아가는 것을 시각적으로 확인하니, 개발자로서의 불안감이 사라지고 본연의 창의적인 업무에 집중할 수 있게 되었습니다.

5. 전통적 방화벽 vs Suricata IDS/IPS 비교

구분 네트워크 방화벽 (iptables) Suricata (IDS/IPS)
분석 깊이 L3/L4 (IP, Port 위주) L7 (Payload, Application 계층)
탐지 방식 규칙 기반 차단 패턴 매칭 및 프로토콜 이상 탐지
성능 매우 빠름 (단순 필터링) 빠름 (멀티 스레드 패킷 가속)
가시성 로그 기반 (단편적) ELK 연동을 통한 통계적 시각화
비유 아파트 입구의 차단기 CCTV와 AI 보안 요원의 협업

6. 마치며: 당신의 서버를 '투명한 요새'로 만드세요

리눅스 기초 92단계를 거치며 우리는 이제 인프라를 보호하는 가장 깊숙한 눈을 갖게 되었습니다. 보안은 단 한 번의 설정으로 끝나지 않는 끊임없는 과정입니다. Suricata와 ELK는 그 과정을 고통스러운 '노동'이 아닌 흥미진진한 '관측'으로 바꿔줄 것입니다. 여러분의 소중한 비즈니스가 보이지 않는 위협에 흔들리지 않도록, 오늘 당장 네트워크에 지능형 센서를 심어보시기 바랍니다.

오늘의 인사이트: "훌륭한 보안은 벽을 높게 쌓는 것이 아니라, 그 벽을 넘으려는 의도 자체를 실시간으로 읽어내는 것이다."


92번째 이야기를 마칩니다. 이제 우리 인프라는 보이지 않는 적의 움직임까지 포착합니다. 다음 시간에는 이렇게 쌓인 방대한 보안 데이터를 기반으로 인공지능이 취약점을 진단하는 **'보안의 미래: LLM을 활용한 리눅스 보안 로그 분석 및 자동 패치 제안 시스템'**에 대해 다뤄보겠습니다.

이 글이 여러분의 네트워크 보안 환경을 한 단계 업그레이드하는 데 도움이 되었나요? 혹시 Suricata 설치 중 NIC의 'Promiscuous Mode' 설정 문제로 패킷 캡처가 안 되고 계신가요?

네트워크 카드의 성능을 최대로 끌어올려 패킷 유실을 방지하는 'NIC 튜닝 가이드'를 다음 포스팅 부록으로 준비해 드릴까요?

반응형