본문 바로가기
모의해킹 침해대응 과정/Liunx 관리

Log server / day 21

by 알거음슴 2021. 4. 23.

log 기록 용도

 1) 사용자 및 서버의 활동 기록

 2) 시스템 공격의 대한 흔적 기록

 3) 서버 장애의 대한 흔적 기록

 4) 로그 기록을 통한 성능 카운트

* 옛날 로그 기록은 거의 필요가 없다, 따라서 오래된 로그 기록들의 관리정책을 잘 세워야 한다.

* 기존 DB형태로 이루어진 server 뿐 아닌 빅데이터나 AI를 동반한 DB를 활용하는 경우도 많다.

 

 

log 파일의 종류

로그파일 설명
/var/log/messages 시스템 전반의 메시지를 기록하는 로그파일 (메일,뉴스,인증,크론을 제외한)
(TUI)  tail -f /var/log/messages
(GUI) gnome-logs 
/var/log/secure 개인인증 (passwd)을 기록하는 로그파일 (su, telnet, ssh 등)
/var/log/dmesg 부팅할때 메세지를 기록하는 로그 파일  
 - /var/log/dmesg : 인식된 장치 정보, 장치 이상 유무 확인
 - /var/log/boot.log : 서비스 기동 유무 확인
/var/log/lastlog 가장 마지막에 로그인한 시간을 기록하는 로그파일
/var/log/cron crontab, atCMD 를 통해 실행했던 작업을 기록하는 로그파일
/var/log/maillong semdmail 메일 관련 작업을 기록하는 로그파일
/var/log/xferlog FTP 서버에서 업로드/다운로드 기록을하는 로그파일
/var/log/wtmp 사용자의 로그인. 로그아웃시간을 기록하는 로그파일
/var/run/utmp 현재 로그인한 사용자 정보를 기록하는 로그파일 , 접속자가 없을땐 내용이없다.

[참고] 서비스별 로그 파일 저장 위치

DNS server : /var/log/messages
WEB server : /var/log/httpd/access_log, /var/log/httpd/error_log
FTP server : /var/log/secure, /var/log/xferlog
MAIL server : /var/log/maillog
NFS server : /var/log/messages
CIFS/SMB server : /var/log/samba/{log.smbd,log.*}

 

 

rsyslogd 체계 

시스템에서 메시지가 생성이 되면 메시지는 rsyslogd 라는 데몬에게 전달된다. 해당 데몬은 /etc/rsyslog.conf 에 정의된 위치에 맞게끔 로그를 파일들에 전송하고 생성할 수 있다. 즉 모든 로그의 대한 기록은 rsyslogd 로 관리된다.

 

/etc/rsyslog.conf 분석

기본적으로 RULES 구역 하단에 Selector 필드와 Action(메시지 기록위치) 필드로 구분된다. Selector 필드는 다시 Facility(메시지종류) 와 Level(메시지 위험수준)로 구분된다.

 

 1) 주요 메시지 종류

메시지 종류 설명
mark rsyslogd 데몬에 의해 생성된 일정한 시간간격의 반복적인 메시지
 ex) 1초에 한번 남겨지는 기록을 한번 기록후 같은 일정 시간동안 모아서 몇번 남겨졋다라고 기록
security(auth) 인증 프로그램이 생성한 메시지 
user 사용자 프로그램이 생성한 메시지
local0-7 여분으로 남겨둔 유형, 관리자가 원하는 값으로 이용할 수 있다.
* 모든 메시지 (mark 메시지 종류는 제외)

 2) 메시지 위험 수준 level

메시지 레벨 설명
0 emerg(panic) 패닉상태, 모든 사용자에게 전달되어야 할 위험한 상황의 메시지
1 alert 즉각적인 조치를 취해야 하는 상황의 메시지
2 crit 시스템에 문제가 생기는 단계의 메시지
3 error(err) 에러가 발생하는 경우의 메시지
4 warning(warn) 주의를 요하는 경고 메시지
5 notice 특별한 주의를 요하는 에러는 아닌 메시지
6 info 통계, 기본정보 메시지
7 debug 프로그램을 디버깅할 때 생성되는 메시지
  none facility 뒤에 .none를 붙이면 해당 facility는 제외하겠다는 의미이다.

 3) 메시지 기록 위치 (Action)

