사이트 내 전체검색
[linux] 원격 로그 서버 만들기 완벽 가이드
로빈아빠
https://cmd.kr/server/228 URL이 복사되었습니다.

본문

원격 로그 서버 만들기 완벽 가이드

[출처] http://www.linuxlab.co.kr/docs/01-01-1.htm

이에 대한 내용은 여기 강좌란에 제가 적은 글도 있습니다.
또 로그모니터링을 위한 swatch라는 툴의 사용법은 보안뉴스 게시판에 있으니 참고하세요.

원격 로그 서버 만들기 완벽 가이드
(Complete Reference Guide to Creating a Remote Log Server)

번역 : 이국현 (errai at hitel.net)

원문링크:
http://www.linuxsecurity.com/feature_stories/remote_logserver- 1.html

이 문서는 Eric Hines에 의해 쓰 여진 것으로, 원격 로그서버를 만들기 위한 자세한 설명과 설정방법등 을 다룰 것이다.

소개(INTRODUCTOIN)
우선 본 문서에서 언급하고 있는 유틸리티 들의 README 화일들에 대해서 열심히 공부해 볼 것을 권한다. 그리 고 문서를 읽다 보면 나오는 단어 중 SERVER는 원격 머신 (CLIENTS)들로부터 log를 받도록 설정되어진 컴퓨터이고, CLIENT는 원격 로그 서 버(REMOTE LOG SERVER)에게 log를 보내도록 설정 되어진 컴퓨터임을 나 타낸다.

A. 원격 로그 서버란 무엇인가? (WHAT IS A REMOTE LOG SERVER)
원격 로그서버는 다른 시스템들의 log들 을 저장할 하드 드라이브 공간을 제공하도록 미리 설정되어진 시스템일 뿐 그 이상도 이하도 아니다.
이 시스템은 완벽한 보안으 로 차단되어 있어야만 한다. 모든 RPC 데몬들이나 다른 기타 서비스들도 암호화되지 않고서는 절대 접근이 허락되지 않는다. 데이타들은 오직 UDP/Port 514 번을 통해서만 전송이 허락된다.
로그서버에 대한 자세한 설정 및 설치등에 대해서 하나씩 하나씩 접근해 보기로 하 자.
([역자주] : UDP port 514번은 syslog가 사용하고 있다)

B. SYSLOGD
syslogd의 재 컴파일(Recompiling syslogd)

여러분 컴퓨터에서 원격으로 로그를 남기 는 능력을 작동시키기 위해서 첫번째로 할 일은 syslogd의 재 컴파일이 다. 이것은 보안상의 이유로써 syslog.conf 화일이 아닌 다른 화 일을 읽도록 하기 위함이다. 자세한 내용은 나중에 다루겠 다.

NOTES : 이 아이디어는 Lance Spitzner가 쓴 "To Build a Honeypot"이란 whitepaper를 통해 얻게 되었다. 보안 공동체를 위해 공헌을 한 Lance에게 감사의 말 을 전한다. 이 뛰어난 아이디어는 침입자가 이 시스템에는 원격 로그를 남기 는 기능이 없다고착각하게 만드는 것이다. 이전에 사용한 /etc/syslog.conf 화일을 남겨 놓음으로써 예기치 못한 크래커를 속이는데 도움을 줄 것이다.

STEP 1 : 새로운 버젼으로 컴파일하기 (COMPILING OUR NEW VERSION)
우선 여러분의 운영체제에는 기본적으 로 syslogd가 설치되어 있을 것이고 소스코드는 함께 들어있 지 않을 것이다. 여러분은 우선 RedHat 이나 Joey's FTP site(syslogd의 개발자)를 통해 소스 코드를 다운로드 받아야 한다. 여러 분의 배포판에서 소스 코드를 제공하지 않는다면 오픈 소스 정 책에 위반되는 것이다. 그러므로 아래의 링크에서 소스를 다운 받길 원하지 않는다면 여러분의 OS vender에서 소스코드를 얻 기 바란다. 

SITE 1:
ftp://ftp.infodrom.north.de/pub/people/joey/sysklogd/
혹은
SITE 2:
ftp://ftp.sourceforge.net/pub/mirrors/redhat/redhat/redhat- 6.2/SRPMS/SRPMS/sysklogd-1.3.31- 16.src.rpm

