강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

XINETD 수퍼데몬관리

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

XINETD 수퍼데몬관리

작성자 : (주)수퍼유저코리아, http://www.superuser.co.kr 서버팀

XINETD 수퍼데몬 관리

top


1. 리눅스 서버의 서비스 흐름도

2. 인터넷 수퍼데몬 XINETD란?

3. xinetd서비스와 standalone서비스

4. xinetd로 서비스되는 예

5. xinetd서비스 관련파일들

6. /etc/xinetd.d/에 존재하는 파일의 지시자들

7. xinetd의 시작과 종료

8. xinetd의 접근제어

* /etc/xinetd.d/ 디렉토리에 설정된 xinetd서비스 파일들의 설명


1. 리눅스 서버의 서비스 흐름도

top

 

CSU

     ↓

ROUTER


     ↓

방화벽

     ↓

--------------------------------------리눅스 서버 내부----------------------------------------------

스위치

     ↓

iptables


     ↓     
 →

standalone서비스(xinetd 영향 밖의 서비스,독립데몬)


(Apache, MySQL)
     ↓

xinetd 환경서비스

     ↓ (tcp-wrapper 접근제어 : /etc/host.allow, /etc/hosts,deny)

/etc/xinetd.d/ 설정파일에 의한 서비스 연결

              (POP3, telnet)

 



2. 인터넷 수퍼데몬 XINETD란?

top


ㅇ XINETD란?


- 리눅스에서 서비스되는 일반데몬들은 자기자신 스스로가 직접 서비스를 하고 하고 있음.

- XINETD란 여러 서비스들을 통합관리하기 위한 것으로 다음과 같은 특징이 있음.

ㅇ XINETD 서비스의 특징

- 여러 서비스들(예: telnet, ftp등)을 통합관리하는 일종의 서비스(데몬)임

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

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

- tcp_wrapper를 내장하기 때문에 접근제어를 할 수 있음. (/etc/hosts.allow, /etc/hosts.deny)

- timeout설정으로 서비스 접근제어를 할 수 있음.

- 접속시도 횟수로 접근제어를 할 수 있으므로 무차별 서비스거부공격(DoS)을 방지할 수 있음.
(동일한 IP를 가진 호스트에서 동시 접속수를 제어하여 접근제어를 할 수 있음.)

- 로그파일의 크기를 제한할 수 있음.

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

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

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



3. xinetd서비스와 standalone서비스

top

구 분 XINETD 환경에서 서비스되는 데몬들 STANDALONE으로 서비스되는 데몬들
의 미 xinetd데몬에 의해 실행되고 종료됨 xinetd와는 무관하게 독립적으로 서비스됨
메 모 리
상 주
xinetd에 의해 불려졌을 때만 메모리에 올려졌다가 서비스가 종료되면 메모리에서 제거됨. 따라서 메모리에 상주하지 않음.
주의: xinetd데몬 자체는 메모리에 상주함
항상 메모리에 독립적인 데몬으로 상주하고 있음.
응답속도 xinetd를 거쳐서 해당 서비스를 실행하기 때문에 standalone보다는 느림. 서비스 요청이 있을 경우 바로 응답을 하기 때문에 xinetd환경의 서비스 보다는 응답속도가 빠름.
설정파일 대부분 /etc/xinetd.d/서비스명 으로 설정파일이 존재함. 해당 프로그램이 설치된 위치에 독립적인 설정파일이 존재함. (rpm으로 설치되었을 경우에는 대부분 /etc디렉토리에 존재함.)
접근제어 tcp_wrapper에 의해서 접근제어됨.
데몬명 : tcpd
(/etc/hosts.allow, /etc/hosts.deny)
접근제어를 자체적으로 하거나 아니면, 하지 않음. (시스템 자체의 방화벽(iptables등)과는 별도의 의미)
장 점 통합관리가능, 자원절약(메모리절약등), 접근제어가능 빠른응답속도
단 점 응답속도가 느림 자원낭비(메모리상주), 개별관리
서비스예 telnet, ftp, pop등 httpd, mysql, sendmail, named, sshd등
적 용 비교적 서비스요청이 많지 않은 서비스에 적용하는 것이 효율적임. 비교적 서비스 요청이 빈번한 서비스에 적용하는 것이 효율적임
기 타 xinetd로 서비스되는 서비스를 standalone으로 변경이 가능하고, standalone으로 서비스되는 서비스를 xinetd로 변환이 가능함. (지원하지 않는 서비스들도 있음.)


