리눅스

슈퍼데몬

벌게진눈 2013. 8. 28. 15:23
반응형

1.개념정의

1)데몬 

서비스라고도 한다. 눈에는 보이지 않지만, 현재 시스템에서 활동중인 프로세스로 백그라운드 프로세스의 일종 백그라운드 프로세스란 실행은 되었지만, 화면에는 나타나지 않고 뒤에서 실행되는 프로세스를 만한다.. 예를 들어 백신, 서버데몬 등 눈에 보이지 않지만 실행되고 있는것이다. 데몬은 Standalone타입의 데몬과 xinetd타입의 데몬으로 나뉜다.

2)Standalone타입의 데몬

 시스템에서 독자적으로 프로세스가 구동되어 서비스를 제공하는 데몬으로 메모리에서 항상 구동되어야 하기 때문에 자주 호출되고 웹서버데몬, 네임 서버 데몬, 삼바서버 데몬등이 예이다.

3)xinetd데몬

슈퍼데몬이라고 부른다. xinetd데몬 자체는 Standalone타입의 데몬으로 항상 프로세스가 구동되어있다. 외부에서 특정 서비스를 요청할 경우에 자신에게 종속된 데몬(xinetd타입의 데몬)을  구동시킨후 해당 데몬에 서비스를 하도록 서비스를 연결시켜 주는 것이다.

4)xinetd타입의 데몬

 평상시에는 구동되지 않다가, 서비스를 요청할 때만 xinetd데몬이 구동시켜주는 방식이므로 별도로 서비스를 실행할 수는 없다. xinetd타입의 데몬으로 사용하기 적당한 데몬은 가끔 사용되는 데몬이 적당하다. 대표적인 예로는 telnet서버, ftp서버등이있다. 하지만 ftp서버의 경우 자주 사용한다면 Standalone타입의 데몬으로 바꿔줘도 무관하다.

 

2.xinetd타입의 데몬들의 장단점

-장점 : xinetd에 의해 불려졌을 때만 메모리에 올려졌다가 서비스가 종료되면 메모리에서 제거된다. 따라서 메모리에 상주하지 않는다 그렇기 때문에 메모리절약 증 자원이 절약된다. 각각의 서비스별로 별도의 파일에 설정이 가능하다. tcp_wrapper를 내장하고 있기 때문에 접근제어를 할 수 있다 접속시도 횟수로 접근제어를 할 수 있으므로 무차별 서비스거부공격(DoS)을 방지

-단점 : xinetd를 거쳐서 해당 서비스를 실행하기 때문에 standalone보다 응답속도가 느리다.

 

3.xinetd 서비스 흐름도(telnet의 경우)

1-A사용자가 B서버로 telnet접속을 시도한다

2-B서버의 xined 데몬이 이 서비스를 접수한다.

3-xinetd는 tcp_wrapper(tcpd)에게 접근 허용여부를 검사토록한다.

4-tcp_wrapper는 /etc/hosts.allow파일과 /etc/hosts.deny파일을 검사하여 접속가능여부를 검사한다. -접속 가능하다고 판단하면 /var/log/secure파일에 접근허용에 대한 기록을 남긴다.-4단계에서 접속가능하지 않다고 판단하면 /var/log/secure파일에 접근불허용에 대한 기록을 남기고, A사용자의 telnet접속을 거부하고 접속을 종료한다.

허가된 요청일 경우에는 /etc/syslog.conf에 설정되어 있는 /var/log/secure파일에 접속요청에 대한 정보를 기록하고 /etc/xinetd.d/telnet파일을 불러들여서 서비스를 연결한다.

5-접근허용되었을 경우에 xinetd는 /etc/xinetd.d/telnet파일의 내용을 읽어 들인다./etc/xinetd.d/telnet파일의 server행에 있는 telnet서비스 데몬/usr/sbin/in.telnetd을 읽어들인다.(telnet데몬이 메모리로 로딩됨)