만약 RedHat계열의 사용자일 때 rpm- iv-vsysklogd-1.3.31-16.src.rpm 라고 실행 한다면 /usr/src/redhat/ SOURCES/sysklogd- 1.3-31 에 인스톨 될 것이다.

STEP 2 : 기본 설정 화일 위치 변경하기 (CHANGING THE DEFAULT CONFIG FILE LOCATION)
여기는 재미있는 부분이다. 이것은 침 입자가 여러분의 log화일이 local에 저장된다고 생각하게끔 속인 다. 우리는 syslogd가 다른 설정 화일을 읽도록 재컴파일을 할 것이다. 기본으로 설정되어있는 옛 화일은 침입자가 원격 로그가 기록되는지 cat 등을 실행해서 /etc/syslog.conf를 들여다 보았을 때 속일 수 있을 것이다. 재컴파일해서 새로운 바이너리를 얻더라 도 옛 설정화일은 남겨놓도록 하자.

기본 설정인 /etc/syslog.conf 를 고 친다.
[ehines@myhost sysklogd-1.3-31]$ cd /usr/src/redhat \/SOURCES/sysklogd-1.3-31
[ehines@myhost sysklogd-1.3-31]$ vi syslogd.c

syslog.conf 부분을 찾는다.
#define _PATH_LOGCONF  "/etc/syslog.conf"

이제 여러분이 원하는데로 설정 값을 고치면 된다. 여러분은 /etc/.sys/CORE.conf 같이 독창적으로 설 정하기 바란다.
새로운 syslogd 바이너리가 생겼다면 이전 것 위에 덮어쓴다.(대부분은 /sbin/syslogd)
이 부분을 실행하기 전에 옛날 버젼 은 백업 해두자. 관리자라면 이미 알고 있겠지만, 그렇죠?  :)

NOTES : 간단하게 예전 syslogd를 가 지고 (-f 설정화일)형식으로 실행하지 않은 이유는, 침입자가 ps 등으로 프로세스 리스트를 볼 경우 뒤에 붙 은 옵션들이 다 보여서 설정화일을 무엇으로 바꾸었는지 다 알게 될 것이 다. 그러므로 이와 같은 형식으로 하는게 좋다. 필자 는 /etc/syslog.conf 파일을 교묘하게 놔두고, 재컴파일을 통해 설정화일을 바꾸는 것을 추천한 다. 그리고 위치만 변경하고 이름은 그대로 두는 것은 위험하 다. 간단하게 find / -name "syslog.conf" 로 찾아낼 수 있 다.

STEP 3 : 진짜 syslog 설정화일 고치기 (MODIFY THE (REAL) SYSLOG CONFIG FILE)
예를 들어, 다음의 syslog.conf 는 모 든 메세지를 원격 호스트로 포워딩 하는 것이다.

# 간단하게 모든 메세지를 원격 호스 트로 포워딩.
*.*            @hostna me

# 모든 커널 메세지를 원격 호스트로 포워딩.
kern.*        @hostname

# 로컬에도 기록하면서 원격으로도 기 록을 남김 (실패할 경우 대비)
kern.crit            & nbsp;      @finlandia
kern.crit            & nbsp;      /dev/console

기타등등 여러분이 원하는데로 모든 로그화일을 설정한다.

C. THE CLIENT ( REMOTE LOG SERVER )
클라이언트 서버(혹은 모든 원격 로그들 을 수용하는 컴퓨터)는 원격 로그를 남기기 위해서 syslogd에 -r 스위치 를 줘서 실행시켜야 한다.  그리고 /etc/services화일에 syslog 514/udp 가 적혀져 있어야 한다.

D. 원격 로그 서버 차단하기 (LOCKING DOWN THE REMOTE LOG SERVER)
모든 로그들을 받아들이는 컴퓨터는 완벽 하게 외부와 차단되어 있어야 한다.

1. 모든 서비스 종료시키기  (Turn off(ALL SERVICES))
이 컴퓨터는 오직 로그 서버일 뿐이므 로 다른 서비스들을 실행시킬 필요가 없다. 다음과 같이 실 행한다.
[root@myhost /etc]# cd /etc
[root@myhost /etc]# vi inetd.conf

