본문 바로가기

Rookies 9기/클라우드기반 시스템 운영구축 실무

클라우드기반 시스템 운영구축 실무 5일차

728x90

NTP (Network Time Protocol)

시간 동기화를 제공하는 프로토콜

‣ UDP 123 번호 이용

‣ 시간 동기화를 위해 유니캐스트, 브로드캐스트, 멀티캐스트 사용

‣ NTP 서버들에 대한 정보를 제공(https://www.ntppool.org)

시간 동기화 목적

더보기

❶ 백업이나 패치 등 예약한 작업들이 실행되지 않는 것을 방지

❷ 로그에 대한 신뢰도 - 언제 어떤 작업을 했는지 보여주는 로그의 시간은 정확해야 함

❸ 보안. 암호화 인증 프로토콜 과정 시 timestamp 및 lifetime이 추가 - 이때 서버와 클라이언트의 시간과 일치하지 않으면, 서비스에 접근을 차단

 

•시간 종류

더보기
RTC (Real Time Clock ) • 하드웨어 시간 또는 CMOS 시간
• 컴퓨터 보드의 배터리에 의해 작동하는 시간
• 요일, 날짜, 시간 표시
• RTC 시간 변경은 컴퓨터 시작 전 BIOS 설정 창이나 운영체제 실 행 중에 명령어를 통해 가능
System Clock (시스템시간) • 리눅스 커널이 사용하는 시간
• 소프트웨어 시간
• 요일, 날짜, 시간 표시 및 표준시간대과 썸머타임제 표시까지 가능
• 리눅스 커널은 1970년 1월1일 자정을 기준으로 시간계산
• 초기 시스템 시간은 부팅 시에 하드웨어 시간으로부터 가져와 부팅 하고 부팅 이후부터는 독립적으로 시간을 계산

 

• 명령어 date

⇒ 현재의 요일, 날짜 및 시간 정보 표시

‣ Local time : 시스템 시간에서 time zone에 따라 변경

‣ UTC : 세계 표준시 (UTC 변경 명령어 data-utc)

 

• 명령어 timedatectl

⇒ 시스템 시간 및 날짜 정보 변경, 표준시간대 변경, 원격지 서버와의 자동화 기능 지원

 

•Stratum

‣ 시간을 전송하는 장비

 

•NTP 서버 설치

‣ SplunkServer NTP 구축

더보기
apt-get install -y ntp

NTP 서버 설치

nano /etc/ntp.conf
https://www.ntppool.org/zone/kr

‣ 한국 표준 시간대(time zone)에 해당하는 서버들의 목록 정의

‣ Pool.ntp.org 이름들은 매 시간마다 변하면서 임의의 서버들을 지정

/etc/ntp.conf 파일 수정 전
/etc/ntp.conf 파일 수정 후
NTP 서버 재시작과 실행 상태 확인
클라이언트가 NTP 서버에 액세스 할 수 있도록 방화벽 구성
현재 동기화중인 NTP 서버 정보를 확인
현재 날짜, 시간, 타임존, 타임서버와 동기화 여부를 모두 확인

‣ Zeep IDS NTP 설치

더보기
apt-get install ntpdate

‣ ntpdate : 리눅스 시간을 timeserver와 동기화하는 명령어

nano /etc/hosts
nano /etc/hosts

호스트 파일에서 NTP 서버의 IP 및 호스트 이름 지정

NTP 서버와 동기화 되어있는지 확인
현재 날짜, 시간, 타임존, 타임서버와 동기화 여부를 모두 확인

‣ WebServer NTP 설치

더보기

• chrony

‣ Redhat 계열 리눅스 기본 시간 동기화 프로그램

‣ Redhat Enterprise Linux 8 부터 기본 시간 동기화 프로그램으로 채택

‣ CentOS 8 chrony를 기본 시간 동기화 프로그램으로 사용

Chrony는 기본 설치가 되어 있어 CentOS 8 에서 별도 설치를 하지 않고 사용

chrony 이 있는지 확인
gedit /etc/hosts
NTP 호스트명 등록
gedit /etc/chrony.conf
NTP 서버 등록 전
NTP 서버 등록 후
chronyd 서비스 활성화와 상태 확인
NTP 설정 환경과 시간 확인

‣ Sysmon NTP 설치

더보기
C:\Windows\System32\drivers\etc
hosts.txt

NTP 서버 등록

시간 및 날짜 설정
hosts.txt에서 설정한 NTP 서버로 동기화
동기화 상태 확인

Rsyslog 구성도

•로그(Log)

시스템의 모든 기록을 담고 있는 데이터

⇒ 성능, 오류, 경고 및 운영정보 등의 중요 정보 기록

⇒ 특별한 형태의 기준에 따라 숫자와 기호 등으로 이뤄짐  => SNMP

‣ 로그를 분석하지 않고 그대로 활용하기는 어려움

⇒ 웹 서버의 경우 하루 수백 메가에서 기가 단위의 로그가 쌓임

⇒ 대용량 로그를 일일이 살펴보기란 어려움

 

로그 데이터 중요성

‣ 시스템에서 발생하는 모든 문제에 대한 유일한 단서

‣ 시스템에서 발생한 오류 및 보안 결함 검색 가능

‣ 잠재적인 시스템 문제를 예측하는데 사용될 수 있음

‣ 장애 발생 시 복구에 필요한 정보로 활용

‣ 침해 사고 시 근거 자료로 활용

‣ 각정 법규 및 지침에서 의무화

 

•로그 분석

‣ 로그 데이터를 분석하여 필요로 하는 유용한 정보를 만드는 행위

⇒ 대량의 로그를 필요로 하는 정보로 만들어 내는 행위

‣ 분석할 로그 종류

⇒ 서버(윈도우 및 리눅스 서버), 네트워크 장비, 보안장비 등

‣ 로그 데이터 분석을 통해 얻을 수 있는 정보

⇒ 외부로부터 침입 감지 및 추적

⇒ 시스템 성능 관리

⇒ 마케팅 전략으로 활용

⇒ 시스템의 장애 원인 분석

⇒ 시스템 취약점 분석

 

※ 분석할 로그 종류

더보기

•Network/Security Device Log

방화벽 로그

VPN 로그

라우터/스위치로그

IPS 로그

IDS 로그

 

•Server/Endpoint/Application Log

서버 로그

이벤트 로그

애플리케이션 로그

 

•리눅스 로그

‣ 시스템 로그

⇒ 리눅스 시스템 운영에 필요한 로그들

⇒ 사용자들이 서비스 제공을 위해 추가한 애플리케이션이 발생시킨 로그와는 성격이 다른 로그 파일들

‣ 애플리케이션 로그

⇒ 특정 애플리케이션이 발생시킨 로그

‣ 바이너리 로그

⇒ 텍스트가 아닌 바이너리 파일로 되어 있어 사용자가 직접 파일들을 읽지 못하고 특정 명령어를 사용해야만 읽을 수 있음

더보기

•시스템 로그

인증로그 인증 시스템(PAM 등)이 발생시키는 로그
/var/log/secure
데몬 로그 백그라운드 프로그램의 로그
/var/log/damon.log
커널 로그 커널에서 발생시킨 로그
/var/log/kern 과 /var/log/dmesg
시스템 로그 시스템에서 발생하는 대부분의 로그 기록
/var/log/messages

•애플리케이션 로그

Apache 웹 서버 아파치 웹 서버가 발생시킨 로그
/var/log/httpd
Samba 서버 삼바 서버가 발생시킨 로그
/var/log/samba에 기록
SMTP 서버 Sendmail이나 Postfix 같은 메일 서버가 발생시킴
/var/log/maillog
FTP 서버 VSFTP나 Proftp 서버가 발생시킨 로그
/var/log/xferlog

•바이너리 로그

/var/run/utmp 사용자의 현재 로그인 정보를 기록
로그 확인 명령어 who , w, user, finger
/var/log/wtmp 성공한 로그인과 로그아웃, 시스템 재부팅 정보
로그 확인 명령어 : last
/var/log/btmp 사용자의 로그인 실패를 기록
로그 확인 명령어 : lastb
/var/log/lastlog 가장 최근 로그인 정보를 기록
로그 확인 명령어 : lastlog
/usr/adm/pacct 시스템에 로그인한 사용자가 수행한 프로그램 정보 기록
로그인해서 로그오프 할 때까지 입력 정보등을 기록
시스템 자원을 많이 소모하므로 기본적으로 동작 안함
로그 확인 명령어 : acctcom, lastcomm

 

•Rsyslog (rocket-fast system for log processing)

‣ RHEL 6부터 로그 관리 데몬인 syslog를 대체하기 위해 지원된 프로그램

‣ 호스트 간 로그 전송을 위해 UDP와 TCP 모두 지원해 신뢰도를 높였음

Facility, Priority, Property, Expression을 이용한 필터링 기능을 통해 더 정확한 로그 기록이 가능

‣ SQL 데이터베이스를 이용한 로그 저장 가능

‣ TLS를 통한 암호화 기능 가능

 

•Rsyslog 환경설정 파일

‣ rsyslogd 데몬이 동작하면서 로그를 기록

‣ 데몬 동작은 /etc/rc.d/init.d/rsyslog라는 스크립트를 이용

‣ 환경 설정은 /etc/rsyslog.conf 파일을 통해서 제어

더보기
파일명 설명
/etc/rc.d/init.d/rsyslog rsyslogd 데몬을 동작 시키는 스크립트
start, stop, restart 등의 인자값을 사용
/etc/rsyslog.conf rsyslogd 데몬의 환경설정파일
/etc/sysconfig/rsyslog rsyslogd 데몬 실행과 관련된 옵션이 설정되는 파일
/sbin/rsyslogd 실제 rsyslogd 데몬 실행 명령

 

• Facility/ Priority/ Action 

‣ rsyslogd 데몬은 /etc/rsyslog.conf 설정 파일을 참조하여 로그를 남김

‣ /etc/rsyslog.conf 파일에는 "어디에서 로그가 생성이 되면 어디에 로그를 남겨라" 설정

‣ Facility

더보기

로그를 발생하는 시스템 (subsystem)

•Facility의 숫자는 코드번호를 의미 kern(0), user(1), mail(2), daemon(3), auth(4), syslog(5), lpr(6) news(7), uucp(8), cron(9), authpriv(10), ftp(11) local0~7(16~23)

•운영체제마다 다를 수 있음

•Local0~7 : 시스코 라우터처럼 네트워크 장비에서 사용

 

‣ Priortiy (Serverity)

더보기

•로그 메시지가 갖고 있는 중요도와 우선순위를 지정

•로그의 레벨을 정의하면 그 상위 레벨도 모두 해당

(예) err(3)을 설정하면 상위 crit(2), alert(1), emerge(0)에 로그도 기록

 

‣ Action

‣ Faility 

일종의 서비스를 의미, 메시지를 발생시키는 프로그램의 유형

‣ priority

위험 정도를 나타냄, 설정한 수준보다 높아야 메시지를 보냄

‣ action

메시지를 보낼 목적지나 행동을 에 관한 설정으로 일방적으로 파일명을 적음

 

예제

더보기

user.err /var/log/user.log

→ user에서 발생하는 error 이상의 로그를 /var/log/user.log에 기록

→ 커널이 발생하는 메시지는 제외

 

*. notice @192.168.10.10

→ 모든 시스템에서 발생하는 notice 이상의 로그를 목적지 192.168.10.10에 저장

→ 192.168.10.10에 전달 시 UDP 사용

→ @는 UDP, @@는 TCP를 의미

 

mail.* @@192.168.10.10:6514

→ 메일 시스템에서 발생하는 모든 종류의 로그를 192.168.10.10, 포트 6514로 TCP를 이용해 보내 저장

 

*.* @(z9) 192.168.10.10

→ 모든 시스템에서 발생시키는 모든 종류의 로그를 9 레벨의 압축 후 UDP 방법을 이용해 192.168.10.10으로 전송 저장

→ 숫자 9는 최대 수준의 압축, 1이 가장 낮은 압축 수준 18

 

*.=crit;kern.none /var/log/critical

→ 모든 facility가 발생하는 메시지 중에 crit 수준의 메시지만 /var/log/critical에 기록

→ 커널이 발생하는 메시지는 제외

 

*. emerg *

→ 모든 emerg 수준 이상의 문제가 발생하면 모든 사용자에게 메시지를 전달

 

authpriv.* root, gildong

→ 인증 관련 로그를 root 및 gildong 사용자의 터미널로 전송

 

cron.! info,! debug /var/log/cron.log

→ cron 시스템이 발생시킨 로그 중에서 info와 debug를 제외한 모든 로그를 기록

→ 느낌표(!)는 특정 priority를 제외하기 위해 사용

 

19 authpriv.* /dev/tty2

→ 인증 관련 로그를 /dev/tty2으로 전송

 

mail.*;mail.!=info /var/log/maillog

→ mail 관련한 모든 정보는 /var/log/maillog에 기록하는데, info 수준의 로그는 제외

 

uucp, news.crit /var/log/news

→ uucp 및 news에서 발생하는 crit 수준 이상의 메시지는 /var/log/news에 기록

‣ Splunk Server rsyslog 설치

더보기
apt-get install –y rsyslog
nano /etc/rsyslog.conf
/etc/rsyslog.conf 파일 수정 전
/etc/rsyslog.conf 파일 수정 후
$template remote-incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?remote-incoming-logs

% HOSTNAME%/ : 클라이언트 호스트

% PROGRAMNAME% : 생성된 로그 파일명

rsyslog 서비스 활성화
생성된 로그 디렉터리와 로그 확인

‣ ZeekIDS rsyslog 설치

더보기
apt-get install –y rsyslog
nano /etc/rsyslog.conf
etc/rsyslog.conf 파일 수정

시스템에서 발생하는 모든 종류의 로그를 192.168.10.10:514로 TCP를 이용해 전송

rsyslog 서비스 활성화
Splunkserver에서 로그 확인

‣ webserver rsyslog 설치

더보기
gedit /etc/rsyslog.conf
/etc/rsyslog.conf  파일 수정

시스템에서 발생하는 모든 종류의 로그를 192.168.10.10:514로 TCP를 이용해서 전송

rsyslog 서비스 활성화
splunkserver에서 로그 확인 (localhost 로 보임)
splunkserver에 넘어가는걸 확인하기위해 httpd 설치
httpd 설치 확인
index.html 페이지 수정 하기
index.html 파일 수정
http 포트를 열기 위해 방화벽 설정
http 포트 열기
zeekIDS 에서 Webserver index.html 페이지를 볼수있음

 

 

•SIEM 구축 방안

‣ 로그 수집

더보기

• 단일 지점 로그 수집 방식

 

‣ 장점

네트워크를 지나는 모든 데이터를 로그로 생성할 수 있다.

⇒ 다수 서비스를 단일 센서로 처리한다.

⇒ 생성 로그 형식이 동일하다

⇒ 로그를 위해서 서비스를 변경할 필요가 없다

 

‣ 단점

⇒ 네트워크 가시성을 이해해야 한다

⇒ 네트워크 트래픽 처리를 위한 추가 서버가 필요하다

⇒ 네트워크 가시성은 복잡도를 증가시킨다

 

 

 

• 다중 지점 로그 수집 방식

 

‣ 장점

⇒ 이해하기 쉽다

⇒ 단순한 구축이 가능하다

⇒ 네트워크 구조에 비의존적이다

‣ 단점

⇒ 시스템 관리가 어렵다

⇒ 관리자가 아는 항목만 수집한다

⇒별도 서비스마다 수집해야 한다

⇒ 서비스별 로그 형식이 다르다

‣ 로그 검색/분석

‣ 경고

 

 

•Zeek

‣ 네트워크 침입탐지 시스템 (NDIS)

⇒ Bro 또는 프로토콜 분석

⇒ 네트워크를 모니터링할 수 있는 오픈 소스 프로그램

‣ IP 헤더와 TCP 헤더를 분석하여 로그 생성

‣ 응용 프로토콜의 헤더를 분석하여 로그 생성

⇒ FTP, HTTP, SMTP, X.509....

더보기

‣ 설치 전 환경설정

apt-get install curl gnupg2 wget –y
{"originWidth":814,"originHeight":82,"style":"alignCenter","caption":"curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_20.04/Release.key

 

 zeek 설치

apt-get install zeek -y
로컬 전용 선택

 

Path 설정

echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc       source ~/.bashrc          zeek --version

 

‣ 환경설정

cd /opt/zeek/etc   cat /opt/zeek/etc/networks.cfg
nano /opt/zeek/etc/networks.cfg
/opt/zeek/etc/networks.cfg 파일 수정
nano /opt/zeek/etc/node.cfg
/opt/zeek/etc/node.cfg 파일 수정 전
/opt/zeek/etc/node.cfg 파일 수정 후

‣ 서비스 활성화

zeekctl check   zeekctl deploy      zeekctl status

 

‣ 생성된 로그 파일 splunk server에게 전송

apt-get install –y openssh-server
ufw allow 22/tcp

‣ splunk server에서 받기 위한 설정

apt-get install -y openssh-server
ufw allow 22/tcp
splunkserver에서 http.log를 확인할수있음