xinetd 란 무엇인가?
xinetd 의 이전 버전인 inetd 는 네트웍 접속을 제어합니다. “inetd가 관리하는 포트에 접속요청이 들어오면 inetd 는 tcpd 프로그램에게 요청을 넘기고 tcpd 는 hosts.{allow|deny} 파일의 규칙에 따라 허락 여부를 결정합니다.
여기서 허락된 요청에 대해 서버 프로세스(예를 들면,
ftp)가 시작됩니다. 이런 구조를 tcp wrapper라
한다.”라는 것은 네트워크 서비스 동작의 이해에서 말씀드렸습니다.
xinetd은 tcp wrapper 가 제공하는 것과 비슷한 접근제어를 제공하지만, 훨씬 더 나은 기능을 제공합니다. (그래서 tcpd를 사용할 필요가 없습니다.)
특정한 인터페이스에 특정한 서비스를 지정하기(binding) (내부네트웍과
외부 세계에 서로 다른 서비스를 제공할 수 있습니다.)
ip_masquerading (또는, Network Address Translation -NAT) 과 조합하여 사용하면 다른
시스템에 대해 아주 훌륭한 프록시로서 사용될 수 있습니다.
이미 말했지만 주요한 결점은 RPC 콜에 대해 완벽한 지원이
되지 않는다는 점입니다. 그러나 xinetd 와 portmap 을 같이 이용하면 해결할 수 있다고 합니다. 또는, inetd와 공존시켜서 해결할 수도 있습니다.( 일부 문서에서는 권장하지 않은 방법이므로 불편하지 않다면 개의치
말고 넘어 갑시다. ;) )
컴파일과 설치
xinetd 구하기
기본적으로 와우 7.0 이상에 함께 설치되며 www.xinetd.org 에서도 구할 수 있습니다.
설치 전통적인 방법으로 설치합니다. 아니면 rpm으로 ...
|
# /configure; make; make
install |
컴파일할 때 줄 수 있는 옵션 3 가지
1. --with-libwrap : 이 옵션은 tcpd 설정파일(/etc/hosts.{allow,deny})
을 검사하도록 합니다. tcpd 를 따로 설치할 필요가 없으므로 권장하지 않습니다.
2. --with-loadavg : 이 옵션은 max_load 설정 (뒤에서 설명합니다.) 을 참고하도록 합니다. 지나친 부하를 받았을 때 몇몇 서비스를
비활성화(deactivation) 시킬 수 있어서 DoS 공격을
막는데 필요한 옵션입니다.
3. --with-inet6 : IPv6을 사용하고 싶으면 이 옵션을 줍니다. IPv4와 IPv6 커넥션이
모두 관리되지만, IPv4 주소가 IPv6 포맷으로 변환됩니다.
xinetd을 시작할 때 inetd을 멈출 필요는 없지만, 그렇게
하지 않으면 두 데몬이 예측할 수 없는 행동을 초래할 수도 있습니다.
xinetd 사용 방법
|
주 설정파일은 /etc/xinetd.conf 입니다. |
환경설정 파일은 default 섹션과 각 서비스를 정의 해 놓은 디렉토리를 알려주는 includedir 섹션의 두 부분으로 구성 되어 있습니다.
default 섹션에서는 xinetd 이 관리하는 모든 서비스에서 사용되는 속성을 정의합니다.
물론, 이 내용은 각 서비스를 정의하는 부분에서 그 옵션을
재정의하여 쓸 수 있습니다.
includedir /etc/xinetd.d
부분은 xinetd을
통해서 제공할 서비스들을 모아 두는 디렉토리를 지정합니다.
|
가장 보편적인 서비스인 telnet 을 열어서 형식을
확인해 봅시다. |
각 서비스는 service 라는 예약어로 시작되어 서비스명을 적어주어야 합니다.
여기서 서비스명은 /etc/services 파일내에 있는
service-name 필드와 일치해야 합니다.
그 다음, 서비스가 가질 각 속성과 값을 대입 합니다. 특이한 것은 += , -= 와 같은 연산을 지원하는 점입니다. 이 연산자는 기존 값의 목록에 새로운 값을 추가/제거 하는 연산입니다. 다음 표는 서비스가 가질 수 있는 속성의 목록과 설명입니다.
|
속 성 |
의미 / 값 |
|
socket_type |
사용하는 TCP/IP 소켓, stream(TCP), dgram(UDP), raw, seqpacket이 올 수 있다. |
|
protocol |
서비스가 이용하는 protocol 지정. /etc/protocols 에 있다. 지정되지
않으면 서비스가 이용하는 protocol 이 디폴트로 지정된다. |
|
server |
실행될 Daemon , 반드시 지정되어야 한다. |
|
server_args |
Daemon 에 넘겨질 인수 지정한다. |
|
port |
서비스하는 포트번호 /etc/services 에
있는 내용과 일치해야 한다. |
|
wait |
yes나 no. |
|
user |
daemon 의 UID를 설정, xinetd의 UID가 0이 아니면 의미가 없다. |
|
group |
daemon 의 GID를 설정, xinetd의 GID가 0이 아니면 의미가 없다. |
|
nice |
daemon 의 우선순위 (nice)를 지정. |
|
access_times |
서비스를 이용할 수 있는 시간 간격을 설정. |
위의 표 외에도 몇가지의 속성을 더 부여할 수 있습니다.
서비스의 예
와우리눅스 7.1 파란에서 proftpd를 xinetd 를 이용하여 서비스 하는 예를 들어 보겠습니다.
proftpd 는 standalone 모드와 inetd 모드 두가지로
작동할 수 있는데, /etc/xinetd.d 에는 proftpd 서비스가
들어있지 않습니다. 그러므로 이 파일을 만들어 주어야 하는데 표준적인 서비스인 telnet 을 복사해서 수정하여 사용하여도 됩니다.
그러나, proftp가 설치된 경우라면, /etc/proftpd/conf/ 디렉토리로부터 proftpd.xinetd 파일을
복사하여 사용하면 됩니다.
|
# cp
/etc/proftpd/conf/proftpd.xinetd /etc/xinetd.d/proftpd |
여기서는 복사하면서 이름을 바꾸었지만, 필수 사항은 아닙니다.
복사한 파일을 열어 아래 항목을 변경합니다.
|
# vi
/etc/xinetd.d/proftpd disable
= no # <-- yes를 no로 변경 |
이제 localhost 로 접속을 시도해 볼 차례입니다. 그러나 먼저 확인을 해야 할 사항이 있습니다. 한 서비스를 standalone 모드와 inetd 모드로 동시에 설정하면 에러가
나므로,
|
# vi
/etc/proftpd/conf/proftpd.conf ServerType
= inetd |
와 같이 바꾸어 주어야 합니다. (※ xinetd 가 아니라 inetd 입니다.)
그리고, proftpd 가 떠 있다면 종료시킵니다.
|
# /etc/rc.d/initd.d/proftpd
stop |
xinetd 를 재실행 합니다.
|
# /etc/rc.d/initd.d/xinetd
restart |
이제 실제로 ftp 서비스가 정상적으로 이루어 지고 있는지를
테스트해 봅니다.
xinetd 와 관련된 또 하나의 예를 들어 보겠습니다. (서비스 이름처럼 함부로 사용하지 마십시오. :) )
1.
/etc/services 파일에 다음 줄을 추가합니다.
donotuse 555/tcp
2.
/etc/xinetd.d/ 디렉토리에 다음과 같은 서비스를 만듭니다.
# vi donotuse
|
service donotuse { disable =
no flags =
REUSE socket_type =
stream wait =
no user =
root server =
/sbin/shutdown server_args =
-r now only_from =
127.0.0.1 log_on_failure +=
USERID } |
3. telnet donotuse 를 실행하여 실제로 shutdown 명령이
실행 되는지 확인합니다.
[출처] xinetd 설정하기|작성자 리밥