[수퍼데몬 xinetd] 데몬실행모드 두가지( standalone 과 xinetd )

 1. standalone 과 xinetd 의 차이점.
구분 : xinetd 환경 서비스                         :            독립( standalone ) 서비스
의미 : xinet 수퍼데몬에 의해 제어되는        : 독립적으로 실행되는 서비스들의 데몬
       : 서비스들의 데몬                             :
실행방법 : 필요할 때에 xinetd 에 의해 수행됨: 독립적인 서비스를 위하여 항상 독립적으로
             :                                               : 수행됨
데몬상주여부 : xinetd 에 의해 불리워진 후에 : 독립적인 서비스를 위하여 항상 메모리에 독립
                   : 서비스 완료후에는 종료됨     : 데몬으로 상주해 있음.
기타 : ” /etc/xinetd.d/서비스명 ” 으로된      :
       : xinetd 제어파일이 존재함                  :
접근제어 : tcpd 에 의해 접근제어됨.            : tcpd 와는 무관하지만 자체 설정파일에 의해 접근
             : ( /etc/hosts.allow, /etc/hosts.deny : 제어를 할 수도 있음.
             : 파일로 접근제어 설정할 수 있음.        :
참고 : 독립적으로 실행되는 데몬들도 xinetd 환경으로 변경할 수 있으며 반대로 xinetd 환경에서
       : 서비스되는 데몬들도 독립적인 실행모드로 변경할 수 있음.

 2. Standalone 모드

 – 독립적으로 실행이 되며 항상 메모리에 상주하여 서비스요청이 있을 때 언제든 바로 응답을 함.

 – 즉, 빠른 응답속도를 요하는 경우에 이 모드를 이용함.

 – 단점으로는 메모리에 항상 상주해 있으므로 메모리점유로 인하여 서버부하를 줌.

 – ex) httpd, sendmail, named…..

 3. xinetd 모드

 – xinetd 모드로 실행되는 데몬은 xinetd 라는 특별한 데몬( 인터넷 수퍼데몬 ) 에 의해 관리되며, 필요한 경우에만 메모리로 적재( load ) 되어 실행이 되어 응답을 함.

 – 즉, 빠른 응답속도를 요하지않는 경우에 이 모드를 이용함.

 – 단점으로는 응답속도가 standalone 보다는 상대적으로 느리다는 것이고, 장점으로는 메모리에 항상 상주해 있는 것이 아니므로 standalone 모드보다 서버부하를 상대적으로 줄일 수 있음.

 4. standalone 모드로만 실행되는 데몬들도 xinetd 모드로 변경실행이 가능하며 xinetd 모드로 실행이 되는 데몬들도 standalone 모드로 서비스하는 것 또한 가능함.

 5. standalone 및 xinetd 모드 설정시 고려해야 할 사항

 – 얼마나 많은 서비스요청을 받는가?

 – 얼마나 자주 서비스요청을 받는가?

 – 메모리 점유가 얼마나 되는가?

 – 보안이 필요한 경우와 비교적 그렇지 않은 경우의 분석.

 6. XINETD 수퍼데몬 서비스파일 주의사항

 – /etc/xinetd.d/ 디렉토리내의 서비스파일들에 등록되어 있는 데몬들이 root 계정으로 실행되고 있는 꼭 확인을 해야함. 그렇지 않다면 의심을 해보아야 함.

 – /etc/xinetd.d/ 디렉토리의 각 서비스파일들이 퍼미션에서 일반유저들에게 실행은 물론이고 읽기권한까지도 빼버려야 함.

 – 이 파일이 일반유저들에게 읽기 권한이 있다면 해당서버에서 어떤 서비스를 하고 있는지를 모두 알수있기 때문이며 실행파일의 위치까지도 파악이 가능함.

 –
더욱 우려되는 것은 서버관리자의 실수든 해킹된 것이든 /etc/xinetd.d/ 내의 파일들에게 쓰기( write ) 권한이
설정되어 있다면 어떤 프로그램이든지 만들어서 이 파일에 등록해 두면 root 의 권한으로 실행이 가능하게 됨.

