UNIX, LINUX

inetd, xinetd의 개념과 작동 방식에 대한 이해

CyberRanger 2025. 5. 6. 00:49

목차

1. inetd란?
2. inetd의 작동 방식과 inetd.conf 파일 예시
3. inetd 의존형 서비스 / 비의존형 서비스
4. 인프라 취약점 점검 시 고려사항
5. xinetd와 inetd의 차이

 


 

1. inetd란?

inetd는 "Internet Service Daemon", 즉 인터넷 서비스를 관리하는 데몬이며 슈퍼데몬이라고도 한다.

 

※ 여기서 인터넷 서비스란 TCP나 UDP 기반의 네트워크 서비스(예: FTP, SSH 등)이다.

인터넷 서비스가 클라이언트가 요청할 때까지 기다렸다가 요청이 오면 해당 서비스 프로그램(데몬)을 대신 실행시켜준다.

필요한 서비스를 전부 실행시켜놓지 않고 요청이 올 때마다 해당 서비스를 실행하여 시스템 자원(CPU, 메모리)을 절약할 수 있다.

용어 설명
데몬(daemon) 백그라운드에서 실행되는 프로그램. 리눅스에서 시스템이나 서비스를 담당.
슈퍼데몬 여러 개의 다른 데몬(서비스)을 통합해서 대신 관리하는 데몬. inetd가 대표적.
서비스(service) FTP, Telnet, rlogin 등 외부에서 접속 가능한 네트워크 프로그램.
클라이언트(client) 사용자 또는 프로그램이 네트워크 서비스를 요청하는 주체.
소켓(socket) 네트워크 통신을 위한 양쪽 끝점. TCP/UDP 통신을 가능하게 하는 기초 구조.
프로토콜(protocol) 통신 방식. 예: TCP, UDP 등.
TCP Wrapper 보안 필터 역할을 하는 프로그램. 서비스 요청을 받아들일지 판단함. (/usr/sbin/tcpd)

 


 

2. inetd의 작동 방식과 inetd.conf 파일 예시

inetd가 서비스 요청을 감지하여 서비스를 실행하고 종료 시 대기상태도 돌아가는 과정을 순서대로 설명하자면,

  1. inetd는 부팅 시 자동 실행된다.
     - inetd만 프로세스로 떠있음
     - inetd 프로세스 확인 명령어 : ps -ef | grep inetd | grep -v grep

  2. inetd는 /etc/inet/inetd.conf 파일을 읽는다.
     - 이 파일에는 어떤 서비스의 요청이 오면 어떤 프로그램을 실행할지를 정의해놓는다.
     - 예: SSH를 inetd에 등록
       💡일반적으로 SSH는 sshd라는 별도 데몬이 항상 실행되고 inetd 기반으로 실행하지 않지만, 이론적으로 inetd를 통해서도 SSH 서비스를 제공할 수는 있음 *이론적 설명을 위한 예시임

  3. inetd는 /etc/inet/inetd.conf 파일에서 22번 포트에 해당하는 서비스를 감시한다.

  4. 만약 서비스에 대해 요청이 오면 inetd는 이를 감지하고 SSH 서버 프로그램을 실행(fork/exec)한다.
     - 예: 클라이언트가 SSH로 UNIX 서버에 원격 접속 요청을 보냄 → /usr/sbin/sshd -i
      ※ -i 옵션 : 표준 입력을 통해 요청을 처리하는 inetd 모드

  5. sshd가 실행되고 클라이언트와 통신을 시작한다.

  6. 연결 종료 시 sshd는 종료되고 inetd는 다시 대기상태로 들어간다. 

 

inetd.conf 파일 예시

ssh stream tcp nowait root /usr/sbin/sshd sshd -i
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd -l -a

# ftp: 서비스 이름 (FTP 요청을 뜻함)
# stream: TCP 기반 서비스  /  dgram: UDP 기반 서비스
# tcp: 프로토콜
# nowait: 동시에 여러 연결 허용  /  wait: 
# root: root 권한으로 실행
# /usr/sbin/in.ftpd: 실행할 프로그램
# in.ftpd -l -a: 실행 시 인자

 


 

3. inetd 의존형 서비스 / 비의존형 서비스

UNIX / LINUX 서비스는 inetd 기반(의존형) 서비스와 비의존형(독립 실행형) 서비스로 나뉜다. 

구분 설명
의존형 (inetd 기반) inetd 데몬이 요청을 대기하다가, 요청이 들어올 때 서비스를 실행하는 방식
비의존형 (독립 실행형) 서비스가 부팅 시 데몬 형태로 항상 실행 중이며, 자체적으로 포트를 직접 감시하는 방식

 

 

3.1. inetd 의존형 서비스

inetd 의존형 서비스는 요청이 있을 때만 실행되며, 대부분 오래된 서비스이므로 보안상 비활성화를 권고함.