4. xinetd로 서비스되는 예

top


A(사용자, 클라이언트) -----------------------------> B(리눅스서버)

ㅇ xinetd환경에서 서비스되는 telnet 접속시의 서비스 흐름도

1 단계 : A사용자가 B서버로 telnet접속을 시도한다.

2 단계 : B서버의 xinetd 데몬이 이 서비스를 접수한다.

3 단계 : xinetd는 tcp_wrapper에게 접근 허용여부를 검사토록 한다.

4 단계 : tcp_wrapper는 /etc/hosts.allow파일과 /etc/hosts.deny파일을 검사하여 접속가능여부를 검사한다.

- 접속가능하다고 판단하면 /var/log/secure파일에 접근허용에 대한 기록을 남긴다.

- 4단계에서 접속가능하지 않다고 판단하면 /var/log/secure파일에 접근불허용에 대한 기록을 남기고,
A사용자의 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단계를 시작한다.


5. xinetd서비스 관련파일들

top

파일(디렉토리) 역 할 과 의 미
/usr/sbin/xinetd xinetd 데몬파일
/etc/xinetd.conf xinetd서비스에 공통적으로 적용되는 주된설정파일
(xinetd서비스의 global 설정파일)
/etc/xinetd.d/내의
서비스 파일들
xinetd환경으로 서비스될 각 서비스들의 설정파일들
/usr/sbin/tcpd tcp_wrapper 데몬파일
/etc/hosts.allow 접근허용할 서비스 및 호스트(IP, Network, Domain) 지정파일
/etc/hosts.deny 접근거부할 서비스 및 호스트(IP, Network, Domain) 지정파일
/var/log/secure xinetd서비스(tcp_wrapper) 접근기록파일(xinetd 로그파일)
(/etc/syslog.conf파일의 설정에 따라서 달라질 수 있음.)
/etc/rc.d/init.d/xinetd xinetd 시작/종료/재시작하는 스크립트파일
/etc/syslog.conf 시스템로그 설정파일 (로그기록 대상과 로그기록 파일지정)
/etc/services 서비스명 및 포트 정의파일
/etc/protocols 프로토콜 정의파일


6. /etc/xinetd.d/에 존재하는 파일의 지시자들

top


ㅇ/etc/xinetd.d/telnet 파일의 내용

[root@edu /]# cat /etc/xinetd.d/telnet

service telnet

{
disable = yes
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}

[root@edu /]#

ㅇ 주의사항
telnet서비스는 /etc/xinetd.d/telnet파일의 설정항목들이 우선 적용되지만,
이 파일에 설정되어 있지 않은 항목들은 /etc/xinetd.conf 파일의 설정내용들이 적용된다.

service
해당 서비스의 이름을 의미한다. (예 : telnet, finger, pop3 등)


disable
해당 서비스를 하려면 no로 설정하고, 서비스를 하지 않으려면 yes로 설정한다.

서비스를 하기 위하여 no로 설정하는 것은
“chkconfig 서비스명 on”으로 설정하는 것과 같음.
ntsysv유틸리티를 실행하여 해당 항목에 “*”표를 하는 것과 같은 의미임.
서비스를 하지 않기 위하여 yes로 설정하는 것은
“chkconfig 서비스명 off”로 설정하는 것과 같음.
ntsysv유틸리티를 실행하여 해당항목에 “*”표를 제거하는 것과 같은 의미임.


socket_type
해당서비스가 tcp프로토콜을 이용하는 서비스일 경우에는 stream으로 설정하고
해당서비스가 udp프로토콜을 이용하는 서비스일 경우에는 dgram으로 설정한다.


wait

서비스요청을 받은 후에 요청받은 서비스가 아직 종료하지 않았을 때에 또다른 서비스요청이 들어오더라도 허용하려면 no로 설정한다. 먼저 요청받은 서비스가 종료된 후에 또다른 서비스요청을 허용하려면 yes로 설정한다. socket_type을 stream으로 설정하였을 경우에는 no로 설정한다.

