카테고리 없음

[10월 30일] Suricata 구축하기

ljm 2025. 10. 30. 16:12

프로젝트를 진행하면서 탐지에 필요한 IDS Suricata 를 설치하려고 한다.

설치하는 과정과 설치 후 세팅하는 과정을 자세하게 다뤄보려고 한다.

 


🛠️ Suricata 설치 및 로컬 룰 적용 (PPA 방식)

 

1단계: PPA 저장소 추가 및 설치

 

PPA를 사용하면 가장 최신 버전이 아니더라도 안정적이고 최적화된 최신 버전을 패키지 형태로 쉽게 설치할 수 있다.

 

  1. 패키지 목록 업데이트
    sudo apt update
    

     

  2. PPA 사용을 위한 필수 패키지 설치
    sudo apt install software-properties-common
    

     

  3. Suricata 안정화 버전(Stable) PPA 추가
    sudo add-apt-repository ppa:oisf/suricata-stable
    

     

  4. 새로 추가된 저장소 목록으로 다시 업데이트
    sudo apt update
    

     

  5. Suricata 설치
    sudo apt install suricata
    

2단계: 기본 룰 및 설정 파일 업데이트

설치 후에는 기본으로 제공되는 탐지 룰을 다운로드하고, 시스템 설정을 확인한다.

 

  1. 기본 규칙 세트 다운로드 및 업데이트 : 이 명령어를 실행하면 /etc/suricata/rules 경로에 Suricata에서 공식적으로 제공하는 최신 규칙들이 다운로드된다.
    sudo suricata-update
    

     

  2. 설치 확인버전 정보가 출력되면 설치가 완료된다.
    suricata -V
    


🔑 로컬 룰(Local Rules) 설정 및 적용

 

직접 룰을 작성하여 실습하기 위해서는 해당 룰 파일을 Suricata 설정 파일에 등록해 주어야 한다.

1단계: 로컬 룰 파일 생성

기본적으로 사용자 룰은 /etc/suricata/rules/local.rules 파일에 작성한다.

 

  1. 로컬 룰 파일 생성 및 편집
sudo nano /var/lib/suricata/local.rules

   

   2. 테스트 룰 작성  : local.rules 파일에 다음과 같은 간단한 테스트 룰을 작성하여 저장한다. 

# 외부에서 HOME_NET 웹 서버로의 특정 포트 접근 시 탐지
alert tcp any any -> $HOME_NET 80 (msg:"PRACTICE TEST - HTTP Port 80 Access Detected"; sid:9000001; rev:1;)

# 외부에서 HOME_NET으로 들어오는 모든 ICMP (Ping Request) 탐지
alert icmp any any -> $HOME_NET any (msg:"PRACTICE TEST - Inbound ICMP Ping Request Detected"; itype:8; sid:9000002; rev:1;)
  • $HOME_NET 변수는 Suricata 설정 파일에 정의된 보호 대상 네트워크(현재 내 Suricata의 IP)를 의미한다.


2단계: 설정 파일에 로컬 룰 적용

Suricata의 메인 설정 파일인 suricata.yaml을 수정하여 위에서 만든 local.rules 파일을 항상 로드하도록 지정해야한다.

 

  1. 메인 설정 파일 편집
    sudo vi /etc/suricata/suricata.yaml

     

  2. 룰 파일 목록 수정 파일 내용 중 rule-files: 섹션을 찾아서 내가 만든 local.rules 를 추가한다.
    # 파일을 찾기 위해 :/rule-files: 검색하기
    rule-files:
      - rules/local.rules  # 이 줄을 포함시켜야 한다
      - rules/suricata.rules
      
    # 이름 수정: af-packet: 섹션 아래의 interface 항목을 찾아서 eth0을 enp0s3로 수정하기
    af-packet:
      - interface: enp0s3 # <-- enp0s3로 변경
        threads: 1
        defrag: yes
        cluster-type: cluster_flow
        cluster-id: 99

3단계: Suricata 실행 및 실습

이제 Suricata를 시작하여 로컬 룰이 적용되는지 확인한다.

 

  1. Suricata 실행 (데몬 모드) 일반적으로 systemctl을 이용하여 서비스로 실행하는 것이 가장 안정적이다.
    sudo systemctl enable suricata  # 부팅 시 자동 시작 설정
    sudo systemctl start suricata   # Suricata 서비스 시작
    

     

  2. 로그 확인 탐지된 내용은 /var/log/suricata/fast.log 파일에서 실시간으로 확인할 수 있다. 다만 기존의 suricata.rules의 내용이 많이 보여서 내가 쓴 local.rules 탐지내용이 잘보이지 않는다. 이런 경우에 grep 명령어를 같이 사용하여 원하는 sid의 룰만 보이도록 한다.
    sudo tail -f /var/log/suricata/fast.log | grep -E '9000001|9000002|9000003|9000004|9000005'

     

 


1. 탐지를 위한 사전 설정

sudo apt install apache2 # 웹 서버 설치
sudo systemctl start apache2 # 웹 서버 구동

sudo apt install ufw # 방화벽 설치
sudo ufw enable # 방화벽 활성화
sudo ufw allow 80/tcp # 80번 포트 허용
sudo ufw allow 22/tcp # 방화벽 활성화시 SSH 22번 포트도 차단될 수 있으므로 허용
sudo ufw reload  # 규칙 적용
sudo ufw status # 상태 확인

 

2. 탐지 테스트 

HTTP Port 80 Access Detected
Inbound ICMP Ping Request Detected