반응형

시스템의 로그를 위해서, syslog를 사용하며. 해킹등에 대비해서 원격 로그저장을
생각하게 되는데, 문제는 원격 syslogd 데몬이 이걸 받아주도록 해야 하고,
관리자 권한이 없다면, 외부에서 받도록 설정할 수도 없고, 자기 서버만의 로그파일에
기록하지 못하겠죠. 그래서, 원격 서버상의 일반 사용자들도 시스템로그를 백업 받을 수
있도록 함 고쳐보았습니다.

제가 이렇게 한 이유는, 얼마전 아는 웹서비스 서버가 외국 해커에게 해킹을 당했습니다.
한번 봐달라고 해서 봤는데, 할게 없더군요. 초보 해커가 아닌이상 흔적은 있지만
정보가 될만한것은 모두 지웠습니다. 그래서, 분석할 정보가 없어서, syslog의 원격로그
기능을 생각하였지만, 로그백업서버를 운영할만한 상황도 아니고, 제것도 아닌데
운영할 필요도 없다고 생각되어 이런 툴을 만들게 되었네요.

다른 리눅스상에서 작업하는 개발자나 관리자도 유용할거라 생각되어 적어봅니다.

아래에는 syslog에 대한 설명이고, 거의 마지막 3.3 섹션에서, 일반 유저권한으로서 로그백업서버역활을 할 수 있도록 하는 부분을 언급 하였습니다.

[차례]--------------------------------------------------------------------------------

1. syslog 설명
2. syslog.conf 파일 설명
3. 원격 저장을 위한 설정
3.1 로그를 받는 쪽
3.2 로그를 보내려는 쪽
3.3 일반사용자 계정으로 로그서버 설정 과 구축



1. syslog 설명

전통적인 유닉스 시스템에서는, 시스템에서 발생하는 내용들에대해서 로깅(Logging)을 제공합니다.
물론 보안과 관리의 목적이며 이 로그 파일들은 운영체제마다 조금씩 틀리지만,
리눅스의 경우 /var/log 에 쌓이게 됩니다.

시스템 관리자는 일정 규칙에의해 설정을 하게 되며, 자신이 개발하는 프로그램에도 syslog
기능을 사용하는게 가능합니다. syslog 기능은 syslogd 를 기동시킴으로서, 작동하게 되는데 물론
항상 떠 있어야 하겠고, 사용하는 관련 파일들로는 /etc/syslog.conf 가 주로 사용되고,
/etc/sysconfig/syslog, 원격백업등을위해서 /etc/hosts 파일과, /etc/services 파일등의 편집이
필요할 수도 있습니다.


2. syslog.conf 파일 설명

이 파일은 형식이, [selector]와 [action] 으로 나눠지며, 다시 [selector]는 [facility]와 [severity]로
나눠 집니다. 여기서 facility자리는 "어떤것에대해" 정도로 생각하면되고, severity는 "우선순위"
입니다. [action]은 보통 파일이름을 지정해서, 해당파일에 쓰란거죠. 여기다 원격지를 지정하면
원격지로 보냅니다.

정리하면, [facility][severity][action]은, 어떤것에대해(facility), 어떤 심각도(severity) 로,
어떻게 해라(action) 입니다.

[facility] 리스트 -----------------------------------------

kern: 커널
user: 사용자 레벨(일반 프로세스)
mail: 메일 서브 시스템
auth: 보안, 권한 프로그램들
daemon: 다른 시스템 데몬
news: 뉴스 서브시스템
local0-7: 다른용도 사용을위해 예약
* : 모든것

(이 외에도 몇가지가 더 있습니다.)

[severity] 리스트 ----------------------------------------

0 : emergency 비상상태
1 : alert 상태
2 : critical 상태
3 : error 상태
4 : warning 상태
5 : notice 상태
6 : info 정보 메세지 (시스템 분석용)
7 : debug (프로그램 디버그할때)
none : 이것이 facility와 사용되면 해당 facility는 제외,

[action] 필드 --------------------------------------------

파일명 : 해당 파일에 기록
@호스트명 : 해당 호스트로 전송

종합해서 샘플을 풀이해보자면,

mail.debug /tmp/maillog
(mail 에대해, 상태는 debug로해서, /tmp/mailog 에 기록하라)