1) 모든 INETD 서비스 종료시키기  (TURN OFF ALL INETD SERVICES)
여러분은 이 화일에서 '#' 를 추가시 킴으로써 주석으로 처리를 할 것이다. 아래의 모든 서비스들을 주 석처리하기 바란다.
a. echo
b. discard
c. daytime
d. chargen
e. time
f. ftp
g. telnet
h. shell
i. login
j. exec
k. comsat
l. talk
m. ntalk
n. dtalk
o. pop- 2
p. pop-3
q. imap
r. uucp
s. tftp
t. bootps
u. finger
v. cfinger
w. systat
x. netstat
y. auth
z. linuxconf
zz. swat

2) 모든 RPC 서비스 종료시키기 (DISABLE ALL RPC SERVICES)
[root@myhost /etc]# cd /etc/rc.d

디렉토리를 살펴보면 대문자 "S"로 시작하는 화일들이 보일 것이다. 이것은 시스템이 부팅 할 때 시작되는 서비스들이다. 여러분은 mv 명령어를 이용해서 소문자 s로 바꿔주면 된다. 예를 들어 mv S11portmap s11portmap 이라고 해주면 부트 타임때 portmapper 를 시작하지 않게 된다.

아마도 nfslock, apmd, netfs, identd, autofs, portmap, atd, pcmcia 와 isdn, sendmail, gpm, httpd, vmware, xfs,linuxconf, local 같은 서비스들을 꺼주면 될 것이 다. rc0.d 에서부터 rc6.d 까지 다 종료시켜 주어야 한다.

2. 계정 삭제(DISABLE ACCOUNTS)
[root@myhost /etc]# vi /etc/passwd

여러분의 패스워드 화일에서 사용하 지 않는 계정을 삭제해야 한다. 필자는 /bin/noshell (http://www. cerias.purdue.edu/coast/archive/data/categ50.html)라는 툴을 다운받을 것을 제안한다.
이것은 계정을 추가 하거나 삭제할 때 관리자에게 유용한 프로그램이다.

3. SSH의 설치 (INSTALL SSH)
telnet을 사용하면 sniffing 당할 위 험이 있다. 하지만 우리에겐 GNU 오픈소스 공동체의 산물인 OpenSSH이 있다. 자 이제 OpenSSH를 설치해보자.

1) OPENSSH 다운로드 받기  (DOWNLOADING OPENSSH)
여러분의 웹브라우져로 www.openssh.com에 접속한다. 이문서가 쓰여질 때 최신버젼은 version 2.1.1 로 SSH1과 SSH2 프로토콜을 둘 다 지원한다. 소스를 다운받 고 다음과 같이 한다.
[root@myhost ]# gzip -d openssh- 2.1.1p2.tar.gz
[root@myhost ]# tar -xvf openssh-2.1.1p2.tar

모든 사항을 똑같이 할 수는 없을 것 이다. 계속 진행하기 전에 INSTALL 화일을 꼭 읽어보기 바란 다. 필자는 여러분 각각 시스템이 요구하는 사항까지 이야기 해 줄 수 없다. 이것은 단지 필자의 인스톨을 여러분이 지켜보는 것 일 뿐이다.

우선 Zlib와 OpenSSL을 인스톨을 해 야 한다. 

Zlib:
http://www.freesoftware.com/pub/infozip/zlib/

OpenSSL 0.9.5a or greater:
http://www.openssl.org/

RPM버젼의 OpenSSL은
http://violet.ibs.com.au/openssh/files/support

GNUmake가 설치되어 있다면 다음과 같 이 하면 설치가 될 것이다.
[root@myhost ]# ./configure && make && make install

만약 PAM을 사용한다 면 /etc/pam.d/sshd 과 같은 PAM control file도 필요로 할 것이다. 일반적으 로는 conrtib/sshd.pam.generic 에 포함하고 있다. 사용하기 전에 여러분의 시스템에 맞게 편집해야 할 것이다. 만약 레드 햇 리눅스 6.2를 사용한다면 contrib/redhat/sshd.pam 이 더 유용 할 것이다.
필자는 configure 할 때 --without-pam으로 PAM 지 원을 끄는 것을 좋아한다. 만약 발견된다면 PAM은 자동적으로 스위치가 켜질 것이다.
--without-pam 옵션은 대신에 RSA 인증 을 사용할 경우에 사용된다.
[root@myhost ]# tar -xvf zlib.tar
[root@myhost ]# cd zlib-1.1.3
[root@myhost zlib- 1.1.3]# ./configure && make && make install

