웹사이트 검색

중앙 집중식 로그 관리를 위해 rsyslog를 설정하는 방법


이 페이지에서

  1. 1. 서문
  2. 2. Rsyslog 설치
  3. 3. Rsyslog 구성
  4. 4. 테스트 단계

이 튜토리얼에서는 rsyslog를 중앙 집중식 로그 관리 서버로 설정하는 방법을 설명합니다. 중앙 집중식 로그 관리란 여러 물리적 또는 가상화된 서버의 모든 종류의 로그를 하나의 로그 서버에 수집하여 서버 서비스의 상태 및 보안을 모니터링하는 것을 의미합니다. 고성능, 뛰어난 보안 및 모듈식 디자인을 제공하기 때문에 이 가이드에서는 rsyslog를 사용합니다. 또한 더 나은 통합을 위해 MySQL, Oracle, Hadoop 등과 같은 수많은 데이터베이스 솔루션에 로그를 저장할 수 있습니다.

1. 서문

이 튜토리얼에서는 32비트 버전의 Oracle Linux 6.4를 사용하고 있습니다. 구성이 Oracle Linux에서 이루어지더라도 동일한 단계가 CentOS 및 Red Hat OS Linux에서 작동합니다. 이 자습서에서는 2개의 서버를 사용합니다. 첫 번째는 rsyslog 서버 역할을 하고 다른 하나는 rsyslog 클라이언트의 워크스테이션/클라이언트 서버 역할을 합니다. 이 튜토리얼이 끝나면 사용자가 클라이언트 서버에 로그인하면 rsyslog 서버가 사용자가 수행한 활동을 자동으로 기록하는 것을 볼 수 있습니다.

2. Rsyslog 설치

설치 단계에서는 rsyslog 패키지와 종속 항목만 설치하면 됩니다. 먼저 운영 체제 버전을 확인합니다.

[ ~]# cat /etc/issue
Oracle Linux Server release 6.4
Kernel \r on an \m
[ ~]# arch
i686
[ ~]# uname -a
Linux RSYS01 2.6.32-358.el6.i686 #1 SMP Fri Feb 22 13:37:29 PST 2013 i686 i686 i386 GNU/Linux


다음으로 yum 유틸리티를 통해 rsyslog 패키지를 설치하도록 새 리포지토리를 구성합니다.


[ yum.repos.d]# vi rsyslog.repo
[rsyslog-v7-devel]
name=Adiscon Rsyslog v7-devel for CentOS-$releasever-$basearch
baseurl=http://rpms.adiscon.com/v7-devel/epel-$releasever/$basearch
enabled=0
gpgcheck=0
protect=1
[rsyslog-v7-stable]
name=Adiscon Rsyslog v7-stable for CentOS-$releasever-$basearch
baseurl=http://rpms.adiscon.com/v7-stable/epel-$releasever/$basearch
enabled=1
gpgcheck=0
protect=1

[ yum.repos.d]# yum list rsyslog
Loaded plugins: refresh-packagekit, security
rsyslog-v7-stable | 2.5 kB 00:00
rsyslog-v7-stable/primary_db | 188 kB 00:01
Available Packages
rsyslog.i686 7.6.7-1.el6 rsyslog-v7-stable


완료, 이제 새 버전의 rsyslog 설치를 시작할 수 있습니다. 단계는 다음과 같습니다.


