Overview
- Suricata는 고성능 네트워크 보안 엔진으로, 침입 탐지 시스템(IDS), 침입 방지 시스템(IPS), 네트워크 보안 모니터링(NSM)을 지원한다.
- 다중 스레드를 활용하여 높은 트래픽을 처리할 수 있으며, Snort 규칙과 호환된다.
- 패킷 캡처 및 분석을 통해 네트워크 위협을 실시간으로 감지한다.
- 현재 6.X 버전대는 EOL 되었고, 7.0.X 가 Stable로 배포되고 있다.
- Raspberry PI에는 6.X 버전만 현재 설치 간
- 공식 사이트 : https://suricata.io/
- 대략적인 구성도
Network Interface Setting
- Raspberry PI의 wlan은 Mgmt용으로, UTP Port는 Mirror 트래픽 수집용으로 사용
- Mirror Traffic 수집용 Network Interface는 Deactive해서 실질적인 통신은 이루어지지 않도록 함
user@raspberrypi:~/suricata-custom $ nmtui
- Deactivate 설정 후에는 tx count가 올라가지 않음
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 2c:cf:67:29:2d:17 txqueuelen 1000 (Ethernet)
RX packets 1632800 bytes 788679755 (752.1 MiB)
RX errors 0 dropped 1383 overruns 0 frame 0
TX packets 10155 bytes 3826902 (3.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 106
Install
user@raspberrypi:~ $ sudo apt-get install suricata
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
libhiredis0.14 libhtp2 libmaxminddb0 libnet1 libnetfilter-log1 libnetfilter-queue1 libpcre3 suricata-update
Suggested packages:
mmdb-bin libtcmalloc-minimal4
Recommended packages:
snort-rules-default
The following NEW packages will be installed:
libhiredis0.14 libhtp2 libmaxminddb0 libnet1 libnetfilter-log1 libnetfilter-queue1 libpcre3 suricata suricata-update
0 upgraded, 9 newly installed, 0 to remove and 47 not upgraded.
41 not fully installed or removed.
Need to get 2,326 kB of archives.
After this operation, 7,835 kB of additional disk space will be used.
...(중략)...
user@raspberrypi:~ $ sudo systemctl status suricata
● suricata.service - Suricata IDS/IDP daemon
Loaded: loaded (/lib/systemd/system/suricata.service; enabled; preset: enabled)
Active: active (running) since Sat 2024-08-10 16:17:26 KST; 21s ago
Docs: man:suricata(8)
man:suricatasc(8)
https://suricata-ids.org/docs/
Process: 3566 ExecStart=/usr/bin/suricata -D --af-packet -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid (code=exited, status=0/SUCCESS)
Main PID: 3567 (Suricata-Main)
Tasks: 10 (limit: 9252)
CPU: 183ms
CGroup: /system.slice/suricata.service
└─3567 /usr/bin/suricata -D --af-packet -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid
Aug 10 16:17:26 raspberrypi systemd[1]: Starting suricata.service - Suricata IDS/IDP daemon...
Aug 10 16:17:26 raspberrypi suricata[3566]: 10/8/2024 -- 16:17:26 - <Notice> - This is Suricata version 6.0.10 RELEASE running in SYSTEM mode
Aug 10 16:17:26 raspberrypi systemd[1]: Started suricata.service - Suricata IDS/IDP daemon.
Suricata Configurations
- service file
- 기존 service config를 변경할 일은 크게 없지만, 변경이 필요한 경우 아래 Path에서 설정 파일 변경 필요
user@raspberrypi:~/suricata-custom $ vim /usr/lib/systemd/system/suricata.service
[Unit]
Description=Suricata IDS/IDP daemon
After=network.target network-online.target
Requires=network-online.target
Documentation=man:suricata(8) man:suricatasc(8)
Documentation=https://suricata-ids.org/docs/
[Service]
Type=forking
#Environment=LD_PRELOAD=/usr/lib/libtcmalloc_minimal.so.4
PIDFile=/run/suricata.pid
ExecStart=/usr/bin/suricata -D --af-packet -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid
ExecReload=/usr/bin/suricatasc -c reload-rules ; /bin/kill -HUP $MAINPID
ExecStop=/usr/bin/suricatasc -c shutdown
Restart=on-failure
ProtectSystem=full
ProtectHome=true
[Install]
WantedBy=multi-user.target
- Suricata configuration과 rule는 git으로 관리하는 형태로 진행
#!/bin/bash
git pull
sudo cp -r ./* /etc/suricata/
sudo sudo systemctl restart suricata
Suricatak ES Integrations
- Elastic Agent를 이용하면 Log 수집이 쉬움
- 일반적인 PC 프로세서가 아니기에 안내의 인스톨링 방법이 아닌, ARM 관련 패키지를 이용해 설치 필요
- 정상적으로 설치가 되면 아래의 이미지와 같이 수집된 로그 확인 가능
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.14.1-linux-arm64.tar.gz
tar xzvf elastic-agent-8.14.1-linux-arm64.tar.gz
cd elastic-agent-8.14.1-linux-arm64
sudo ./elastic-agent install --url=https://{IP}:{Port} --enrollment-token={{Toekn}} --insecure