[수퍼데몬 xinetd] 인터넷 수퍼데몬( xinetd ) 이란?

 1. 수퍼데몬( xinetd ) 개론
 
 – XINETD 는 인터넷 수퍼데몬( Internet Super Daemon ) 을 의미하는 것으로서  SENDMAIL, HTTPD 등과 같이 리눅스 시스템에서 실행되는 하나의 데몬임.

 – 하지만 SENDMAIL, HTTPD 등과는 달리 리눅스 서버에서 서비스되는 여러가지 데몬들을 제어하면서 각각의 서비스들의 연결을 담당하고 있음.

 2. 수퍼데몬( xinetd ) 의 특징

 – xinetd 는 inetd 상위버전으로 레드햇 7.0 이후 버전부터 사용됨.

 – 각각의 서비스별로 별도의 파일에 설정이 가능함.( /etc/xinetd.d/* 파일들 )

 – xinetd 에서 가지고 있던 접근제어기능을 가지고 있음.

 – tcp_wrapper 를 내장하고 있기 때문에 접근제어를 할 수 있음.

 – 접속시도 횟수로 접근제어를 할 수 있으므로 무차별 서비스거부공격( DoS )을 방지할 수 있음.

 – 동일한 IP 를 가진 호스트에서 동시 접속수를 제어하여 접근제어를 할 수 있음.

 – xinetd 에서 제어되는 각 서비스들에 대한 syslog 로깅 레벨 설정가능.

 – 접속하는 클라이언트들의 서비스 이용시간을 기록할 수 있음.

 – 서비스를 거부하거나 서비스 접근제어가 되었을 겨우에 상세로그를 기록함.

[로그 관리 및 분석] 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 등으로 용량단위를 붙여서 지정하면 됨.

[로그 관리 및 분석] logrotate

 logrotate.conf 샘플

logrotate의 설정디렉토리 /etc/logrotate.d/에 있는 여러개의 파일중 syslog파일의 일부이다.

물론, 이 설정을 /etc/logrotate.conf 파일내에 있어도 마찬가지 결과를 얻을 수 있다.

 

위의 설정을 설명하면 다음과 같다.

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

monthly
대상로그파일(/var/log/messages)을 순환시킬 주기이며, monthly이므로 한달에 한번씩 이 파일이 순환(rotate)되게 된다.
뒤에서 설명하게되겠지만 참고로 순환주기에는 daily, weekly, monthly등이 있다. 이에 대한 설명은 뒤에서 자세히 다루게 된다.

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

rotate 2
순환되는 파일갯수를 지정한다. 0부터 시작하게되며 위의 예에서 monthly로 지정했기 때문에 2달간 로그파일이 저장되어 있게된다.

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

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

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

6. logrotate 주요옵션

 (참고 : “man logrotate” 해서 보면 logrotate에 대한
옵션이 굉장히 많다. 아래에 소개해드리는 옵션은 자주사용하는 옵션이거나 필자의 견해로 보아 중요하다고 생각되는 옵션을 설명드린
것이므로 이외의 옵션에 대해서 알고자 한다면 man page를 참조바란다. )

-f, –force  

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

-s, –state <statefile>

기본 상황파일인 /var/lib/logrotate.status 파일대신에 지정한 state파일을 사용한다.

–usage

logrotate의 기본 사용법을 간단히 보여준다.

compress

순환되는 로그파일을 gzip으로 압축하게된다. nocompress와는 반대.

nocompress

순환되는 로그파일의 압축을 하지 않는다. 반대는 compress

create mode owner group

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

daily

로그파일을 매일주기로 순환시킨다.

weekly

로그파일을 매주주기로 순환시킨다.

monthly

로그파일을 한달주기로순환시킨다.

errors address

logrotate작업시에 에러가 발생한다면 지정된 메일주소로 메일을 보내게 된다.

extension ext

logrotate 실행후에 순환되어 생성되는 파일의 이름뒤에 확장자로 붙일 확장자명을 지정한다.
만약 compress라는 옵션으로 gzip으로 압축을 했다면 gz라가 확장자 뒤에 붙게된다.
예를 들면 compress라는 옵션과 함께 “extension ext”옵션이 주어졌다면 logrotate실행후에 생성되는 파일은 messages.0.ext.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등으로 용량단위를 붙여서  지정하면 된다.