[로그 관리 및 분석] logrotate

logrotate.conf 샘플

logrotate의 설정디렉토리 /etc/logrotate.d/에 있는 여러개의 파일중 syslog파일의 일부이다.

물론, 이 설정을 /etc/logrotate.conf 파일내에 있어도 마찬가지 결과를 얻을 수 있다.

위의 설정을 설명하면 다음과 같다.

/var/log/messages
대상로그파일, 즉, logrotate에 의해서 작업될 로그파일을 절대패스로 지정해둔 것이다.
그리고, 그 다음의 “{” 부터 “}”까지는 이 로그파일에 대한 개별적인 설정이 된다.

monthly
대상로그파일(/var/log/messages)을 순환시킬 주기이며, monthly이므로 한달에 한번씩 이 파일이 순환(rotate)되게 된다.
뒤에서 설명하게되겠지만 참고로 순환주기에는 daily, weekly, monthly등이 있다. 이에 대한 설명은 뒤에서 자세히 다루게 된다.

compress
순환(rotate)된 파일이 gzip에 의해서 압축이 된다. 반대의 옵션은 nocompress이며 압축을 하지 않게 된다.
(기우겠지만, 순환되어 새로 생성되어 저장되고 있는 로그파일은 압축이 되지 않는다.)

rotate 2
순환되는 파일갯수를 지정한다. 0부터 시작하게되며 위의 예에서 monthly로 지정했기 때문에 2달간 로그파일이 저장되어 있게된다.

mail
순환되어 지정된 갯수를 지나게되는 로그파일은 지정된 메일주소로 메일로 보내지게 된다.
메일을 보내지 않으려면 nomail이라고 하면 된다.

errors
지정된 log파일의 logrotate작업시에 에러가 발생을 하면 지정된 메일주소로 메일을 발송하게 된다.

postrotate/endscript
이것은 지정된 로그파일에 logrotate작업이 끝나고 난 이후에 실행할 작업을 설정해둔 것이다.
대부분 이부분에 설정되는 작업은 rotate된 로그파일의 데몬을 재시작시키는 작업이다.
반대의 작업을 하려면 즉, logrotate작업 전에 실행할 작업이 있다면
postrotate/endscript대신에 prerotate/endscript를 사용하면 된다.

6. logrotate 주요옵션

(참고 : “man logrotate” 해서 보면 logrotate에 대한 옵션이 굉장히 많다. 아래에 소개해드리는 옵션은 자주사용하는 옵션이거나 필자의 견해로 보아 중요하다고 생각되는 옵션을 설명드린 것이므로 이외의 옵션에 대해서 알고자 한다면 man page를 참조바란다. )

-f, –force

강제순환시킨다. 이 옵션은 새로운 항목을 추가한 후에 로그파일을 순환시키거나 옛날 로그파일이 이미 삭제되어 새로운 로그파일이 생성되어 로그기록이 계속되고 있을 경우에 유용한 옵션이다.

-s, –state <statefile>

기본 상황파일인 /var/lib/logrotate.status 파일대신에 지정한 state파일을 사용한다.

–usage

logrotate의 기본 사용법을 간단히 보여준다.

compress

순환되는 로그파일을 gzip으로 압축하게된다. nocompress와는 반대.

nocompress

순환되는 로그파일의 압축을 하지 않는다. 반대는 compress

create mode owner group

순환되어  생성되는 로그파일의 파일퍼미션(mode)과 소유자(owner), 그리고 그룹소유자(group)를 지정한 것이다.
(예, create root 600 wheel)

daily

로그파일을 매일주기로 순환시킨다.

weekly

로그파일을 매주주기로 순환시킨다.

monthly

로그파일을 한달주기로순환시킨다.

errors address

logrotate작업시에 에러가 발생한다면 지정된 메일주소로 메일을 보내게 된다.

extension ext

logrotate 실행후에 순환되어 생성되는 파일의 이름뒤에 확장자로 붙일 확장자명을 지정한다.
만약 compress라는 옵션으로 gzip으로 압축을 했다면 gz라가 확장자 뒤에 붙게된다.
예를 들면 compress라는 옵션과 함께 “extension ext”옵션이 주어졌다면 logrotate실행후에 생성되는 파일은 messages.0.ext.gz과 같은 모양새를 갖게되는 것이다

