상세 컨텐츠

본문 제목

Ubuntu 24.04에 Snort3(NIDS) 구축하기

IT

by Ex-K 2025. 1. 3. 21:53

본문

반응형

 Snort3을 Ubuntu에서 구축하는 방법입니다

 

 

https://www.snort.org

 

Snort - Network Intrusion Detection & Prevention System

With over 5 million downloads and over 600,000 registered users, it is the most widely deployed intrusion prevention system in the world.

www.snort.org

 

Snort 공식 사이트 입니다.

Rule 작성에 관련된 자료도 있으니 이것저것 필요하신분들은 참조하시면 될듯 합니다

아주 유명한 NIDS(Network Intrusion Detection & Prevention System) 입니다

 

 

바로 설치하는 방법을 알아보도록 하겠습니다

버추얼박스에서 설치하여 진행하였습니다

 

OS Version 정보:

ubuntu-24.04.1-live-server-amd64

https://releases.ubuntu.com/noble/ubuntu-24.04.1-live-server-amd64.iso

해당 링크로 다운로드가 가능하며

만약 다운로드가 안될 경우는 구글 검색으로 iso 이미지 파일을 쉽게 찾을 수 있습니다

 

이름 등을 지정합니다
무인 설치 건너뛰기는 스크린샷에서는 체크가 안되어 있는데요
체크를 하는 것이 좋습니다.
만약 체크를 안한다면
사용자 이름 vboxuser
패스워드 changeme
기본값으로 할당되니까 부팅 후 로그인에 참고하시길 바랍니다

 

 

네트워크는 상황에 맞게 바꾸면 되지만
저는 어댑터에 브리지를 통하여 실제 호스트나 같은 네트워크 내의 장비들과 연결이 되도록 하였습니다
그리고 무작위 모드는 반드시 허용으로 하셔야 다른 장비의 패킷이 감지가 됩니다

 

Resource는 적당하게 할당하시면 됩니다.
저는 CPU 코어 3개, 메모리는 4096으로 할당하였습니다.
여유가 있다면 더 할당하셔도 무방하며
적게 주셔도 테스트 단계에서는 아무 문제가 없습니다.

 

 

이 테스트는 root 사용자로 진행하므로 반드시 root 사용자로 로그인을 하여 줍니다

 

apt-get install -y vim
apt-get install -y iputils-ping
apt-get install -y net-tools
apt-get install -y ssh

 

그리고 IP 설정 및 기본 패키지들이 없다면 설치를 진행하여 줍니다.

Snort3에서 필요한 기본 패키지들은 vim,ping,ssh 등이 있습니다.

 

 

/etc/init.d/ssh restart

 

그리고 ssh를 활성화 시킵니다

 

putty로 접속을 하면 복사 붙혀넣기가 훨씬 편리합니다.

 

그러면 putty 프로그램으로 접속이 가능합니다

cd
apt-get install -y build-essential libpcap-dev libpcre3-dev libnet1-dev zlib1g-dev luajit hwloc libdumbnet-dev bison flex liblzma-dev openssl libssl-dev pkg-config libhwloc-dev cmake cpputest libsqlite3-dev uuid-dev libcmocka-dev libnetfilter-queue-dev libmnl-dev autotools-dev libluajit-5.1-dev libunwind-dev libfl-dev

 

그냥 cd 명령어는 사용자의 홈 디렉토리로 이동합니다.

즉 root의 홈 디렉토리에서 작업을 합니다.

그리고 패키지들을 설치합니다.

 

 

git clone https://github.com/snort3/libdaq.git

 

해당 프로그램을 git 사이트에서 받아옵니다

만약 git 패키지가 없다면 apt-get install -y git 명령으로 설치를 진행합니다

cd libdaq
./bootstrap

 

libdaq 디렉터리가 생성되어 있으며 이동합니다

daq bootstrap 설치 진행합니다

 

 

./configure

 

configure 이라는 환경설정 파일이 생성되어 있습니다

configure 환경설정 파일 실행합니다
필요한 파일, 라이브러리들이 운영체제 포함되었는지 여부 체크, 빌드할 환경을 구성합니다

 

