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

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’

[로그 관리 및 분석] 로그파일 관리( logrotate )

1. logrotate

– logrotate 는 시스템에 있는 모든 로그파일들을 관리할 수 있으며 이들 로그파일들을 자리고( rotate ), 보관하고, 삭제하고, 압축하고, 메일로 보내주는 등의 작업을 할 수 있게 함.

– logrotate 를 이용하여 리눅스서버에서 기록되는 로그파일에 대하여 여러 가지 작업을 자동화 할 수 있음.

– 특정날짜 또는 특정용량이상이 되었을 때 로그파일을 로테이트( 교체 ) 한다. ( size )

– 로테이트작업 직전과 직후에 특정작업을 수행할 수 있다.( prerotste / endscript, postrotate / endscript )

– 로테이트 작업을 하면서 압축을 하거나 하지않을 수 있다.( compress, nocompress )

– 로테이트 후에 보관할 파일의 수를 지정할 수 있다.( rotate )

– 로테이트 후에 생성되는 파일의 소유주와 퍼미션등을 설정할 수 있다.( create )

– 로테이트 후에 생성되는 파일의 확장자를 임의로 지정할 수 있다.( extension )

2. logrotate 파일구성

– logrotate 는 리눅스가 설치되면서 대부분 패키지형태로 기본 설치가 됨.

– 데몬( 위치 ) : /usr/sbin/logrotate : 데몬의 위치 및 데몬프로그램

– 데몬설정파일 : /etc/logrotate.conf : 설정파일

– 설정디렉토리 : /etc/logrotate.d : logrotate 에 적용할 각종로그파일들을 보관하는 디렉토리

– 상황파일 : /var/lib/logrotate.status : logrotate 한 작업내역을 보관할 파일

– cron( 일단위 ) : /etc/cron.daily/logrotate : logrotate 는 주기적으로 실행이 되어야 하므로 cron 에 의해 일단위로 실행이 됨.

– /usr/sbin/logrotate 는 logrotate 의 데몬프로그램임. crond 에 의해 주기적으로 실행이 됨.

– /etc/logrotate.conf 파일은 logrotate 가 실행이 되면서 읽어들인 후 각각의 로그파일들을 이 파일의 설정에 의하여 자르거나( rotate ), 삭제하거나, 압축을 하게 됨.

– /etc/logrotate.d 파일은 각각의 로그파일들에 대한 개별적인 설정파일들이 존재하는 디렉토리이며, 추가로 적용할 로그파일에 대한 설정을 여기서 하면 됨.

– /etc/cron.daily/logrotate 파일은 주기적으로 실행이 될 logrotate 를 cron 에 넣어둔 것.

3. logrotate.conf 샘플

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

– monthly : 대상로그파일( /var/log/messages ) 을 순환시킬 주기이며, monthly 이므로 한달에 한번씩 이 파일이 순환( rotate )되게 됨. 순환주기에는 daily, weekly, monthly 등이 있음.

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

– rotate 2 : 순환되는 파일갯수를 지정함. 0 부터 시작하게됨.

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

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

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

4. logrotate 주요옵션

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

– -s, –state < statefile > : 기본 상황파일은 /var/lib/logrotate.status 파일 대신에 지정한 state 파일을 사용함.

– –usage : logrotate 의 기본 사용법을 간단히 보여줌.

– compress : 순환되는 로그파일을 gzip 으로 압축하게 됨. nocompress 와는 반대임.

– nocompress : 순환되는 로그파일의 압축을 하지 않음. 반대는 compress 임.

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

– daily : 로그파일을 일 주기로 순환 시킴.

– weekly : 로그파일을 주 주기로 순환  시킴.

– monthly : 로그파일을 한달 주기로 순환 시킴.

– errors address : logrotate 실행 후에 순환되어 생성되는 파일의 이름 뒤에 확장자로 붙일 확장자명을 지정함. 만약 compress 라는 옵션으로 gzip 으로 압축을 했다면 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 등으로 용량단위를 붙여서 지정하면 됨.