이 문서를 다른 웹이나 출판물에 게시할 때는 반드시 출처를 밝혀 주시기 바랍니다.
최종 수정일 : 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에 글 올려 주세요.
|