Snort를 대체하기 위해 2010년 미국 국토안보부가 비영리 단체인 OISF를 설립하여 만든 프로그램이다. Suricata는 크게 아래의 역할을 수행한다.
⇒ 패킷 스니핑, 패킷 로깅, 침입 탐지 기능을 갖고있음.
Snort가 갖고있던 대부분의 기능을 갖고있고 Snort의 기능외에 추가된 기능으로는 아래와 같다.
OS : Ubuntu20.04
Repository 설치
apt-get install software-properties-common -y
add-apt-repository ppa:oisf/suricata-stable
apt-get update -y
Suricata 패키지 설치
apt-get install suricata
버전확인
suricata -V
This is Suricata version 6.0.2 RELEASE
OS : CentOS 7
컴파일 설치
의존성 패키지 설치
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
Suricata 패키지 다운로드
wget https://www.openinfosecfoundation.org/download/suricata-6.0.3.tar.gz
tar -xvzf suricata-6.0.3.tar.gz
컴파일 설치
cd suricata-6.0.3
# 빌드
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-nfqueue --enable-lua
# 컴파일
make
# 설치
make install-full
# 모듈 업데이트
ldconfig
make install-full
로 설치할 경우 Create/Setup에 필요한 모든 디렉토리 및 suricata.yaml 파일과 최신 ruleset도 함께 설치rpm 설치
yum install epel-release yum-plugin-copr
yum copr enable @oisf/suricata-6.0
yum install suricata
suricata-update
Suricata에서는 네트워크 패킷을 Rule 기반으로 탐지를 하게된다. 사용자가 직접 Rule을 커스터마이징하여서 원하는 네트워크 트래픽만 탐지를할 수있다. 여기서는 커스터마이징까지는 하지않고 Suircata에서 일반적으로 많이 사용하는 기본 Rule을 사용한다.
해당 Rule은 Suricata와 함께 번들로 제공되고 Suricata 설치 시 함께 설치된다.
'Emerging Threats Open' Rule 사용
/etc/suricata/rules
에 있는 rule 파일들을 다운로드하고 하나의 단일 rule파일로 만들어준다.
suricata-update
Rule Path 재지정
vi /etc/suricata/suricata.yaml
default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rules
인바운드와 아웃바운드의 영역이 구분되어있는 구성에서 트래픽을 Suricata로 포워딩해주기 위한 작업
커널 파라미터 수정
vi /etc/sysctl.conf
...
#net.ipv4.ip_forward=1 # 해당 라인의 주석을 해제한다.
net.ipv4.ip_forward=1
iptables 설정
iptables -t nat -A POSTROUTING -o enp2s0f0 -j MASQUERATDE
# 포워딩 적용 확인
iptables -t nat -nvL
Suricata 시작
suricata -c /etc/suricata/suricata.yaml -i enp2s0f0 -D
Suricata를 종료하기 위해서는 PID를 찾아서 직접 kill해야 하는데 너무 귀찮다.
간편하게 종료하기 위한 종료 스크립트이다.
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
chmod +x 잊지말자.