make && make install

 

make: 스크립트 코드를 받아서 소스코드를 컴파일하는 과정
make install: 컴파일 과정을 통해 나온 obj 파일로 프로그램을 빌드
make uninstall을 하면 그 프로그램 설치를 취소합니다

 

 

cd
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.13/gperftools-2.13.tar.gz
tar xzf gperftools-2.13.tar.gz

 

해당 파일을 다운받고나서 압축 해제를 합니다

역시 root의 home 디렉토리에서 진행합니다

wget이 없다면 apt-get install -y wget 으로 설치하면 됩니다

cd gperftools-2.13
./configure

 

압축 해제한 디렉토리로 이동하고

환경설정을 체크합니다

 

make && make install

 

실행 가능한 프로그램으로 컴파일을 진행합니다

시간이 조금 소요될 수 있습니다

 

cd
wget https://github.com/snort3/snort3/archive/refs/heads/master.zip
unzip master.zip

 

root의 홈 디렉토리에서 작업을 진행합니다

master.zip 파일 다운로드합니다

그리고 압축을 해제합니다. 만약 unzip이 없다면 apt install -y unzip로 unzip을 설치합니다

 

 

cd snort3-master/
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc

 

snort3-master 라는 디렉토리가 생겨있습니다.

이동을 한 후

prefix 설치 경로 옵션을 설정합니다

설정하지 않을 경우 기본 설치 디렉터리는 아래와 같습니다
/usr/local/bin
/usr/local/lib

 

cd build/
make && make install

 

build 디렉토리로 이동한 후

컴파일을 진행합니다.

가장 오래 걸리는 작업이므로 기다리면서 다른 업무를 보셔도 됩니다

 

 

ldconfig

 

설치되어 있는 라이브러리들이 최신버전인지 확인합니다
아무것도 뜨지 않으면 최신 버전입니다

 

snort -V

 

설치된 Snort의 버전을 확인합니다

 

ip link set dev enp0s3 promisc on

 

프로미스큐어스 모드 on으로 설정

ip address, ifconfig 명령으로 OS의 인터페이스를 확인합니다

eth0인지 enp0s3인지 확인을 해주고 그 인터페이스를 명시하여야 합니다

IP가 부여되어 있는 인터페이스입니다

ethtool -k enp0s3 | grep receive-offload
ethtool -K enp0s3 gro off lro off

 

Receive 기능을 off합니다

만약 패키지가 없을 경우 apt install -y ethtool 명령으로 설치합니다

 

 

 

touch /etc/systemd/system/snort3-nic.service
vi /etc/systemd/system/snort3-nic.service

 

인터페이스 서비스 파일을 생성합니다

그리고 파일의 내용을 넣어줍니다

[Unit] Description=Set Snort 3 NIC in promiscuous mode and Disable GRO, LRO on boot
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ip link set dev enp0s3 promisc on
ExecStart=/usr/sbin/ethtool -K enp0s3 gro off lro off
TimeoutStartSec=0
RemainAfterExit=yes

[Install]
WantedBy=default.target

 

저장을 합니다

 

systemctl daemon-reload
systemctl start snort3-nic
systemctl enable snort3-nic
systemctl status snort3-nic

 

재시작 및 상태를 확인합니다

 

mkdir /usr/local/etc/snort/rules

 

정책을 저장할 디렉터리를 생성합니다

 

cd
wget -qO- https://www.snort.org/downloads/community/snort3-community-rules.tar.gz | tar xz -C /usr/local/etc/snort/rules/

 

root의 홈 디렉토리에서 실행합니다

snort3-community-rules.tar.gz 파일 다운로드와 동시에 압축해제도 동시에 진행합니다

 

vi /usr/local/etc/snort/snort.lua

 

해당 파일로 들어가 환경 설정 변경합니다

 

HOME_NET = 'any'
HOME = '192.168.219.0/24'

 

EXTERNAL_NET = 'any'
EXTERNAL_NET = '!$HOME_NET'

 

자신의 네트워크 대역에 맞게 변경해줍니다.

