애리밍
2k
2017-08-13 00:20:19.0 작성 2017-08-13 02:26:49.0 수정됨
0
968

AWS에 오픈소스 Suricata적용하기(Host-base)


Alt text


소개

멀티스레드로 대용량 대이터 처리에 적합하다고 알려져 있는 Suricata 적용 방법을 공유하고자 합니다. 기본적인 룰 설정이나 세팅은 suricata docs에 잘 정리 되어 있습니다. 여기선 그냥 기본적으로 설치와 인프라 구성정도만 소개하고 제가 적용하면서 느낀점이나 주의할 점을 정리하고자 합니다만...저도 정확한 지식은 없으니 테클은 너무너무 감사합니다. 많이 걸어주세요

Features

  • Suricata : IPS/IDS
  • Nginx : 프록시를 위한 Web 서버
  • Redis : 다량의 로그를 처리하기 위한 중간 고기방패(?)정도로 이해하시길...
  • Logstash : 로그를 보내고 받는 아이

Requirements

  • Suticata Ver3.2.3
  • Nginx Ver1.12.1
  • Logstash Ver2.0.0

Install Suricata

yum install epel-release

#의존성 패키징 설치
sudo yum -y install 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

#Suricata 다운로드
wget http://www.openinfosecfoundation.org/download/suricata-3.2.3.tar.gz

#압축을 풀고 Suricata 폴더 내로 이동합니다.
#IPS는 NFQ를 활용하기 때문에 --enable-nfqueue 옵션을 줘야 합니다.
./configure --prefix=/usr/ --sysconfdir=/etc/ --localstatedir=/var/ \
  --with-libjansson-libraries=/usr/lib64 --with-libjansson-includes=/usr/include\
  --enable-lua --enable-nfqueue

#Install Suricata
#Build-info 옵션을 사용하면 설치시 정한 옵션을 확인 할 수 있습니다.
make && make install && ldconfig
make install-full
suricata --build-info
  • Libjansson.so.4 에러 발생시 처리 방법
wget http://www.digip.org/jansson/releases/jansson-2.9.tar.gz

./configure
make
make check
make install

cd /usr/local/lib
ln -s /usr/local/lib/libjansson.so.4 /usr/lib/libjansson.so.4
  • Suricata실행
#NFQ 지원 여부 확인
suricata --build-info |grep NFQueue
  NFQueue support:                         yes

#브릿지 모드로 실행하기 sudo suricata -c /etc/suricata/suricata.yaml -q 0
#브릿지로 온 패킷을 IPS 로 보내기 sudo iptables -A FORWARD -j NFQUEUE

Nginx setting

  • ELB 를 타겟으로 하기 때문에 Resolver 옵션을 줘야 한다.
server {
      keepalive_timeout 10;
      listen       80;
      location / {
                resolver 172.32.0.2 valid=10s;
                set $backend "http://[ELB URL]";
                proxy_pass $backend;
                charset utf-8;
        }

이게 중요!!! 진짜 중요!!!

  • 인스턴스 타입은 충분히 테스트 후 정할것!!!
  • 절대로 기본적으로 제공되는 시그니쳐 룰을 사용하지 마세요. 해당 룰인 엄청난 서버 리소스를 차지합니다. 또한 Suricata가 기본적으로 백신업체들이 제공하는 시그니쳐도 참조하는데 이게 업데이트 될 때마다 추가되는 양이 엄청납니다.
  • 정상 패킷을 오탐하는 경우가 있습니다. 절대로절대로 적용할때 IPS로 바로 적용하지 마세요. 보통 IPS/IDS 장비 도입할때도 IDS 모드로 약 한달 이상 로그를 수집하고 시그니쳐 분석한뒤 룰을 생성합니다.

장애 발생시 대응

  • 정상 패킷을 오탐했을때.
    • 기본 설정을 사용할 경우 이럴때 답이 없습니다. 찾기 굉장히 어렵습니다. eve.json을 보고 id를 추적해서 찾아 해당 시그니쳐를 제거하든 변경해야 합니다.
  • nf_queue: fail at **** entries, dropping packets (s) 발생시
    • 이건 그냥 메모리가 부족해서 나는 오류 입니다. 자세히 말하자면 Suricata의 Queue가 가득차서 DHCP Client가 DHCPREQUEST를 시도 했는데 fork가 메모리 부족으로 실행되지 못해서 ACK도 진행 못하고 IP 를 잃어버려 네트워크가 끊기는 현상입니다. /var/log/message를 보면 알 수 있습니다.
    • 모든 오픈소스가 그렇듯 Suricata도 정해진 Requirements가 딱히 없습니다. 최소 사양 같은게 없어서 테스트가 답입니다. 약 한달 이상 충분한 테스트를 진행 한 뒤 인스턴스 타입을 정하고 적용하셔야 합니다.
  • 관제 문제.
    • 사내에 시그니처를 관리하고 관제할 인력이 없다면 그냥 상용서비스 이용하세요. IPS/IDS는 관제가 생명입니다. 적용 뒤에 매번 로그를 확인하고 정상 패킷이 차단 됬는지 확인 하는 작업이 필요합니다.
0
0
  • 댓글 0

  • 로그인을 하시면 댓글을 등록할 수 있습니다.