Posted on 2004/01/28 19:03
Filed Under 리눅스기술문서/서버관련 조회수: view 6088

1. xinetd란?

xinetd - Extended Internet Services daemon

xinetd는 inetd의 문제점들을 보완하고 기능이 추가된 확장판이라고 할수
있으며, 관련화일들의 구성이나 설정면에서 다양한 옵션을 융통성있게 제공
하고 있어 접근설정이나 기타설정이 쉽게 되어있다. 현재 redhat 7.0에서는
기본적으로 xinetd가 설치되고 있다.

xinetd의 최신버젼이나 최근내용들은 xinetd의 홈페이지를 통해 확인할수
있다.

(http://www.xinetd..org)


2. xinetd의 기능

기존의 inetd와 tcpd가 지원하는 기능과의 차이점과 추가된 부분을 알아보자


1) 접근 제어

-. configure시 libwrap 옵션을 사용하면 tcp_wrapper에서 사용하는
hosts.allow, deny파일을 사용하여 접근제한을 할 수 있다. 물론 옵션을
지정하지 않고 기존 inetd.conf에서처럼 설정하여 tcpd의 기능을 사용할수
도 있다.
-. 시간에 근거한 접근제한을 걸수 있다.

2) DoS공격 방지

-. 연결요청에 대한 제한을 둘수가 있어 port bomb에 적당한 응답을 할 수
   있다.
-. 로그화일의 사이즈 제한을 둘수있어 디스크가 full되는 것을 막을수 있다.

3) 확장된 로깅기능

-. 서비스별로 syslog의 설정을 할 수 있다.
-. 접속 시작시간과 종료시간을 기록할 수 있다. 따라서 사용자가 서비스를
    이용한 시간을 체크할수 있다.
-. 접속에 실패한 기록에 대해 좀더 많은 로그를 기록할수 있다.

4) 원격 호스트로의 서비스 전달

-. TCP stream을 다른 호스트로 전달하는 기능. NAT와 같이 외부에서 접근
할수 없는 경우 xinetd를 이용하여 내부의 서버도 다른 호스트에게 서비스를
할수있다.

5) IPv6 지원

-. xinetd 2.1.8.8pre 버전들은 IPV6를 지원한다.

6) 사용자별 서비스 차등적용

-. 사용자의 연결상태와는 상관없이 매번 다른 배너를 보여줄 수 있다.

3. 설치 및 설정

1) 설치

xinetd의 설치는 xinet의 홈페이지에서 소스나 rpm화일을 모두 구할수 있으
며 ./configure, make, make install의 일반적인 순서를 따른다. 컴파일
시 세가지의 옵션을 선택하여 있으며 옵션에 따른 기능선택을 하도록 한다.
옵션에 대한 설명은 아래와 같다

╀ --with-libwrap

: xinetd의 컴파일시 libwrap을 지원하도록 컴파일 할수있으며, 이때는
/etc/hosts.allow와 hosts.deny 파일을 참조하여 tcpd의 기능을 그대로
사용할수 있다. (예1)

(물론 libwrap 옵션을 선택하지 않고 tcpd를 사용하여 일반적인 inetd.conf
에서 설정했던것처럼 할수도 있다.)

╀ --with-loadavg

: 서버의 최대실행 설정옵션을 조정한다. 서버에 오버로드가 걸렸을 때 이
옵션을 이용하여 일부 서비스를 중단할수 있다. 이 옵션은 몇몇 종류의 DoS
공격을 막는데 가장 중요한 옵션이다.

╀ --with-inet6

: IPV6를 이용하고자 한다면 이 옵션을 사용할수 있다. IPv4와 IPv6의 연결
은 제어할 수 있지만 IPv4 주소들은 IPv6의 형식으로 바뀌어진다.

xinted를 시작하기전에 inetd를 멈출 필요는 없다. 하지만, 그렇게 하지않
는 것은 양쪽 데몬의 동작에 문제가 있을수도 있으니 가능한 어느 한쪽을 정지
한후 실행하도록 해야한다.

2) 설정

xinted의 설정내용은 크게 default와 service에 대한 내용으로 구분된다.

