새로운 공간
관제시스템_SNMP_ESM 본문
<이론>
SNMP > 관제 시스템 구축 ----> 모든 네트워크 장비는 SNMP를 생성한다.
MRTG > 네트워크 장비 관제용으로 사용하겠다.
CATTI > 서버 장비 관제용으로 사용하겠다.
ESM(Enterprise Security Management)
> 시스템의 현재 상태값들 확인용도, 현재 이렇구나~
방화벽, 침입 탐지 시스템, 침입 방지 시스템 등 각종 보안 시스템의 로그들을 모아 한곳에서
통합 관리를 할 수 있게 해주는 시스템
보안 장비 : 방화벽 / IPS / IDS / WAF ... : 다양한 이 기종 장비가 존재한다.
MMS
: 통합 로그 서버 -> 각종 서버 / 장비 -> 각자 로그를 생성 -> 한곳에 모은다. (백업서버)
SIEM
> 시스템의 현재 상태값들의 확인해서 이게 왜그런지 분석
SIEM은 SIM(보안 정보 관리)과 SEM(보안 이벤트 관리, =ESM)의 기능을 하나의 보안 관리 시스템으로 통합한
솔루션입니다. SIEM은 여러 원본에서 이벤트 로그 데이터를 수집하고 실시간 분석을 바탕으로 정상적인
범위를 벗어나는 활동을 식별하여 적절한 조치를 취합니다.
대표적으로 '스플렁크' 가 있다
스플렁크?
: 웹 환경에 의해서 검색, 모니터링, 분석하는 소프트웨어를 개발
: 스플렁크는 캘리포니아주 샌프란시스코에 위치한 미국의 다국적 기업의 하나로,
기계가 생성한 빅 데이터를, 웹 스타일 인터페이스를 통해 검색, 모니터링, 분석하는 소프트웨어를
개발하고 있다.
EIK?
: "ELK"는 Elasticsearch(빅데이터?), Logstash(로그분석?) 및 Kibana(웹스타일), 이 오픈 소스 프로젝트 세 개의 머리글자입니다. Elasticsearch는 검색 및 분석 엔진입니다.
<설치>
오늘의 목표 ESM을 구축하자.(feat. SNMPv2c)
1. MONITORIX
: Multi Router Traffic Grapher
: 단일 장비 관제 :> SNMP 사용하지 않음
: 서버 모니터링을 제공한다(WEB)
: 모니터릭스의 홈디렉터리를 가상 호스팅 연결 : mon.ubiedu.co.kr
: 서버의 시스템 정보 수집 : RRD 파일의 형태로 저장
: RRD :> 웹을 통해 그래프로 형태로 출력
yum -y install monitorix
systemctl restart monitorix
systemctl status monitorix
listening on 8080
브라우저 : http://192.168.0.8:8080
<설정 파일>
[root@localhost /]# cd /etc/monitorix/
[root@localhost monitorix]# ls
conf.d monitorix.conf
[root@localhost monitorix]# vim monitorix.conf
base_dir = /var/lib/monitorix/www/
base_lib = /var/lib/monitorix/
base_url = /monitorix
base_cgi = /monitorix-cgi
<설정값 수정>
vhost 사용하려다가 설정 바꾸기 귀찮아서 Redirect 시킴
1. Redirect 명령어를 사용하는 방법
Redirect / http://192.168.0.158:8081
2. Rewrite를 사용하는 방법
RewriteEngine On
RewriteRule ^/$ http://192.168.0.158:8081/ [R]
[참고] Flag
RewriteRule 문법중 마지막은 패턴이 일치할 경우 어떤 동작을 취할지 지정하는 부분이며 이를 플래그라고 합니다. 지정할 수 있는 플래그중 자주 사용되는 것들은 다음과 같은 항목이 있습니다. 플래그는 전체 단어를 써도 되지만 축약어로 써도 됩니다. 전체 단어를 사용할 때는 공백을 제거하고 사용해야 합니다.
Env:E - Env 플래그는 조건이 맞을 경우 특정 환경 변수를 설정하거나 해제할 수 있다.
다음은 클라이언트가 요청한 파일이 이미지 파일일 경우 로그를 남기지 않게 하는 설정으로 전 절의 mod_setenvif 로 사용한 예와 동일한 결과를 갖게 된다.
RewriteEngine On
RewriteRule \.(jpe?g|gif|png)$ - [env=dontlog:1]
CustomLog logs/access_log combined env=!dontlog
Last:|L – Last 플래그는 더이상 mod_rewrite 룰 처리를 하지 않겠다는 의미이다. 프로그래밍 언어에서 break 와 비슷한 용도로 사용되며 여러 개의 RewriteRule 룰을 연결해서 사용하는 경우 더 이상의 처리를 하지 않아도 될 때 유용하게 사용할 수 있다.
Nocase:NC – Nocase 는 패턴 매칭할 경우 대소문자 구분을 하지 않겠다는 의미이다. 다음과 같이 설정하면 브라우저가 /article/3 으로 요청한 것을 index.php에 articleID=$1 형식으로 전달한다. $1 은 첫 번째 일치하는 변수이므로 3 이 설정된다. 그러므로 example.com/article/3 과 example.com/index.php?articleID=3 과 동일해 진다. NC 이므로 대소문자를 구분하지 않으므로 example.com/ARticle/3 도 같은 의미가 된다.
RewriteRule ^/article/(\d*) /index.php?articleID=$1 [NC]
Forbidden:F – Forbidden 플래그는 규칙에 일치할 경우 해당 리소스에 대해 HTTP 403 Forbidden 응답을 클라이언트에게 전송한다.
외부에서 접근하면 안 되는 리소스가 있을 경우 사용하면 유용하다. Forbidden 은 Last 의 의미를 포함하므로 더 이상의 Rewrite 규칙을 처리하지 않고 바로 리턴한다.
다음 예제는 브라우저가 요청한 리소스의 확장자가 exe 또는 msi와 같은 실행 파일일 경우 403 응답을 전송하는 예제이다.
RewriteEngine On
RewriteRule \.(exe|msi) - [F]
Redirect:R – 리다이렉트 플래그는 규칙에 일치할 경우 HTTP 302 Redirect 응답을 클라이언트에게 전송한다. 만약 HTTP 301 Moved Permanently 응답을 전송해야 한다면 R=301 로 적어주면 된다.
다음은 images 경로 밑에 모든 gif 요청을 jpg URL로 전환하는 예제이다.
RewriteRule ^/images/(.*)\.gif /jpegs/$1.jpg [L,R=301]
Passthru:PT – RewriteRule 의 target_url 이 http 나 https 로 시작하지 않으면 mod_rewrite 는 target_url 을 로컬 파일의 경로로 인식한다. / 로 시작할 경우 절대 경로로 / 가 아닐 경우 상대 경로로 처리하게 된다. 파일 경로로 처리할 경우 스크립트 파일의 경우 파일의 내용이 그대로 노출될 우려가 있다.
파일 경로로 처리할 경우 아파치 설정에 따른 적절한 핸들러가 실행되지 않고 해당 파일을 읽어서 브라우저에 전송하게 된다.
이로 인해 , , 등의 지시자로 설정한 내용이 적용되지 않거나 스크립트 타입에 따른 스크립트 핸들러가 실행되지 않게 된다.
이로 인해 404 에러가 발생하거나 스크립트의 내용이 브라우저에 그대로 노출될 수 있다.
P - 주어진 URL에 대한 요청은 Apache 모듈 mod_proxy에 의해 수행된다. ( 이 경우 URL keeping이 가능합니다. )
3. Proxy를 사용하는 방법
1) httpd.conf에서 아래 내용 주석 해제
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_http_module modules/mod_proxy_http.so
2) DOCUMENT_ROOT에 .htaccess 파일을 생성하고 아래 내용 추가
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteRule ^ http://192.168.0.158:8081%{REQUEST_URI} [P]
2. MRTG
: Multi Router Traffic Grapher
라우터나 스위치등(네트워크)로 부터 트래픽 정보를 수집하여 웹을 통해 실시간 그래픽을 제공한다.(주기 5분) --> crond
SNMP를 사용한다. : SNMP(Simple Network Management Protocol)
SNMP --> 매니저(서버)와 에이전시(클라이언트, Agent) 사이에 메시지 형태의 통신을 가능하게 해준다.
MIB / OID ---> 분석
라우터 SNMP 활성화
conf t
snmp-server 설정 ---> 정보를 생성 --> 전달 --> 전달 수신(Trap) --> 제공자(에이전트)
수신자(매니저)
SNMP는 네트워크 장비를 관리하거나 모니터링하기 위한 표준 형태의 프레임워크와 언어체계
---- --------
표준 형태의 프레임워크?
> SNMP Manager / SNMP Agent / SNMP MIB
> SNMP Manager : SNMP를 사용하는 네트워크의 호스트들을 제어하거나 모니터링하기 위한 시스템
SNMP Agent : SNMP 매니저에게 관리받는 장비/기기(라우터/스위치등)
소프트웨어적 요소로 데이터를 수집하여 필요에 따라 SNMP 매니저에게 보낸다.
: 소프트웨어적 요소 : snmpwalk
MIB ---> 관리 장치의 정보가 집합된 데이터베이스.
: 리소스가 저장된 저장소.
: 관리자가 조회하고 설정할 수 있는 정보.
: Management Information BASE
---> 관리자가 원하는 특정 정보 : OID : Object ID
----------
SNMP v1 / v2(초기) ---> 원격제어 기능 제공 ---> 문제 : 해킹의 우려가 있다.
: 데이터 전송과정에 암호화가 이루어지지 않는다.
커뮤니티(string) ---> 평문 ---> 비밀번호 노출 ---> 취약점을 이용한 원격제어 가능
SNMP v2c(후기) / v3
전달 프로토콜 : UDP
전송 포트 : 161 / 162
<snmp 설치>
yum -y install net-snmp-utils
설치 확인 : snmpwalk
agent 설치 : yum -y install net-snmp
snmp aget 설정 파일 :
[root@localhost /]# vim /etc/snmp/snmpd.conf
[root@localhost /]# cd /etc/snmp/
[root@localhost snmp]# ls
snmp.conf snmpd.conf snmptrapd.conf
[root@localhost snmp]# vim snmp.conf
[root@localhost snmp]# vim snmpd.conf
73번째 줄부터 확인 수정
동작 확인
snmpwalk -v2c -c kitri localhost system
ROUTER : Agent 192.168.0.11
server : manger ok 192.168.
Router : R1 설정
conf t
int f0/0
ip add 192.168.0.27 255.255.255.0
no sh
Router SNMP --> 설정
conf t
snmp-server community kitri ro
원한는 특정 정보를 Trap이 잡아서 전달한다.
R1(config)#snmp-server enable traps ?
aaa_server Enable SNMP AAA Server traps
자신의 정보를 입력하자.
R1(config)#snmp-server host 192.168.0.11 version 2c kitri
ROUTER 명령어 정리
conf t
snmp-server community kitri ro
snmp-server enable traps snmp
snmp-server host 192.168.0.28 version 2c kitri
서버에서 확인
[root@localhost snmp]# ping 192.168.0.11
PING 192.168.0.11 (192.168.0.11) 56(84) bytes of data.
64 bytes from 192.168.0.11: icmp_seq=1 ttl=255 time=26.7 ms
64 bytes from 192.168.0.11: icmp_seq=2 ttl=255 time=9.35 ms
64 bytes from 192.168.0.11: icmp_seq=3 ttl=255 time=7.16 ms
...
[root@localhost snmp]# snmpwalk -v2c -c kitri 192.168.0.11 system
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, 7200 Software (C7200-ADVENTERPRISEK9-M), Version 12.4(22)T, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2008 by Cisco Systems, Inc.
Compiled Fri 10-Oct-08 10:10 by prod_rel_team
....
[root@localhost snmp]# snmpwalk -v2c -c kitri 192.168.0.11 system
SNMPv2-MIB::sysDescr.0 = STRING: Cisco IOS Software, 7200 Software (C7200-ADVENTERPRISEK9-M), Version 12.4(22)T, RELEASE SOFTWARE (fc1)
Technical Support: http://www.cisco.com/techsupport
Copyright (c) 1986-2008 by Cisco Systems, Inc.
Compiled Fri 10-Oct-08 10:10 by prod_rel_team....
SNMP 동작방식a
SNMP GET : Agent의 MIB 객체 정보를 요청
1. 연속되는 MIB 객체 정보 요청(특정 OID) : system
2. 한번에 모든 MIB객체 데이터를 요청(MIB)
SNMP SET : MIB 변수의 값을 변경한다.
SNMP Notification : 경보
Agent는 Manager의 요청과 상관없이 두 가지 타입의 알림을 보낼 수 있다.
1. Trap 알림 : SNMP Agent가 전송하는 기본 형태의 메시지로 무시 할 수 없는 문제
(부정한 인증, 장비 재시작, 이웃 기기와의 연결 끊김, 장비의 과열 여부 등)
2. Informs 알림 --> Trap 알림의 전달 여부 확인(ACK) --> 수신확인이 필요하다.
SNMP 버전 ---> 3가지 ver1 <--- 호환성 보안 X
ver2 <--- 호환성 보안 X ---> 수정 : v2c
--------------------------------------------------
ver3 <--- 호환성 X 보안 O ---> MD5 / SHA 알고리즘을 이용한 알고리즘 사용 인증
DES / AES 알고리즘을 이용한 데이터 암호화 지원
사용자 인증 : 기밀성
데이터 암호화 : 무결성
SNMP 버전 ---> SNMPv1 : 암호화 없음. 보안 기능 없음
community string / 해킹에 취약
SNMPv2 : 보안기능, 네트워크 과부하, 관리 효율성 향상
v1과 호환이 안됨. 상용화에 실패
======================================
절대 사용 금지
======================================
SNMPv2c : SNMPv2에서 보안 기능 제거
Community String 사용, 현재 가장 많이 사용
SNMPv3 : Manager / Agent 구조를 개체로 바꿈
각 장치들은 상호 Manager/Agent을 변경하며
사용 가능 (별도의 패스워드 지정이 가능)
널리 사용되지 못하고 있다.
SNMP(MIB) ----> snmpwalk(GET) ---> agent ---> snmp-manager
클라이언트(Agent) ---> MIB ---> 서버(Manager) ---> MIB String
번역이 힘들다 ----> 그래프 출력 : MRTG / CACTI
<MRTG 세팅>
패키지 설치 : net-snmp net-snmp-utils
---> yum -y install net-snmp*
[root@localhost snmp]# yum -y install net-snmp*
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.kakao.com
* centos-sclo-rh: mirror.kakao.com
* centos-sclo-sclo: mirror.kakao.com
* epel: mirror-icn.yuki.net.uk
MRTG 설치
: 패키지 이름 : mrtg
yum -y install mrtg
설정위치
[root@localhost snmp]# cd /etc/mrtg/
[root@localhost mrtg]# ls
mrtg.cfg
[root@localhost mrtg]# vim mrtg.cfg
<이거 확인>
HtmlDir: /var/www/mrtg
ImageDir: /var/www/mrtg
LogDir: /var/lib/mrtg
ThreshDir: /var/lib/mrtg
mrtg의 유틸리티 (등록 사항 : 버전정보 커뮤니티-스트링 호스트(자신의IP)
cfgmaker --snmp-options=:::::2 --ifref=descr --ifdesc=descr kitri@192.168.0.26 > /etc/mrtg/mrtg.cfg
[root@localhost mrtg]# cd /home/
[root@localhost home]# ls
dvwa kitri kong kong1 metasploitable3-workspace quota vagrant webgoat
[root@localhost home]# mkdir mrtg #만들어주기
[root@localhost home]# chown -R apache:apache mrtg #권한바꾸기
[root@localhost home]# chmod -R 777 mrtg
[root@localhost home]#
[root@localhost snmp]# cd /etc/mrtg/
[root@localhost mrtg]# ls
mrtg.cfg
[root@localhost mrtg]# vim mrtg.cfg
8번째 줄 주석제거 및 홈디렉터리 변경
WorkDir: /home/mrtg
: mrtg 의 홈디렉터리 ---> vhost.conf에 적용
mrtg는 indexmaker
indexmaker --columns=1 /etc/mrtg/mrtg.cfg > /home/mrtg/index.html
[root@localhost mrtg]# indexmaker --columns=1 /etc/mrtg/mrtg.cfg > /home/mrtg/index.html
[root@localhost mrtg]#
[root@localhost mrtg]# cd /home/mrtg/
[root@localhost mrtg]# ll
합계 4
-rw-r--r-- 1 root root 2739 8월 9 13:49 index.html
[root@localhost mrtg]# cd ..
[root@localhost home]#
[root@localhost home]# chmod -R 777 mrtg
[root@localhost home]# cd mrtg/
[root@localhost mrtg]# ll
합계 4
-rwxrwxrwx 1 apache apache 2739 8월 9 13:49 index.html
[root@localhost mrtg]# systemctl status mrtg
● mrtg.service - Multi-router Traffic Grapher
Loaded: loaded (/usr/lib/systemd/system/mrtg.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@localhost mrtg]#
<snmp v3>
[root@localhost home]# cd /etc/httpd/conf.d
[root@localhost conf.d]# vim vhost.conf
[root@localhost conf.d]# vim /var/named/jin.com.zone
[root@localhost named]# systemctl restart named
[root@localhost named]# vim /etc/snmp/snmpd.conf
[root@localhost named]# systemctl restart snmpd.service httpd.service php-fpm.service mrtg
[root@localhost ~]# vim /etc/snmpd.conf
[root@localhost ~]# cd /etc/snmp
[root@localhost snmp]# ls
snmp.conf snmpd.conf snmptrapd.conf
[root@localhost snmp]# vim snmpd.conf
[root@localhost snmp]# systemctl restart snmpd.service httpd.service php-fpm.service
[root@localhost snmp]# systemctl restart mrtg
[root@localhost snmp]# cd ~
[root@localhost ~]# vim /etc/snmp/snmpd.conf
[root@localhost ~]# systemctl restart snmpd.service httpd.service php-fpm.service
[root@localhost ~]# systemctl restart mrtg
[root@localhost ~]# vim /etc/snmp/snmpd.conf
[root@localhost ~]# systemctl restart snmpd.service httpd.service php-fpm.service
[root@localhost ~]# systemctl restart mrtg
[root@localhost ~]# vim /etc/snmp/snmpd.conf
[root@localhost ~]# systemctl restart snmpd.service httpd.service php-fpm.service
^[[A[root@localhost systemctl restart mrtg
[root@localhost ~]# vim /etc/snmp/snmpd.conf
[root@localhost ~]# systemctl restart snmpd.service httpd.service php-fpm.service
^[[[root@localhost ~systemctl restart mrtg
[root@localhost ~]# snmpwalk -v3 -l authPriv -u NGCP -a SHA -A
snmpwalk: option requires an argument -- 'A'
USAGE: snmpwalk [OPTIONS] AGENT [OID]
Version: 5.7.2
Web: http://www.net-snmp.org/
Email: net-snmp-coders@lists.sourceforge.net
OPTIONS:
-h, --help display this help message
-H display configuration file directives understood
-v 1|2c|3 specifies SNMP version to use
...