1. 데몬실행모드
-
XINETD데몬 -
XINETD모드로 실행이 되는 데몬은 xinetd라는 데몬에 의해 관리되며 필요한 경우에만
메모리로 적재(load)되어 실행이 되어 응답을 한다. 이는
메모리에 항상 상주해 있는 것이 아니므로 standaloone보다는 서버부하를 상대적으로 줄일 수 있다는
장점이 있다.
-
Standalone - standalone모드로 실행이 되는
데몬은 독립적으로 실행이 되며 항상 메모리에 상주하여 서비스요청이 있을 때 언제든 바로 응답을 합니다. 즉
빠른 응답속도를 요하는 경우에 이 모드를 사용합니다.
구분 |
XINETD환경서비스 |
독립(Srandalone)서비스 |
의미 |
xinetd 수퍼데몬에 의해 제어되는 서비스들의 데몬 |
독립적으로 실행되는 서비스들의 데몬 |
실행방법 |
요청시 xinetd에 의해 수행됨 |
독립적인 서비스를 위하여 항상 독립적으로 수행됨 |
데몬상주여부 |
xinetd에 의해 로드된 후에 서비스 완료후에는 종료됨 |
독립적인 서비스를 위하여 항상 메모리에 독립데몬으로 상주해 있음. |
접근제어 |
tcpd에 의해 접근제어됨(/etc/hosts.allow, /etc/hosts.deny 파일로 접근제어 할 수 있음) |
tcpd와는 무관하지만 자체 설정파일에 의해 접근제어를 할 수도 있음. |
대표적인 데몬 |
telnetd, ftpd,ipop3d 등 |
httpd, sendmail,named 등 |
참고 |
* 독립적으로 실행되는 데몬들도 xinetd환경으로 변경할 수 있으며 반대도 가능하다.( 5.데몬환경서비스 변경을 참고) |
* 주의 : /etc/xinetd.d/ 디렉토리내의 서비스파일들에 등록되어 있는 데몬들이 root계정으로 실행이 되고 있는지 꼭 확인을 해봐야 한다. 또한 /etc/xinetd.d/디렉토리내의 각 서비스 파일들에 대하여 일반유저들에게 읽기 권한까지도 빼버려야한다. 이 파일이 일반유저들에게 읽기 권한이 있다면 해당서버에서 어떤 서비스를 하고 있는지를 모두 알수 있을 뿐만 아니라 실행파일의 위치까지도 확인 가능하기 때문이다.
그림 1)xinetd.d 디렉토리 파일
2. XINETD
모드의 서비스흐름
- 서비스 요청 후 서비스가 연결되어 지는 과정(ex : telnet)
3. XINETD에 관련된 파일목록
파일 |
설명 |
/etc/xinetd.conf |
* xinetd 서비스에 공통적으로 적용되는 주 설정파일 |
/etc/xinetd.d/* |
* xinetd로 서비스될 파일들이 존재하는 디렉토리 |
/usr/sbin/xinetd |
* xinetd 데몬 |
/etc/services |
* 서비스포트 설정파일 |
/etc/protocols |
* 프로토콜 설정파일 |
/etc/syslog.conf |
* 시스템로그 설정파일 |
/usr/sbin/tcpd |
* tcpd데몬 |
/etc/hosts.allow |
* 서비스별 허용목록파일 |
/etc/hosts.deny |
* 서비스별 거부목록파일 |
/var/log/secure |
* tcpd 로그파일 |
/etc/rc.d/init,d/xinetd |
* xinetd 시작/종료 스크립트파일 |
1) /etc/xinetd.conf 파일
그림 3-1) /etc/xinetd.conf
- 그림 2-1을 보시면 /etc/xinetd.conf 파일의 구성은 크게 두 가지로 나누어 집니다.
첫 번째로 위의 그림에서는 시작 부분이 짤려서 보이지 않지만 defaults 설정부분입니다. /etc/xinetd.d/디렉토리내에 존재하는 xinetd서비스파일들에 대해 공통적으로 적용하는 설정내용입니다.(설정내용의 의미는 잠시 후 다루겠습니다.)
두 번째로 “includedir /etc/xinetd.d”로써 xinetd 서비스의 적용을 받는 개별 서비스 설정파일들을 /etc/xinetd.d/디렉토리에서 불러오는 것입니다.
2) /etc/xinetd.d/ 파일들의 설정내용
그림 3-2) /etc/xinetd.d/opensshd 파일
- 위의 파일은 /etc/xinetd.d/openssh파일의 내용으로써 xinetd환경하에서 서비스되고 있는 ssh 서비스가 어떻게 서비스
될 것인가를 정의하고 있습니다. 각 행에서 설정될 수 있는 지시자들을 알아 보겠습니다.
지시자 |
설명 |
service |
* 서비스 이름입니다. |
disable |
* 해당 서비스를 할 실행 할 것인가(no) 아닌가(yes)를 결정합니다. 해당서비스를 부팅시 자동 실행되고자 한다면 no로 지정합니다. |
socket_type |
* tcp일 경우에는 stream이며 udp일 경우에는 dgram이라고 명시되어 있다. |
wait |
* xinetd가 서비스 요청을 받은 경우 이후에 즉시 또 다른 요청을 처리할 것인지(no) 아닌지(yes)를 결정합니다. stream일 경우에는 반드시 no이어야 합니다. no는 현재 요청외 다른 접속요청을 새로운 것으로 시작하여 처리하게 됩니다. |
user |
* 이 서비스를 어떤 사용자 권한으로 서비스 할 것인가를 결정합니다. |
server |
* 이 서비스를 실행할 때에 어느 위치에 있는 프로그램을 불러와 연결할 것인가를 명시한 것입니다. 반드시 절대경로로 표시합니다. |
log_on_failure |
* 서버접속에 성공하지 못하였을 때 로그파일에 기록하는 내용들을 설정할 수 있습니다. 여기에는 HOST, USERID, ATTEMPT, RECORD등이 구가로 설정될 수 있습니다. HOST란 접속을 시도한 클라이언트 IP주소를 의미하고, USERID란 접속한 사용자의 ID를 각각 의미합니다. +=는 /etc/xinetd.conf파일의 기본설정에 추가할 항목을 선택하고 -=는 /etc/xonetd.conf파일에서 제외할 항목을 설정합니다. |
log_on_success |
* 서버접속에 성공하였을 경우에 기록할 내용을 설정할 수 있습니다. 이 설정에는 PID, HOST, USERID, EXIT, SURATION등을 기록할 수 있습니다. PID란 프로세스 ID를 뜻하며 EXIT는 프로세스의 종료상태를 의미하고 DURATION은 연결지속시간을 의미합니다. |
only_from |
* 서비스 접속 가능한 ip대역을 적어줍니다. 예를 들어 only_from = 192.168.49.0/24 와 같은 경우 192.168.49.0의 네트워크 대역대로 접속가능한 ip가 제한됩니다. |
no_access |
* only_from과 반대의 개념입니다. 접속불가능한 ip주소를 할당합니다. |
instances |
* 해당서비스에 접속이 가능한 총 접속자수를 제한합니다. |
per_source |
* 동일한 호스트에서 해당서비스로의 접속시에 가능한 접속횟수를 지정해줍니다. 예를 들어 per_source = 5와 같다면 동일한 호스트에서 해당 서비스로의 접속이 동시에 5번을 초과할 수 없습니다. 이 서비스는 서비스거부공격(Dos)을 차단하기 위해 사용될 수 있습니다. |
3) xinetd에 의한 접속제어
- 특정 ip나 도메인으로부터 서버로의 telnet, ftp, pop등의 접속을 차단할 수 있습니다.
- 접속기록이나 접속시도기록을 특정한 파일에 로그로 기록합니다.
-
xinetd는
tcp_wrapper를 내장하고 있기 때문에 xinetd모드에서 실행되는 서비스들은 거의
대부분 tcpd라는 Tcp_Wrapper의 데몬에 의해 접속제어를 받게 됩니다. 다시
말해 개별서비스들의 접근허용을 설정하는 파일은 /etc/hosts.allow이며 거부하는 파일은 /etc/hosts.deny입니다.
* /etc/hosts.allow와 /etc/hosts.deny의 설정이
중복이 되었을 경우 /etc/hosts.allow파일의 내용이
적용됩니다.
* 설정 예
sshd : 192.168.49.0/24
proftpd : 192.168.10.0/24 EXCEPT
192.168.10.100
그림 3-3) /etc/hosts.allow, deny파일
4. standalone의 서비스를 xinetd형으로 변환시켜보자.
* 현재 standalone타입의 ssh서비스를 xinetd형으로 변환시키겠습니다.
1) xinetd서비스 파일을 생성하자.
#vi /etc/xinetd.d/opensshd
# default: off |
2) 현재 inetd에 의해 관리되고 있는 sshd데몬을
정지 혹은 삭제시키자.
- 정지시키셔도 되고 삭제시키셔도 됩니다.
정지 - #chkconfig sshd off
삭제 - #chkconfig sshd --del
* 추가는 chkconfig sshd --add입니다. 확인은 chkconfig --list입니다.
그림 4-2) sshd서비스 제거 후
3) 서비스를 추가한다.
#ntsysv
[*]opensshd
'System > Linux' 카테고리의 다른 글
리눅스 - usb 마운트 (0) | 2011.02.06 |
---|---|
TCP wrappers (0) | 2011.01.25 |
리눅스 - xinetd (0) | 2011.01.25 |
리눅스 - telnet-server 설치 (0) | 2011.01.25 |
zmodem (0) | 2011.01.25 |