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

시스템 운영/구축 실무 5일차 (22/10/28)

ksh_5 2022. 10. 28. 10:08
  • NTP 구성

 

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

- 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 : 세계 표준시

 

  • NTP server pool

https://www.ntppool.org/zone/kr

 

pool.ntp.org: NTP Servers in Korea, kr.pool.ntp.org

Korea — kr.pool.ntp.org We need more servers in this country. If you have a server with a static IP, please consider joining the pool! To use this specific pool zone, add the following to your ntp.conf file: server 1.kr.pool.ntp.org server 1.asia.pool.nt

www.ntppool.org

 

  • NTP 구축

 

 

>> NTP server (splunkserver)

더보기
NTP 서버 설치

# apt install -y ntp

 

NTP 버전 확인

 # sntp --version

 

NTP 서버 주소 지정

# nano /etc/ntp.conf

 

NTP 서버 주소 지정

 

NTP 서버 재시작과 실행상태 확인

# service ntp restart

# service ntp status

 

방화벽 구성

# ufw allow from any to any port 123 proto udp

 

현재 동기화중인 NTP 서버 정보 출력

# ntpq -p

* : 현재 사용 중인 서버

+ : 동기화 가능 서버

- : 사용이 가능하나 하지않는 서버

 

# timedatectl

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

 

>> ZeekIDS

더보기
ntpdate 설치

# apt-get install ntpdate 

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

 

NTP 서버 IP & 호스트 이름 지정

# nano /etc/hosts 입력

 

NTP 서버와 동기화되었는지 확인

# ntpdate splunkserver

 

>> WebServer

더보기
  • chrony

 

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

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

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

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

 

chrony 확인

# rpm -qa | grep chrony

 

NTP 호스트명 등록

 

NTP 서버 등록

# gedit /etc/chrony.conf

 

chronyd 서비스 활성화 & 상태 확인

# systemctl restart chronyd

# systemctl status chronyd

 

NTP 설정 환경 & 시간 확인

# chronyc sources -v

 

>> Sysmon

더보기

 

NTP 서버 IP & 호스트 이름 지정

 

splunkserver의 시간으로 동기화

 

동기화 상태 확인

> 32tm /query /status

> 32tm /dumpreg /subkey:parameters

 

 

  • 로그 (Log)

 

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

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

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

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

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

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

 

 

  • 로그(Log) 데이터 중요성

 

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

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

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

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

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

- 각종 법규 및 지침에서 의무화

 

 

  • 로그 분석

 

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

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

- 분석할 로그 종류 : 서버(윈도우 및 리눅스 서버), 네트워크 장비, 보안장비 등

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

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

  - 시스템 성능 관리

  - 마케팅 전략으로 활용

  - 시스템의 장애 원인 분석

  - 시스템 취약점 분석

- 분석할 로그 종류

더보기

- Network/Security Device Log : 방화벽, VPN, 라우터/스위치, IPS

- Server/Endpoint/Application Log : IDS, 서버, 이벤트, 애플리케이션

 

 

  • 리눅스 로그

 

❶ 시스템 로그

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

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

인증로그 인증 시스템(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

 

 

  • 로그 Package : syslog/rsylog

 

- 로그를 중앙 집중적으로 관리하는 패키지

- 동작 방식

 

 

  • Rsyslog (rocket-fast system for log processing)

 

- RHEL6 부터 로그 관리 데몬인 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)

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

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

 

❷ Priority

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

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

 

❸ Action

 

*파일 /etc/rsyslog.conf

facility.priority   action

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

❷ Priority - 위험 정도 나타냄, 설정한 수준보다 높아야 메시지 전송

❸ Action - 메시지를 보낼 목적지나 행동들에 관한 설정으로 일반적으로 파일명 작성

ex) 

더보기

1) user.err     /var/log/user.log

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

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

 

2) *.notice    @192.168.10.10

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

→ 192.168.10.10에 전달 시 UDP 사용

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

 

3) *.emerg *

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

 

 

  • Rsyslog 구축

 

>> Splunkserver

더보기
rsyslog 설치

 # apt-get install -y rsyslog

 

UDP, TCP Port 오픈

# nano /etc/rsyslog.conf

 

방화벽 활성화

 

서비스 활성화

# systemctl restart rsyslog

# systemctl status rsyslog

 

 

생성된 로그 디렉터리와 로그 확인

# cd /var/log

# ls

 

>> ZeekIDS

더보기
rsyslog 설치

# apt-get install -y rsyslog

 

시스템에서 발생하는 모든 로그 전송

# nano /etc/rsyslog.conf

 

서비스 활성화

# systemctl restart rsyslog

# systemctl status rsyslog

 

생성된 로그 디렉터리 & 로그 확인

→ splunkserver에서 #cat client.log

 

>> Webserver

더보기
시스템에서 발생하는 모든 로그 전송

 # rpm -qa | grep rsyslog

# gedit /etc/rsyslog.conf

 

서비스 활성화

# systemctl start httpd

# systemctl enable httpd

 

생성된 로그 디렉터리 & 로그 확인

→ splunkserver에서 로그 확인

 

httpd 설치

# dnf install -y httpd

 

index.html

# gedit /var/www/html/index.html

 

방화벽설정에서 http 체크

 #firewall-config

 

zeek에서 192.168.10.30

 

 

  • Zeek

 

- 네트워크 침입탐지시스템 (NIDS)

     - Bro 또는 프로토콜 분석

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

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

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

     - FTP, HTTP, SMTP, X.509 ..

 

 

  • Zeek 환경 구축

 

>> 설치 전 환경설정

더보기

 # apt-get install curl gnupg2 wget

 

#curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_20.04/Release.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/security_zeek.gpg

 

>> Zeek 설치

더보기

# apt update -y

 

로컬 전용 클릭

 

>> Path 설정

더보기

# echo "export PATH=$PATH:/opt/zeek/bin" >> ~/.bashrc

# source ~/.bashrc

# zeek --version

 

>> 환경설정

더보기

# cd /opt/zeek/etc

# ls

 

# nano networks.cfg

 

파일 수정

 

# nano node.cfg

 

interface=eth0 → interface=ens33로 변경

 

>> Zeek 활성화 

더보기

# zeekctl check

# zeekctl deploy

# zeekctl status

# ls -l /opt/zeek/spool/zeek

 

>> SCP 이용해 Zeek → Splunk로 전송

더보기

# apt-get install -y openssh-server

# ufw allow 22/tcp

 

* splunkserver로 받기 위한 설정

# apt-get install -y openssh-server

 

# ufw allow 22/tcp

→ Splunk Server에서 http.log 확인 가능