본문 바로가기

NCS/보안위협관리통제

Send Linux log to syslog server and Install syslog-ng

 실습환경

 Kiwi sys logserver 를 윈도우 설치한다. (192.168.8.200)

 CentOS 6.8을 설치한다.(192.168.8.100)

 


CentOS 서버에서 수행 한다.


# yum -y install syslog-ng syslog-ng-libdbi


# vi /etc/syslog-ng/syslog-ng.conf에서 아래와 같이 수정


[root@lux1 ~]# vi /etc/syslog-ng/syslog-ng.conf 

@version:3.2


# syslog-ng configuration file.

#

# This should behave pretty much like the original syslog on RedHat. But

# it could be configured a lot smarter.

#

# See syslog-ng(8) and syslog-ng.conf(5) for more information.

#


options {

        flush_lines (0);

        time_reopen (10);

        log_fifo_size (1000);

        long_hostnames (off);

        use_dns (no);

        use_fqdn (no);

        create_dirs (no);

        keep_hostname (yes);

};


source local {

        file ("/proc/kmsg" program_override("kernel: "));

        unix-stream ("/dev/log");

        internal();

        # udp(ip(0.0.0.0) port(514));

};

destination d_cons { file("/dev/console"); };

destination d_mesg { file("/var/log/messages"); };

destination d_auth { file("/var/log/secure"); };

destination d_mail { file("/var/log/maillog" flush_lines(10)); };

destination d_spol { file("/var/log/spooler"); };

destination d_boot { file("/var/log/boot.log"); };

destination d_cron { file("/var/log/cron"); };

destination d_kern { file("/var/log/kern"); };

destination d_mlal { usertty("*"); };

destination remote_server {

        udp ("192.168.8.200" port(514));

};



filter f_kernel     { facility(kern); };

filter f_default    { level(info..emerg) and

                        not (facility(mail)

                        or facility(authpriv)

                        or facility(cron)); };

filter f_auth       { facility(authpriv); };

filter f_mail       { facility(mail); };

filter f_emergency  { level(emerg); };

filter f_news       { facility(uucp) or

                        (facility(news)

                        and level(crit..emerg)); };

filter f_boot   { facility(local7); };

filter f_cron   { facility(cron); };


#log { source(local); filter(f_kernel); destination(d_cons); };

log { source(local); filter(f_kernel); destination(remote_server); };

log { source(local); filter(f_default); destination(remote_server); };

log { source(local); filter(f_auth); destination(remote_server); };

log { source(local); filter(f_mail); destination(remote_server); };

log { source(local); filter(f_emergency); destination(remote_server); };

log { source(local); filter(f_news); destination(remote_server); };

log { source(local); filter(f_boot); destination(remote_server); };

log { source(local); filter(f_cron); destination(remote_server); };


# vim:ft=syslog-ng:ai:si:ts=4:sw=4:et:


===================================================================


# yum -y install syslog-ng syslog-ng-libdbi


# vi /etc/syslog-ng/syslog-ng.conf에서 아래와 같이 수정

@version:3.2

# syslog-ng configuration file.
#
# This should behave pretty much like the original syslog on RedHat. But
# it could be configured a lot smarter.
#
# See syslog-ng(8) and syslog-ng.conf(5) for more information.
#
source local {
        file ("/proc/kmsg" program_override("kernel: "));
        unix-stream ("/dev/log");
        internal();
        # udp(ip(0.0.0.0) port(514));
};

destination remote_server {
        udp ("192.168.8.200" port(514));
};

filter f_alllogs {
        level (debug...emerg);
};

log { source(local); filter(f_alllogs); destination(remote_server); };

#vim:ft=syslog-ng:ai:si:ts=4:sw=4:et:

===========================================================================
여러 remote syslog server로 보내려면 destination에 각 서버 정보를 추가

