logwatch
서비스를 운영하다 보면 서버에 쌓이는 다양한 로그를 수집해서 분석해 봐야 하는 경우가 많이 있습니다.
특히 커널의 audit 로그나 sshd 로그등은 혹시 시스템에 공격을 시도한 흔적이 있는지 확인할 경우 유용합니다.
로그 파일 | 용도 | 비고 |
---|---|---|
/var/log/audit/audit.log | 시스템 감사 로그 | SELinux 로그가 여기 기록됨 |
/var/log/boot.log | 서비스 시작 | 특수 문자가 포함되어 있으므로 less 로 볼 경우 -r 옵션 추가 |
/var/log/cron | cron 작업 실행 로그 | |
/var/log/dmesg | 커널이 출력한 메시지 로그 | |
/var/log/lastlog | 로그인 로그 | 바이너리 파일이므로 lastlog 명령어로 확인 |
/var/log/messages | kernel 범용 로그 | |
/var/log/secure | 보안 관련 로그 | |
/var/log/wtmp | 로그인 로그 | 바이너리 파일이므로 last 명령어로 확인 |
/var/log/yum.log | yum 으로 설치/삭제한 패키지 정보 관련 로그 |
로그는 대개 텍스트 파일이므로 less 나 tail 같은 명령어를 사용하여 볼 수 있으며 시스템 로그이므로 root 권한을 필요로 합니다.
less 로 로그를 볼 경우 -r 옵션을 추가해 주면 특수 문자나 색상을 제대로 표시해 줍니다.
less -r /var/log/boot.log
매일 생성되는 로그의 양이 많기때문에 일일이 눈으로 확인하는 것은 불가능하며 로그의 대다수는 정상 작동 내역을 기록하므로 이상이 발생하더라도 찾아내기가 힘듭니다.
logwatch 는 Linux 용 시스템 로그 모니터링 프로그램으로 시스템 로그중 중요하다고 판단되는 내용만을 뽑아서 결과를 정기적으로 root 에게 email 로 전송해 주는 역할을 수행합니다.
fluentd 나 logstash 같은 더 전문적인 로그 취합 및 분석 프로그램도 많지만 관리하는 리눅스 시스템이 많지 않다면 logwatch 가 설정도 간단하고 가볍게 사용할 수 있습니다.
설치
CentOS 와 우분투 모두 패키지로 제공되고 있으므로 패키지 관리자로 logwatch 를 설치하면 됩니다.
$ sudo yum install logwatch
$ sudo apt install logwatch
설정
기본적으로 logwatch 는 로그 파일 내용으로부터 보고서를 만들어서 하루에 한번 메일로 전송합니다.
기본 설정은 CentOS 의 경우 /usr/share/logwatch/default.conf/logwatch.conf 이며 이를 복사해서 사용할 설정 파일을 만듭니다.
$ sudo sh -c "cat /usr/share/logwatch/default.conf/logwatch.conf >> /etc/logwatch/conf/logwatch.conf"
sh -c 를 안 쓰고 cat 만 쓰면 cat /usr/share/logwatch/default.conf/logwatch.conf 만 root 권한으로 실행되어 permission denied 에러가 납니다.
우분투의 설정 파일은 /usr/share/logwatch/default.conf/logwatch.conf 이며 이 파일을 직접 수정하면 됩니다.
이제 설정 방식은 key=value 형식이며 주요 설정 항목은 아래와 같습니다.
# 로그 디렉터리 LogDir = /var/log # 결과를 어디에 출력할 것인지 여부부, stdout 또는 file 로 출력 가능. Output = mail # 보고서 받을 메일 주소 MailTo = user@example.com # 대상 로그를 뽑을 기간. 기본은 어제이며 Today 로 설정하면 오늘 로그를 All 로 설정하면 모든 로그를 뽑음음 Range = Yesterday # 상세 레벨 Detail = Low
확인을 위해 명령행에서 logwatch 를 치면 설정한 이메일로 로그가 전송됩니다.
그리고 날마다 실행되는 크론 명령어가 있는 디렉터리인 /etc/cron.daily/ 에 0logwatch 가 등록되어 있으므로 정해진 시간에 자동화된 보고서가 설정한 이메일로 전송됩니다.
################### Logwatch 7.4.2 (02/27/16) ####################
Processing Initiated: Thu Jul 13 23:57:00 2017
Date Range Processed: today
( 2017-Jul-13 )
Period is day.
Detail Level of Output: 5
Type of Output/Format: mail / text
--------------------- Cron Begin ------------------------
Commands Run:
User root:
/etc/rc.d/init.d/atop condrestart > /dev/null 2>&1 || :: 1 Time(s)
run-parts /etc/cron.hourly: 24 Time(s)
---------------------- Cron End -------------------------
--------------------- httpd Begin ------------------------ <===== 웹 서버 로그
Requests with error response codes
403 Forbidden
/download/temp/pdfexport-20170301-010317-0 ... application/pdf: 1 Time(s)
500 Internal Server Error
/plugins/servlet/themepress/cssbundle/cach ... ll/combined.css: 1 Time(s)
502 Bad Gateway
/: 1 Time(s)
---------------------- httpd End -------------------------
--------------------- pam_unix Begin ------------------------ <===== pam 로그
sshd:
Sessions Opened:
lesstif: 2 Time(s)
sudo:
Authentication Failures:
lesstif(500) -> lesstif: 1 Time(s)
Not Identify Password For:
lesstif: 1 Time(s)
---------------------- pam_unix End -------------------------
--------------------- SSHD Begin ------------------------ <===== SSH 로그
Failed logins from:
192.168.10.170: 7 times
lesstif/publickey: 7 times
Users logging in through sshd:
lesstif:
192.168,10.170: 2 times
---------------------- SSHD End -------------------------
--------------------- Sudo (secure-log) Begin ------------------------ <===== sudo 로그
lesstif => root
---------------
/bin/su - 1 Time(s).
Conversation failed with:
-------------------------
pam_unix(sudo:auth) - 1 Time(s)
---------------------- Sudo (secure-log) End -------------------------
###################### Logwatch End #########################
만약 logwatch의 매일 보고서를 중지하려면 기본 설정 파일(/usr/share/logwatch/default.conf/logwatch.conf )내에 DailyReport=no 를 추가해 주면 됩니다.