시스템 운영/구축 실무 5일차 (22/10/28)
- 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)

# apt install -y ntp

# sntp --version

# nano /etc/ntp.conf


# service ntp restart
# service ntp status

# ufw allow from any to any port 123 proto udp

# ntpq -p
* : 현재 사용 중인 서버
+ : 동기화 가능 서버
- : 사용이 가능하나 하지않는 서버

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

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

# nano /etc/hosts 입력

# ntpdate splunkserver
>> WebServer
- chrony
- Redhat 계열 리눅스 기본 시간 동기화 프로그램
- Redhat Enterprise Linux 8 부터 기본 시간 동기화 프로그램으로 채택
- CentOS 8 chrony를 기본 시간 동기화 프로그램으로 사용
- Chrony 는 기본 설치가 되어 있어 CentOS 8 에서 별도 설치를 하지 않고 사용

# rpm -qa | grep chrony


# gedit /etc/chrony.conf

# systemctl restart chronyd
# systemctl status chronyd

# chronyc sources -v
>> Sysmon



> 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

# apt-get install -y rsyslog

# nano /etc/rsyslog.conf


# systemctl restart rsyslog
# systemctl status rsyslog

# cd /var/log
# ls
>> ZeekIDS

# 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에서 로그 확인

# dnf install -y httpd

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

#firewall-config

- 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 확인 가능