[ yum.repos.d]# yum install rsyslog -y
Loaded plugins: refresh-packagekit, security
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package rsyslog.i686 0:7.6.7-1.el6 will be installed
--> Processing Dependency: liblogging-stdlog.so.0 for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libjson-c.so.2 for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libgthttp.so.0 for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libgtbase.so.0 for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libgt for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libestr.so.0 for package: rsyslog-7.6.7-1.el6.i686
--> Running transaction check
---> Package json-c.i686 0:0.11-3.el6 will be installed
---> Package libestr.i686 0:0.1.9-1.el6 will be installed
---> Package libgt.i686 0:0.3.11-1.el6 will be installed
---> Package liblogging.i686 0:1.0.4-1.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================================================
Package Arch Version Repository Size
===============================================================================================================
Installing:
rsyslog i686 7.6.7-1.el6 rsyslog-v7-stable 920 k
Installing for dependencies:
json-c i686 0.11-3.el6 rsyslog-v7-stable 46 k
libestr i686 0.1.9-1.el6 rsyslog-v7-stable 9.0 k
libgt i686 0.3.11-1.el6 rsyslog-v7-stable 55 k
liblogging i686 1.0.4-1.el6 rsyslog-v7-stable 23 k
Transaction Summary
===============================================================================================================
Install 5 Package(s)
Total download size: 1.0 M
Installed size: 3.2 M
Downloading Packages:
(1/5): json-c-0.11-3.el6.i686.rpm | 46 kB 00:00
(2/5): libestr-0.1.9-1.el6.i686.rpm | 9.0 kB 00:00
(3/5): libgt-0.3.11-1.el6.i686.rpm | 55 kB 00:00
(4/5): liblogging-1.0.4-1.el6.i686.rpm | 23 kB 00:00
(5/5): rsyslog-7.6.7-1.el6.i686.rpm | 920 kB 00:03
---------------------------------------------------------------------------------------------------------------
Total 114 kB/s | 1.0 MB 00:09
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : libgt-0.3.11-1.el6.i686 1/5
Installing : liblogging-1.0.4-1.el6.i686 2/5
Installing : libestr-0.1.9-1.el6.i686 3/5
Installing : json-c-0.11-3.el6.i686 4/5
Installing : rsyslog-7.6.7-1.el6.i686 5/5
Verifying : json-c-0.11-3.el6.i686 1/5
Verifying : libestr-0.1.9-1.el6.i686 2/5
Verifying : liblogging-1.0.4-1.el6.i686 3/5
Verifying : libgt-0.3.11-1.el6.i686 4/5
Verifying : rsyslog-7.6.7-1.el6.i686 5/5

Installed:
rsyslog.i686 0:7.6.7-1.el6

Dependency Installed:
json-c.i686 0:0.11-3.el6 libestr.i686 0:0.1.9-1.el6 libgt.i686 0:0.3.11-1.el6 liblogging.i686 0:1.0.4-1.el6

Complete!
[ yum.repos.d]# rsyslogd -v
rsyslogd 7.6.7, compiled with:
FEATURE_REGEXP: Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
32bit Atomic operations supported: Yes
64bit Atomic operations supported: Yes
Runtime Instrumentation (slow code): No
uuid support: Yes
Number of Bits in RainerScript integers: 64

See http://www.rsyslog.com for more information.
[ ~]# rpm -qa|grep rsyslog
rsyslog-7.6.7-1.el6.i686


다음으로 설치 단계를 진행하겠습니다. 이 자습서에서는 보안 계층을 건너뛰어 간단하게 만듭니다. 도중에 보안 문제와 관련된 문제가 발생하지 않도록 SELINUX를 비활성화합니다. 라이브 설정에서 SELinux 및 방화벽을 비활성화하면 안 됩니다. 다음은 단계입니다.

먼저 SELINUX 정책에 대한 현재 상태를 확인하십시오.

[ ~]# getenforce
Enforcing

영구적으로 비활성화하려면 아래 단계를 따르십시오.

[ ~]# vi selinux 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted


그런 다음 서버와 클라이언트 연결 사이의 차단을 피하기 위해 방화벽을 비활성화했는지 확인하십시오.

[ ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[ ~]# /etc/init.d/iptables stop
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
[ ~]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination

Chain FORWARD (policy ACCEPT)
num target prot opt source destination

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination


완료, 이제 설치 단계가 성공했습니다. 구성 단계로 넘어갑시다.

3. Rsyslog 구성

모든 패키지 종속성이 이미 설치되었으므로 rsyslog 구성에 집중할 수 있습니다. 구성 파일 내부로 이동하여 아래와 같이 변경합니다.

[ ~]# vi /etc/rsyslog.conf 

module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

$template Auditlog, "/var/log/rsyslog_client/%HOSTNAME%/%PROGRAMNAME%.log"
$template TmplMsg, "/var/log/rsyslog_client/%HOSTNAME%/%PROGRAMNAME%.log"
authpriv.* ?Auditlog

다음은 우리가 만든 구성 변경에 대한 설명입니다.

  • module(load="imudp") # 한 번만 수행해야 함 ==> UDP 프로토콜을 통해 서버와 클라이언트 간에 rsyslog 메시지를 수신하는 기능을 제공합니다.\n
  • input(type="imudp" port="514") ==> rsyslog 서비스에 포트 514를 사용합니다.\n
  • $template Auditlog, "/var/log/rsyslog_client/%HOSTNAME%/%PROGRAMNAME%.log" ==> rsyslog 서버에 연결된 모든 클라이언트에 대해 시스템이 자동으로 클라이언트 호스트 이름 폴더 및 관련 서비스 파일을 생성합니다. 이름
  • $template TmplMsg, "/var/log/rsyslog_client/%HOSTNAME%/%PROGRAMNAME%.log" ==> rsyslog 서버에 연결된 모든 클라이언트에 대해 시스템이 자동으로 클라이언트 호스트 이름 폴더 및 관련 서비스 파일을 생성합니다. 이름


구성이 완료되면 rsyslog 서비스를 시작하겠습니다.

[ yum.repos.d]# /etc/init.d/rsyslog restart
Shutting down system logger: [FAILED]
Starting system logger: [ OK ]

netstat를 사용하여 rsyslog 서비스가 실행 중인지 확인합니다.

[ yum.repos.d]# netstat -uanp|grep rsyslog
udp 0 0 0.0.0.0:514 0.0.0.0:* 2430/rsyslogd
udp 0 0 :::514 :::* 2430/rsyslogd

위에서 우리가 만든 포트 할당으로 rsyslog 서비스가 실행되고 있음을 볼 수 있습니다. 기본적으로 rsyslog는 rsyslog 서버를 클라이언트로 취급하므로 자체 서버 액세스도 감사합니다. 작동 여부를 확인하기 위해 /var/log 폴더를 살펴볼 수 있습니다. 이름이 RSYS01(서버 호스트 이름)인 폴더가 존재하는지 확인하겠습니다.

[ log]# ls -l|grep rsyslog
drwx------ 3 root root 4096 Oct 24 18:21 rsyslog_client
[ RSYS01]# ls
rsyslogd.log

좋아, 모든 것이 매력처럼 작동하는 것 같아! 이제 테스트 단계를 진행하여 모든 구성이 예상대로 이루어졌다는 결론을 내립니다.

4. 테스트 단계

rsyslog 서비스를 실행하는 서버도 클라이언트로 작동하므로 로컬 로그인 모니터링이 모니터링되는지 서버 자체에서 확인할 수 있습니다. 이것이 사실인지 확인하려면 SSH 서비스를 사용하여 다른 세션으로 rsyslog 서버에 로그인하십시오. 이 단계에서는 서버 자체가 이미 암호 없는 구성을 구성했다고 가정합니다. 다음은 단계입니다.

[
Last login: Sat Oct 22 15:45:48 2016 from 172.20.181.70
[ ~]# who
root pts/0 2016-10-22 00:21 (172.20.181.11)
root pts/1 2016-10-24 18:22 (127.0.0.1)
[ ~]# exit
logout
Connection to RSYS01 closed.

그렇게 간단합니다. rsyslog 서버 자체에 로그인한 다음 새 세션이 생성되면 rsyslog 서비스가 세션을 감사했는지 확인하기 위해 다시 로그인합니다. 이제 세션이 감사되었는지 여부를 확인하겠습니다. 다음은 단계입니다.

[ RSYS01]# tail -f sshd.log
Oct 24 18:22:46 RSYS01 sshd[2536]: Accepted password for root from 192.168.43.101 port 52862 ssh2
Oct 24 18:22:46 RSYS01 sshd[2536]: pam_unix(sshd:session): session opened for user root by (uid=0)
Oct 24 18:22:50 RSYS01 sshd[2536]: Received disconnect from 192.168.43.101: 11: disconnected by user
Oct 24 18:22:50 RSYS01 sshd[2536]: pam_unix(sshd:session): session closed for user root
^C


매우 훌륭합니다. rsyslog 서비스는 서버에서 세션이 시작될 때 자동으로 sshd.log 파일을 생성했습니다. 로그 파일 내부에는 세션에서 생성된 시간, 포트 및 사용자가 명시된 세부 목록이 있음을 볼 수 있습니다.

이제 모든 것이 예상대로 작동합니다. rsyslog 서버에서 감사할 rsyslog 클라이언트용 워크스테이션을 설정할 수 있습니다. rsyslog 클라이언트의 경우 rsyslog 패키지를 설치하고 rsyslog 서버에 연결하도록 구성 파일을 간단히 변경하기만 하면 됩니다. 다음은 단계입니다.

[ yum.repos.d]# yum list rsyslog
Loaded plugins: refresh-packagekit, security
rsyslog-v7-stable | 2.5 kB 00:00
rsyslog-v7-stable/primary_db | 188 kB 00:01
Available Packages
rsyslog.i686 7.6.7-1.el6 rsyslog-v7-stable

[ yum.repos.d]# yum install rsyslog -y
Loaded plugins: refresh-packagekit, security
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package rsyslog.i686 0:7.6.7-1.el6 will be installed
--> Processing Dependency: liblogging-stdlog.so.0 for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libjson-c.so.2 for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libgthttp.so.0 for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libgtbase.so.0 for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libgt for package: rsyslog-7.6.7-1.el6.i686
--> Processing Dependency: libestr.so.0 for package: rsyslog-7.6.7-1.el6.i686
--> Running transaction check
---> Package json-c.i686 0:0.11-3.el6 will be installed
---> Package libestr.i686 0:0.1.9-1.el6 will be installed
---> Package libgt.i686 0:0.3.11-1.el6 will be installed
---> Package liblogging.i686 0:1.0.4-1.el6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

===============================================================================================================
Package Arch Version Repository Size
===============================================================================================================
Installing:
rsyslog i686 7.6.7-1.el6 rsyslog-v7-stable 920 k
Installing for dependencies:
json-c i686 0.11-3.el6 rsyslog-v7-stable 46 k
libestr i686 0.1.9-1.el6 rsyslog-v7-stable 9.0 k
libgt i686 0.3.11-1.el6 rsyslog-v7-stable 55 k
liblogging i686 1.0.4-1.el6 rsyslog-v7-stable 23 k

Transaction Summary
===============================================================================================================
Install 5 Package(s)

Total download size: 1.0 M
Installed size: 3.2 M
Downloading Packages:
(1/5): json-c-0.11-3.el6.i686.rpm | 46 kB 00:00
(2/5): libestr-0.1.9-1.el6.i686.rpm | 9.0 kB 00:00
(3/5): libgt-0.3.11-1.el6.i686.rpm | 55 kB 00:00
(4/5): liblogging-1.0.4-1.el6.i686.rpm | 23 kB 00:00
(5/5): rsyslog-7.6.7-1.el6.i686.rpm | 920 kB 00:03
---------------------------------------------------------------------------------------------------------------
Total 114 kB/s | 1.0 MB 00:09
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : libgt-0.3.11-1.el6.i686 1/5
Installing : liblogging-1.0.4-1.el6.i686 2/5
Installing : libestr-0.1.9-1.el6.i686 3/5
Installing : json-c-0.11-3.el6.i686 4/5
Installing : rsyslog-7.6.7-1.el6.i686 5/5
Verifying : json-c-0.11-3.el6.i686 1/5
Verifying : libestr-0.1.9-1.el6.i686 2/5
Verifying : liblogging-1.0.4-1.el6.i686 3/5
Verifying : libgt-0.3.11-1.el6.i686 4/5
Verifying : rsyslog-7.6.7-1.el6.i686 5/5

Installed:
rsyslog.i686 0:7.6.7-1.el6

Dependency Installed:
json-c.i686 0:0.11-3.el6 libestr.i686 0:0.1.9-1.el6 libgt.i686 0:0.3.11-1.el6 liblogging.i686 0:1.0.4-1.el6

Complete!


완료, 이제 클라이언트 워크스테이션에 rsyslog 패키지를 설치했습니다. 이제 rsyslog 구성 파일 내에서 수정할 수 있습니다. 클라이언트 구성의 경우 아래와 같이 구성을 수정하기만 하면 됩니다.

[ ~]# vi /etc/rsyslog.conf

*.* @192.168.43.101:514

구성 파일에 포트 514와 함께 IP 192.168.43.101을 포함했다는 점에 주목했습니다. 해당 IP는 rsyslog 서버의 IP입니다. 이제 모든 작업이 완료되었으므로 클라이언트 워크스테이션에서 rsyslog 서비스를 다시 시작하여 변경 사항을 로드합니다. 다음은 단계입니다.

[ ~]# /etc/init.d/rsyslog restart
Shutting down system logger: [FAILED]
Starting system logger: [ OK ]


이제 rsyslog 서버로 돌아가서 rsyslog 클라이언트 호스트 이름에 대한 폴더가 rsyslog 로그 디렉토리에 생성되었는지 확인하겠습니다. 다음은 단계입니다.

[ rsyslog_client]# ls
RSYS01 CLIENT01


훌륭합니다. rsyslog 클라이언트 호스트 이름이 있는 폴더가 자동으로 생성되었습니다. 이는 구성이 올바르고 rsyslog 클라이언트가 rsyslog 서버에 UDP 연결을 할 수 있음을 확인합니다.

다음 테스트 절차를 위해 다른 사용자로 rsyslog 클라이언트에 로그인하고 rsyslog 서버가 활동을 캡처하는지 여부를 확인합니다. 다음은 단계입니다.

::CLIENT01::
login as: shahril
's password:
Last login: Sun Oct 23 00:21:40 2016 from 172.20.181.11
[ ~]$ who
shahril pts/0 2016-10-24 17:01 (192.168.43.80)
[ ~]$ exit


이제 rsyslog 클라이언트에서 생성된 활동을 기록할 수 있는지 rsyslog 서버 내부의 로그 디렉토리를 확인하십시오.

[ CLIENT01]# tail -10 sshd.log
Oct 24 17:01:47 CLIENT01 sshd[2102]: Accepted password for shahril from 192.168.43.80 port 17002 ssh2
Oct 24 17:01:47 CLIENT01 sshd[2102]: pam_unix(sshd:session): session opened for user shahril by (uid=0)


좋습니다. 결과는 프로세스가 예상대로 작동함을 보여줍니다. 이제 최종 테스트를 위해 rsyslog 클라이언트에 다시 로그인하고 패키지를 설치하여 rsyslog 서비스가 세션 생성 이외의 다른 활동을 기록하는지 테스트해 보겠습니다. 다음은 단계입니다.

::CLIENT01::
login as: root
's password:
Last login: Sat Oct 22 10:21:40 2016 from 172.20.181.11
[ ~]# yum install firefox -y
Loaded plugins: refresh-packagekit, security
Repository 'OEL64' is missing name in configuration, using id
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package firefox.i686 0:10.0.12-1.0.1.el6_3 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
firefox i686 10.0.12-1.0.1.el6_3 OEL64 20 M

Transaction Summary
================================================================================
Install 1 Package(s)

Total download size: 20 M
Installed size: 23 M
Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : firefox-10.0.12-1.0.1.el6_3.i686 1/1
Verifying : firefox-10.0.12-1.0.1.el6_3.i686 1/1

Installed:
firefox.i686 0:10.0.12-1.0.1.el6_3

Complete!

위의 내용은 rsyslog 클라이언트 워크스테이션에 firefox 브라우저 설치 프로그램을 성공적으로 설치했음을 보여줍니다. 이제 rsyslog 서버로 돌아가서 rsyslog가 타사 패키지를 워크스테이션에 설치하는 프로세스를 기록할 수 있는지 확인합니다. 다음은 단계입니다.

[ CLIENT01]# tail -20 yum.log
Oct 25 17:13:17 CLIENT01 yum[2319]: Installed: firefox-10.0.12-1.0.1.el6_3.i686

훌륭합니다. rsyslog 서비스는 클라이언트 워크스테이션의 설치 활동 정보를 감사했습니다.