이 글은 xinetd 에 관해 다룬다.
init
프로세스에 의한 서비스 실행 흐름도/etc/inetd.conf
에 있다.ident stream tcp nowait root /usr/sbin/sshd sshd -i
/etc/services
의 서비스 명wait
또는 nowait
. 다른 프로토콜은 nowait
inetd
가 서비스에 연결해야하는 프로그램/etc/hosts.allow
와 /etc/hosts.deny
파일의 접속 제어 목록들을 살핀다.xinetd
), standalone 대몬 차이httpd
, sendmail
과 같은 그 자체적으로 항상 메모리에 상주해 서비스 요청 시 실시간으로 응답하는 독립방식 서비스(standalone
)xinetd
라는 수퍼대몬에 의해 실행되고 제어되는 xinetd
수퍼 대몬방식의 서비스telnet
rsync
xinetd
서비스와 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
의 영향을 받을 수 있음xinetd
xinetd
의 특징/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 | 프로토콜 설정 파일 |
telnet
xinetd
에 의해 관리되는 서비스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_wrapper
xinetd
는 tcp_wrapper
를 내장xinetd
모드에서 실행되는 서비스들(ex: ftp, telnet, ssh 등)은 거의 대부분 tcpd라는 tcp_wrapper
의 대몬에 의해 접속 제어를 받게된다. /etc/hosts.allow
/etc/hosts.deny
tcp_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) |
설정 예 | telnet rsync sshd proftpd | 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
파일에 남긴다.