수퍼데몬 Xinetd(eXtended inetd)
1) Xinetd 수퍼데몬이란?
- 리눅스 부팅시 적재되는 서비스 데몬들을 관장 하는 데몬
2) Xinets 데몬의 특징
- TCP, U에, RPC 서비스 접근 제어 조절 기능(Axxess Control)
- 서비스 거부(Denial of Service)공격 방지
- 철저한 로깅(Loffing) 기능
- 원격 호스트로 서비스 리다이렉션
- IPv6 지원
3) Xinetd 소스 구하기
http://www.xinetd.org
주의:버그있을 경우 치명적이므로 항상 최신 버전을 업그레이드한다.
4) Xinetd 설치
# yum install xinetd
5) /etc/xinetd.conf 설정 파일 형식
- Default section과Service section으로 이루어 짐
default
{
<속성 attribute> <연산자 assign_op> <값 value> <값 value> ...
}
Service 서비스명(service_name)
{
<속성 attribute> <연산자 assign_op> <값 value> <값 value> ...
}
>> 모둔 연산자를 지원하는 속성들
only_from, no_access, log_no_success, log_no_failure, passenv
>> env 속성은 ‘-=’ 연산자를 지원하지 않는다.
-> 속성과 그 속성 값
# man xinetd.conf 를 통해 참고
* default 섹션 에 사용되는 주요 속성
# vim /etc/xinetd.conf
default
{
instances =60
log_type = SYSLOG authpriv
log_on_success = HSOT PID
log_on_failure = HOST RECORD
}
includedir /etc/xinetd.d
속성1. instances = 60
동시 서비스 실행 서버의 최대 개수 지정. UNLINTED로 지정하면 접속 제한을 두지 않음.
속성2. log_type = SYSLOG authpriv
어떠한 포맷으로 로그 기록을 저장 할것인가를 지정.
SYSLOG 또는 FILE 포맷 사용.
설정방법: SYSLOG syslog_facility [syslog_level]
지정된 크기를 가진 파일명에 로그기록 저장.
설정방법: SYSLOG FILE soft_limit [hard_limit]
-
속성3. log_on_success =HOST PID
서버가 시작될 때와 끝날 때 기록도리 것들을 지정
PID xinetd 프로세스 ID
HOST 원격 호스트의 IP
USERID 원격 사용자의 ID
EXIT 서비스가 빠져 나갈 때의 상태
DURATION 서버 세션(session) 지속 상태
속성4. log_on_failure = HOST RECORD
서버가 리소스 부족으로 시작될 수 없거나 설정 파일 내의 규칙에 의한 접근이 거부되었을때 기록될 값들 지정
HOST 원격 호스트의 아이피 주소
USERID 원격 사용자의 ID
ATTEMPT 실패한 시도가 있을 경우
RECORD 클라이언트에 대한 가능한 정보
속성5. only+from =
이용 가능한 원격 호스트를 설정. IP주소로 지정해 준다.
속성6. per_source =5
똑같은 원격 IP주소가 로컬 서비스에 접속할 수 있는 최대 접속 수를 지정해 주는 속성.
DoS 공격을 막을 수 있다. UNLIMITED 설정은 무한 접근 허용
속성7. enable = pop3s imaps
실행 가능한 서비스의 목록 표시. disable 속성과 DISABLE플래그가 존재할 경우엔 무시됨.
속성8. no_access= 0.0.0.0/0
서버에 접근을 불허할 호스트의 주소 지정
속성9. disable = shell login exec finger
disable 속성은 나열된 서비스 값들이 실행되지 못하도록 한다.
속성10. includedir = /etc/xinetd.d
service 섹션을 서비스 마다 하나의 파일로 지정하고 할 때 include 속성으로 서비스 파일이 위치할 디렉토리를 지정해 준다.
* Services section에 사용되는 주요 속성과 그 속성 값
# vin /etc/xinetd.d/telnet
service telnet
{
disable = yes
flags = REUSE
socket_rype = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_no_failure += USERID
}
속성1. service telnet
service 속성으로 설정하고자 하는 서비스의 이름 지정
속성2. disable = yes
disable 속성은 해당 서비스가 실행되지 못하도록 설정하는 데 사용
속성3. flags =REUSE
>> flags 속성의 종류
REUSE 서비스 소켓에 SO_REUSEADDR 플래그를 설정하도록 한다.
INTERCEPT 패킷이나 허용된 접속을 가로채어 허가된 위치에서 접속하는지 인증하고자 할때 사용.
NORETRY 프로세스가 새롭게 생기지 못할 경우 재시도하지 못하도록 한다.
IDONLY 원격 호스트가 원격 사용자를 인증할 때만 접속 허용. 접속기반 서비스에만 적용
USERID log옵션을 사용하지 않을 경우 효과를 내지 못함.
NAMEINARGS 서버가 작동될 때 서버 내에 지정한 것과 같이 server_args내의 첫 번째 인수가
argv[0]이 되도록 하는 플래그입니다. 이 플래그는 서버내에 tcpd를 넣어 tcpd를 사용할
수 있게 하고 inetd처럼 server_args내에 서버 이름을 넣을 수 있게 해 준다.
NODELAY TCP 서비스에 이 플래그를 설정하면 TCP_NODELAY 플래그가 소켓에 설정된다. 이 플
래그는 TCP서비스에 한해서 작용한다.
DISABLE 서비스가 실행되지 않게 한다.
KEEPALIVE TCP 서비스에 이 플래그가 설정되면 SO_KEEPALIVE 소켓에 설정 된다. 이 플래그도
TCP 서비스에 한해서 작용한다.
속성4. protocol = tcp
서비스가 사용할 프로토콜을 설정. 프로토콜은 /etc/protocols 내에 있어야 함.
속성5. socket_type = stream등
stream, dgram, raw, seqpacket 4가지 값을 지정할 수 있다.
dtream stream 기반의 서비스
dgram datagram 기반의 서비스
raw 아이피에 직접 접근을 요하는 서비스
seqpacket 신뢰성있는 연속적인 데이터그램 전송을 요구하는 서비스
속성6. wait = no
wait 속성은 서비스가 단일 스레드(single thread)인지 다중 스레드( multi-thread)인지를 결정하는
플래그로 yes인경우는 단일 스레드로 실행.
속성7. user = root
서버 프로세스를 실행할 수 있는 사용자의 ID를 나타내는 것으로 수퍼유저일 경우에만 효과 적.
속성8. server = /usr/sbin/in.telnetd
해당 서비스를 실행할 데몬 프로그램을 지정
속성9. access time = 01:00-07:00
지정된 시간에서만 서비스를 이용할 수 있게 해 줌.
속성10. redirect = 192.168.1.10 23
TCP 서비스를 다른 호스트에게 이양하고자 할 때 사용.
속성11. port = 8080
서비스 포트를 명시해 준다. /etc/services파일 목록 내의 서비스 포트와 일치해야 함.
6) xinetd 설정 예
시간제 ftp 사이트를 운영하고자 한다.
운영시간 : 오전 1시부터 오전 5시까지, 오후 5시부터 오후 11시 59분까지
서버인원 : 3명으로 제한.
허락주소 : 192.168.10.1 주소에서 192.168.10.126주소로만 접속 허용.
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST RECORD
}
service ftp
{
disable = no
flags = REUSE
protocol = tcp
socket_rype = stream
instances = 3
wait = no
user = root
server = /usr/sbin/in.proftpd
log_no_success = HOST PID
log_no_failure = HOST RECORD
no_access = 0.0.0./0
only_from = 192.168.10.0/25
access_time = 1:00-5:00 17:00-23:59
}
7) xinetd 실행하기
# /etc/init.d/xinetd start
---> 시작
# /etc/init.d/xinetd restart
---> 재시작
xinetd의 config.h 헤더 파일에서 정의된 시그널을 사용하여 xinetd 데몬을 종료하거나 설정 파일을 갱신할 수 있다.
kill -SIGUSR1 xinetd's PID # 변경된 설정으로 다시 데몬을 띄우고자 할 때
kill -SIGQUIT xinetd's PID # xinerd 데몬을 종료하고자 할 때
kill -SIGTERM xinetd's PID # xinetd을 종료하기 전에 동작중인 서버를 중지
kill -SIGHUP xinetd's PID # 내부 상태를 /var/run/xinerd.dump로 덤핑함
8) xinerd 설정 파일 보안 유지하기
# chmod 600 /etc/xinerd.conf
# chmod 600 /etc/xinetd.d/*
# chattr +i /etc/xinerd/conf
# chattr +i /etc/xinetd.d/*
# rm -f /etc/xinetd.conf
: 삭제 명령이 허용되지 않음
>> chattr 명령어
리눅스 ext2 또는 ext3파일 시스템상에서 파일 속성을 바꾸는 명령어.
i옵션은 변경할 수 없도록 하는 옵션.