즉 이 네트워크 외의 모든 IP는 전부 외부 네트워크로 간주합니다

 

 

rules = [[
        include /usr/local/etc/snort/rules/snort3-community-rules/snort3-community.rules
   ]]

 

 Rule 파일을 추가합니다

이 파일을 추가해야 룰을 적용시킬 수 있습니다.

참고로 이 룰은 snort3 사이트에서 가져온 기본 제공 룰 입니다

 

저장을 하고 vi 편집기에서 빠져나옵니다

 

 

snort -c /usr/local/etc/snort/snort.lua

 

환경 설정 파일에 문제가 없는지 실행시켜봅니다.

 

에러가 뜰 수 있는데요 에러 메시지를 읽어봅니다.

문법 에러임을 알려주고 있으며 193번 라인의 문제라고 합니다.

아까 작성했던 부분에 오타가 있음을 알 수 있습니다.

 

확인을 해보니 default_variables 뒤에 쉼표를 빠트려서 생긴 오류였습니다.

혹시나 이런 일이 생기시면 메시지를 확인하시길 바랍니다

 

snort -c /usr/local/etc/snort/snort.lua

 

이제는 정상적으로 실행됨을 알 수 있습니다.

 

cd /usr/local/etc/snort/rules/
touch /usr/local/etc/snort/rules/local.rules
vi /usr/local/etc/snort/rules/local.rules

 

이번에는 우리가 룰을 작성을 해볼 차례입니다.

룰 디렉토리로 이동 후 파일을 생성하고 vi 편집기로 들어가서 룰을 작성하여 줍니다.

 

alert icmp any any -> $HOME_NET any ( msg:"Incomming ICMP";sid:1000001;rev:1; )

 

간단하게 ICMP 패킷을 감지하면 알림이 뜨는 룰을 작성하였습니다.

 

 

 

vi /usr/local/etc/snort/snort.lua

 

환경 설정 파일로 들어가 우리가 작성한 룰을 include 해주어야만이 그 룰이 적용이 됩니다

 

include /usr/local/etc/snort/rules/local.rules

 

경로를 추가해줍니다

 

snort -c /usr/local/etc/snort/snort.lua

 

환경 설정 파일을 수정하고 나면 문제가 없는지 계속 확인을 해주어야 합니다.

어디에서 문제가 생긴지 알 수 있으며 즉각 수정을 해야하기 때문입니다

 

cd
wget https://www.snort.org/downloads/openappid/33380 -O OpenAppId-33380.tgz
tar -xzvf OpenAppId-33380.tgz

 

root 홈 디렉토리에서 작업을 진행합니다

파일을 다운로드 하고 압축을 해제합니다

 

cp -R odp /usr/local/lib/

 

하위 디렉토리까지 모두 복사하여 줍니다

 

vi /usr/local/etc/snort/snort.lua

 

환경설정 파일로 들어갑니다

 

appid =
{
    -- appid requires this to use appids in rules
    app_detector_dir = '/usr/local/lib',
    log_stats = true,

}

appid_listener =
{
    json_logging = true,
    file = "/var/log/snort/appid-output.log",
}

 

해당 문구를 114번 라인에 추가해줍니다

Appication ID 기능을 활성화하고 구성하기 위한 설정입니다

AppID를 사용하여 네트워크 트래픽에서 특정 애플리케이션을 식별하고 로그를 생성할 수 있습니다

 

snort -c /usr/local/etc/snort/snort.lua

 

환경 설정 파일을 수정하였으니 이상이 없는지 체크를 진행합니다

 

 

이제 모든 설치가 마무리 되었습니다.

간단한 테스트를 진행하겠습니다.

 

 

snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/snort/rules/local.rules -i enp0s3 -A alert_fast -s 65535 -k none

 

로그를 실시간으로 띄우는 명령입니다.

간단하게 host PC 즉 사용자의 윈도우 PC에서 PING을 날려보면 캡쳐가 잘 됨을 알 수 있습니다

 

이상으로 설치 방법을 마치겠습니다. 감사합니다

반응형

관련글 더보기