메시지 기록 위치 설명
/var/log/messages 기록을 남길 특정한 로그 파일 선택
/dev/console 기록을 남길 콘솔에 로그 기록 남김
user01,root, * 특정한 사용자나 모든 사용자 선택(*)
@host @[IP] 다른 호스트 또는 IP선택 -> 로그서버 지정

[참고] * 표시의 대해서

메시지 종류, 메시지난이도, 메시지 기록위치 모두 * 일경우 모든 경우 를 뜻하는 의미이다.

ex)  /etc/syslog.conf

-----------------------------------------------------

(메세지종류).(메세지난이도) (메세지기록위치)

       *        .       *                     *

-----------------------------------------------------

메세지 종류 : 모든 메시지 (mark를 제외)

메세지 난이도 : 모든 레벨의 경고 표기

메세지 기록위치 : 모든 사용자의 대하여 적용

 

 4) /etc/rsyslog.conf 분석

MODULES : 원격에서 log 메시지를 받아볼 수 있는 설정을 하는 곳. (기본적으로 주석처리되어있음)

GLOBAL DIRECTIVES  : 서브 설정 파일이 지정되어있음.

RULES : log 기록의 관련한 내용이 선언되어있음.

RULES 주요 내용.

kern.*    /dev/console :
커널에 관련한 모든 메세지는 콘솔창에 출력한다.

*.info;mail.none;authpriv.none;cron.none    /var/log/messages

메일(mail),뉴스(news),개인인증(authpriv),크론(cron) 메세지를 제외한 대부분의 메세지를 /var/log/messages 파일에 기록한다.

 

authpriv.*    /var/log/secure

개인적인 인증에 관련한 부분은 /var/log/secure 파일에 기록한다.(su, sshd)

 

mail.*    -/var/log/maillog

메일에 관련한 모든 메세지는 /var/log/maillog 파일에 기록한다. ( '-' 의경우, 메모리와 DISK의 동기화를 안하겠다.)

 

cron.*    /var/log/cron

크론(cron) 메세지 모두를 /var/log/cron 파일에 기록한다.

 

*.emerg    :omusrmsg:*

모든 경우 위험한 메세지(패닉 상태)는 모든 사용자에게 뿌린다.

 

uucp,news.crit    /var/log/spooler

uucp,news에 대한 critical 이상 메세지는 /var/log/spooler 파일에 기록한다.

 

local7.*   /var/log/boot.log

미리 예약된 local7 종류에 대한 모든 메세지(부팅시의 메세지)/var/log/boot.log 파일에 기록한다.

sample forwarding rule : DB 서버로 log 메시지를 넘길때 주로 활용됨.

 

 

 

log 관련 CMD 

 logger CMD

임의의 메시지를 생성시켜 테스트를 할 때 활용됨, ex) /etc/rsyslog.comf 파일에 새로운 내용을 추가하고, 이 설정이 잘 동작하는가 테스트할때 사용한다.

logger -p auth.notice "Messege1" : auth 레벨 notice 로 "Messege1" 를 임의로 생성시킨다.

 

 

 

rsyslog server 

 

 1. 구성

패키지: rsyslog

데몬 & 포트 & 프로토콜: rsyslogd(514/tcp, 514/udp) * 포트는 변경가능.

주 설정 파일: /etc/rsyslog.conf