ifempty

로그파일이 비어있는 경우에도  rotate(순환)을 하게된다. 기본값이다.

notifempty

ifempty와는 반대로 로그파일이 비어있을 경우에는 순환을 하지 않는다.

mail address

logrotate작업후에 이전로그파일을 지정된 메일주소로 메일을 보낸다. (특정한 경우의 로그파일은 보내지 않을 수도 있다. )

postrotate/endscript

logrotate작업 이후에 지정된 작업(스크립트)을 실행한다.

prerotate/endscript

logrotate작업 이전에 지정된 작업(스크립트)을 실행한다.

rotate count

logrotate의 실행결과 순환되는 파일들의 총 갯수라고 이해하자.
즉, logrotate의 결과 삭제되거나 지정된 주소로 메일로 보내지기전의 총 파일갯수라고 이해하면 된다.
그리고 rotate 0로 설정하고 나면 이전파일은 순환과 함께 삭제되어 버린다.

size size

logrotate의 결과 순환된 결과 파일사이즈가 지정한 크기를 넘지 않도록 한다.
지정하는 방법은 100k, 100M등으로 용량단위를 붙여서  지정하면 된다.

[로그 관리 및 분석] 로그파일 실무가이드

1. 시스템에서의 로그의 의미

– 시스템관리에 있어서 무엇보다 중요한 것이 로그파일분석과 관리임. 시스템에 이상징후가 발생을 했을 때, 시스템관리자가 가장 먼저 확인해 보는 것이 로그파일임. 시스템이 해킹을 당했다고 느낄 때 해킹흔적등을 확인하기 위해서 제일 먼저 서버관리자는 로그파일에 의존하게 됨.

– 어디서( IP Address ), 누가( ID ), 어떻게( port ) 들어와서 어떤작업을 했는지를 확인하려할 때 전적으로 로그파일에 의존하게 됨.

– 관리해야할 로그파일의 수와 로그파일이 어떤 경로로 남겨지는지에 대해서는 정확히 알고 있어야 함.

2. 로그파일의 종류

– 리눅스의 로그파일은 기본적인 로그파일만 하더라도 10 여개가 넘음. 보안툴( 예 tripwire, nmap ) 등을 설치하고 나면 이들에 관한 로그파일들이 새로 생기게 됨.

– 로그이름 : 로그파일명 : 관련데몬 : 설명
콘솔로그 : /dev/console : kernel : 콘솔에 뿌려지는 로그
시스템로그 : /var/log/messages : syslogd : 리눅스커널로그 및 주된로그
TCPD로그 : /var/log/secure : xinetd : inetd 에 의한 로그
메일로그 : /var/log/maillog : sendmail, popper : 메일로그( sendmail 에 의한 로그)
크론로그 : /var/log/cron : crond : crond 에 의한 로그
부팅로그 : /var/log/boot.log : boot : 시스템부팅시의 로그
FTP로그 : /var/log/xferlog : ftpd : ftp 로그
웹로그 : /usr/local/apache/logs/access_log : httpd : 아파치( 웹서버 ) 로그
네임서버로그 : /var/log/named.log : named : 네임서버( DNS ) 로그

– 기본적인 로그들은 syslogd 에 의해서 제어가 되며, syslogd 의 설정파일인 /etc/syslog.conf 파일을 수정함으로써 이 파일들의 저장위치와 저장파일명을 변경할 수도 있음.

3. 콘솔로그( /dev/console )

– 커널( kernel ) 에 관련된 내용을 시스템콘솔에 뿌려주는 로그임

– messages 내용과 일치하지는 않지만 시스템에 관련된 중요한 내용들( 시스템풀, 다운등 ) 에 대한 로그를 관리자에게 알리고자 함이 목적이기 때문에 출력을 파일로 저장하는 것이 아니라 장치명( /dev/console ) 을 사용하여 콘솔로 로그를 뿌려주게 됨.

4. 시스템로그( /var/log/messages )

