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 {} \;
-> 매월 1일 3시 정각(새벽시간)에 /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 |