user
해당 서비스를 어떤 사용자의 권한으로 서비스할 것인가를 결정한다. (예 : root)

log_on_success
해당 서비스접속에 성공하였을 경우에 로그파일에 기록할 내용을 설정한다.
PID, USERID, EXIT, DURATION등의 설정이 가능하다.

단) +=는 /etc/xinetd.conf파일의 기본설정 항목에 추가할 항목을 지정한다.
-=는 /etc/xinetd.conf파일의 기본설정 항목에서 제거할 항목을 지정한다.

예) “log_on_success += DURATION”로 설정되었다면 /etc/xinetd.conf 파일의 기본항목외에도
DURATION(서비스접속 지속시간)값을 추가하여 로그파일에 기록한다.

log_on_failure
해당서비스에 접속하지 못하였을 경우에 로그파일에 기록할 내용을 설정한다.
USERID, HOST, ATTEMPT, RECORD등의 설정이 가능하다.

단) +=는 /etc/xinetd.conf파일의 기본설정 항목에 추가할 항목을 지정한다.
-=는 /etc/xinetd.conf파일의 기본설정 항목에서 제거할 항목을 지정한다.

예) log_on_failure += USERID로 설정되었다면 해당서비스 접속에 실패하였을 경우에
/etc/xinetd.conf파일의 기본항목외에도 USERID(사용자의 ID)값을 추가하여 로그파일에 기록한다.

only_from
해당서비스의 접속가능 IP주소를 설정하거나 네트워크 주소를 설정한다.

예) “only_from = 192.168.0.100”은 192.168.0.100 IP주소에서의 해당 서비스 접속을 허용한다는 설정.
“only_from = 192.168.1.0/24”는 192.168.1.0부터 192.168.0.255까지의 IP주소에서의
해당서비스 접속을 허용한다라는 설정임.

no_access
위의 only_from 설정으로 인하여 접속가능한 IP주소들 가운데 접속을 거부할 IP주소를 설정한다.

예) “no_access = 192.168.1.100”으로 설정하였다면,
192.168.1.100 IP주소를 제외한 192.168.1.0부터 192.168.1.255까지의 IP주소들을 모두 허용한다.

instances
해당 서비스로 접속 가능한 총 접속자수를 지정한다.
예) “instances = 100” 으로 설정하였다면 해당 서비스로 접속허용할 동시 접속자수는 100명까지만
허용된다. 101번째 접속부터는 거부하게 된다.

access_times
해당 서비스의 이용가능 시간대를 지정한다.
예) “access_times = 09:00 ~ 18:00”으로 설정하였다면 해당 서비스는 오전 9시부터 오후 6시까지만
이용가능하다.

per_source
동일한 곳(호스트, IP)에서 해당 서비스로의 동시접속 횟수를 제한할 수 있다.
예) “per_source = 3”으로 설정하였다면 동일한 호스트(IP주소)에서 3회이상 동시접속(시도)를 허용하지 않는다.
이 설정은 DoS(Denial of Service)공격을 차단하기 위한 설정이다.


7. xinetd의 시작과 종료

top


xinetd 서비스의 시작 : /etc/rc.d/init.d/xinetd start

[root@fileserver1 /]# /etc/rc.d/init.d/xinetd start
xinetd (을)를 시작합니다: [ 확인 ]
[root@fileserver1 /]#

xinetd 서비스의 종료 : /etc/rc.d/init.d/xinetd stop

[root@fileserver1 /]# /etc/rc.d/init.d/xinetd stop
xinetd 를 정지함: [ 확인 ]
[root@fileserver1 /]#

xinetd 서비스의 재시작 : /etc/rc.d/init.d/xinetd restart

[root@fileserver1 /]# /etc/rc.d/init.d/xinetd restart
xinetd 를 정지함: [ 확인 ]
xinetd (을)를 시작합니다: [ 확인 ]
[root@fileserver1 /]#

xinetd 서비스 확인 : ps ?ef | grep xinetd

[root@fileserver1 /]# ps -ef | grep xinetd
root 13495 1 0 13:43 ? 00:00:00 xinetd -stayalive -reuse -pidfile /var/run/xinetd.pid
[root@fileserver1 /]#

 


8. xinetd의 접근제어