– 이 로그에 기록되는 내용은 주로 접속시의 인증에 관한 것과 메일에 관한 내용, 그리고 시스템에 관한 변경사항등 시스템에 관한 전반적인 로그를 기록하는 파일임.

– 시스템관리자에 의해서 가장 소중하게 다루어지는 로그이기도 함.

– 이 파일에 기록되는 내용을 변경하고자 한다면 /etc/syslog.conf 파일의 내용에서 수정을 해 주면 됨.

5. TCPD 로그( /var/log/secure )

– xinetd 에 의한 로그파일.

– xinetd 데몬의 확인 방법은 ” ps -ef | grep xinetd ” 로 확인이 가능함.

– 실행중인 xinetd 의 PID 저장 파일은 /var/run/xinetd.pid 임

6.  메일로그( /var/log/maillog )

– 로그파일의 이름에서 의미하는 바와같이 senmail 이나 pop 등의 실행에 관한 기록이 남겨지게 됨.

– 메일을 주고 받을 때에 이 로그파일에 기록이 됨.

– 즉, smtp 와 pop 에 관한 로그라고 말할 수 있음.

7. 크론로그( /var/log/cron )

– 시스템의 크론이 작업한 기록을 보관하고 있는 파일.

– 크론데몬인 crond 가 언제 어떤작업을 수했는가를 확인할 수 있음.

8. 부팅로그( /var/log/boot.log )

– 시스템의 데몬들이 실행되거나 재시작되었을 때 기록되는 로그파일.

9. FTP로그( /var/log/xferlog )

– ftp 나  ncftp 등의 접속이 이루어 졌을 때 이 로그파일에 기록이 됨.

– 업로드한 파일과 다운로드한 파일들에 대한 자세한 기록도 함께 남겨짐.

10.  웹로그( /usr/local/apache2/logs/access_log )

– 웹서버( 아파치 ) 에 관한 로그

11. syslogd 의 설치/ 확인/ 제거( rpm )

– 리눅스 시스템에 설치되어 있는 syslogd 의 버전을 확인하는 방법
syslogd -v

– 리눅스 시스템에 설치되어 있는 리눅스패키지의 구체적인 패키지버전을 확인하는 방법
rpm -qf /etc/syslog.conf

– 확인한 리눅스패키지( sysklogd-1.3.33-6 ) 에서 설치되어 있는 파일들의 내용을 확인하는 방법
rpm -ql sysklogd-1.3.33-6

– 새로운 패키지로 업그레이드 하는 방법
rpm -Uvh sysklogd-1.3.33-6

– rpm 패키지 삭제하는 방법
rpm -e sysklogd-1.3.33-6

12. syslogd( 시스템로그데몬 )

– 정식이름은 ” Linux system logging utilities” 임. 리눅스시스템로그유틸리티

– 로그데몬 : /sbin/syslogd : 로그데몬의 위치 및 데몬프로그램

– 로그데몬 설정파일 : /etc/syslog.conf : 로그데몬의 설정파일, 각종 로그파일들의 설정 및 저장위치지정

– 로그데몬PID파일 : /var/run/syslogd.pid : syslogd 데몬의 PID 파일

– 로그데몬 실행 : /etc/rc.d/init.d/syslog start : 로그데몬 실행방법

– 로그데몬 종료 : /etc/rc.d/init.d/syslog stop : 로그데몬 종료방법

– 로그데몬 재시작 : /etc/rc.d/init.d/syslog restart : 로그데몬 재시작장법

13. 로그데몬의 실행 흐름

– init 프로세스에 의한 syslogd 실행( 재시작 )
시 스템이 부팅되면서 처음으로 시작되며, 또는 /etc/rc.d/init.d/syslog start( 재시작은 /etc/rc.d/init.d/syslog restart ) 라는 명령의 수행으로 /sbin/syslogd 의 데몬프로세스가 수행이 됨.

– syslog.conf 읽음
/sbin/syslogd 데몬이 실행이 되면서 /etc/syslog.conf 파일을 읽어들이게 됨. /etc/syslog.conf 파일에는 시스템에서 사용하는 대부분의 로그파일들에 관한 설정이 되어있음.

