[Suricata 5] 1. CentOS 7에 suricata 5 설치하기

2020. 7. 10. 16:37CentOS 7/Basic

반응형

Suricata 5

Suricata는 빠르고 강력한 네트워크 위협 탐지 엔진으로, 무료 오픈소스입니다.

Suricata 엔진은 IDS/IPS, 네트워크 보안 모니터링(NSM) 그리고 오프라인 pcap 처리를 지원합니다.

Suricata는 강력하고 광범위한 룰과 Signatue 언어 그리고 복잡한 위협탐지를 지원하는 Lua 스크립팅을 사용하여 그 네트워크 트래픽을 검사합니다.

yaml 이나 json과 같은 표준 입출력형식을 SIEMs, Splunk, Logstash/Elasticsearch, Kibana 와 같은 툴들과 통합할 수 있습니다.


CentOS 7 환경에서 지원되는 Suricata 버전은 3.1, 2.0.115.0 버전입니다.
이 중, 현재 stable release 된 5.0버전을 설치합니다.


  1. 의존성 패키지 설치
  2. Suricata 5 다운로드
  3. Suricata 5 빌드
  4. 컴파일 및 설치
  5. 실행

1. 의존성 패키지 설치

먼저 suricata 프로그램에 필요한 의존성 패키지들을 yum 명령어를 통해 설치합니다.

sudo yum -y install epel-release gcc libpcap-devel pcre-devel libyaml-devel \
  file-devel  zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel \
  tar make libnetfilter_queue-devel lua-devel PyYAML libmaxminddb-devel \
  rustc cargo lz4-devel

2. Suricata 5 다운로드

Suricata 공식 홈페이지에 들어가면 Suricata 5 다운로드 링크를 복사합니다.

08


wget https://www.openinfosecfoundation.org/download/suricata-5.0.3.tar.gz
tar -xvzf suricata-5.0.3.tar.gz
cd suricata-5.0.3

suricata 5를 다운받은 후 압축을 해제합니다.

3. Suricata 5 빌드

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua

configure 명령어를 이용하여 suricata에 대한 환경설정을 한 후 빌드 합니다.

  • --prefix=/usr
    • binary 파일을 /usr/bin/에 설치
  • --sysconfdir=/etc
    • 구성파일들을 /etc/suricata/에 설치
  • -localstatedir=/var
    • 로그파일들을 /var/log/suricata/에 위치시킴
  • --enable-lua
    • 감지 및 출력에 관하여 지원해주는 Lua 언어를 활성화 합니다.
  • --enable-nfqueue
    • nfq(네트워크 트래픽을 라우팅, 포워딩) 활성화
    • IPS 구성을 위해 필요한 옵션

4. 컴파일 및 설치

make

소스를 컴파일 하고

sudo make install-full

컴파일된 설치파일을 설치합니다.
이때, configure명령어로 설정한 설치 위치에 suricata 실행을 위해 필요한 파일들을 복사합니다.

install-full로 설치파일을 설치할 경우 create/setup에 필요한 모든 디렉토리suricata.yaml 파일최신 ruleset도 함께 설치됩니다.


sudo ldconfig

설치를 완료한 후, 설치된 모듈(*.so)들에 대한 모듈 업데이트를 위해 ldconfig 명령어를 실행해줍니다.


5. 실행

ip a

ip a 명령어로 ip 및 인터페이스를 조회합니다.


sudo suricata -c /etc/suricata/suricata.yaml -i eth0 --init-errors-fatal -S /var/lib/suricata/rules/suricata.rules -D
  • -c <파일경로>
    • configuration file 경로를 지정합니다.
  • -i <인터페이스명>
    • 패킷이 들어올 인터페이스를 지정합니다.
  • --init-errors-fatal
    • 파일 로드중 오류 발생시 종료합니다.
  • -S
    • 룰 파일을 추가합니다.(기존에 포함된 룰파일도 이용 가능)
  • -D
    • suricata를 background로 실행시킵니다.

suricata -i eth0 --init-errors-fatal
7/7/2020 -- 09:27:26 - <Notice> - This is Suricata version 5.0.3 RELEASE running in SYSTEM mode
7/7/2020 -- 09:27:32 - <Notice> - all 4 packet processing threads, 4 management threads initialized, engine started

실행시, 위와 같은 로그가 출력된다면 정상적으로 구동되고 있다는 의미입니다.


+++ tip

Suricata를 백그라운드에서 실행시킬 경우, suricata.pid 파일을 생성하여 pid를 저장합니다.
만일, pid를 이용하여 프로세스를 강제 종료할 경우, pid가 쓰여있는 suricata.pid 파일은 그대로 남아있어 suricata 프로세스를 다시 시작하려 할때 아래와 같은 에러가 발생됩니다.

10/7/2020 -- 14:16:08 - <Notice> - This is Suricata version 5.0.3 RELEASE running in SYSTEM mode
10/7/2020 -- 14:16:08 - <Error> - [ERRCODE: SC_ERR_INITIALIZATION(45)] - pid file '/var/run/suricata.pid' exists but appears stale. Make sure Suricata is not running and then remove /var/run/suricata.pid. Aborting!

쉘 스크립트를 만들어, 종료시 pid 파일도 함께 제거하도록 합시다.

touch suricata_shutdown.sh
chmod 744 suricata_shutdown.sh
vim suricata_shutdown.sh

쉘 스크립트를 실행가능하도록 하기 위해 rwxr--r-- 모드로 바꿔준 후, 쉘 스크립트를 작성합시다.

pidfile=/var/run/suricata.pid
pid=`cat $pidfile 2> /dev/null`

if [ "$pid" == "" ]; then
  echo "suricata is not running."
else
  kill -9 $pid
  echo "suricata process killed forcefully, process id = $pid."
  rm -rf $pidfile
fi
728x90
반응형