인터넷 ----- 방화벽 ----- WAN(라우터) ----- LAN ----- IPS ------- 스위치 ------- 호스트
ASA pfsense securityOnion selinux / iptables
N-IDS firewalld / ufw
------------------- IDS
tcpwrapper
apache(httpd) + security
IDS --> 솔루션 : Snort : 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
<CentOS 7에서 snort 설치>
<snort 설치를 위한 기본 세팅>
epel-release가 설치되어 있어야 함 --> yum -y epel-release
yum -y install -y gcc flex bison zlib libpcap pcre libdnet tcpdump
yum -y install libnghttp2 --> 에러 발생 시 yum makecache를 실행 --> 캐시 재설정 후 libnghttp2 설치하면 정상적으로 됨
<DAQ 설치>
rpm 다운로드 사이트
wget https://rpmfind.net/linux/epel/7/x86_64/Packages/d/daq-2.0.6-1.el7.x86_64.rpm
설치방법 2
yum -y install https://rpmfind.net/linux/epel/7/x86_64/Packages/d/daq-2.0.6-1.el7.x86_64.rpm
설치방법3
yum y- install daq
<snort 설치>
wget https://snort.org/downloads/snort/snort-2.9.20-1.centos.x86_64.rpm
snort 설치 과정에서 새로운 라이브러리 --> ldconfig
yum -y install snort-2.9.9.0-1.centos7.x86_64.rpm
snort 실행 명령어 snort
error while loading shared 어쩌구 오류 발생 시
find / -name "lindnet*"
ln -s /usr/lib64/libdnet.so.1.0.1 /usr/lib64/libdnet.1 --> 링크파일 생성
<snort 실행 화면>
snort 실행파일 위치 확인 - which snort
snort는 snort:snort 계정을 생성한다.
cat /etc/passwd | grep snort
직접 생성 시(패키지로 설치시 할 필요 없음)
useradd snort -s /bin/false -c Snort -g snort -d /var/log/snort
확인사항
/etc/snort 디렉터리 생성 여부 확인
/usr/local/lib/에 아무것도 없으면 mkdir /usr/local/lib/snort_dynamicrules 로 디렉터리 생성
sudo touch /etc/snort/rules/white_list.rules
sudo touch /etc/snort/rules/black_list.rules
sudo touch /etc/snort/rules/local.rules
snort 설정파일
/etc/snort/snort.conf
45번째 줄 ipvar HOME_NET any
------- ---------------- -----
변수선언 변수이름 리터럴
선언된 변수를 호출하는 방법 : $HOME_NET
550~653까지 include 주석처리
설정 확인
snort -T -c /etc/snort/snort.conf
-T = Test
-c = 설정파일 지정
<실제 snort 실행시키는 명령>
cat > snort_start.sh에 명령어 삽입
snort -A console -i ens33 -u snort -g snort -c /etc/snort/snort.conf
chmod +x snort_start.sh
./snort_start.sh 로 실행하면 꿀꿀이가 나옴
/etc/snort/rules/local.rules 에 들어가 아래 설정값을 넣어준다.
icmp가 들어오면 icmp라는 텍스트 출력
sid - 회사 내규에서 지정한 번호
팀 내에서 코드번호(sid) 지정 후 역할부여
sid값과 매핑된 테이블 정보를 기반으로 탐지해야 한다.
다른 서버에서 핑 통신을 보내면 snort에 기록이 된다.
cd /var/log/snort 에서 ls로 확인해보면 로그가 저장되어있다.
<저장된 로그 확인하는 법>
snort -r snort.log
snort -A console -i ens33 -c /etc/snort/snort.conf -b
tcpdump -xX -i ens33 -w icmp.pcap
-x : 각 패킷 헤더 및 데이터를 16진수로 인쇄
-X : 각 패킷의 헤더 및 데이터를 16진수 및 ASCII코드로 인쇄
Snort Rules -> 룰셋 : 시그니처 구조(SIGN)
<Rule 헤더>
경로 : /etc/snort/rules/local.rules
ex)
alert icmp any any -> 192.168.0.8/32 any (msg : "ICMP Test"; sid : 10000001; rev : 001;)
------ Action
------ Protocol
---- S.IP or S.NI
---- input 요청 신호가 들어왔을 때
------------------- D.IP or D.NI
---- S.Port / Dst.Port
Action - pass - 패킷무시
drop - 패킷 차단 및 로그 기능(IPS) : 조건 : in-line
sdrop - 패킷 차단 로그 기능 x
reject - 패킷 차단 및 로그기록 (TCP - RST응답)
(UDP - ICMP Unreachable 응답)
*alert - 경고 발생 - 화면 출력 및 로그 기능
log - 로그기록
protocol - tcp / udp / ip / icmp / any
input(방향 지정)
-> 요청 패킷에 대한 탐지
<- 응답 패킷에 대한 방지
Src.Port/Dst.Port - 80 단일 port
- 1:100 1~ 100 port
- !80 80을 제외한 나머지 포트
(msg : "ICMP Test"; sid : 10000001; rev : 001;)
------ 경고 이벤트 메시지
---- 룰 식별자(3000000이상 권장)
----- 룰 버전 : 수정 될 때 마다 1씩 증가
Flag (URG, ACK, PSH, RST, SYN, FIN)
TCP 플래그 NS, CWR, ECE, URG, ACK, PSH, RST, SYN, FIN 9가지
<사용자에게 정보를 주는 용도>
1. priority : 우선순위(위험도가 높다)
2. reference : 참고 정보들
3. classtype : 어떤 악성코드인지
<유입되는 패턴을 검사하는 용도>
1. content : 탐지하고자 하는 문자열을 작성하면 문자열을 포함하는 트래픽을 히트 ("ABC" <- 문자열 "|41 42 43|" <- 16진수로 ABC)
2. nocase : 대소문자 구분을 하지 않는다 "|41 42 43|";nocase => ABC,abc Abc .. 모두 히트가 된다.
3. depth : depth:5; 시작부터 5바이트까지 검사
4. offset : offset:5; 시작부터 5 떨어진 부분부터 검사
5. distance : 정의한 패턴이 있는 곳부터(시작점) 몇 바이트 떨어진 지점까지 정의하기 패턴 시작 상대위치
"123";distance:10; 123으로부터 10바이트 떨어진곳까지 검사
6. pcre : 정규표현식을 기록할수있는 옵션
'서버' 카테고리의 다른 글
유닉스 보안 (0) | 2023.08.01 |
---|---|
iptables -작성중 (0) | 2023.07.13 |
DISKQUOTA (0) | 2023.06.22 |
RAID (0) | 2023.06.21 |
SAMBA(smb) (0) | 2023.06.20 |