부 설정 파일: /etc/rsyslog.d./*.conf

서비스: rsyslog.service

 

 2. 패키지 설치 및 확인 

yum install rsyslog ( 일반적으로 거의 설치되어 있음, 업데이트 작업만 필요 )

yum install rsyslog-doc : 

 포트번호 확인 : grep 'syslog' /etc/services 

 

 

[실습] 로그파일 모니터링 ( 특정 로그 파일 찾기 : grep '^mail' /etc/rsyslog.conf )

 * Apr 24 04:04:27 server1 su[5172]: pam_unix(su-l:session): session opened for user user01 by (uid=0)

 Apr 24 04:04:27 : 로그 생성 시간

 server1 : 로그 생성 서버

 su[5172] : 로그 생성 주체 [PID]

 pam_unix(su-l:session): session opened for user user01 by (uid=0) 로그 기록

[실습] 새로운 로그 파일 생성 실습.

 * level 설정 : local0.notice = notice 이상,  local1.=notice = notice 일떄만.

 * 로그가 생성될 시, 로그파일이 없다면 자동으로 생성됨.

[실습] 로그 생성시 원격으로 로그서버에 기록하기.

 * local2.notice  @HOST  =  UDP로 전송 / local2.notice  @@HOTS  =  TCP로 전송.

 * 기본값은 원격 설정 안되어있음, local은 local 즉, 설정을 별도로 해줘야함.

 * 특정 이벤트 로그만 원격으로 설정도 가능함.

 

 

Log file 관리

로그 파일은 기존에 파일에 첨가되는 형태로 기록되기 때문에 그냥 두게 되면 지속적으로 파일이 커지게 된다, 즉 주기적인 관리가 필요한대 이때 logrotate 명령어를 활용한다.

 OS 로그 -> logrotate CMD(/etc/logrotate.conf) 에서 자동관리.

 Service 로그 -> 각 서비스에서 관리 + 수동 관리

 

1. logrotatiate CMD

 /etc/logrotate.conf 와 /etc/logrotate.d/* 를 참조하여 로그를 로테이션을 돌린다.

 

 /etc/logrotate.conf 파일 분석

# rotate log files weekly
weekly
특별히 명시하지 않은 로그 파일에 대해서는 일주일(weekly)마다 rotate 한다.
 
# keep 4 weeks worth of backlogs
rotate 4
최대 4번까지 rotate를 허용한다.(EX: logfile, logfile.1, logfile.2, logfile.3, logfile.4)
 
# create new (empty) log files after rotating old ones
create
로그 파일을 rotate 한 후에 비어 있는 로그 파일을 생성한다.
 
# use date as a suffix of the rotated file
dateext
시간 확장자를 사용하여 로그 백업 파일을 생성한다.
 
# uncomment this if you want your log files compressed
#compress
로그 파일을 압축하는 옵션이다. 기본값은 활성화 되어 있지 않다. 용량 문제에 지장이 없다면 압축하지 않을 것을 권장한다.
 
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
대부분의 RPM 패키지로 설치되는 데몬들은 이 디렉토리에 로그 파일 정책 파일이 생성된다. 각각의 로그 파일을 rotate 시킬수 있도록 하는 설정이다.
# system-specific logs may be also be configured here.

/etc/logrotate.d/* 파일 분석

{
missingok  :  로그 파일이 없을경우에도 에러처리 하지않음
notifempty  :  로그파일이 비어있는 경우 실행하지 않음
sharedscripts  :  로그파일이 여러게 있더라도 스크립트 공유하여 post/pre 를 실행함
postrotate  :  pre : 로테이트 하기전에 실행할 값 / post : 로테이트 이후 실행할 값
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true ( 특정 실행값 ) 
endscript  :  스크립트의 끝.
}

 

2. 오래된 로그 삭제

logrotate 의 경우 파일 이름이 고정되어있음으로, 날자같은 경우로 라벨링 되어있는 로그의 경우 파일 관리가 실질적으로 불가능하다, 이럴경우 별도 프로그램을 제작하여 오래된 로그를 관리할 수 있어야한다.

 ex) crontab 을 활용 ( find, rm )

0 3 1 * * find /Log_Dir1 -name "*.log" -type f -mtime +30 -exec rm -f {} \;

10 3 1 * * find /Log_Dir2 -name "*.log" -type f -mtime +60 -exec rm -f {} \;

20 3 1 * * find /Log_Dir3 -name "*.log" -type f -mtime +90 -exec rm -f {} \;

-> 매월 13시 정각(새벽시간)/Log_Dir 안의 로그 파일들을 최근 30일 로그만 남기고 모두 삭제한다.

 

 

Log file 분석

 많은양의 로그를 한번에 분석하기는 어려움으로 주로 grep CMD 와 함깨 이용된다.

ex) grep CMD 와 로그파일 확인 예시.
Apr 16 14:04:42 linux249 smbd [6580]: prs_grow: Buffer overflow - unable to expand buffer by 2 bytes.
로그 생성 시간(기간)
=> grep -i 'Apr 16'
=> grep -i 'Apr 16 14:'
=> grep -i 'Apr 16 1[4-7]:'
로그 난이도 (ex: fail|warn|error|crit|alert|emerg)
로그 생성 서버 (ex: linux249)
로그 생성 주체 (ex: smbd)
키워드 (ex: "login: ROOT LOGIN")

 1. Gravlog 로그 서버 

다양한 input 에서 발생하는 로그의 구문을 분석하고 해당 로그들을 처리할 수 있는 웹 인터페이스를 제공하는 서버 

-> CentOS 8v 에서는 아직 test 안됨, 차후 추가예정.

 

 

 2. 시스템 저널 항목 (systemd - jounald)

시스템에서 이벤트가 발생되면, 시스템 저널(/run/log)로 내용이 전달된다 이후 rsyslogd(/etc.rsyslog.conf) 로 내용이 기록된다. /run/log 의 경우 재부팅 시 내용이 삭제됨으로 부팅이후 정보만 기록되고 있다 저널의 로그메시지를 확인하려면 journalctl CMD 를 활용한다. 주로 장애처리시 확인을 한다. (dmesg 와 내용이 같다)

저널의 경우 원하는값을 빠르게 도출 해낼수 있는 장점이 있다.

 journalctl CMD 는 warning or notice 은 굵은 표시로 error 이상인 메시지는 빨간색 텍스트로 표시한다

 

journalctl CMD

 시스템 저널의 목록을 보여준다

 

journalctl -n (5) : 최근 10개의 항목을 보여준다, 숫자가 있을 시 해당 숫자만큼만 출력한다.

journalctl -f : 시스템 저널을 모니터링 할 수 있다.

journalctl -p [level] : 해당 level 이상의 저널 항목 표시.

journalctl -since : 시간지정하여 목록을 출력

 ex ) 
# journalctl --since today 오늘 기록된 모든 저널 항목 표시
  
# journalctl --since "2019-02-10 20:30:00" --until "2019-02-13 12:00:00"
2019-02-10 20:30:00부터 2019-02-13 12:00:00 까지의 모든 저널 항목을 표시
 
# journalctl --since "-1 hour" # "-30min" 최근 1시간 동안의 모든 항목을 지정

--since/--until 옵션을 사용한 정교한 시간 사양 화인

journalctl -o verbose : 특정 프로세스 또는 이벤트와 관련된 행을 검색하는데 사용할 수 있는 옵션

 * 주요 내용

_COMM : command name

_EXE : process 실행 파일 경로

_PID : process pid

_UID : process 실행하는 사용자의 uid

_SYSTEMD_UNIT : process 시작한 systemd UNIT

 * 위 내용을 참조하여 원하는 값을 더욱 빨리 도출해낼 수 있다.

 

시스템 저널 보존

기본적으로 시스템 저널은 재부팅시 삭제된다, 하지만 /etc/systemd/journald.conf 에서 설정 변경 시 저널을 유지할 수있다.

 /etc/systemd/journald 내 Storage 항목으로 저장관련 설정을할 수 있다.

Storage=persistent : 재부팅 후에도 지속되는 /var/log/journal 디렉토리에 저널을 저장한다. (파일자동생성)

Storage=volatile : 일시적인 저널을 디렉토리에 저장한다

Storage=auto : (기본값) /var/log/journal 디렉토리가 있는경우 영구저장하고, 없을경우 휘발성으로 적용된다.

 * 기록은 파일시스탬의 10% 보다 커지거나 15% 미만으로 유지. journalctl | egrep 'Runtime|System journal' 통해 확인가능.

 

[실습] 시스템 저널 내용 확인

[실습] 시스템 저널 영구기록 저장하기.

 

 

 

 

'모의해킹 침해대응 과정 > Liunx 관리' 카테고리의 다른 글

SSH server / day 22  (0) 2021.04.26
NTP server / day 22  (0) 2021.04.26
SAMBA server / day 21  (0) 2021.04.23
NFS server / day 20  (0) 2021.04.22
Mail / day 19  (0) 2021.04.21