시스템 로그
시스템에서 일어나는 모든 이벤트 등은 각 서비스별로 기록됨. 이러한 기록들을 로그(Log)라고 부른다. 로그 분석은 시스템 관리 및 보안에 상당이 중요한 역할을 하므로 숙지하고 있어야 한다.
리눅스 초기에는 로그 기록과 관련한 패키지로 syslog를 사용하였다. syslog 데몬이 /etc/syslog.conf 설정 파일을 기반으로 서비스별 로그 파일을 /var/log 디렉토리에 생성되게 하였음.
현재 최근 리눅스 배포판에서는 syslog가 rsyslog로 대체되었다. rsyslog는 기존 syslog와 유사하게 rsyslog 데몬이 /etc/rsyslog.conf 설정 파일을 기반으로 서비스별 로그 파일을 /var/log 디렉토리에 생성한다.
rsyslog
rsyslog는 rsyslog 데몬이 동작하면서 로그를 기록하고, 관련 설정은 /etc/rsyslog.conf 파일을 통해서 제어함.
rsyslog 주요 파일
파일명 | 설명 |
---|---|
/etc/rsyslog.conf | rsyslogd 데몬의 환경 설정 파일 |
/etc/sysconfig/rsyslog | rsyslogd 데몬이 실행과 관련된 옵션이 설정되는 파일 |
/usr/sbin/rsylogd | 실제 rsyslogd 데몬 실행 명령 |
/usr/lib/systemd/system/rsyslog.service | systemctl 명령에 의해 제어되는 유닛 파일 |
/etc/rsyslog.conf
기본 구성 형식
facility.priority action
facility는 일종의 서비스를 의미함. 메시지를 발생시키는 프로그램의 유형 priority는 위험의 정도를 나타내는데 설정한 수준보다 높은 값을 가지게되면 메시지를 보냄. actions은 메시지를 보낼 목적지나 행동들에 관한 설정으로 보통 파일명이나 아이디를 적음.
facility 종류
facility | 설명 |
---|---|
cron | cron,at과 같은 스케줄링 프로그램이 발생한 메시지 |
auth,security | login과 같이 인증 프로그램 유형이 발생한 메시지 |
authpriv | ssh와 같이 인증이 필요한 프로그램 유형이 발생한 메시지로 사용자 추가 시에도 메시지 발생 |
daemon | telnet,ftp 등과 같이 여러 데몬이 발생한 메시지 |
kern | 커널이 발생한 메시지 |
lpr | 프린트 유형의 프로그램이 발생한 메시지 |
메일 시스템이 발생한 메시지 | |
news | 유즈넷 뉴스 프로그램이 발생한 메시지 |
syslog | syslog 프로그램 유형이 발생한 메시지 |
user | 사용자 프로세스 |
uucp | UUCP(UNIX to UNIX Copy Protocol) 시스템이 발생한 메시지 |
* | 모든 facility를 의미함 |
priority 종류
priority | 설명 |
---|---|
none | 지정한 facility를 제외. 보통 앞에 다른 facility에 대한 설정을 하고 ';'뒤에 특정한 facility를 제외할 때 사용 |
debug | 프로그램 디버깅 시 발생하는 메시지 |
info | 통계, 기본 정보 메시지 |
notice | 특별한 주의가 필요하나 에러는 아닌 메시지 |
warning,warn | 주의가 필요한 경고 메시지 |
error,err | 에러가 발생한 메시지 |
crit | 크게 긴급하지는 않지만 시스템에 문제가 있다는 메시지 |
alert | 즉각적인 조치가 필요한 상황 |
emerg,panic | 모든 사용자들에게 전달해야 할 위험한 상황 |
action 종류
action | 설명 |
---|---|
file | 지정한 파일에 로그를 기록, /로 시작해서 절대 경로 기입 (예시, /var/log/messages) |
@host | 지정한 호스트로 메시지를 UDP 기반으로 전달 (예시, .@192.168.121.100) |
@@host | 지정한 호스트로 메시지를 TCP 기반으로 전달 (예시,.@@192.168.121.100) |
user | 지정한 사용자가 로그인한 경우 해당 사용자의 터미널로 전달 (예시, ":omurmsg:*") |
콘솔 또는 터미널 | 지정한 터미널로 메시지 전달 (예시, /dev/tty2) |
작성 예시
1. 모든 facility가 발생하는 메시지 중 'crit' 수준의 메시지만 /var/log/critical 파일에 기록하는데 커널이 발생하는 메시지는 제외
$ vi /etc/rsyslog.conf
*.=crit;kern.none /var/log/critical
rsyslog 서버 구축 (CentOS)
서버 설정
- 클라이언트들에게 로그를 받는 서버
1. 시스템 로그 config 파일 수정
$ vi /etc/rsyslog.conf
1-1. 아래 514 포트가 열려있는지 확인 (UDP / TCP 중 하나만 열어도 가능)
* 각 중괄호 {} 안에는 서버 별 적절한 내용 기입
#### MODULES ####
# ...
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
# ...
1-2. 각 서버 별 템플릿 추가
- 로그의 경로 설정하고 파일명 형식 지정
- 중괄호 {} 안의 내용은 각 서버별로 알맞게 기입
- 로그가 쌓이는 기본 경로 : /var/log/rsyslog
Template | 설명 |
---|---|
%HOSTNAME% |
클라이언트의 Host 이름 |
%fromhost-ip% |
Print IP |
%$YEAR% |
Print 년도 |
%$MONTH% |
Print 월 |
%$DAY% |
Print 일 |
# /etc/rsyslog.conf
$template {SERVER_NAME}, "/var/log/remote/%fromhost-ip%.log"
*.* ?{SERVER_NAME}
#### GLOBAL DIRECTIVES ####
# ...
2. rsyslog 포트 개방 (firewalld)
firewall-cmd --permanent --zone=public --add-port=514/tcp
firewall-cmd --permanent --zone=public --add-port=514/udp
firewall-cmd --reload
3. rsyslog 유닛 재시작
$ systemctl restart rsyslog.service
클라이언트 설정
- rsyslog 서버에게 로그를 보내는 서버
1. 시스템 로그 config 파일 수정
$ vi /etc/rsyslog.conf
2. 중괄호 안에는 위에서 설장한 로그를 받는 서버의 IP 기입
* 아래 코드중 '@' 한개는 UDP, '@@' 두개는 TCP를 사용하겠다는 의미
# /etc/rsysolog.conf
# ...
*.* @{IP}:514
3. rsyslog 서비스 재시작
systemctl restart rsyslog.service
rsyslog 포트 확인
rsyslog가 정상적으로 작동 중인지 포트 확인하기 (Master 서버에서 진행)
netstat
$ netstat -natlp | grep '514'
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 78637/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 78637/rsyslogd
lsof
$ lsof -i udp:514
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsyslogd 78637 root 3u IPv4 101165 0t0 UDP *:syslog
rsyslogd 78637 root 4u IPv6 101166 0t0 UDP *:syslog
ps
$ ps -ef | grep 'rsyslog' | grep -v 'grep'
root 78637 1 0 15:53 ? 00:00:00 /usr/sbin/rsyslogd -n
로그 발생 테스트
클라이언트 서버에서 logger
명령어를 사용하여 로그를 발생시킨 후 마스터 서버의 /var/log/remote
경로에 로그 파일이 정상적으로 생성되는지 확인하자.
클라이언트 서버 접속 후 logger 명령 날리기
logger "Hello, I am hacker! ^_^"
마스터 서버 접속 후 /var/log/remote 경로 확인
ls -lh /var/log/remote
합계 8.0K
-rw-------. 1 root root 1.4K 11월 17 02:24 127.0.0.1.log
-rw-------. 1 root root 1.1K 11월 17 02:28 192.168.121.152.log
192.168.121.152.log 파일 내용 확인
cat /var/log/remote/192.168.121.152.log | tail -n 1