6-A자용자에게 telnet서비스데몬(/usr/sbin/in.telnetd)을 연결시켜서 telnet서비스를 받도록 한다.

7-A사용자의 telnet서비스(원격접속사용)이용이 끝나고 로그아웃을 한다.

8-telnet서비스 데몬(/usr/sbin/in.telnetd)은 메모리에서 사라진다.

9-또다른 telnet접소자를 위하여 다시 1단계를 시작한다.

 

* xinetd에 의한 접속제어(tcpd)

tcpd는 특정 IP나 도메인으로부터 서버로의 telnet, ftp, pop 등의 접속을 차단할 있으며, 접속기록이나 접속시도기록을 특정한 파일에 로그로 기록한다.

xinetd는 tcp-wrapper를 내장하고 있기 때문에 xinetd모드에서 실행되는 서비스들(예: ftp, telnet, ssh)은 거의 대부분 tcpd라는 tcp_wrapper의 데몬에 의해 접속제어를 받게 된다.

쉽게 말해서 개별 서비스들(예: ftp, telnet 등)의 접근허용을 설정하는 파일은 /etc/hosts.allow이며 접근허용이 되지 않도록 설정하는 파일은 /etc/hosts.deny 파일이다.

 

4./etc/xinetd.conf

default 설정으로 /etc/xinetd.d/ 디렉토리내에 존재하는 xinetd 서비스파일들에 공통적으로 적용하는 설정 내용이 저장되어 있다.

defaults

{

The next two items are intended to ba a quick access place to temporarily enable or disable service

           enabled            =

           disabled            =

 

Define general logging characteristics.

           log_type            = STSLOG deamon info

           log_on_failure    = HOST

           log_on_success   = PID HOST DURATION EXIT

 

Define access restriction defaults

           no_access         =

           only_from         =

           max_load          = 0

           cps                 = 50 10

           instances          = 50

           per_source        = 10

 

Address and networking defaults

           bind                =

           mdns               = yes

           umask             = 002

 

Generally, banners are not used. This sets up their global defaults

           banner             =

           banner_fail        =

           banner_success  =

}

Includedir /etc/xinetd.d

 

instances : 동시에 실행될 수 있는 같은 타입의 서비스, 이 숫자를 초과할 경우 해당 데몬이 더 이상 메모리에 적재되지 못한다. UNLINTED로 지정하면 접속 제한을 두지 않는다.

log_type  : 로그 기록 설정부분. SYSLOG또는 FILE포맷 사용

log_on_success : 서버가 시작될 때와 끝날 때 기록된 것들을 지정 PID-xinetd프로세스 ID 

HOST-원격 호스트의IP  

USERID-워격 사용자의ID  

EXIT-서비스가 빠져 나갈 때의 상태  

DURATION-서버세션(session)지속 상태

log_on_failure : 해당 서버가 리소스 부족으로 시작될 수 없거나 설정 파일 내의 규칙에 의해 접근이 거부되었을때 기록될 값들 지정 

HOST-원격호스트의 아이피주소

USERID-원격사용자의 ID  

ATTEMPT-실패한 시도가 있을 경우  

RECORD-클라이언트에 대한 가능한 정보

only_from : 이용 가능한 원격 호스트를 설정. IP주소로 지정해준다.

per_source : 똑같은 원격ip 주소가 로컬 서비스에 접속할 수 있는 최대 접속 수를 지정해 주는 속성. DoS의 공격을 막을 수 있다. UNLIMITED설정은 무한 접근 허용

enable  : 실행 가능한 서비스의 목록표시. disable속성과 DISABLE플래그가 존재할 경우엔 무시됨

no_access : 서버의 접근을 불허할 호스트의 주소 지정

cps : 서버로 접속하는 연결 범위 지정

disable : 서비스를 하도록 설정하려면 no로 설정하고 서비스를 하지 않으려면 yes로 설정한다.

includedir : service섹션을 서비스마다 하나의 파일로 지정하고 할때 include속성으로 서비스 파일이 위치할 디렉토리를 지정해준다. 추가 설정 디렉토리(이 디렉토리 안에 있는 파일 내용을 포함하라는 의미)

 

 