서비스 포트/프로토콜 설명 비고 (위험성)
tftp 69/UDP Trivial File Transfer Protocol. 인증 없는 단순 파일 전송 자격 증명 없음 → 악성 코드 배포, 시스템 유출 위험
talk 517/UDP 두 사용자 간 실시간 텍스트 통신 (터미널 기반) 오래된 기능, 암호화 없음
ntalk 518/UDP talk의 개선판. 대화 연결 처리 방식 변경됨 마찬가지로 암호화 없음
finger 79/TCP 사용자 정보 질의 (로그인 여부, 경로 등) 사용자 정보 유출 위험, 사회공학 공격 가능성
rexec 512/TCP 원격 명령 실행 (사용자 인증 후 명령 전달) 평문 인증, 패스워드 탈취 가능
rlogin 513/TCP 원격 로그인 (r 계열) 평문 인증, SSH로 대체됨
rsh 514/TCP 원격 셸 (비밀번호 없이 명령 실행 가능) .rhosts 우회 가능, 매우 위험
echo 7/TCP,UDP 받은 메시지를 그대로 돌려줌 (응답 테스트용) DDoS 반사 공격 악용 가능
discard 9/TCP,UDP 받은 데이터를 무조건 폐기 (테스트용) 포트 스캔/서비스 식별에 악용 가능
daytime 13/TCP,UDP 서버의 시간 문자열 반환 의미 없음, DDoS 도구로 악용 가능
chargen 19/TCP,UDP 무작위 문자 스트림 반환 UDP 반사 DDoS 공격 대표 사례
ypserv 111, 834/UDP,TCP 등 NIS 서버 – 사용자 계정 정보 제공 중앙 사용자 DB 유출 위험
ypbind 111, RPC 포트 클라이언트가 NIS 서버에 바인딩 클라이언트가 ypserv에 연결 요청
rpc.yppasswdd RPC 포트 NIS 사용자 비밀번호 변경 처리 root 인증 정보 노출 위험

(대표적인 inetd 의존형 서비스)

📌 HP-UX의 기본 FTP 서비스(ftpd)는 보통 inetd 또는 xinetd 슈퍼데몬을 통해 구동

 

3.2. inetd 비의존형 서비스

프로세스가 항상 실행되는 서비스로 현대 시스템에서 일반적인 방식. 일반적으로 systemd나 init에서 서비스로 관리함.

비의존형 서비스도 inetd.conf 파일에 등록하여 사용자 요청에 따라 자동 활성화, 비활성화 되도록 관리할 수 있음.

서비스 포트 설명
sshd 22 암호화된 원격 접속
httpd, nginx 80/443 웹 서버
vsftpd, proftpd 21 FTP 서버 (독립형)
named, bind 53 DNS
postfix, sendmail 25 메일
dovecot, cyrus 110, 143 POP3, IMAP
mysqld, postgres 3306, 5432 데이터베이스
nfsd, rpc.mountd 2049 등 NFS 서버

(대표적인 inetd 의존형 서비스)

 


 

4. 인프라 취약점 점검 시 고려사항

취약한 서비스(tftp, echo, daytime 등) 활성화 여부를 점검할 때, 두 가지 방법으로 점검해야 함.

 

1) 프로세스 구동 여부 확인

  ps -ef | grep "프로세스명" | grep -v grep 명령어로 취약한 서비스가 구동되고 있는지 확인해야 함.

 

2) inetd 프로세스 구동 여부 및 inetd.conf 파일 내 등록된 서비스 확인

  inetd 프로세스가 구동중일 경우, inetd.conf 파일 내 취약한 서비스가 등록되어 있으면 취약

  inetd 프로세스가 구동중이 아닐 경우, inetd.conf 파일 내 취약한 서비스가 등록되어 있어도 서비스가 실행되지 않음 → 양호

 


 

5. xinetd와 inetd의 차이

xinetd(eXtended Internet Service Daemon)는 inetd와 기능상 역할이 같지만 보안성, 유연성, 관리 편의성을 강화한 차세대 inetd이다.

구분 inetd xinetd
출시 목적 초기 UNIX 서비스 관리용 inetd의 기능을 보완하고 보안 강화
설정 방식 /etc/inetd.conf: 한 파일에 모든 서비스 정의 /etc/xinetd.conf + /etc/xinetd.d/<서비스>: xinetd 디렉터리 내 서비스별 설정파일 분리
접속 제한 TCP Wrapper (/etc/hosts.allow, hosts.deny에 의존) 자체 내장: only_from, no_access 필드 제공
로깅 기능 없음 (syslog 의존) 자체 로깅 지원 (log_on_success, log_on_failure)
DoS 방지 기능 없음 가능 (cps, instances, per_source 등으로 제어 가능)
서비스 비활성화 주석 처리로 관리 disable = yes 필드 명시적 사용
IPv6 지원 일부 제한적 완전 지원
동시 접속 제한 없음 내장 기능으로 세부 제어 가능
보안성 낮음 높음 (방어 설정 다수 제공)
현대 사용률 구형 시스템에서만 사용 중간 세대 시스템에서 사용 (RedHat 6 이상)

 

 

service ftp
{
    disable         = no			# 서비스 비활성화
    socket_type     = stream			# stream:TCP, dgram:UDP
    protocol        = tcp			# 사용할 프로토콜
    wait            = no			# 동시 요청 처리방식
    user            = root			# 서비스를 실행할 사용자
    server          = /usr/sbin/in.ftpd		# 서비스 데몬의 경로
    server_args     = -l -a			# 명령어 인자
    only_from       = 192.168.0.0/24		# 접속 가능 IP 제한
    log_on_success  = HOST PID			# 서비스 정상 실행 시 로깅할 항목
    log_on_failure  = HOST			# 서비스 접속 실패 시 로깅할 항목
    cps             = 25 30			# 최대 Connection Per Second(DoS 방지 기능)
}

xinetd 설정 예시 (/etc/xinetd.d/ftp)