강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

tcp-wrapper (접근제한 설정)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.giftitle05.gif


이 문서를 다른 웹이나 출판물에 게시할 때는 반드시 출처를 밝혀 주시기 바랍니다.

최종 수정일 : 2001년 9월 20일
글쓴이 : 윤 일(admin@rootman.org)

Tcp-Wrapper

슈퍼 데몬(xinetd)에 영향을 받는 데몬들은 Tcp-Wrapper 프로그램에 의해 접근이 제어 된다. Tcp-Wrapper를 이용하면 특정 서비스에 대해 접근자의 호스트를 체크해서 접근을 허락할지 결정을 할 수 있다. Tcp-Wrapper에 영향을 받는 대표적인 데몬으로는 telnet과 ftp, pop3등이 있다. Tcp-Wrapper는 /etc/hosts.allow파일을 통해서 접근 허가를 하고 /etc/hosts.deny파일을 통해서 접근 거부를 결정한다.
inetd를 사용하던 레드헷 7.0 이전 버젼에서는 tcpd를 이용해서 Tcp-Wrapper의 영향을 받게 설정을 했는데 레드헷 7.0 이상 버젼에서는 xinetd 컴파일시에 libwrap을 지원하게 설정되어 있어서 tcpd보다 더 효률적으로 Tcp-Wrapper를 사용할 수 있다.
그래서 /etc/xinetd.d/ 디렉토리안의 서비스 파일에 tcpd 설정을 해 줄 필요가 없다. 단지 hosts.allow 파일과 hosts.deny 파일만 설정해 주면 Tcp-Wrapper 기능을 사용할 수 있다.

[Server Demon이 Tcp-Wrapper에 의해 보호받고 있을 때 접속 과정]
Client 접속 요청  -->  xinetd  -->  Tcp-Wrapper  -->  Demon 실행

위의 과정에서 xinetd는 해당 Demon으로 접속 요청이 있을 경우 바로 해당 Demon을 실행하는 것이 아니라 Tcp-Wrapper를 거치게 되어 있다. 이렇듯 각 Demon들은 Tcp-Wrapper의 보호막에 감싸져 있다고 생각하면 된다. Tcp-Wrapper을 통과할 수 있는 조건은 hosts.deny에서 거부하지 않거나 hosts.allow에서 접근을 허락해야 된다.
그럼 지금부터 hosts.<allow|deny> 파일을 어떻게 설정하는지 살펴 보도록 하자.

hosts.allow, hosts.deny 설정형식
Demon_List
: Client_List: options(생략가능): options(생략가능)...
--> Demon_List, Client_List, options는 :(콜론)으로 구분된다.

1) Demon_List 설정
Tcp-Wrapper로 접근을 제어할 서버스를 설정해야 된다. 주의할 것은 xinetd에 설정된 서비스 네임이 아니라 실제 그 서비스를 가동시키는 데몬 프로그램을 적어 줘야 된다. (예: telnet이 아니라 in.telnetd를 설정해야 된다)
즉 각 서비스의 xinetd 설정 파일에서 "server" 지시자로 설정해준 프로그램을 적어 주면 된다.
'ALL' 이라는 와일드 카드는 Tcp-Wrapper에 영향을 받는 모든 데몬들을 가리킨다.
------------------------------------------------------------------------
[root@rootman /etc]# cat hosts.allow
in.telnetd: 203.241.205.95,203.241.205.91,203.241.204.122
ipop3d: 203.241.205.97,203.241.205.94
in.proftpd: 203.241.205.91,203.241.205.95,203.241.204.122
------------------------------------------------------------------------

2) Client_List 설정
Tcp-Wrapper로 접근을 제어할 클라이언트를 정의하는 부분이다. 클라이언트 정의는 도메인, IP주소, IP/Mask등으로 설정할 수 있고 와일드 카드와 패턴을 적용시킬수도 있다. 두개 이상의 호스트를 설정할 경우에는 ,(콤마) 또는 빈공간으로 각 호스트를 구분해주면 된다. "ALL"은 모든 호스트를 나타내는 와일드 카드이다.
------------------------------------------------------------------------
[root@rootman /etc]# cat hosts.allow
# 도메인으로 Client_List 지정
in.telnetd:
.rootman.org
# 아이피로 Client_List 지정
ipop3d:
203.241.205.91,203.241.204.
# IP/Netmask로 Client_List 지정
in.proftpd:
203.241.205.0/255.255.255.0 EXCEPT 203.241.205.91
------------------------------------------------------------------------
::도메인을 이용한 Client_List 설정
도메인으로 설정할 경우에는 반드시 reverse mapping이 되는 도메인만 설정 가능하다.
(예: nslookup 203.241.205.97  -->  dvc.dongeui.ac.kr)
패턴을 이용해서 모든 서브 호스트에 대해서 설정할 수 있다. 서브 호스트에 대한 패턴 설정은 .(점)으로 한다.
(예: .rootman.org  --->  rootman.org 의 모든 하위 도메인에 대해서 설정한 것이다)