설치도중에러가 발생한다면 미안하지 만 README 화일을 읽기 바란다. 필자는 에러가 발생하면 README 화 일들에서 error에 관련된 사항을 찾아보곤 한다.

OpenSSL을 인스톨 하기 위해서는 다음 과 같은 것이 필요하다.
    *  Perl 5
    *  an ANSI C compiler
    *  a supported Unix operating system

[root@myhost ]# tar -xvf openssl- 0.9.5a.tar
[root@myhost ]# ./config && make && make test && make install

이제 OpenSSH를 설치한다.
[root@myhost ]# cd openssh- 2.1.1p2
[root@myhost ]# ./configure --without-PAM && make && make install

성공적으로 OpenSSH를 컴파일 했다면 다음과 같은 메세지를 보게 된다.
Key generation complete.
Your identification has been saved in /usr/local/etc/ssh _host_key.
Your public key has been saved in /usr/local/etc/ssh _host_key.pub.
The key fingerprint is:
d5:74:83:d0:3f:c4:b4:d6:c5:39:1d:94:ee:9b:a8:61 root @soc1.priv.nuasis.com
Generating DSA parameter and key.
Your identification has been saved in /usr/local/etc/ssh _host_dsa_key.
Your public key has been saved in /usr/local/etc/ssh _host_dsa_key.pub.
The key fingerprint is:
ed:58:65:b9:8b:fe:05:81:c2:8c:06:c9:cb:ac:bb:e6 root @soc1.priv.nuasis.com

2) OPENSSH의 설정 (CONFIGURING OPENSSH)
기본적으로 설정되어진 것을 사용하더 라도 나중에 변경할 때를 대비해서라도 ssh config화일을 봐두 자. 설정화일 은 /usr/local/etc/ssh_config, /usr/local/etc/sshd _config 가 있다.
설치가 끝난 후에는 host key와 DSA key가 생성될 것이다.

여러분은 SSH 배포판의 문서를 참조해 서 설정을 하기 바란다.

4. 방화벽 (THE FIREWALL)
패킷 필터링은 여러분의 시스템에 어 떤 취약점이 발견되지 전까지는 필요하지 않을 것이다. syslog port (514/udp)를 필터링 하는 이유는 syslog server가 쓰레기 값을 전송했 을 때 멈출 수 없기 때문이다. 그러나 더 중요한 것은 udp값 이 쉽게 spoof될 수 있게 때문이다.
이것은 적어도 여 러분이 여러 대의 컴퓨터에서 모든 로그가 하나의 인터페이스로 들어올 때 여러분이 외부로부터 들어오는 모든 것을 안전하게 필 터링 하게 해준다.

아래는 리눅스 머신에서 ipchains를 이용한 쉘 스크립트이다.
#!/bin/sh PATH=/usr/sbin:/sbin:/bin:/usr/sbin LOCAL_INTERFACE="192.168.1.1/32" # put your real IP address LOCAL_NETWORK="192.168.1.0/24" # put your local net IP address/mask here SSH_PERMITTED="192.168.1.2/32 192.168.2.3/32" # who allowed to ssh SYSLOG_PERMITTED="192.168.1.5/32 192.168.5.2/32" # who allowed to log syslog messages # deny everything ipchains -P input DENY ipchains -P output DENY ipchains -P forward DENY ipchains -F #permit ssh for ipaddr in $SSH_PERMITTED; do ipchains -A input -p tcp -s $ipaddr -d 0/0 22 -i $LOCAL_INTERFACE -j ACCEPT done # permit outgoing tcp ipchains -A output -p tcp -i $LOCAL_INTERFACE -j ACCEPT ipchains -A input -p tcp ! -y -i $LOCAL_INTERFACE -j ACCEPT # permit syslog for ipaddr in $SYSLOG_PERMITTED; do ipchains -A input -p udp -s $ipaddr -d $LOCAL_INTERFACE 514 -i \ $LOCAL_INTERFACE -j ACCEPT done # if you would like to log all the other connection #attempts, uncommend these... #ipchains -A input -p tcp -i $LOCAL_INTERFACE -l -j DENY #ipchains -A input -p udp -i $LOCAL_INTERFACE -l -j DENY #ipchains -A input -p icmp -i $LOCAL_INTERFACE -l -j DENY 만약 IP filter 패키지를 이용한다면 대체로 다음과 같을 것이다. # close everything on local interface # block in all on le0 from any to any # pass secureshell pass in on le0 proto tcp from 192.168.1.2/32 to 192.168.1.1/32 port = 22 pass out on le0 proto tcp from 192.168.1.2/32 to 192.168.1.1/32 port = 22 # or you can replace these two rules with #pass in on le0 proto tcp from 192.168.1.2/32 to #192.168.1.1/32 port = 22 keep state #pass SYSLOG pass in on le0 proto udp from 192.168.1.2/32 to 192.168.1.1/32 port = 514