– syslogd.pid 기록
/sbin/syslogd 도 데몬( 일종의 프로세스 ) 이므로 이 프로세스의 실행번호( Process ID : PID ) 를 /var/run/syslogd.pid 에 기록함.

– syslog.conf 에 기록된 각각의 로그파일들의 기록을 시작
/sbin/syslogd 의 실행과 함께 syslog.conf  파일에 설정되어 있는 각각의 로그파일들( messages, secure, maillog 등 ) 이 기록되기 시작함

– logrotate 에 의한 각 log 파일들 관리
시스템에서 발생되는 모든 이벤트에 대한 기록들이 각각의 로그파일에 저장이 되고 있으므로 이들 로그파일에 대한 logrotate 작업이 필요함.

[로그 관리 및 분석] 마지막 로그인( 접속 ) 정보 확인한는법

1. 시스템 각 계정의 최근 접속정보를 확인하는 lastlog 개론

– lastlog 는 /etc/passwd 파일에 정의되어 있는 모든 계정의 최근 접속정보를 확인하는 명령어임.

– 주로 서버의 보안점검을 위하여 필수적으로 확인해 보아야하는 명령어. 간단히 lastlog 라고만 하면 모든 계정의 마지막 접속정보를 출력해 줌.

– 사용형식 : lastlog [ -u 계정명 ] [ -t 일자 ]

– lastlog 는 /var/log/lastlog 파일의 정보에 저장된 정보를 참조하여 결과를 출력함. /var/log/lastlog 파일은 바이너리파일로 되어있기 때문에 cat 이나 vi 등의 일반적인 방법으로는 확인할 수 없음.

– /var/log/lastlog 파일에는 각 계정의 최근 접속정보가 기록되는 파일임. 또한 /usr/include/lastlog.h 파일에 정의 된 포멧( format ) 으로 /var/log/lastlog 에 저장이 됨.

2. 시스템 각 계정의 최근 접속정보 확인하기

– 간단히 lastlog 라고만 하면 서버의 모든 계정에 대한 최근 접속정보를 확인 할 수 있음.

– lastlog

3. 특정 계저사용자의 시스템 최근 접속정보 확인하기

– 만약 특정 계정만의 최근 접속정보를 확인하고자 한다면 -u 옵션과 함께 사용하면 됨.

– lastlog -u stkim

4. 지정한 최근일 까지의 시스템 접속정보 확인하기

– lastlog 는 최근 몇일까지의 마지막 접속정보를 확인 할 수도 있음. ” last -t 일자 ” 와 같이 사용하면 지정된 일자까지에 접속한 최근 접속정보를 확인 할 수 있음.

–  lastlog -t 30

[로그 관리 및 분석] 로그구성 및 모니터링하기

1. tcpd 로그기록 파일 모니터링

– telnet 이나 ftp 또는 ssh 등으로 23번포트, 21번포트, 22번포트등을 타고 들어오는 접속에 관련된 로그가 가장 민감함.

– 이들 로그에 관한 기록을 하는 파일이 /etc/syslog.conf 파일에 설정된 것 처럼 /var/log/secure 임.

– 이들에 관한 로그를 계속적으로 모니터링하고자 한다면, ” tail -f /var/log/secure ” 라고 하면 됨

– tail -f /var/log/secure

2. 시스템로그 모니터링

– 시스템에 관련된 중요한 이벤트들은 모두 /var/log/messages 에 남겨지게 됨.

– /var/log/secure 파일처럼 계속적으로 모니터링을 하려면 ” tail -f /var/log/messages ” 라고 하면 됨.

– tail -f /var/log/messages

3. 메일관련 로그 모니터링

– sendmail  이나 pop( qpopper ) 등으로 인하여 메일경유 또는 메일송수신에 관련된 기록은 /var/log/maillog 파일에 기록을 하게 됨.

– 메일관련로그파일을 모니터링하려면 ” tail -f /var/log/maillog ” 라고 하면 됨.

– tail -f /var/log/maillog

4. 부팅시의 메시지 확인

– 부팅시의 에러나 부팅시 장애등을 확인해 보려면 부팅로그( /var/log/boot.log ) 파일을 살펴보면 됨.