destination remote_server {
udp("x.x.x.x" port (514));
udp("y.y.y.y" port (514));
udp("z.z.z.z" port (514));
};

==========================================================================
마지막으로 syslog-ng를 재시작

service syslog-ng restart
chkconfig syslog-ng on




<Syslog-ng>


1. syslog, rsyslog, syslog-ng


기존의 syslog 는 리눅스 배포판에 포함되어 있는 패키지 중 하나이다. CentOS7 버전에는 syslog 가 아닌 rsyslog가 자동으로 설치되어 있다. rsyslog 는 syslog에서 기능 등을 추가한 상위 버전이라 할 수 있다.

syslog-ng 는 기존의 것(syslog 와 rsyslog)들에서 기능부분과 보안부분을 보완해서 나온 버전이라 할 수 있다.

2. syslog-ng 의 기능


기존의 syslog에서 제공되는 기능은 syslog-ng도 유효하다. syslog-ng 의 filter 기능은 facility 나 priority 는 물론, 응용 프로그램 이름과 받은 로그의 내용에 따라 로그의 대상을 지정할 수 있다. facility, priority, host name, program 등을 합친 로그를 메일 프로그램으로 전달하여 관리자에게 자동으로 알림 할 수 있다. 다른 syslog 서버에서 로그를 받을 때 엑세스 제어를 실시할 수 있다. 또한 TCP Wrapper 와의 연계를 통해 엑세스 제어를 실시할 수 있다. Syslog-ng 의 유효 사용자 권한을 root 이외에 하는 것이 가능하다. 따라서 만약 공격자가 침입을 하더라도 root 권한이 직접 검색되지 않는다.

※공격자가 일반 사용자 권한으로 침입해서 내부 공격을 하면 root 권한을 획득하는 의미가 없어지지만 시스템 장악까지 시간을 조금이라도 벌 수 있는 점이 의미가 있다.


기존의 syslog 는 로그 전달을 위해 514포트/UDP방식을 고정으로 사용하고 있었다. syslog-ng 는 TCP 포트와 모든 포트를 사용하여 로그를 전달 할 수 있다. TCP로 로그를 전달하면 최대 연결 제한을 수행할 수 있기 때문에 Flood 계열의 DoS 공격에 대한 대처가 가능해진다.

3. syslog-ng 설치 전 주의 사항


syslog에서 syslog-ng 로 전환할 때 일시적이기는 하지만 syslog 의 로깅이 중지된다. 따라서 전환할 때 중단시간을 최대한 단축하고, 안전하게 전환할 것을 고려해야 한다.

syslog 와 syslog-ng를 병행 운영하는 경우, 둘 중 하나가 로그를 점유해 버릴 수 있으므로 syslog-ng 부팅하기 전에 syslog 는 서비스를 중지 시키는게 좋다.



4. syslog-ng 설치

# yum -y install syslog-ng syslog-ng-libdbi


5. syslog-ng 설정


환경설정 파일의 위치는 /usr/local/etc/syslog-ng.conf 이다.

syslog-ng의 설정은 다음 5개 항목이 기본이 된다.

(1) source - 로그 수신 정보 설정

(2) filter - 출력 로그 필터링

(3) destination - 로그 전송에 대한 설정

(4) log (source, destination, filter 매핑)

(5) options - 옵션

source, filter, destination, log 항목에서 필요에 따라 options를 지정한다.


(1) source (로그 수신 정보 설정)

source의 기술 형식은 다음과 같다.

source <identifier> {

source-driver(params);

source-driver(params);

....

};


<identifier> 는 syslog-ng 내에서 고유한 이름을 정의한다.

source-driver 는 다음의 내용을 기술한다.


이름 

설명 

 internal