redhat 7.0에서는 default부분은 /etc/xinetd.conf에, service에 대한
내용들은 xinetd.conf에 따로 설정하여 /etc/xinetd.d 디렉토리에 서비스
별로 설정화일을 준비해 놓고 있다.

몰론 default와 service에 대한 설정은 xinetd.conf에 같이 기재할수 있
으며 이는 시스템 관리자의 취향에 따라 사용할수 있다.

아래는 redhat 7.0에서 기본적으로 설정되는 xinetd.conf 파일의 내용이다.


예제 1) xinetd.conf의 설정예

[root@violet93 /root]# more /etc/xinetd.conf
# Simple configuration file for xinetd
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
includedir /etc/xinetd.d

또, 기존의 inetd.conf의 내용을 변환하는 유틸리티 또한 지원하고 있는데
itox와 xconv.pl을 사용하여 작업을 할수있지만 정확한 변환내용을 생성하지
는 않고 있어 가능한 세부설정은 직접 작업하는 것을 권장한다.
itox 프로그램은 아직 유지되고는 있지만 더 이상 개발은 되지않고 있으며,
xcobv.pl은 결과물을 다시 수정되어야 하는등의 문제가 있다.

예제 2) inetd.conf를 xinetd.conf로 변환

/usr/sbin/xconv.pl < /etc/inetd.conf > /tmp/xinetd.conf

4. 사용예제

예1) telnet서비스에서 기존의 tcp_wrapper를 사용할 경우.

service telnet
{
flags = REUSE NAMEINARGS
protocol = tcp
socket_type = stream
wait = no
user = telnetd
server = /usr/sbin/tcpd
server_args = /usr/sbin/in.telnetd
}

예2) imap의 설정예

: 위와 같이 tcp wrapper의 설정화일을 사용하지 않고 직접 서비스별로
ip에 대한 접근제한을 설정할수 있다.

service imap
{
socket_type = stream
protocol = tcp
wait = no
user = root
only_from = 198.72.5.0 localhost
banner = /usr/local/etc/deny_banner
server = /usr/local/sbin/imapd
}

예3) telnet서비스의 설정예

: 서비스 허용시간에 대한 제한설정을 한 예제이다. 'instance=5' 라는 것
은 초당 허용하는 connection을 나타낸다.

[root@violet93 xinetd.d]# more telnet
# default: on
# description: The telnet server serves telnet sessions;
# it uses \\
# unencrypted username/password pairs for authentication.
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
access_times = 08:00-17:00
instances = 5
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}

예3) xinetd.conf에 default 설정내용과 service에 대한 설정을 같이
기재함.

# Sample configuration file for xinetd
#
defaults
{
instances = 25
log_type = FILE /var/log/servicelog
log_on_success = HOST PID
log_on_failure = HOST RECORD
# only_from = 128.138.193.0 128.138.204.0
# only_from = localhost
disabled = tftp
}
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
redirect = 192.168.1.1 23
bind = 127.0.0.1
log_on_failure += USERID
}
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
bind = 192.168.1.11
log_on_failure += USERID
}
#service chargen
#{
# type = INTERNAL
# id = chargen-stream
# socket_type = stream
# protocol = tcp
# user = root
# wait = no
#}
service xadmin
{
type = INTERNAL
socket_type = stream
protocol = tcp
user = root
wait = no
port = 7000
}

4. 참고문서 및 사이트

* xinetd 홈페이지 (http://www.xinetd.org)

* xinetd - Frederic Raynal
(http://www.linuxfocus.org/English/November2000/article175.shtml)

* xinetd - FAQ (http://www.xinetd.org/faq.html)

* An Unofficial Xinetd Tutorial - curator, The shimoo Griup
(http://www.macdecurity.org/resouces/xinetd/tutorial.shtml)

Writer profile
author image
-아랑 -
2004/01/28 19:03 2004/01/28 19:03

트랙백 주소 : 이 글에는 트랙백을 보낼 수 없습니다

About

by 서진우
Twitter :@muchunalang

Counter

• Total
: 4401633
• Today
: 336
• Yesterday
: 1001