– 하지만, 실제로 부팅시의 메시지( 로그기록 ) 를 확인할 때에는 대부분 /var/log/dmesg 라는 파일을 살펴보는 것이 일반적이며, 이 파일( /var/log/dmesg ) 의 내용을 확인하는 명령어가 /bin/dmesg 에 존재함.

– dmesg

5. cron 모니터링

– 시스템에는 크론( crond ) 에 관한 로그를 기록하는 파일이 존재하며 /var/log/cron 에 존재함.

– crond 는 시스템에 정기적으로 실행되는 것에 대한 설정을 가지고 지정된 시각에 실행을 하게되는 데몬임.

– 즉, crond 는 /usr/sbin/crond 이며, 이 데몬에서 남겨지는 로그기록 파일은 /var/log/cron 임.

– 모니터링하는 방법은 ” tail -f /var/log/cron ” 으로 하면 됨.

– tail -f /var/log/cron

[로그 관리 및 분석] Webalizer 를 이용한 멀티웹로그 자동 분석법

1. Webalizer 의 소개와 특징

– C 언어로 개발되었기 때문에 실행속도가 굉장히 빠름.

– 특히, 한국어를 지원한다는 점에 굉장한 매력이 있음.

– Webalizer 는 C 로 개발되었지만 그 소스를 공개하고 있음.

– 분석대상이 되는 소스파일의 크기에 제한이 없음.

2. Webalizer 설치하기

– Webalizer 를 다운받을 수 있는 곳.
http://www.mrunix.net/webalizer/
http://www.webalizer.com

3. 웹로그 분석을 위한 Webalizer 환경구성

– Webalizer 설치 위치 : /usr/local/webalizer

– 환경설정파일 디렉토리 : /usr/local/webalizer/conf/개별도메인.conf ( 없으면 만들어줘야 한다 )

– 실행 쉘스크립트 파일 : /usr/local/webalizer/bin/webalizer.sh

– 이 두개의 파일은 모두 직접 만들어 주어야 함. webalizer.conf 파일에는 분석대상이 되는 모든 웹사이트의 웹로그분석을 위한 설정파일들이 ” 도메인.conf ” 라는 파일이름으로 각각 한개씩 생성해야 함.

– /usr/local/webalizer/bin 에 생성되는 webalizer.sh 파일 또한 직접 만들어 주어야 함. 이 파일에는 개별 conf 파일들을 하나씩 분석하기 위한 실행명령들이 들어가게 됨.

4. Webalizer 의 실행설정파일 만들기

– /usr/local/webalizer/conf 디렉토리에 분석하고자하는 대상 도메인의 설정파일( *.conf ) 파일을 만들어 주어야 함.

– Webalizer 설치하고 나면 ” make install ” 과정에서 샘플설정파일( webalizer.conf.sample ) 이 /etc/ 디렉토리내에 생성됨. 이 샘플파일을 도메인데 하나씩 복사해 오면 됨.

– cp /etc/webalizer.conf.sample stkim.com.conf

– 복사해온 샘플파일의 내용을 개별 도메인의 환경에 맞게 수정해 주어야 함.

– LogFile : 로그파일 위치( 예 : /home/stkim/www_log/access_log )

– OutputDir : 분석결과 저장위치( 예 : /home/stkim/www/weblog )

– HistoryName : 사이트명( 예 : stkim.com )

– ReportTitle : 분석결과 페이지 이름( 예 : STKIM.COM WebSite )

– HostName : 호스트명 FQDN 형식( 예 : www.stkim.com )

5. Webalizer 의 실행파일 생성하기

– Webalizer 의 실행파일 webalizer.sh 는 설치후에 생성되는 것이 아니며 멀티웹로그분석을 위해 직접 생성해야 함.

– vi webalizer.sh
/usr/local/bin/webalizer -c /usr/local/webalizer/conf/stkim.com.conf

– 위치는 /usr/local/webalizer 이며 이 위치에 webalizer.sh 라는 실행파일이 생성.

6. 자동분석 설정을 위한 cron 설정하기

– crontab -e

– 00 03 * * * su – root -c ‘/usr/local/webalizer/bin/webalizer.sh’