구축환경
CentOS 7.6 Minimal - (www.centos.org)
VirtualBox 7.0 - (www.virtualbox.org)
Snort - (www.snort.org)
알고가기
IDS(intrusion detection system: 침입탐지시스템)
공격자: attacker
피해자: victim
무료 snort를 사용하면 탐지패턴을 계속 등록해야하기 때문에 계속해서 관리하고 작성하여 추가해줘야한다.
하지만 유료 snort를 사용하면 snort사이트에서 최신 탐지정책들을 제공하기때문에 다운 및 적용만 해주면 된다.
네트워크 IDS (외부에서 들어오는 트래픽들 탐지)
호스트 IDS (내부에서 통신되는 트래빅들을 탐지)
yum install -y libdnet-devel openssl-devel pkgconfig gcc flex bison zlib* libpcap* pcre* libpcap-devel libpcre3-devel libnetfilter-queue-devel iptables-devel libdnet* tcpdump→ 설치
yum install -y daq daq-devel daq-modules libnghttp2→ 설치
yum install -y epel-release → epel 저장소 설치
wget https://snort.org/downloads/archive/snort/snort-2.9.16-1.centos7.x86_64.rpm
→ 스노트엔진 wget으로 다운
(snort.org사이트에서 보면 download-snort 에서 rpm은 리눅스용 다운로드파일, exe는 윈도우용 다운로드파일)
rpm -ivh snort-2.9.16-1.centos7.x86_64.rpm → 스노트엔진 설치
snort -V → snort V 명령어는 snort의 버전을 확인할 수 있다.
하지만 지금은 libdnet.1 파일이나 디렉토리가 없다며 에러 메시지가 출력된다.
cd /lib64 → /lib64로 이동
ls → 파일 목록을 보면 libdnet.so.1과 libdnet.so.1.0.1 을 볼 수 있다.
ln -s libdnet.so.1.0.1 libdnet.1 → libdnet.so.1.0.1에서 libdnet.1 로 링크연결하는 명령어
* 링크(link) 명령어 = ln 에는 소프트링크와 하드링크가 있다.
snort-V → 싱크 연결 해주고 snort 혹은 snort -V 를 입력하면 버전확인 가능함.
내가 설치한 snort 버전은 2.9.16인 것이 확인된다.
권한변경해주기
chmod -R 700 /var/log/snort → snort 디렉토리 권한 700으로 설정
mkdir /usr/local/lib/snort_dynamirules → snort_dynamirules 디렉토리 생성
chmod -R 700 /usr/local/lib/snort_dynamirules → snort_dynamirules 권한 700으로 설정
-R: 내가 지정하는 디렉터리는 물론 하위디렉터리까지 모두 포함시키는 것
탐지정책이기 때문에 소유자만 읽고, 쓰기(700)가 가능하게 설정했다.
파일 소유자변경
chown -R snort.snort /etc/snort
→ (소유자 = snort, 그룹 = snort, /etc/snort 디렉토리에 관해서 소유자 변경)
chown -R snort.snort /var/log/snort
chown -R snort.snort /usr/local/lib/snort_dynamirules
cd /etc/snort
ls
rules라는 디렉토리가 있는데 탐지정책들이 저장되는 곳이다.
cd /etc/snort/rules
ls
아직은 설정된 정책이 없어서 아무것도 없다.
cd /var/log
ls
이제 snort 디렉토리가 생성된 것을 볼 수 있다.
vi /etc/snort/snort.conf → snort.conf 파일 vi편집기 모드 진입
45번 ipvar HOME_NET any 수정 → 예) ipvar HOME_NET 0.0.0.0/24
☞ 원래는 any로 적혀있지만 any를 지우고 ipvar HOME_NET 탐지 및 보호 받을 ip대역대 혹은 ip주소 입력
104번 var RULE_PATH /etc/snort/rules → 이렇게 절대경로로 들어와있어야함
105번 var SO_RULE_PATH ../so_rules 수정 → var SO_RULE_PATH /etc/snort/rules
106번 var PREPROC_RULE_PATH ../reproc_rules 수정 → var PREPROC_RULE_PATH /etc/snort/rules
113번 var WHITE_LIST_PATH ../rules 수정 -> var WHITE_LIST_PATH /etc/snort/rules
114번 var BLACK_LIST_PATH ../rules 수정 -> var BLACK_LIST_PATH /etc/snort/rules
522번 output unified2: filename snort.log, limit 128
☞ 출력할 때 unified2 방식으로 출력하고 파일이름은 snort.log 메모리 제한은 128
546번 include $RULE_PATH/local.rules
☞ 정상적으로 입력이 되어있는지 확인하고 입력되어있다면 건드리지 않아도 된다.
자동으로 생성되는 룰 / 내가 작성한 룰에 의해 된건지 원래 룰에 의해 된건지 구분하기 어렵기 때문에 snort를 설치할 때 자동으로 설치되는 룰들을 주석처리 해줘야한다.
따라서 548번 부터 651번까지 모두 주석처리를 해줘야하는데 하나하나 하려면 시간이 굉장히 많이 걸린다.
아래 vi편집기 명령어를 이용하자.
:548, 651 s/^/#/g → 548번부터 651번까지 일괄적으로 주석처리
:wq! → 저장 후 나가기
아까 113번, 114번에서 화이트리스트, 블랙리스트 경로 설정을 했기 때문에 화리, 블리 모두 만들어준다.
touch /etc/snort/rules/white_list.rules
touch /etc/snort/rules/black_list.rules
snort -T -c /etc/snort/snort.conf → 환경설정 파일을 확인하는 명령어 (-T: test, -c: check)
역시 한 번에 보내주는 법이 없다.. 253번 라인에 문제가 있다. 파일 또는 디렉토리가 없다는 오류이다.
에러를 해결하려면 253번에 주석을 달거나 해당경로에 디렉토리를 하나 만들어주는 방법이 있다.
vi /etc/snort/snort.conf
나는 그냥 253번에 주석처리를 해두었다.
snort -T -c /etc/snort/snort.conf → 환경설정 파일을 확인하는 명령어 (-T: test, -c: check)
아.. 253번에 그냥 주석만 달았더니 또 에러가 발생했다. /etc/snort//etc/snort/rules/local.rules 파일을 사용할 수 없다는 에러가 뜬다.
cd /etc/snort/rules → rules 디렉토리로 이동
touch local.rules → local.rules 파일 생성
snort -T -c /etc/snort/snort.conf → 환경설정 파일을 확인하는 명령어 (-T: test, -c: check)
드디어 오류없이 성공
조금 양이 많은 듯 해서 Snort 룰 작성은 다음 포스팅에서 다뤄야겠다.
일단 IDS는 구축완료
'정보보안실무 > 서버, 클라우드' 카테고리의 다른 글
S-Part. 18 칼리 리눅스(CentOS 7) 설정 및 구축 - [인스테도뷰] (0) | 2023.03.22 |
---|---|
S-Part. 17 IDS Snort Rule 작성 - [인스테도뷰] (0) | 2023.03.20 |
S-Part. 15 Linux CentOS 7 root 패스워드 분실 대처 - [인스테도뷰] (2) | 2023.03.20 |
S-Part. 14 utmp, wtmp, btmp와 각종 명령어들 - [인스테도뷰] (0) | 2023.03.20 |
S-Part. 13 Zabbix 구축하기 - [인스테도뷰] (0) | 2023.03.20 |