네트워크 보안에 대해 진지하게 생각한다면 네트워크 경계를 강화하고 잠재적으로 원치 않는 네트워크 트래픽을 차단하기 위해 IPS 또는 IDS 솔루션을 설치하는 것이 필수입니다.
Snort는 개인용으로 무료로 사용할 수 있는 유명한 오픈 소스 IPS/IDS 솔루션 중 하나입니다. Linux에 Snort를 설치하고 설정하여 사이버 공격으로부터 네트워크를 방어하는 방법을 알아보세요.
Snort란 무엇인가요?
Snort는 이름에서 알 수 있듯이 네트워크에 주입된 잠재적인 악성 패킷을 탐지하고 삭제하는 규칙과 필터를 적용하여 네트워크 경계를 보호하는 데 도움이 되는 오픈 소스 네트워크 침입 탐지 및 방지 시스템(NIDS/IPS) 소프트웨어입니다.
Snort를 사용하면 고급 네트워크 트래픽 로깅, 패킷 스니핑 및 분석을 수행하고 원치 않는 잠재적 악성 트래픽으로부터 네트워크를 방어하는 강력한 침입 방지 시스템을 설정할 수 있습니다.
Snort 설치 전제 조건
Snort를 설치하기 전에 수행해야 할 몇 가지 사전 설정이 있습니다. 여기에는 주로 시스템 업데이트 및 업그레이드와 Snort가 제대로 작동하는 데 필요한 종속성 설치가 포함됩니다.
시스템 업데이트 및 업그레이드부터 시작하세요.
우분투 및 데비안 기반 Linux 배포판:
sudo apt update && apt upgrade -y
아치 리눅스 및 그 파생 버전에서:
sudo pacman -Syu
RHEL 및 Fedora에서:
sudo dnf upgrade
시스템이 업그레이드된 후에도 Snort에 필요한 종속성을 계속 설치하세요. 실행해야 하는 명령은 다음과 같습니다:
우분투 및 데비안에서 실행합니다:
sudo apt install -y build-essential autotools-dev libdumbnet-dev libluajit-5.1-dev libpcap-dev zlib1g-dev pkg-config libhwloc-dev cmake liblzma-dev openssl libssl-dev cpputest libsqlite3-dev libtool uuid-dev git autoconf bison flex libcmocka-dev libnetfilter-queue-dev libunwind-dev libmnl-dev ethtool libjemalloc-dev libpcre++-dev
Arch Linux에서 실행합니다:
sudo pacman -S gperftools hwloc hyperscan ibdaqlibdnet libmnl libpcap libunwind luajit lz4 openssl pcre pulledporkxz zlib cmake pkgconf
RHEL 및 Fedora의 경우 다음 명령을 실행합니다:
sudo dnf install gcc gcc-c++ libnetfilter_queue-devel git flex bison zlib zlib-devel pcre pcredevel libdnet tcpdump libnghttp2 wget xz-devel -y
또한 Snort가 제대로 작동하려면 데이터 수집 라이브러리인 LibDAQ를 수동으로 설치해야 하며 빌드 파일을 생성하려면 gperftools도 수동으로 설치해야 합니다.
먼저 공식 웹사이트에서 wget 명령을 사용하여 LibDAQ 소스 파일을 다운로드합니다. 그런 다음 아카이브를 압축을 풀고 cd를 사용하여 디렉토리로 이동합니다. 디렉토리 내에서 부트스트랩을 실행하고 스크립트를 구성한 다음 make 명령으로 파일을 준비하고 make install 명령으로 설치합니다.
wget https://www.snort.org/downloads/snortplus/libdaq-3.0.11.tar.gz
tar -xzvf lib*
cd lib*
./bootstrap
./configure
make
sudo make install
LibDAQ을 설치했으면 마지막 종속 요소인 gperftools를 설치해야 합니다. 먼저 GitHub 리포지토리에서 소스 파일을 가져옵니다. 파일을 압축을 풀고 디렉토리로 이동한 다음 구성 스크립트를 실행합니다. 마지막으로 make 및 make install 명령을 사용하여 패키지를 설치합니다.
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.10/gperftools-2.10.tar.gz
tar -xvzf gper* && cd gper
./configure
make
sudo make install
이러한 종속성이 설치되면 다음 단계로 넘어가 Snort를 설치할 수 있습니다.
Linux에 소스에서 Snort 설치
예비 설정이 완료되었으므로 이제 실제 소프트웨어 설치에 집중할 수 있습니다. 소스에서 빌드할 것이므로 먼저 필요한 빌드 파일을 가져와야 합니다.
wget 명령을 사용하거나 공식 다운로드 페이지에서 파일을 수동으로 다운로드하세요:
wget https://www.snort.org/downloads/snortplus/snort3-3.1.58.0.tar.gz
다운로드: Snort
빌드 파일이 포함된 아카이브의 다운로드가 완료되면 tar 명령을 사용하여 압축을 풉니다:
tar -xzvf snort*
압축을 푼 폴더로 이동하여 구성 스크립트를 실행하고 make 명령을 사용하여 파일을 준비한 다음 마지막으로 make install을 사용하여 설치합니다:
cd snort*
./configure_cmake.sh --prefix=/usr/local --enable-tcmalloc
cd build
make
sudo make install
이제 Snort가 시스템에 성공적으로 설치되었습니다. 하지만 완료해야 할 단계가 하나 더 있습니다. 새 소프트웨어를 수동으로 설치하는 경우, 설치 디렉토리와 필수 라이브러리가 시스템의 기본 경로에 자동으로 포함되지 않을 수 있습니다. 따라서 애플리케이션을 시작할 때 오류가 발생할 수 있습니다.
이 문제를 방지하려면 ldconfig 명령을 실행해야 합니다. 이 명령은 시스템의 공유 라이브러리 캐시를 새로 설치된 라이브러리 및 바이너리와 동기화합니다. 루트 셸에서 ldconfig 명령을 실행하거나 sudo 접두사를 사용하세요:
sudo ldconfig
이제 Snort를 설치하는 데 필요한 모든 중요한 단계를 다루었습니다. 설치 여부를 확인하려면 -V 플래그와 함께 Snort 명령을 실행하면 버전 이름 및 기타 데이터를 반환하는 출력이 표시됩니다.
snort -V
Snort 설치를 확인했으면 다음 단계로 이동하여 본격적인 IDS/IPS로 설정하세요.
Linux에서 Snort의 초기 구성
Snort의 효율성은 거의 전적으로 제공된 규칙 세트의 품질에 달려 있습니다.
그러나 규칙을 설정하기 전에 Snort와 함께 작동하도록 네트워크 카드를 구성해야 하며, 기본 구성이 Snort에서 어떻게 처리되는지 테스트해야 합니다. 네트워크 카드 구성부터 시작하세요.
네트워크 인터페이스를 무차별 모드로 설정합니다:
sudo ip link set dev interface_name promisc on
ethtool을 사용하여 GRO(일반 수신 오프로드) 및 LRO(대용량 수신 오프로드)를 비활성화하여 더 큰 네트워크 패킷이 잘리지 않도록 하세요:
sudo ethtool -K interface_name gro off lro off
기본 구성으로 Snort가 어떻게 작동하는지 테스트하세요:
snort -c /usr/local/etc/snort/snort.lua
시스템에 Snort를 올바르게 설치 및 설정했다는 성공적인 출력 신호가 반환되어야 합니다. 이제 기능을 직접 사용해보고 다양한 구성을 실험하여 네트워크 보안에 가장 적합한 규칙 집합을 찾을 수 있습니다.
Snort로 규칙 설정 및 적용
기본 설정이 완료되었으므로 이제 Snort는 경계를 방어할 준비가 되었습니다. 아시다시피, Snort는 트래픽의 유효성을 판단하기 위해 규칙 세트가 필요하므로 커뮤니티에서 만든 몇 가지 무료 규칙 세트를 설정해 보겠습니다.
Snort는 특정 디렉터리에서 규칙 세트와 구성을 읽습니다. 따라서 먼저 mkdir 및 touch 명령을 사용하여 Snort에 대한 규칙 및 기타 관련 데이터를 저장할 몇 가지 중요한 디렉터리를 만드세요:
sudo mkdir -p /usr/local/etc/{lists,so_rules,rules}
sudo touch /usr/local/etc/rules/local.rules
sudo touch /usr/local/etc/lists/default.blocklist
이러한 디렉터리가 생성되면 wget 명령을 사용하여 공식 웹사이트에서 커뮤니티 규칙 집합을 다운로드할 수 있습니다:
wget https://www.snort.org/downloads/community/snort3-community-rules.tar.gz
규칙 세트 다운로드가 완료되면 압축을 풀고 /usr/local/etc/rules/ 디렉터리에 복사합니다.
tar -xvzf snort3-com*
cd snort3-com*
cp * /usr/local/etc/rules/
규칙 집합으로 Snort를 실행하려면 다음 명령을 실행하세요:
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community.rules -i interface_name -s 65535 -k none
명령의 분석:
⭐ -c 기본 구성 파일 경로 설정
⭐ -R 적용 규칙 세트 경로 설정
⭐ -i 인터페이스 설정
⭐ -s 스냅렌 제한 삭제
⭐ -k 체크섬 무시
이렇게 하면 구성의 유효성을 검사하고 Snort의 모든 규칙 세트가 적용되어야 합니다. 네트워크 교란을 감지하는 즉시 콘솔 메시지로 사용자에게 알려줍니다.
자체 규칙 집합을 만들고 적용하려면 공식 문서 페이지 에서 자세히 알아볼 수 있습니다.
Snort로 로깅 설정
기본적으로 Snort는 로그를 출력하지 않습니다. 로깅 모드에서 Snort를 시작하고 로그 파일 유형을 정의하려면 -L 플래그를 지정하고, 로그를 덤프할 Snort의 로깅 디렉터리를 설정하려면 -l 플래그를 지정해야 합니다.
다음은 로깅을 사용하도록 설정한 상태에서 Snort를 시작하는 명령입니다:
sudo snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community.rules -i interface_name -s 65535 -k none -L file_type -l /var/log/snort
명령의 분석:
⭐ -c는 기본 구성 파일의 경로를 설정합니다
⭐ -R은 시행할 규칙 세트의 경로를 설정합니다
⭐ -i는 인터페이스를 설정합니다
⭐ – – -.s는 스냅렌 제한을 무시
⭐ -k는 체크섬을 무시
⭐ -L은 로깅 모드를 활성화하고 로그 파일 유형을 정의
⭐ -l은 로그를 저장할 경로를 정의
예제 명령에서 참고하세요, 로깅 디렉터리가 /var/log/snort로 설정되어 있습니다. 이는 권장 사항이지만 로그를 다른 곳에 저장해도 됩니다.
정의한 디렉터리에서 Snort의 로그 파일을 읽거나 추가 분석을 위해 Splunk와 같은 SIEM 소프트웨어로 전달할 수 있습니다.
Snort를 시스템 시작 데몬으로 추가
Snort를 설치 및 설정했더라도 시작 시 실행을 시작하고 백그라운드 데몬으로 실행되도록 해야 합니다. 자동 시작 시스템 서비스로 추가하면 시스템이 온라인 상태일 때 항상 Snort가 실행되어 시스템을 보호할 수 있습니다.
Linux에서 Snort 시작 데몬을 추가하는 방법은 다음과 같습니다.
⭐ 새 systemd 서비스 파일을 생성하여 시작합니다:
touch /lib/systemd/system/snort.service
⭐ 원하는 텍스트 편집기에서 파일을 열고 다음 데이터로 파일을 채웁니다. 필요에 따라 플래그를 수정할 수 있습니다:
[Unit]
Description=Snort Daemon
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/snort -c /usr/local/etc/snort/snort.lua -R /usr/local/etc/rules/snort3-community.rules -s 65535 -k none -l /var/log/snort -D -L pcap -i ens33
[Install]
WantedBy=multi-user.target
⭐ 파일을 저장하고 종료합니다. 그런 다음 service 및 systemctl 명령을 사용하여 스크립트를 활성화하고 시작합니다:
sudo systemctl enable snort.service
sudo snort start
이제 Snort 백그라운드 데몬이 실행 중입니다. systemctl status snort 명령을 사용하여 스크립트의 상태를 확인할 수 있습니다. 긍정적인 출력이 반환되어야 합니다.
이제 Snort IDS로 네트워크를 보호하는 방법을 알았습니다.
IDS를 구현하는 것은 좋은 방법이지만, 능동적인 방법보다는 수동적인 방법입니다. 네트워크의 보안을 개선하고 보장하는 가장 좋은 방법은 지속적으로 테스트하고 수정할 결함을 찾는 것입니다.
모의 침투 테스트는 악용 가능한 취약점을 찾아 패치를 적용할 수 있는 좋은 방법입니다.