*.debug;mail.none @myhost
(모든것에대해, 상태는 debug로, mail은 제외하고, myhost로 전송하라)

conf설정에서 중요한것은 칸을 띄울때는 공백이 아니라, 탭으로 하여야 합니다.(중요!!!)


3. 원격 저장을 위한 설정

3.1 로그를 받는 쪽

로그백업을 원격지로 보내기위해서는, 보내려는 syslogd 를 기동시킬때,
/etc/sysconfig/syslog 파일을 열어서

SYSLOGD_OPTIonS="-m 0 -r"
처럼 바꿔줍니다. -r 이 Remote 의미 입니다. 물론 위 설정을 안바꾸고 syslogd를 기동시킬때
옵션으로 줘도 되죠.



3.2 로그를 보내려는 쪽

/etc/hosts 파일을 편집합니다. 로그 서버를 giran이라고 칭하고, 도메인이 giran.uu.net 이며,
IP를 111.111.111.111 이라면

111.111.111.111 giran.uu.net giran loghost

처럼 설정을 해둡니다. /etc/hosts 파일 형식은 참고로,
[IP-address fully-qualified-domain-name hostname "loghost"] 형식입니다.

이렇게만 해두면, 로그를 받는 서버측이 잘 작동하는것을 볼 수 있습니다.
하지만, 우리의 문제는 로그를 받는쪽 서버의 일개 계정 사용자 뿐이라는 거죠.
그래서 슈퍼유저가 아니라서, 받을수도 없고, 설정할 수도 없고, 기존 로그파일에
섞일 우려도 있고요.


3.3 일반사용자 계정으로 로그서버 설정 과 구축

A) /etc/services 파일 수정

이 기능을 사용하려면, 먼저 [보내는 쪽]에서 수정해야할게 /etc/services 파일을 열어서

syslog 514/udp

라고 되있는 부분을 1514 처럼 원하는 값으로 바꿔주세요.
(이 값은 후에나올, slog 툴에서 리슨 포트랑 일치해야 겠죠)

이렇게 하는 이유는 syslogd 는 원격지로 패킷을 보낼때, udp 514번을 이용합니다.
514번은 이미 글로벌하게 사용되는 포트이고, 우리는 사적으로 사용할 계획이니까요.

B) /etc/syslog.conf 파일 예제

*.info;mail.none;news.none /var/log/messages
*.info;mail.none;news.none @loghost

위에서, 첫줄은 보통 디폴트로 있는 구문입니다. 그 아래에 같은형식으로 적고, 파일이 아닌
호스트로 수정해주세요. 이렇게 같은걸 2줄 적는 이유는 동시에 처리되게 하려는거죠
로컬 로그파일에도 기록되고, 원격 호스트로도 보내고요.

C) /etc/hosts 파일 예제

111.111.111.111 giran.uu.net giran loghost

이것은 위에서 언급했습니다.

이렇게 해서 [로그를 보내려는 클라이언트]의 설정이 마무리 되었습니다.
서버측은 설정할게 없습니다. 단지 자신의 개인 계정에서 첨부 소스파일을 압축을 풀어
소스에서, LOG_HOME 수정후, 컴파일하여 실행시키면 됩니다.

#define LOG_HOME "/user4/starzan/slog/"
처럼 되있는 부분을 자신의 계정의 디렉토리를 지정하면 되겠네요. 만약 포트가 충돌된다면,
소스에서 역시 포트 번호를 바꾸시면 되며, C 소스파일에 대해서는 설명을 생략합니다.
소스는 저도 손가는대로 짠이후 안봐서 버그가 있을수 있으니, 직접 고쳐 사용하시던지
아니면, 적어주세요. ^^

# tar xvfz slog.tgz

# make (바이너리 만듦니다.)

# ./slog
# 죽일때는, kill [pid]

이 slog는 로그파일을 원격지 ip별로 기록합니다. 저 같은경우 이렇게 실행 함으로서
여러대의 로그파일을 관리했죠.
즉,
111.111.111.111.log
111.111.111.112.log
111.111.111.113.log
처럼 패킷이 들어오는 ip에 따라 로그에 기록합니다. 그래서 서버별로 관리 하기 좋죠.

반응형

+ Recent posts