syslog-ng 내부에서 생성되는 메시지를 출력

 unix-stream 


 SOCK_STREAM 모드로 지정된 UNIX 소켓을 열고 로그 메시지를 수신(Linux의 경우)


 unix-dgram

 SOCK_DGRAM 모드로 지정된 UNIX 소켓을 열고 로그 메시지를 수신(BSD 계열 UNIX)


 file

 지정된 파일을 열고 메시지를 읽음


 pipe, fifo

 지정된 파이프 이름을 오픈하여 로그 메시지를 읽음


 udp

 UDP 포트로 대기 로그 메시지를 수신


 tcp

 TCP 포트로 대기 로그 메시지를 수신


 sun-stream

 지정된 STREAM 장치를 열고 수신(Solaris)




source의 설정 예제

(1)Red Hat Linux의 경우


source src {

pipe ("/proc/kmsg" log_prefix("kernel:"));

unix-stream ("/dev/log");

internal();

};


Red Hat Linux 에서는 /proc/kmsg 에 커널 메시지를 가져온다. 또한 log_prefix는 메시지 앞에 “kernel”을 추가하여 기존의 syslog와 같은 출력 형식으로 한다.




(2) filter (출력 로그 필터링)


filter는 여러 가지 함수를 실행할 수 있다. 보통 로그 기록을 필터링 한다.

filter의 기술 형식은 다음과 같다

filter <indentifier> {

expression;

};


<identifier> 은 syslog-ng 내에서 고유한 이름을 정의한다. 

expression 은 다음의 내용으로 and, or , not 의 논리 식을 결합해서 기술한다.



이름 

설명 

 facility


 지정된 facility에 따르는 로그메시지가 대상이 된다. facility(facility[,facility)의 형식으로 지정한다.


 level

 지정된 priority에 따르는 로그메시지가 대상이 된다. priority() level(pri [,pri1 ... [pri2[,pri3]]) 형식으로 지정한다. 


 program

 program(프로그램 이름) 형식으로 지정한다. 지정된 호스트 이름(정규식 가능)에 따르는 로그메시지가 대상이 된다.


 host

 지정된 호스트 이름(정규식 가능) 에 따른 로그메시지가 대상이 된다. host(호스트 이름) 형식으로 지정한다.


 match

 지정된 정규식 자체에 따르는 로그메시지가 대상이 된다.


 filter

 다른 filter 규칙을 호출한다.






filter 설정 예제

예제 1) facility가 auth와 authpriv 로그를 대상으로 하는 경우

filter f_authpriv {

facility(auth, authpriv);

};


예제 2) priority가 info에서 emerg까지 로그를 대상으로 하는 경우

filter f_info {

level(info..emerg);

};


예제 3) 호스트 이름 server1과 일치하는 로그를 대상으로 하는 경우

filter f_server1 {

host("server1");

};


예제 4) 조합 예제(예제 1과 예제 2 의 로그를 대상으로 하는 경우)

filter f_authlog {

facility(auth, authpriv) and level(info..emerg);

};


(3) Destination(로그 전송에 대한 설정)

filter 규칙에 일치하는 로그의 대상을 정의한다.

destination 의 기술 형식은 다음과 같다.

destination <identifier> {

destination-driver(params);

destination-driver(params);

...

};


<identifier> 은 syslog-ng내에서 교유한 이름을 정의한다.

destination-driver는 다음의 내용을 기술한다

 이름

 설명

 file

 지정된 파일에 로그를 출력


 fifo, pipe

 지정된 FIFO와 파이프 로그를 출력


 unix-stream

 UNIX 도메인 소켓이 SOCK_STREAM 형식으로 메시지 전송(Linux syslog)


 unix-dgram

 UNIX 도메인 소켓 SOCK_DGRAM 형식으로 메시지 전송(BSD syslog)


 host

 udp로 지정된 호스트 및 UDP 포트 로그를 전송


 usertty

 로그인된 사용자로 로그 출력


 program

 외부 프로그램에서 로그 출력




destination 설정 예제

/var/log/mailog 파일에 로그를 출력


destination d_mailog {

file("/var/log/mailog");

};




