참조 - http://sol9501.blog.me/70084912639

1. 데몬실행모드

  - XINETD데몬 - XINETD모드로 실행이 되는 데몬은 xinetd라는 데몬에 의해 관리되며 필요한 경우에만 메모리로 적재(load)되어 실행이 되어 응답을 한다. 이는 메모리에 항상 상주해 있는 것이 아니므로 standaloone보다는 서버부하를 상대적으로 줄일 수 있다는 장점이 있다.

 

  - Standalone - standalone모드로 실행이 되는 데몬은 독립적으로 실행이 되며 항상 메모리에 상주하여 서비스요청이 있을 때 언제든 바로 응답을 합니다. 즉 빠른 응답속도를 요하는 경우에 이 모드를 사용합니다.

 

구분

XINETD환경서비스

독립(Srandalone)서비스

의미

xinetd 수퍼데몬에 의해 제어되는 서비스들의 데몬

독립적으로 실행되는 서비스들의 데몬

실행방법

요청시 xinetd에 의해 수행됨

독립적인 서비스를 위하여 항상 독립적으로 수행됨

데몬상주여부

xinetd에 의해 로드된 후에 서비스 완료후에는 종료됨

독립적인 서비스를 위하여 항상 메모리에 독립데몬으로 상주해 있음.

접근제어

tcpd에 의해 접근제어됨(/etc/hosts.allow, /etc/hosts.deny 파일로 접근제어 할 수 있음)

tcpd와는 무관하지만 자체 설정파일에 의해 접근제어를 할 수도 있음.

대표적인 데몬

telnetd, ftpd,ipop3d

httpd, sendmail,named

참고

 * 독립적으로 실행되는 데몬들도 xinetd환경으로 변경할 수 있으며 반대도 가능하다.( 5.데몬환경서비스 변경을 참고)

 

* 주의 : /etc/xinetd.d/ 디렉토리내의 서비스파일들에 등록되어 있는 데몬들이 root계정으로 실행이 되고 있는지 꼭 확인을 해봐야 한다. 또한 /etc/xinetd.d/디렉토리내의 각 서비스 파일들에 대하여 일반유저들에게 읽기 권한까지도 빼버려야한다. 이 파일이 일반유저들에게 읽기 권한이 있다면 해당서버에서 어떤 서비스를 하고 있는지를 모두 알수 있을 뿐만 아니라 실행파일의 위치까지도 확인 가능하기 때문이다.

 

그림 1)xinetd.d 디렉토리 파일



2. XINETD 모드의 서비스흐름

  - 서비스 요청 후 서비스가 연결되어 지는 과정(ex : telnet)


 3. XINETD에 관련된 파일목록

 

파일

설명

/etc/xinetd.conf

* xinetd 서비스에 공통적으로 적용되는 주 설정파일

