
이 글은 xinetd 에 관해 다룬다.
위 그림은 init 프로세스에 의한 서비스 실행 흐름도/etc/inetd.conf에 있다.ident	stream	tcp	nowait	root	/usr/sbin/sshd	sshd -i
/etc/services의 서비스 명wait 또는 nowait. 다른 프로토콜은 nowaitinetd가 서비스에 연결해야하는 프로그램/etc/hosts.allow와 /etc/hosts.deny 파일의 접속 제어 목록들을 살핀다.xinetd), standalone 대몬 차이httpd, sendmail과 같은 그 자체적으로 항상 메모리에 상주해 서비스 요청 시 실시간으로 응답하는 독립방식 서비스(standalone)xinetd라는 수퍼대몬에 의해 실행되고 제어되는 xinetd 수퍼 대몬방식의 서비스telnetrsyncxinetd 서비스와 standalone 서비스의 비교| 구분 | xinetd 환경 서비스 | standalone 서비스 | 
|---|---|---|
| 의미 | xinetd 수퍼 대몬에 의해 제어되는 서비스들의 대몬 | 독립적으로 실행되는 서비스들의 대몬 | 
| 실행방법 | 필요할 때, xinetd에 의해 수행됨 | 독립적으로 수행됨 | 
| 대몬 상주 여부 | xinetd에 의해 call되고, 서비스 완료 후 자동 종료 | 항상 메모리에 상주 | 
| 실행속도 | 느림 | 빠름 | 
| 자원 사용 | 적음 | 많음 | 
| 기타 | /etc/xinetd.d/서비스명으로된 xinetd 제어 파일이 존재함 | /etc/rc.d/init.d/서비스명과 같은 파일명으로 존재함  | 
| 접근제어 | tcp_wrapper에 의해 접근 제어됨/etc/hosts.allow, /etc/hosts.deny 파일로 접근 제어 가능 | 자체 설정 파일에 의해 접근 제어할 수 도 있음tcp_wrapper에 의한 접근 제어 가능 | 
| 로깅 | /etc/syslog.conf 파일에 따름 | /etc/syslog.conf 파일에 따름 | 
| 대표적 서비스 | ipop3d telnetd rsync ftpd  | httpd sendmail named xinetd(xinetd 자체는 독립 방식 서비스)  | 
standalone 대몬들도 xinetd 환경으로 변경할 수 있고, xinetd 환경에서 서비스되는 대몬들도 독립적인 실행모드로 변경할 수 있음sshd의 경우, standalone이지만 /etc/hosts.allow, /etc/hosts.deny의 접근 제어 받음. 따라서 standalone 대몬도 tcp_wrapper의 영향을 받을 수 있음xinetdxinetd의 특징/etc/xinetd/*).
tcp_wrapper를 내장하고 있기 때문에 접근제어를 할 수 있다.xinetd 방식 주의 사항xinetd는 외부에서 서비스 요청이 있을 때, /etc/xinetd.d/ 디렉토리 내의 각 서비스 파일들에 정의되어 있는 내부 프로그램(대몬)을 실행시켜주는 역할을 한다.xinetd가 없다면 ftp, telnet 대몬들은 자기들을 호출하는가를 항상 확인해야한다. 하지만 xinetd가 그 역할을 대신해서 해당 서비스 요청이 들어올 때마다, 요청 대몬을 실행시켜준다./etc/xinetd.d 디렉토리 내의 서비스 파일들에 등록되어 있는 대몬들이 root 계정으로 실행되고 있는지 꼭 확인해봐야한다. /etc/xinet.d 디렉토리의 각 서비스 파일들의 퍼미션에서 일반유저들에게 xinetd 방식의 서비스 흐름xinetd 기반 대표 서비스인 telnet 서비스의 경우xinetd 대몬은 외부에서 요청된 서비스를 tcp_wrapper에게 넘겨준다.tcp_wrapper는 /etc/hosts.allow와 /etc/hosts.deny 파일의 설정을 확인 해, 해당 요청자의 접근을 허용할 것인가? 허용하지 않을 것인가?를 결정한다./etc/syslog.conf에 설정되어 있는 /var/log/secure 파일에 해당 접속에 대한 정보를 기록, /etc/xinetd.d/telnet 파일을 불러 서비스를 연결한다. 이 때, /etc/xinetd.d/telnet 파일내의 server 지시자행에 설정되어 있는 telnet 대몬의 위치를 찾아서 요청을 처리한다./etc/syslog.conf 파일에 설정되어 있는 /var/log/secure 파일에 허가되지 않은 접속이 있었다는 로그를 남기고 접속 요청을 거부하게된다./var/log/secure/var/log/secure에 남긴다.xinetd 서비스 관련 파일들| 파일 | 역할 | 
|---|---|
/etc/xinetd.conf | xinetd 서비스에 공통으로 적용되는 설정 파일xinetd의 최 상위 설정 파일. 아래 각 서비스 설정 파일에 global 한 영향을 준다.  | 
/etc/xinetd.d/[SERVICE_FILES] | xinetd 기반 서비스들 개별 설정 파일 | 
/usr/sbin/xinetd | xinetd 대몬 파일 | 
/etc/sbin/tcpd | tcp_wrapper 대몬 파일 | 
/etc/rc.d/init.d/xinetd | xinetd 시작/ 종료 스크립트 파일 | 
/etc/hosts.allow | 서비스별 허용할 host, ip 리스트(tpc_wrapper) | 
/etc/hosts.deny | 서비스별 허용 하지 않을 host, ip 리스트(tpc_wrapper) | 
/etc/syslog.conf | 시스템 로그 설정 파일 | 
/var/log/secure | tcp_wrapper 로그 파일(접근 기록 파일) | 
/etc/services | 서비스 포트 설정 파일 | 
/etc/protocols | 프로토콜 설정 파일 | 
telnetxinetd에 의해 관리되는 서비스xinetd에 의해 허가된 사용자인지를 검사 받은 후, xinetd의 telnet설정 파일(/etc/xinetd.d/telnet)에 정의 되어 있자가 telnet 서비스를 이용하게 된다./etc/xinetd.conf/etc/xinetd.conf

/etc/xinetd.conf#
# This is the master xinetd configuration file. Settings in the
# default section will be inherited by all service configurations
# unless explicitly overridden in the service configuration. See
# xinetd.conf in the man pages for a more detailed explanation of
# these attributes.
defaults
{
# The next two items are intended to be a quick access place to
# temporarily enable or disable services.
#
#            enabled               =
#            disabled =
# Define general logging characteristics.
             log_type  = SYSLOG daemon 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
             v6only                  = no
# setup environmental attributes
#
#            passenv               =
             groups                 = yes
             umask                  = 002
 
# Generally, banners are not used. This sets up their global defaults
#
#            banner                 =
#            banner_fail           =
#            banner_success   =
}
includedir /etc/xinetd.d
/etc/xinetd.d/[SERVICE FILE]의 서비스 파일들에 공통적으로 적용하는 설정 내용.includedir /etc/xinetd.d는 xinetd 서비스의 작용을 받는 개별 서비스 설정 파일들을 /etc/xinetd.d 디렉토리에서 불러오는 것이다.rsync 개별 설정 파일(/etc/xinetd.d/rsync)[root@os3 ~]# cat /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#            allows crc checksumming etc.
service rsync
{
             disable   = yes
             socket_type     = stream
             wait            = no
             user            = root
             server          = /usr/bin/rsync
             server_args     = --daemon
             log_on_failure  += USERID
}
/etc/xinetd./rsync 파일, rsync의 개별 설정이다.service [NAME]: 서비스 이름. 가능한 파일이름과 /etc/services 파일에 등록된 서비스 이름과 동일해야함disable: 해당 서비스를 서비스 할 것인가? 아닌가?no: 서비스를 하도록 설정yes: 서비스 하지 않음socket_type: wait: xinetd가 서비스 요청을 받은 경우, 이후에 즉시 또 다른 요청을 처리할 것인지(no) 아닌지(yes) 여부 지시socket_type이 stream일 경우 반드시 nouser: 이 서비스를 어떤 사용자 권한으로 서비스 할 것인가? root로 되어 있다면 root로 설정server: 해당 1)서비스 요청이 들어왔을 경우, 해당 2)서비스를 담당하게 될 대몬 파일의 위치를 절대 경로로 지정log_on_failure: 서버 접속에 성공하지 못하였을 때 로그파일(대부분 /var/log/secure)에 기록하는 내용들을 설정할 수 있다.HOST, USERID, ATTEMPT, RECORD 등을 추가로 설정할 수 있다.HOST: 접속을 시도한 클라이언트의 IPUSERID: 접속한 사용자 ID+=: /etc/xinetd.conf 파일의 기본설정항목에 추가할 항목을 지정할 때 사용하는 것log_on_failure += USERID라고 한 경우는 해당 서비스 접속 시도에 실패하였을 경우에 /etc/xinetd.conf 파일에 정의된 기복항목 외에도 USERID 값, 즉 접속한 사용자의 ID를 로그파일에 추가로 기록하라는 의미log_on_success: 서버 접속에 성공하였을 경우에 기록할 내용을 설정PID: 프로세스 IDHOSTID: 클라이언트의 IP 주소USERID: 접속한 사용자의 IDEXIT: 프로세스의 종료 상태DURATION: 연결 지속 시간only_from: "only_from = 192.168.1.0/24"와 같이 설정이 가능하다. 현재 이 서버로 해당 서비스 접속이 가능한 곳은 192.168.1.0 네트워크내의 호스트들로 제한한다.no_access: "no_access = 192.168.0.100"과 같이 설정이 가능하며, 접속 가능한 호스트 중에서 192.168.1.100번 IP주소를 가진 호스트는 제외되어 접속하지 못한다는 의미instances: "instances = 60" 등과 같은 설정이 가능하며, 해당 서비스로 접속이 가능한 총 접속자 수는 60명까지로 제한된다. 따라서, 현재 접속자 수 60명'까지'는 접속을 허용하지만 61번 째 접속자는 접속을 거부한다.access_times: "access_times = 08:00-18:00" 와 같은 설정이 가능하다. 해당 서비스 이용 가능 시간을 오전 08시~오후 06시로 제한하는 설정이다.per_source: "per_source = 5와 같은 설정이 가능하며, 동일한 호스트에서 해당 서비스로의 접속 시 동시에 5번 이상 접속할 수 없ㅏ. 이 서비스는 서비스 거부 공격(DoS)를 차단하기 위해 사용될 수 있다.xinetd의 시작과 종료xinetd 서비스를 위해서는 xinetd 대몬이 실행되어 있어야한다.
xinetd 대몬을 실행하려면 /etc/rc.d/init.d/xinetd 스크립트 파일을 이용한다.
이 스크립트는 서버 부팅과 함께 자동으로 실행된다.
xinetd 관련 파일들을 수정한 후, xinetd를 재시작하거나 상태를 점검할 필요가 종종있게 마련이다.xinetd 시작$ sudo /etc/rc.d/init.d/xinetd start
xinetd (을)를 시작 중:	[OK]
$ sudo ps -ef | grep xinetd
root      5073     1  0 04:32 ?        00:00:00 xinetd -stayalive -pidfile /var/run/xinetd.pid
root      5076  5036  0 04:32 pts/0    00:00:00 grep --color=auto xinetd
xinetd 종료$ sudo /etc/rc.d/init.d/xinetd stop
xinetd (을)를 정지 중:	[OK]
$ sudo ps -ef | grep xinetd
root      5086  5036  0 04:34 pts/0    00:00:00 grep --color=auto xinetd
xinetd 대몬이 종료되어 ps 명령어로 확인이 되지 않는다.xinetd 재시작$ sudo /etc/rc.d/init.d/xinetd restart
xinetd (을)를 정지 중:	[OK]
xinetd (을)를 시작 중:	[OK]
xinetd의 상태 확인$ sudo /etc/rc.d/init.d/xinetd status
xinetd (pid 5107)를 실행 중...
tcp_wrapperxinetd는 tcp_wrapper를 내장xinetd모드에서 실행되는 서비스들(ex: ftp, telnet, ssh 등)은 거의 대부분 tcpd라는 tcp_wrapper의 대몬에 의해 접속 제어를 받게된다.    /etc/hosts.allow/etc/hosts.denytcp_wrapper의 제어 파일인,  /etc/hosts.allow, /etc/hosts.deny 에 의해 제어되는 서비스가 xinetd기반 서비스에 한정되어 있지 않다tcp_wrapper의 제어 파일인 /etc/hosts.allow, /etc/hosts.deny파일의 접근 제어를 설정할 수 있다./etc/hosts.{allow,deny}/etc/hosts.allow, /etc/hosts.deny 파일의 설정| 구분 | 왼쪽부분 설정 항목 | 오른쪽 부분 설정 항목 | 
|---|---|---|
| 대상 | 대상서비스 | 접근 제어 대상(host, IP주소, 네트워크 주소 등) | 
| 설정 값 | tcpd에 의해 제어되는 모든 서비스 명xinetd 기반의 서비스들 뿐 아니라 standalone 대몬들의 서비스들도 가능함 | 특정 도메인명(domain name) 특정 호스트명(hostname) 특정 IP주소(IP Address) 특정 네트워크(Network)  | 
| 설정 예 | telnetrsyncsshdproftpd | linux.co.kr web1 192.168.0.100 192.168.1.0/24 192.168.2.0/255.255.255.0  | 
실제 예
proftpd: 192.168.10.0/255.255.255.0 EXCEPT 192.168.10.100
proftpd: 192.168.10.100 : twist /bin/echo "Access Denied!"
sshd: 192.168.0.100
다음은 접근제어 설정 시 주의사항 및 규칙이다.
1. 왼쪽 항목과 오른쪽 항목은 콜론(:)으로 구분한다. 세번째 항목을 계속 설정할 때도 콜론으로 구분한다.
2. /etc/hosts.allow의 설정과 /etc/hosts.deny 설정이 중복되었을 경우 /etc/hosts.allow파일의 내용이 우선 적용
3. # 문로 시작하면 주석문
4. 각 대상 리스트들의 나열은 space( )나  콤마(,)로 구분한다.
hosts.deny의 예
ALL:ALL
/etc/hosts.allow, /etc/hosts.deny의 해석은 콜론(:)을 기점으로 하여 왼쪽에는 서비스될 대상 서비스, 오른쪽에는 대상 IP 및 호스트 정보hosts.allow의 예
in.telnetd : 210.101.112.240 210.101.112.241 211.123.12.12 168.126.3.1
in.ftpd : 210.101.112.240 210.101.112.241 211.123.12.12 168.126.3.1
ipop3d : ALL
hosts.allow 파일에 설정되어 있는 첫번째 행의 설정은 telnet 서비스에 대해 오른쪽에 나열되어 있는 ip에 대해서만 허용ftp 서비스로서 오른쪽에 나열된 IP에 대해서만 허용ipop3d에 대해서는 모든 곳에서의 접근 허용tcp_wrapper에 의해 접근제어(허용 또는 차단)가 된 후에는 그 기록을 /var/log/secure 파일에 남긴다.