본문 바로가기

공부/리눅스

서비스 운영방식 - standalone / inetd(xinetd)

반응형
*. 서비스 운영방식은 크게 두가지로 나뉜다.
standalone 방식과 inet 방식이다.

standalone 방식 - 서비스를 하려면 해당 서버가 메모리에 미리 올라와 있어야 한다.
            일반적으로 여기에 해당되는 서비스는 sendmail, apache, mysql , name server, nfs 등.
            이 방식으로 운영되는 서비스는 /etc/init.d/ 디렉토리 안에 있는 스크립트 파일을 보면 알 수 있다.
         
        서비스 실행 방법
        - /etc/init.d/sendmail start      => sendmail 서비스 시작
                        /etc/init.d/sendmail stop      => sendmail 서비스 종료
                      /etc/init.d/sendmail restart    => sendmail 서비스 재 시작.

                      또는 servce sendmail start  / service sendmail restart    / service sendmail stop 
                    *. 다른 standalone 방식의 서비스도 다 이런식으로 서비스 된다.
                                             

xinet 방식 - 이 방식의 서비스는 standalone 방식에 비하면 좀 복잡하다.
                standalone 방식과 가장 다른점은 해당 서버가 클라이언트가 서비스 요청할때 그때 자동으로 올라간다는 것이다.
                관리자가 서버를 올리거나 내리거나 할 필요가 없고 항상 메모리를 점유하는게 아니므로 편리하고 메모리 사용에
                효율적이다.
  이방식으로 운영되는 대표적인 서비스는 telnet 이나 pop3 그리고 finger 서비스이다.
  이방식으로 운영되는 서비스는 /etc/xinetd.d 디렉토리의 파일을 보면 알 수 있다.

              클라이언트가 telnet 으로 접속 시도할 경우

            ex)
                    1. telnet 192.168.10.1  => 디폴트 포트 번호 23 으로 접속시도 한다. 

                    2. xinetd 는 클라이언트가 요청하는 23번 포트가 어떤 서비스인지를 확인한다.
                    이때 참조하는 파일은 /etc/services 파일이다.
                    그 파일을 보면 23 번 포트를 사용하는 서비스는 telnet 으로 되어 있다.(기본설정)

      3. 그 다음 xinetd /etc/xinetd.conf 를 참조한다. 그리고 마지막줄 includedir 이 있으면
                  그 디렉토리 안에 있는 모든 파일중 서비스 이름이 telnet 으로 되어 있는 파일을 찾아서
                  disable=no 로 되어 있으면 거기에 있는대로 텔넷 서버파일을 실행한다.

                  4. 클라이언트 telnet 이 서버의 telnetd 데몬과 연결이 된다.

                    *. 클라이언트가 telnet 접속을 끊으면 telnetd 는 메모리에서 자동으로 내려온다. 
                    *. 다른 xinetd 방식의 서비스도 다 이런식으로 서비스 된다.                 

 
              서비스 실행방법

              예를 들어 telnet 서비스를 운영하려면

                /etc/xinetd.d/telnet => 이 파일을 편집기로 열어서
              disable = yes  ====> disable = no

              이렇게 변경한다음

            /etc/init.d/xinetd restart  또는 service xinetd restart  이렇게 하면 된다.

            *. xinetd 를 재실행하는것은 거의 모든 서버 데몬은 메모리로 올라갈때만 설정파일을 참조하기 때문이다.
              xinetd 가 메모리로 올라갈때 그때 고친파일을 참조한다. 그렇지 않으면 xinetd 는 여전히 고치기 전의
            내용으로 텔넷서비스를 서비스한다.
         

*. 당연히 부팅할때 자동으로 구동되는 데몬들은 전부 standalone 방식의 데몬이다.


inetd 데몬 프로그램은 거의 모든 유닉스 시스템에서 사용되고 있다.
그러나 redhat 리눅스 7 부터 inetd 를 확장시킨 xinetd 를 사용할 수 있다.

xinetd 는 inetd 와 비교하면 몇가지 부분이 강화되었다.

tcp, udp, rpc 서비스에 대한 접근 제어가 가능

서비스 운영시간을 지정 그 시간에만 서비스가 가능하게 할 수 있다

서비스 접속 기록 형태 세부적으로 설정할 수 있다.

Dos 공격예방을 위한 구동되는 데몬 갯수를 원하는대로 제한할 수 있다.

공식사이트 : http://www.xinetd.org

- 소스파일이나 rpm 파일을 받아서 설치할 수 있다.