top


ㅇ xinetd 서비스의 접근제어는 tcp_wrapper로 구현한다. (tcp_wrapper가 내장되어 있음.)

ㅇ 접근허용 설정파일은 /etc/hosts.allow, 접근불허용 설정파일은 /etc/hosts.deny

ㅇ 특정 IP주소 또는 특정 네트워크, 또는 호스트, 또는 도메인으로 부터 xinetd에서 서비스되는 특정 서비스에 대한 접근을 제어할 수 있다.

ㅇ 접근기록 뿐아니라 접근시도 기록도 로그파일에 기록할 수 있다.

ㅇ 접근제어 파일(/etc/hosts.allow, /etc/hosts.deny)의 설정형식과 예
- 콜론(:)을 기준으로 왼쪽편에는 접근제어할 서비스명을 지정한다.
- 콜론(:)을 기준으로 오른쪽편에는 접근제어 대상인 IP주소, 네트워크, 호스트등을 지정한다.
- /etc/hosts.allow파일과 /etc/hosts.deny파일의 지정형식은 동일하다. (의미는 정반대)

ALL : ALL


- 이 설정이 /etc/hosts.allow파일의 설정내용이라면 모든(ALL)서비스에 대하여 모든(ALL) 곳에서의 접속을
허용한다는 설정임.

ALL : superuser.co.kr

- 이 설정이 /etc/hosts.deny파일의 설정내용이라면 모든(ALL)서비스에 대하여 superuser.co.kr에서의 접속을
거부한다는 설정임.

ALL : 192.168.2.100


- 이 설정이 /etc/hosts.allow파일의 설정내용이라면 모든(ALL)서비스에 대하여 192.168.2.100에서의접속을
모두 허용한다는 설정임

in.telnetd : 192.168.1.0/24

- 이 설정이 /etc/hosts.deny파일의 설정내용이라면 telnet서비스에 대하여 192.168.1.0네트워크 사용자들의 접속을 거부한다는 설정임

in.pop3d : 192.168.1.0/255.255.255.0 EXCEPT 192.168.1.100

- 이 설정이 /etc/hosts.allow파일의 설정내용이라면 POP서비스에 대하여 192.168.1.100 호스트
(IP주소)를 제외한 192.168.1.0네트워크의 모든 사용자들의 POP접속을 허용한다는 설정임.


ㅇ 주의사항

- /etc/hosts.allow파일과 /etc/hosts.deny파일의 설정내용들이 겹칠 경우에는 /etc/hosts.allow파일의 내용이 우선 적용됨.
- 콜론(:)으로 구분하여 세번째 항목도 추가설정이 가능함.
- 대상리스트들의 구분은 Space나 ,(콤마)로 구분합니다.

ㅇ 정책적인 설정 제안

- 정책1 : 모든 서비스들에 대하여 모든 사용자들의 접속을 제한하고 특정 사용자들의 접속만을
허용하고자 한다.

- 설정1 : /etc/hosts.deny 파일에는 “ALL : ALL”로 설정하고
/etc/hosts.allow파일에는 “ALL : 192.168.0.10 192.168.0.11 192.168.1.200”
등과 같이 접속허용할 사용자들의 IP주소를 등록한다.

------------------------------------------------------------------------

- 정책2 : 모든 서비스에 대하여 특정 사용자의 접속만을 거부하려고 한다. (정책1과 반대경우)

- 설정2 : /etc/hosts.allow 파일에 아무런 내용이 없도록 한다. (또는 파일자체가 없어도 됨)
/etc/hosts.deny파일에는 “ALL : 192.168.0.10 192.168.0.11 192.168.1.200”
등과 같이 접속거부할 사용자들의 IP주소를 등록한다.
------------------------------------------------------------------------

- 정책3 : 특정서비스(예: telnet)에 대하여 특정 사용자들만 사용가능하도록 한다.

- 설정3 : /etc/hosts.deny 파일에는 “ALL : ALL”로 설정하고
/etc/hosts.allow파일에는 “in.telnetd : 192.168.0.10 192.168.0.11 192.168.1.200”
등과 같이 설정한다.

 
copyright.gif

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,032 명
  • 현재 강좌수 :  35,773 개
  • 현재 접속자 :  221 명