시스템에 root로 로그인된 사용자에게 로그 출력


destination d_usertty {

usertty("root");

};


(4) log(source, destination, filter 매핑)

log는 source, destination, filter에 정의된 모든 규칙의 <identifier> 매핑을 실행한다.

log의 기술 형식은 다음과 같다.

log {

source(s1); source(s2); .....

filter(1); filter(2); .....

destination(d1), destination(d2); .....

flags(flag1[, flag2.....]);

};


log 설정 예제

source가 src이고, f_maillog의 내용과 일치하는 로그를 destination d_maillog에 출력한다.


log {

source(src);

filter(f_maillog);

destination(d_maillog);

};


(5) options (옵션)


options은 syslog-ng 에 대한 초기 설정 등의 변경, 필요에 따라 옵션 값을 변경한다.

options의 기술 형식은 다음과 같다.

options {

option1(params);

option2(params);

....

};


options 설정 예제

options {

sync(0);

stats(86400);

}


로그 출력시 버퍼링을 하지 않는다(sync(0)). 또한 syslog-ng 상태보고는 1일 간격(86400초) 로 한다. (stats(86400)).



 


6. 기존의 syslog 설정을 상속하기

이전 설정 : syslog 설정 (syslog.conf)

 *.err;kern.*;auth.notice;authpriv.none;mail.crit               /dev/console

*.info;auth,authpriv,cron,ftp,kern,lpr,mail,none /var/log/messages

kern.debug                /var/log/messages

auth,authpriv.info                /var/log/authlog

cron.info                /var/cron/log

ftp.info        /var/log/xferlog

lpr.info        /var/log/lpd-errs

mail.info                /var/log/maillog

*.emerg        *

*.notice        root

 


 

위의 내용을 syslog-ng 로 전환하면 다음과 같이 된다.

syslog-ng 설정 : syslog-ng.conf

source s_local {

unix-dgram("/var/run/log");

internal();

};


destination d_console {pipe("/dev/console");};

destination d_messages {file("/var/log/messages");};

destination d_authlog {file("/var/log/authlog");};

destination d_cron {file("/var/cron/log");};

destination d_ftp {file("/var/log/xferlog");};

destination d_lpr {file("/var/log/lpr-errs");};

destination d_maillog {file("/var/log/maillog");};

destination d_alluser {usetty("*");};

destination d_root {usetty("root");};



filter f_console {level(err..emerg) or facility(kern) and level(debug) or facility(auth) and level(notice..emerg) or facility(mail) and level(crit..emerg) and not facility(authpriv);};

filter f_message { level(info..emerg) and not facility(auth, authpriv, cron, ftp, kern, lpr, mail) or

 

facility(kern) and level(debug); };

filter f_authlog { facility(auth, authpriv) and level(info);};

filter f_cron { facility(cron) and level(info); };

filter f_ftp { facility(ftp) and level(info); };

filter f_lpr { facility(lpr) and level(info); };

filter f_maillog { facility(mail) and level(info); };

filter f_alluser { level(emerg); };

filter f_root { level(notice); };


log { source(s_local); filter(f_console); destination(d_console); };

log { source(s_local); filter(f_messages); destination(d_messages); };

log { source(s_local); filter(f_authlog); destination(d_authlog); };

log { source(s_local); filter(f_cron); destination(d_cron); };

log { source(s_local); filter(f_ftp); destination(d_ftp); };

log { source(s_local); filter(f_lpr); destination(d_lpr); };

log { source(s_local); filter(f_mail); destination(d_maillog); };

log { source(s_local); filter(f_alluser); destination(d_alluser); };

log { source(s_local); filter(f_root); destination(d_root); };

 





7. syslog-ng 시작 옵션