아래와 같이 xinet 설치유무를 확인해보고
설치되어 있지 않으면 설치부터 해야 한다.

[root@star xinetd.d]# rpm -qa | grep xinet
xinetd-2.3.13-6
[root@star xinetd.d]#

만약 설치 안되어 있다면 rpm 이나 yum 또는 소스패키지를 내려받아 설치한다.

1. rpm 으로 설치할 경우.
페로다 시디중 3번째 시디를 마운트 시킨다음 xinetd 패키지를 설치하면 된다.

[root@star /]# mount -t iso9660 /dev/cdrom /media/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only
[root@star /]# cd /media/cdrom/Fedora/RPMS/
[root@star RPMS]# ls *xinet*
xinetd-2.3.13-6.i386.rpm
[root@star RPMS]# rpm -ivh xinetd-2.3.13-6.i386.rpm

2. yum 으로 설치할 경우
yum install xinetd

*. yum 은 더 간편하지만 인터넷이 사용가능한 상태이어야 하며
인터넷으로 내려받아서 설치하는 것이기 때문에 인터넷 연결상태가 나쁘거나
패키지가 저장된 서버 상태에 따라서설치가 잘 안될 수 있다.

3. 공식사이트에서 소스패키지를 내려받아서 설치할 수 있다.
그러나 이것은 권장하지 않는다. 소스패키지는 설치과정이 번거롭다.
소스 패키지를 내려받아서 설치하는 경우는 세밀한 설정이나 최적화 시키기
위함이다. xinetd 는 굳이 그렇게 설치할 필요는 없다.


xinetd 데몬설정 파일

/etc/xinetd.conf

형식

Default 또는 Service service_name
{
속성 연산자 값
              속성 연산자 값
              ....
}

ex) cat /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
        cps                    = 25 30
}

includedir /etc/xinetd.d
 

# => 주석(comment)

instances : 동시에 실행될 수 있는 같은 타입의 서비스. 이 숫자를 초과할 경우
  해당 데몬이 더이상 메모리에 적재되지 못한다.

log_type : 로그기록 설정부분이다. SYSLOG 데몬을 통해서 로그를 남긴다는 의미
log_on_failure : 해당 서버 데몬에 로그시 실패한경우 남기게 될 로그기록.
cps : 서버로 접속하는 연결범위 지정.

includedir : 추가 설정 디렉토리 => 이 디렉토리 안에 있는 파일내용을 포함하라는 의미

ex)

[root@star xinetd.d]# cat 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
        server          = /usr/sbin/in.telnetd
        log_on_failure  += USERID
        disable        = no
}

[root@star xinetd.d]#

socket_type : 서비스 타입이 tcp 기반이면 stream udp 기반이면 dgram 으로 설정해야 한다.
wait : no 이면 동시접속 가능. yes 이면 동시접속 불가.
user : 서버 데몬의 프로세스 소유자를 여기 적혀 있는 계정으로 한다는 의미
server : 서버파일이 있는 경로
disable : 서비스 사용가능 유무. no 이면 서비스 사용 가능, yes 이면 서비스 사용불가.
log_on_failure += USERID : 서비스 접속에 실패할경우 기존 log 설정에 접속에 실패한
            사용자 id 를 포함해서 기록한다. 기존 log 설정은 /etc/xinetd.conf 파일에 설정되어 있다
only_from : 서비스를 사용할 수 있는 클라이언트를 지정하기 위한 부분.
ex) only_from 192.168.xxx.xxx/24 => 192.168.xxx.xxx/24 에서만 접속가능함.


ex2)

service ftp
{
socket_type=stream          => ftp 서비스는 tcp 기반의 서비스
wait=no                            => 다수의 사용자가 ftp 서비스에 동시접속 가능
user=root                          => ftp 서버 데몬(/usr/sbin/in.ftpd)의 프로세스 소유자는 root
server=/usr/sbin/in.ftpd      => ftp 서버 데몬 파일의 경로
server_args=-l                    => ftp 서버가 구동될때 -l 옵션 적용 (/usr/sbin/in.ftpd -l)     
instances=4                          => ftp 서버 구동 갯수 (최대 4개까지)
access_time=7:00-12:00 13:00-17:00      => ftp 서비스 이용가능 시간
only_from=192.168.10.0/24                    => ftp 서비스에 접속할 수 있는 클라이언트 주소

}

*. 이 옵션들이 다 필요한 것은 아니며 여기서 생략해도 되는 것은
server_args, instances, access_time, only_from 이다.

반응형