iptables(IPS)와 snort(IDS) 실습

Simcurity·2023년 4월 18일
0

1. iptables, snort

iptables는 리눅스에 기본적으로 탑재돼있는 IPS 장비입니다.
IPS 장비이므로 룰에 설정되어있는 패킷이 접근 시 차단해주는 장비입니다.
snort는 기본적으로 설치되어있지 않은 IDS장비로 룰에 설정된 접근이 감지되면 탐지하여 로그를 남겨주는 기능을 하는 IDS장비입니다.

2. iptables 실습

kali에서 ubuntu로 접근을 시도하는 방식으로 실습을 할 것입니다.

kali ip : 192.168.0.129
ubuntu ip : 192.168.0.128

2-1) iptables 명령어 형식

룰 형식
iptables [규칙] [체인명] [옵션] [타겟]

1) 규칙

-A : 새로운 규칙을 맨 아래에 추가
-I : 새로운 규칙을 맨 앞에 추가
-D : 규칙을 삭제
-F : 체인의 모든 규칙을 삭제
-L : 해당 체인 룰 출력

ubuntu에서 iptables 룰을 설정합니다.

2) chain

INPUT : 외부에서 내부로 들어오는 패킷에 대한 체인
OUTPUT : 내부에서 외부로 나가는 패킷에 대한 체인
FORWARD : 현재 서버가 목적지가 아닌 패킷이 통과하는 체인 (NAT 기능을 위해 사용)

3) 타켓

ACCEPT : 패킷을 허용
DROP : 패킷을 거부 (아무런 반응 없이)
REJECT : 패킷을 거부 (거부 메세지 전송)
LOG : 패킷을 syslog에 기록
RETURN : 해당 체인에서 패킷을 계속 처리

 

2-2) 예시

iptables -A INPUT -p tcp -s 192.168.6.129 --sport 31523 -j DROP
발신지 ip 가 192.168.6.129 이고 발신지 포트가 31523인 패킷 거부 (거부 메세지 전송 안함)

iptables -A INPUT -p tcp --dport 23 -j DROP (텔넷 서비스 차단)
칼리에서 접속이 되지 않음
iptables -D INPUT 1 (해당 룰 삭제)바로 연결 됨

 

2-3) 모듈 사용

-m 옵션으로 여러 모듈을 사용할 수 있습니다.
recent모듈을 사용해 Flooding 공격 차단 (보통 공격이 들어올 때 로그를 제한하기 위하여 사용)

iptables -A INPUT -p tcp -s 0.0.0.0/0 --dport 80 -m recent --update --second 60 --hitcount 5 -j DROP

kali에서 hping3로 syn flooding 공격 시 차단되는 모습

 

3. snort 실습

snort는 사실 스니핑 도구입니다.
하지만 공격을 탐지위한 스니핑 도구로 특정한 룰을 설정하여 룰에 해당하는 패킷 탐지시 특정 액션을 취하도록 설정합니다.

3-1) snort 설치

apt-get update
apt-get install -y snort

설치할 때 ip대역 입력란이 나오는데 자신의 ip 대역 입력
ip가 192.168.54.100이고 서브넷 마스크가 255.255.255.0이면
192.168.54.0/24 입력



설치 후 snort 버전 확인

snort --version

 
스노트 구동을 위한 의존성 패키지 설치

apt-get install -y gcc libpcre3-dev zlib1g-dev libluajit-5.1-dev libpcap-dev openssl libssl-dev libnghttp2-dev libdumbnet-dev bison flex libdnet autoconf libtool

 
스노트 daq 설치

wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
tar -xzvf daq-2.0.7.tar.gz
cd daq-2.0.7
./configure && make && make install

 
snort 소스 코드 다운로드

wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz
tar -xzvf snort-2.9.20.tar.gz
cd snort-2.9.20
./configure -enable-sourcefire && make && make sintall

 
snort.conf 수정

vim /etc/snort/snort.conf 입력 후
ipvar HOME_NET [ip대역] -> 아까 snort 패키지 설치할 때 입력한 ip 대역 입력

include $RULE_PATH 찾아서 모두 주석 처리하고 local_rules만 입력

 

3-2) snort 룰 작성

snort 룰 형식
action 프로토콜 [발신지 ip] [발신지 port] -> [수신지 ip] [수신지 port] (탐지 옵션)

액션 종류
alert : 해당 룰 일치 시 alert 발생 시키고 로그에 남김
log : 패킷을 로그에 남김
pass : 패킷을 무시
drop : 패킷을 차단하고 로그에 남김
reject : 패킷을 차단하고 로그에 남기고 거부 메세지 전송
sdrop : 패킷을 차단하지만 로그에 남기지 않음

3-3) 예시

alert tcp $EXTERNAL_NET any -> $HOME_NET 80 (content:"GET"; offset:0; depth:3; msg:"GET request"; sid=1000001;)
외부에서 내부로 GET 요청 시 "GET request"라는 메세지 알림

3-4) snort 탐지

/etc/snort/rules/local.rules에 다음 룰 설정

기본 실행 시

snort –v –c /etc/snort/snort.conf

로깅 실행 시

snort -vde -l /var/log/snort -c /etc/snort/snort.conf

로깅 모드로 실행 했습니다.

칼리에서 ping 전송 icmp패킷 실시간 탐지

cat /var/log/snort/snort.alert.fast
로그 확인 시 "icmp detected" 라는 메세지의 탐지 기록

이상 iptables과 snort 실습을 마치겠습니다.

0개의 댓글