5./etc/xinetd.d/telnet

service telnet

{

                disable                  = no

                flags                     = REUSE

                socket_type  = no

                wait                     = no

                user                     = root

                server                   = /usr/sbin/in.telnetd

                log_on_failure          += USERID

}

 

service telnet  :  service 속성으로 설정하고자 하는 서비스의 이름 지정

disable : disable 속성은 해당 서비스가 실행되지 못하도록 설정하는데 사용

flogs

floags속성의 종류

REUSE              서비스 소켓에 SO_REUSEADDR플래그를 설정하도록 한다.

INTERCEPT       패킷이나 허용된 접속을 가로채어 허가된 위치에서 접속하는지 인증하고자할때 사용

NORETRY          프로세스가 새롭게 생기지 못할 경우 재시도하지 못하도록 한다.

IDPNLY             원격 호스트가 원격 사용자를 인증할 때만 접속 허용. 접속기반 서비스에만 적용 USERID log옵션을 사용하지 않을 경우 효과를 내지 못함.

NAMEINARGS    서버가 작동될 때 서버 내에 지정한 것과 같이 server_args내의 첫 번째 인수가 argv[0]이 되도록 하는 플래그입니다. 이 플래그는 서버내에 tcpd를 넣어 tcpd를 사용할수 있게하고 inetd처럼 server_args내에 서버 이름을 넣을 수 있게 해준다.

NODELAY          TCP서비스에 이 플래그를 설정하면 TCP_NODELAY플래그가 소켓에 설정된다. 이 플래그는 TCP서비스에 한해서 작용한다.

DISARLE           서비스가 실행되지 않게 한다

KEEPALIVE      TCP서비스에 이 플래그가 설정되면 SO_KEEPALIVE 소켓에 설정된다 . 이 플래그도 TCP서비스에 한해서 작용한다.

 

Protocol  : 서비스가 사용할 프로토콜을 설정, 프로토콜은 /etc/protocols 내에 있어야함

socket_type : 서비스 타입이 tcp기반이면stream, udp기반이면 dgram으로 설정

wait : wait속성은 서비스가 단일 쓰레드인지 다중 쓰레드인지를 결정하는 플래그로 yes인경우는 단일스레드로 실행 쉽게말해서 no이면 동시접속 가능 yes이면 동시접속 불가

                stream일 경우에는 반드시 no이어야 한다.

user : 서버 프로세스를 실행할 수 있는 사용자의 ID를 나타내는 것

server  : 해당 서비스를 실행할 데몬 프로그램을 지정-데몬파일의 경로

log_on_failure +=USERID : 서비스 접속에 실패할 경우 기존 log설정에 접속에 실패한 사용자 id를 포함해서 기록 기존 로그 설정은 /etc/xinetd.conf파일에 설정되어 있다.

+=는 /etc/xinetd.conf파일의 기본설정항목에 추가할 항목을 지정할 때 사용한다.

                         -=는 /etc/xinetd.conf파일의 기본설정항목에서 뺄 항목을 지정할 때 사용한다

서버접속에 성공하지 못하였을 때 그파일에 기록하는 내용들을 설정할 수 있다.

                         여기에는 HOST, USERID 그리고 ATTEPMT, RECORD 등이 추가로 설정될 수 있다.

                         HOST란 접속을 시도한 클라이언트의 IP주소를 의미한다.

                         USERID란 접속한 사용자의 ID를 의미한다.

 

6. xinetd 시작/종료

# /etc/init.d/xinetd start -> xinetd 시작

# /etc/init.d/xinetd stop -> xinetd 종료

# /etc/init.d/xinetd restart -> xinetd 재시작

# /etc/init.d/xinetd status -> xinetd 상황점검

반응형

'리눅스' 카테고리의 다른 글

vi 명령어 (많이 사용하는것 모음)  (0) 2021.05.06
crontab 사용법  (0) 2020.09.22