/etc/xinetd.d/*

* xinetd로 서비스될 파일들이 존재하는 디렉토리

/usr/sbin/xinetd

* xinetd 데몬

/etc/services

* 서비스포트 설정파일

/etc/protocols

* 프로토콜 설정파일

/etc/syslog.conf

* 시스템로그 설정파일

/usr/sbin/tcpd

* tcpd데몬

/etc/hosts.allow

* 서비스별 허용목록파일

/etc/hosts.deny

* 서비스별 거부목록파일

/var/log/secure

* tcpd 로그파일

/etc/rc.d/init,d/xinetd

* xinetd 시작/종료 스크립트파일

 

  1) /etc/xinetd.conf 파일

그림 3-1) /etc/xinetd.conf


- 그림 2-1을 보시면 /etc/xinetd.conf 파일의 구성은 크게 두 가지로 나누어 집니다.

  첫 번째로 위의 그림에서는 시작 부분이 짤려서 보이지 않지만 defaults 설정부분입니다. /etc/xinetd.d/디렉토리내에 존재하는 xinetd서비스파일들에 대해 공통적으로 적용하는 설정내용입니다.(설정내용의 의미는 잠시 후 다루겠습니다.)

  두 번째로 “includedir /etc/xinetd.d”로써 xinetd 서비스의 적용을 받는 개별 서비스 설정파일들을 /etc/xinetd.d/디렉토리에서 불러오는 것입니다.

 

2) /etc/xinetd.d/ 파일들의 설정내용

그림 3-2) /etc/xinetd.d/opensshd 파일


- 위의 파일은 /etc/xinetd.d/openssh파일의 내용으로써 xinetd환경하에서 서비스되고 있는 ssh 서비스가 어떻게 서비스 될 것인가를 정의하고 있습니다. 각 행에서 설정될 수 있는 지시자들을 알아 보겠습니다.

 

지시자

설명

service

* 서비스 이름입니다.

disable

* 해당 서비스를 할 실행 할 것인가(no) 아닌가(yes)를 결정합니다. 해당서비스를 부팅시 자동 실행되고자 한다면 no로 지정합니다.

socket_type

* tcp일 경우에는 stream이며 udp일 경우에는 dgram이라고 명시되어 있다.

wait

* xinetd가 서비스 요청을 받은 경우 이후에 즉시 또 다른 요청을 처리할 것인지(no) 아닌지(yes)를 결정합니다. stream일 경우에는 반드시 no이어야 합니다. no는 현재 요청외 다른 접속요청을 새로운 것으로 시작하여 처리하게 됩니다.

user

* 이 서비스를 어떤 사용자 권한으로 서비스 할 것인가를 결정합니다.

server

* 이 서비스를 실행할 때에 어느 위치에 있는 프로그램을 불러와 연결할 것인가를 명시한 것입니다. 반드시 절대경로로 표시합니다.

log_on_failure

* 서버접속에 성공하지 못하였을 때 로그파일에 기록하는 내용들을 설정할 수 있습니다. 여기에는 HOST, USERID, ATTEMPT, RECORD등이 구가로 설정될 수 있습니다. HOST란 접속을 시도한 클라이언트 IP주소를 의미하고, USERID란 접속한 사용자의 ID를 각각 의미합니다. += /etc/xinetd.conf파일의 기본설정에 추가할 항목을 선택하고 -= /etc/xonetd.conf파일에서 제외할 항목을 설정합니다.

log_on_success

* 서버접속에 성공하였을 경우에 기록할 내용을 설정할 수 있습니다. 이 설정에는 PID, HOST, USERID, EXIT, SURATION등을 기록할 수 있습니다. PID란 프로세스 ID를 뜻하며 EXIT는 프로세스의 종료상태를 의미하고 DURATION은 연결지속시간을 의미합니다.

only_from

* 서비스 접속  가능한 ip대역을 적어줍니다. 예를 들어 only_from = 192.168.49.0/24 와 같은 경우 192.168.49.0의 네트워크 대역대로 접속가능한 ip가 제한됩니다.

no_access

* only_from과 반대의 개념입니다. 접속불가능한 ip주소를 할당합니다.

instances

* 해당서비스에 접속이 가능한 총 접속자수를 제한합니다.

per_source

* 동일한 호스트에서 해당서비스로의 접속시에 가능한 접속횟수를 지정해줍니다. 예를 들어 per_source = 5와 같다면 동일한 호스트에서 해당 서비스로의 접속이 동시에 5번을 초과할 수 없습니다. 이 서비스는 서비스거부공격(Dos)을 차단하기 위해 사용될 수 있습니다.

 

  3) xinetd에 의한 접속제어

   - 특정 ip나 도메인으로부터 서버로의 telnet, ftp, pop등의 접속을 차단할 수 있습니다.

   - 접속기록이나 접속시도기록을 특정한 파일에 로그로 기록합니다.

   - xinetd tcp_wrapper를 내장하고 있기 때문에 xinetd모드에서 실행되는 서비스들은 거의  대부분 tcpd라는 Tcp_Wrapper의 데몬에 의해 접속제어를 받게 됩니다. 다시 말해 개별서비스들의 접근허용을 설정하는 파일은 /etc/hosts.allow이며 거부하는 파일은 /etc/hosts.deny입니다.

 

* /etc/hosts.allow /etc/hosts.deny의 설정이 중복이 되었을 경우 /etc/hosts.allow파일의 내용이

 적용됩니다.

 

* 설정 예

sshd : 192.168.49.0/24

proftpd : 192.168.10.0/24 EXCEPT 192.168.10.100

 

그림 3-3) /etc/hosts.allow, deny파일


 

 4. standalone의 서비스를 xinetd형으로 변환시켜보자.

* 현재 standalone타입의 ssh서비스를 xinetd형으로 변환시키겠습니다.

1) xinetd서비스 파일을 생성하자.

  #vi /etc/xinetd.d/opensshd

# default: off
# description: OpenSSH server daemon For XINETD
service ssh
{
disable = no
flags = REUSE
protocol = tcp
socket_type = stream
instances = 50
wait = no
user = root
server = /usr/sbin/sshd
server_args = -i
log_on_success = HOST PID
log_on_failure = HOST
}

 

2) 현재 inetd에 의해 관리되고 있는 sshd데몬을 정지 혹은 삭제시키자.

- 정지시키셔도 되고 삭제시키셔도 됩니다.

정지 - #chkconfig sshd off

삭제 - #chkconfig sshd --del

* 추가는 chkconfig sshd --add입니다. 확인은 chkconfig --list입니다.

 

그림 4-1) sshd서비스 제거


그림 4-2) sshd서비스 제거 후

 

3) 서비스를 추가한다.

    #ntsysv

     [*]opensshd

  

4) reboot로 재 시작 후 확인해 보면 그림 4-3과 같은 형태를 볼 수 있습니다


  - 실행해 보시면 잘 작동됨을 아실 수 있습니다. /etc/hosts.allow파일과 /etc/hosts.deny파일을 수정해 가며 실험해 보시면 ssh서비스가 위 두개 파일의 환경설정에 영향을 받음을 확인 하실 수 있습니다. 물론 재부팅하기 싫으시면 /etc/rc.d/init.d/xinetd restart하셔도 됩니다. 지금까지 위의 포스팅을 잘 살펴보셨다면 왜 standalone xinetd로 만들었고 이렇게 만들었을 때 장점과 관리방법등을 충분히 이해하셨을 거라고 생각합니다. 이 외의 telnet이나 기타 다양한 서비스등을 한 번 자신의 타입에 변경시켜 보시길 바랍니다.  

'System > Linux' 카테고리의 다른 글

리눅스 - usb 마운트  (0) 2011.02.06
TCP wrappers  (0) 2011.01.25
리눅스 - xinetd  (0) 2011.01.25
리눅스 - telnet-server 설치  (0) 2011.01.25
zmodem  (0) 2011.01.25
Posted by linuxism
,