::IP 주소를 이용한 Client_List 설정
제어할 클라언트의 IP주소를 설정한다.
IP주소도 .(점)으로 패턴을 적용할 수 있다. (예: 203.241.  -->  IP주소가 203.241.x.x 인 모든 호스트)

::IP/NetMask를 이용한 Client_List 설정
IP주소와 넷마스크를 이용해서 대상 클라이언트를 설정할 수 있는데 패턴으로 똑같이 처리할 수 있기 때문에 C클래스를 다시 서브넷으로 나누어 쓰는 호스트들을 제어 할 때만 주로 사용된다.
(예: 203.241.205.0/255.255.255.128  --> 아이피 주소 203.241.205 ~ 126)

::EXCEPT
패턴 또는 IP/Netmask를 이용해서 다수의 호스트를 설정할 때 특정 호스트를 제외 시킬수 있다.
(예: 203.241.205.0/255.255.255.0 EXCEPT 203.241.205.95  -->  203.241.205.95를 제외한 C 클래스 203.241.205.x)

3) options 설정
꼭 설정해야 되는 부분은 아니다. options 설정을 이용해서 허가 되지 않는 호스트에 대해서 경고 메시지를 보내는등 호스트 연결을 거부하거나 허락하기 전에 특정 명령을 실행 시킬수 있다. 쉘 명령을 실행 시키지 위한 방법으로는 twist또는 spawn을 사용한다. 쉘 명령을 설정할 때는 반드시 절대 경로로 정확히 설정해 주어야 된다. 또 'banners'라는 설정으로 client에게 텍스트 문서를 보여줄 수도 있다.

::twist shell_command
twist는 명령의 결과를 client에게 전송하기 때문에 client에게 메시지를 보낼 때 유용하게 사용될 수 있다.
---------------------------------------------------------------------------
[root@rootman /etc]# cat hosts.deny
in.telnetd: 203.241.205.91:
twist /bin/echo "Your host is not allowed"

----> 203.241.205.91에서 텔넷 접근을 시도할 때 클라이언트창에서 벌어지는 상황
[root@linux /root]#
telnet rootman.org
Trying 203.241.205.97...
Connected to rootman.org (203.241.205.97).
Escape character is '^]'
Your host is not allowed
Connection closed by foreign host.
---------------------------------------------------------------------------
::spawn shell_command
twist와 같이 쉘 명령을 실행 시켜 주는데 명령의 결과를 client에게 전송하지 않는다. .
--------------------------------------------------------------------------
[root@rootman /etc]# cat hosts.deny
in.telnetd: 203.241.205.91:
spawn /bin/mail -s "%a is denied tcp-wrapper" rootman
--------------------------------------------------------------------------
위의 설정은 호스트 203.241.205.91에서 텔넷 접근을 할 경우 접근을 거부하면서 사용자 rootman에게 "%a is denied tcp-wrapper" 라는 제목으로 메일을 발송한다. %a는 Tcp-Wrapper의 환경 변수로 client의 IP주소를 나타낸다.

--> shell_command에서 사용가능한 환경 변수
%a : 클라이언트 IP 주소
%c : 클라이언트 정보(User@Host, User@Address, 호스트 네임, 또는 IP 주소)
%d : 데몬 프로세스 이름(예: in.telnetd, ftp, pop3)
%h : 클라이언트 호스트 네임 또는 IP주소
%n : 클라이언트 호스트 네임(or"unknown" or"paranoid")
%p : 데몬 프로세스 아이디(PID)
%s : 서버 정보(demon@host, demon@address, 데몬 이름)
%u : 클라이언트 사용자 이름(or "unknown")
%% : 하나의 '%'문자  

::banners
banners로 특정 디렉토리를 지정하면 디렉토리 내의 문서를 client로 출력 시켜 준다. 문서 파일명은 Demon_List와 동일해야 된다. 예를 들면 접속 호스트가 in.telnetd에 대해서 설정한 Client_List와 일치할 경우 지정한 디렉토리 내의 in.telnetd 라는 파일을 client로 출력한다.
-----------------------------------------------------------------------------
[root@rootman /etc]# cat hosts.deny
in.telnetd: 203.241.205.91:
banners /etc/txts  
---> /etc/txts 라는 디렉토리를 만들고 그 안에 in.telnetd라는 텍스트 파일을 만들어야 된다.
-----------------------------------------------------------------------------

이것으로 Tcp-Wrapper에 대한 강좌는 마치고 궁금한 점이 있으면 언제든지 Q&A에 글 올려 주세요.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,150 명
  • 현재 강좌수 :  36,432 개
  • 현재 접속자 :  277 명