syslog-ng의 설정이 완료되면 현재의 syslog를 중지했다가 syslog-ng를 시작하면 되지만 그 전에 syslog-ng 의 시작옵션을 알아야 할 필요가 있다. (#syslog-ng -h)

이 중 중요한 것은 구문검사 (-s), 실행 사용자/그룹을 변경(-u, -g) 이다.


-s 옵션

syslog-ng를 실제로 실행하기 전에 syslog-ng.conf 구문 검사를 반드시 실시하는 것이 좋다.

syslog-ng는 구문 검사를 하기 위한 유용한 옵션(-s)를 제공하고 있기 때문에, syslog-ng 설정 변경 시 반드시 -s옵션으로 사전에 확인하는 것이 좋다.

예를 들면


#syslog-ng -s

parse error at 26

parse error reading configuration file, exiting. (line 26)


26번째 줄이 잘못되었다는 것을 알 수 있다.

만약 제대로 설정되어 있다면 아무 것도 표시되지 않는다.


8. syslog-ng 기타 설정


- 일반적으로 options 값은 기본 값이라도 상관 없지만, 필요에 따라 변경하도록 하자.

(1)호스트 이름 출력


syslog-ng에서 기본적으로 출력이 되는 로그의 호스트 이름은 source의 <identify>가 추가된다.

Mar 14 04:40:30 s_local@server1 syslog-ng[1545]: STATS:dropped 0


이것을 syslog처럼 server 1만 출력하게 하려면 long_hostnames (off)를 설정하면 된다.

ex) options {


log_hostname(off);


}




(2)파일 권한 변경


syslog-ng 는 기본적으로 로그 디렉토리 및 파일의 소유자 등이 다음과 같이 되어있다.

소유자(owner) root


그룹(group)        root


권한(디렉토리) 0700 (-rwx------)


권한(파일)        0600 (-rw-------)


이 경우 로그 회전 시 사용 권한을 설정하고 있기 때문에 불편함이 일어난다. 왜냐하면 syslog-ng를 시작할 때, 이러한 소유자 권한을 변경해버리기 때문이다.



따라서 다음과 같이 설정 할 수 있다.


options {


dir_perm(0755);


perm(0644);


owner(root);


group(wheel);


};


destination d_authlog {


file("/var/log/authlog");


perm(0600);


};




위에서는 다음과 같이 설정하고 있다.


dir_perm() 로 디렉토리 퍼미션을 0755(-rwxr-xr-x)로 설정

perm()에서 파일의 퍼미션을 0644(-rw-r--r--)로 설정

owner() 소유자를 root로 설정

group()에서 그룹을 wheel로 설정

또한 로그 파일에 대해 사용 권한을 변경하려면, destination에서 지정하면 된다. 


예제에서는 /var/log/authlog 파일의 퍼미션을 0600(-rw-------)로 설정하고 있다.




(3) syslog-ng 로깅 상태 간격 변경


syslog-ng로 자신이 출력한 로그를 바라보고 있으면 다음과 유사한 로그가 출력된다.

Mar14 04:40:30 s_local@server1 syslog-ng[1545]: STATS:dropped 0


Mar14 04:40:30 s_local@server1 syslog-ng[1545]: STATS:dropped 0


Mar14 04:40:30 s_local@server1 syslog-ng[1545]: STATS:dropped 0


이것은 syslog-ng의 상태를 정기적으로 보고하고 있는 것으로, 버퍼 출력에 실패한 로그의 수(STATS:dropped 실패한 수)가 출력된다. 

기본 값은 10분(600초) 간격으로 되어 있지만, 간격을 더 길게 하려면 options에 stats 매개 변수를 조정한다. 또한, 만약 로그 버퍼에 저장하지 않는다면(sync(0)) stats(0)을 설정하는 것이 좋다.

예) syslog-ng의 상태를 24시간(86400초) 두고 실행하는 경우

options {


stats(86400);


};




(4) sync() 매개 변수 버퍼에 고정할 메시지를 조정하기