5. LOG REPORTING
아무리 좋은 원격 로그 서버를 만들어 놔도 여러분이 직접 모니터링 할 수 없으면 무용지물이다. 필 자는 다음과 같은 유틸리티를 추천한다.
  *  Logcheck - www.psionic.com
  *  Swatch - www.swatch.org

아래는 간단한 쉘 스크립트(Mr. Bill Pennington)이다. 이것은 매 일/시간/분 로그화일들을 지정된 이름과 장소 에 보관한다.
#!/bin/bash #Simple script to rotate the log files on a daily basis #Bill Pennington 1/19/2000 #Set the date variable date=`date +%m-%d-%Y` #Rename the messages file mv /var/log/messages /var/log/messages.$date #HUP the syslog daemon so it writes to a new file killall -HUP syslogd #Compress the file /bin/gzip /var/log/messages.$date #Rename the secure file mv /var/log/secure /var/log/secure.$date #HUP the syslog daemon so it writes to a new file killall -HUP syslogd #Compress the file /bin/gzip /var/log/secure.$date #Rename mail file mv /var/log/maillog /var/log/maillog.$date #HUP the syslog daemon so it writes to a new file killall -HUP syslogd #Compress the file /bin/gzip /var/log/maillog.$date #Then scp them somewhere

6. 시간 (TIME)
서버는 언제나 정확한 시간과 날짜를 가지고 있어야 한다.  xntpd를 설치한 후에 "ntpdate timeservername"이란 명령을 하루에 적어도 한번정도 실행시켜 줘야 한 다.
필자는 하루에 두 번 씩 이 작업을 시킨다. 물론 여러분이 가진 모든 서버에 해야 한다.

7. 다른 SYSLOG 장치 (OTHER SYSLOG DEVICES)
여기에 syslog가 기록하는 것을 설정 할 수 있는 CISCO와 같은 다른 장치들이 있다. 여러분의 네트워 크와 서버에서 정확한 값을 얻기 위해서는 syslog에서 기록하 는 것을 위해 여러분의 모든 장치를 설정해야 한다.

Cisco
모든 Cisco 장치들은 syslog를 지원한다. 아래에 몇 가 지 예제가 있지만 직접 여러분의 Cisco 문서를 확인해보기 바란 다.
Routers In config mode... logging <server ip address or name> logging facility <facility> defaults to LOCAL7 Pix Firewall In config mode... logging host <ip address of syslog server> logging facility <facility> defaults to LOCAL4 logging trap <level> from emergencies to debug , be carefull with debug you will get a ton of traffic! Switches In config mode... set logging server enable set logging server <ip address of log server> set logging session enable set logging level all 1 default

Windows NT
여러분은 NT server로 syslog server로 특정작업을 포워 딩 시킬 수 있다. 이와 관련된 여러 개의 shareware /freeware  패키지가 있다.
http://www.bhs.com 에서 syslog를 검색해보라.

E. RESOURCES

    * Swatch - http://www.stanford.edu/~atkins/swatch/
    * OpenSSH - http://www.openssh.com
    * LogCheck - http://www.psionic.com/abacus/logcheck/
    * xntp and list of public NTP servers - http://www.eecis.udel.edu/~ntp/
    * Cisco - http://www.cisco.com
    * Windows NT software - http://www.bhs.com
    * Robert Graham's sniffing FAQ (hints to build `receive- only device'
      http://www.robertgraham.com/pub s/sniffing-faq.html
    * IP Filter - TCP/IP filtering package: http://coombs.anu.edu.au/~avalon/


F. 역자 주

개인적으로 판단해서 꼭 필요하지 않다고 하는 내용은 삭제 또는 변경하였습니다. 필자(Eric Hines)가 언급 한 번역되지 않은 내용은 원문을 참조하시기 바랍니다. :)

댓글목록

등록된 댓글이 없습니다.

1,139 (14/23P)

Search

Copyright © Cmd 명령어 18.225.195.4