-
server 의 통신은 IPS 를 거쳐가는 구조
- IPS (snort + iptables) 192.168.50.80/24, 10.10.10.254/24
- server (WEB, telnet) 10.10.10.1/24
- hacker (kali) 192.168.100.100/24
-
NFQ (snort - iptables 연동 파일) 설치
- NFQUEUE : iptables 에서 패킷을 snort 로 전달하여 snort 가 패킷 분석 & 탐지 후 차단하도록 함
- snort 기존 설치 과정 중 몇 개 추가
- yum -y install pcre pcre-devel libdnet libdnet-devel tcpdump 이후
- yum -y install libnetfilter_queue libnetfilter_queue-devel libmnl
- daq-2.0.7 ./configure 이후
- Build NFQ DAQ module....... : yes 확인
- snort 설치 완료
- snort --daq-list 이후
- nfq(v7): live inline multi 확인
-
연동 설정
- vim /etc/snort/snort.conf
- 159 에 추가
- config daq: nfq
- config daq_mode: inline
- inline 모드 : 라우터나 스위치 처럼 데이터가 지나가는 모드
- config daq_var: queue=4
- queue : iptables 에서 사용할 번호 설정
-
iptables 정책 수립
- 탐지 후 차단이 목적이니 기본 정책 ACCEPT
- FORWARD chain 과 snort 를 연동
- iptables -A FORWARD -j NFQUEUE --queue-num=4
- NFQUEUE 가 실행 안되고 있으면 FORWARD 동작 (정상 통신) 불가 -> snort 실행해야 NFQUEUE 실행
- 외부 통신 허용을 위한 nat 설정
- iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE
-
snort 정책 수립
- /etc/snort/rules/local.rules
- drop icmp any any -> any any (meg:"ICMP DROP";sid:1000001;)
- drop tcp any any -> 10.10.10.1 23 (msg:"telnet access";sid:1000002;)
- drop tcp any any -> 10.10.10.1 80 (flags:S;threshold:type both,track by_dst,count 1000,seconds 1;meg:SNY FLOODING";sid:1000003;)
-
inline 모드 실행을 위해 NIC 추가 (2 개로 설정)
-
리눅스에서 reverse path (source IP) 가 부적절한 경우 (= 자기가 모를 경우 = 라우팅 테이블에 없는 경우) 필터링하는 옵션들 수정
- sysctl -a | grep filter 로 나오는 정책들 중 아래것들로 수정
- sysctl net.ipv4.conf.default.rp_filter=0
- sysctl net.ipv4.conf.eth1.rp_filter=0
-
snort 실행
- snort -vde -c /etc/snort/snort.conf -Q
-
탐지 로그 확인
- tail -f /var/log/snort/alert