sync() 매개 변수는 로그 파일 출력 전에 버퍼에 고정할 메시지 수(행의 수)를 지정한다. 기본값은 2048, 다음은 sync() 매개 변수 설정 방법을 보여준다.

options {


sync(0);


};


sync(0)을 지정하면 로그 버퍼에 기록하지 않고, 그대로 파일 등에 기록한다. syslog 의 동작과 동일하게하려는 경우 지정한다.



(5) Garbage collector


syslog-ng 는 Garbage collector(쓰레기 값을 정리하는 기능)를 가지고 있지만, Garbage collector 중에는 로그 메시지를 허용하지 않는다. 이 경우 unix-dgram() 및 udp()와 같은 신뢰할 수 없는 프로토콜을 사용하는 로그를 Missed 할 가능성이 생긴다.

syslog-ng에서는 그런 것을 방지하기 위해 gc_idle_threshold()와 gc_busy_threshold()의 options 매개 변수를 제공한다.

gc_idle_threshold() syslog_ng가 100밀리초 동안 메시지가 발생하지 않은 상태의 경우와 지정한 개체의 수가 gc_idle_threshold()에 지정된 수에 도달하면 Garbage collector를 실행한다. 기본값은 100이다.

gc_busy_threshold() syslog-ng가 너무 바쁘거나(100밀리초 동안에 입출력 이벤트가 발생한 상태) 할당된 개체의 수가 gc_busy_threshold()에 지정된 수에 도달하면, Garbage collector를 실행한다. 

기본값은 3000. 이 값이 클수록 메시지 수신 To band 인터럽트가 없다.

다음은 gc_idle_threshold() 와 gc_busy_threshold()의 설정 방법을 보여준다.

options {


gc_idle_threshold(50);


gc_busy_threshold(5000);


};


일반적으로 기본값으로 써도 상관 없지만, 로그가 빈번하게 발생하는 서버의 경우 gc_idle_threshold() 값을 감소시키고 반대로 gc_busy_threshold() 값을 증가 시키는게 좋다.

drop되는 로그의 수는 “STATS:dropped 파기수”에서 확인하면 되고, 삭제 수가 0이 아니라 빈번하게 발생하면 조정이 필요하다.



(6) 로그 서버를 syslog-ng로 전환


<source 변경>


udp()는 로그를 수신하는 포트를 514/udp에서 대기한다.

 

변경전 : source s_local { unix-dgram("/var/run/log"); internal(); };


변경후 : source s_local { unix-dgram("/var/run/log"); internal(); udp(); };


네트워크 인터페이스 카드(NIC)가 여러 가지 로그 중 특정 IP 주소를 가진 NIC에서만 오게 제한하려면 udp()에서 IP()를 지정한다.

예를 들어 192.168.0.10 과 172.16.1.100의 NIC의 로그를 받는 중에 192.168.0.10의 NIC에서만 받는 것으로 제한하려면 다음과 같이 설정한다.

source s_local { unix-dgram("/var/run/log"); internal(); udp(ip("192.168.0.10") port(514)); };


설정을 사용하면 실행중인 syslog-ng 프로세스에 HUP 시그널을 보낼 뿐이기 때문에 syslog와 달리 다시 시작할 필요가 없다.



<-destination 변경>


syslog와 달리 syslog-ng를 사용하면 여러 syslog 서버의 로그 파일들을 분리할 수 있다. 만약 로그를 분할하려면 destination을 변경하면 된다.

예)  로그 소스 서버 server1, server2의 /var/log/authlog를 분리한다. destination, filter, log를 다음과 같이 설정한다.

 

destination d_authlog { file("/var/log/$HOST/authlog"); };




filter f_authlog_server1 { host(server1) and facility(auth, authpriv) and level(info..emerg); };


filter f_authlog_server2 { host(server2) and facility(auth, authpriv) and level(info..emerg); };




log { source(s_local); filter(f_authlog_server1); destination(d_authlog); };


log { source(s_local); filter(f_authlog_server2); destination(d_authlog); };




$HOST 는 syslog-ng가 보유하는 변수에 로그를 보내는 호스트 이름을 유지하고 있다.

또한 디렉터리를 자동 생성하지 않는 설정(create_dirs(n))이 있는 경우 먼저 디렉토리를 만들어 둘 필요가 있다.

#mkdir /var/log/server1 /var/log/server2




(7) syslog-ng를 로그 소스로 전환


로그 서버와 마찬가지로 syslog-ng의 기본적인 설정까지하고, 로그 전달 설정을 다음과 같이 실행한다.

destination 추가 : destination d_loghost { udp("로그 서버 IP"); };


기본적으로 localport는 모든 포트이며, 대상 포트는 514가 된다. 예를 들어 localport를 syslog와 마찬가지로 514로 하려면 다음과 같이 설정한다.

destination d_loghost { udp("로그 서버 IP" localport(514)); };




(8) 로그 변경


destination 에 각 log를 추가한다. 다음은 그 예제를 보여준다.

log {


source(s_local); filter(f_authlog); destination(d_authlog); destination(d_loghost); };


로그 전달을 확인하고 로그를 저장할 위치를 모든 로그 서버로 전환하려면 destination(d_authlog)를 제거하면 된다.



(9) 로그 감시 자동화


syslog-ng에서 filter 기능 program(), host(), match()를 사용하여 로그 감시를 자동화 하는 것이 가능하다.

다음은 로그 감시의 예를 보여준다.

예) sshd의 암호 로그인 실패 로그를 캡쳐한 경우 관리자(root@example.com)에게 통지한다. sshd 비밀 번호 로그인에 실패하면 다음과 비슷한 로그가 출력된다.

Mar 26 07:50:00 atmarkit sshd[27576]:Failed password for k from 192.168.0.1 port 1030 ssh2


위의 경우 192.168.0.1에서 사용자 k가 로그인에 실패한 모습을 보여주고 있다. syslog-ng에서 로그 메시지를 캡쳐하고, 관리자에게 이메일을 하려면 다음과 같이 정의한다.

destination d_mail-alert {

program("/usr/local/bin/syslog-alert.sh");

};


filter f_sshd_failed_password {

program("sshd") and match("Failed password");

};


log {

source(s_local);

filter(f_sshd-failed-password);

destination(d_mail-alert);

};


여기서 /usr/local/bin/syslog-alert.sh 는 메일 알림을 위한 쉘 스크립트이다. 여기서 사용하는 쉘스크립트의 내용은 다음과 같다,

#!/bin/sh

TO=root@example.com

while read line

do

line=`echo $line | sed -e 's/^<[0-9]*>//'`;

echo $line | /usr/bin/mail -s "alert mail" $TO

done


위의 설정이 완료되면 syslog-ng에 HUP 신호를 전달한다. 다만 위의 쉘 스크립트의 내용을 변경하는 경우에 HUP 신호를 전송할 때 반영되지 않기 때문에 주의가 필요하다.

제대로 작동한다면 다음과 같은 메일이 관리자(root@example.com)에게 보내진다.

From:nobody@example.com

To:root@example.com

Subject : alert mail

Mar 26 07:50:00 atmarkit sshd[27576]:Failed password for k from 192.168.0.1 port 1030 ssh2


ref)

※ 본 글은 원본을 Google 번역을 돌려서 나온 결과를 위주로 작성하였으므로 실제 원본과는 다를 수 있음.

원본)http://www.atmarkit.co.jp/ait/articles/0403/27/news018.html

원본)http://www.atmarkit.co.jp/ait/articles/0404/07/news076.html

구글번역)http://m.blog.naver.com/cgidhtml/130079534976

출처: http://knoow.tistory.com/65 [ICT Story]


http://net123.tistory.com/250