RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
'tcp wrapper'에 해당되는 글 1

출처 : 대전국제IT교육센터 정성재 강사

 

1. 접근통제란?
(1) 설명: 네트워크 환경체제에서는 항상 권한이라는 것이 있다. 어떠한 시스템에 접근하려면 그
          시스템에 접근권한이 있어야 한다. 권한을 가지지 않은 자가 권한이 부여되지 않은 자료에
          불법적인 접근을 시도할 때 이를 차단하는 행위를 접근통제(Access Control)이라 한다. 리
          눅스시스템에서도 소유자, 그룹, 그 외의 사용자 등 3계층으로 분리하여, 파일 또는 디렉
          토리에 읽기, 쓰기, 실행에 대한 권한을 부여한다.
(2) 접근통제방법: 접근통제하는 방법에는 학문적으로 보면 어떤 계층에서의 통제냐 운영체제의
                  위치가 어디냐에 따라 굉장히 많이 나누지만 여기서는 간단히 분류해보자.
   1) 완전접근통제: 말 그대로 어떠한 사람도 접근을 못하게 막는 것이다. 그러나, 완전통제라면
                    네트워크로서의 기능이 없다고 말할 수 있다.
   2) 일부접근통제: 선별적으로 접근을 허가하는 통제법이다. 대표적인 방법이 TCP Wrapper이다.

(3) 참고: 일부접근통제방식과 Set-Uid
   1) 설명: 리눅스에서 비밀번호를 변경할 때 passwd라는 명령을 이용한다. 이 passwd의 권한은
           root에게 있다. (실제적으로 확인해보면 소유자와 소유그룹 모두 root다. 파일의 위치는
           /usr/ bin/passwd) 그런데, 어떻게 일반 사용자가 그 명령을 사용할 수 있을까? 그것은
           root가 패스워드 권한 일부를 양도했기 때문이다. 이를 setuid, setgid라고 부른다. 이
           러한 경우와 같이 패스워드를 바꾸는 행위 또는 그 역할에만 권한을 허용한 경우가 일부
           접근통제방법에 해당한다.
   2) passwd의 setuid 확인
     ㄱ. /etc/bin으로 이동한다.
     ㄴ. 'ls -l passwd'라고 입력
     ㄷ. 다음과 같이 결과가 출력된다.
       -r-s--x--x    1 root     root        12244 Feb  8  2000 passwd
         => 이와 같이 소유자부분에서 x가 있어야 할 자리에 s가 있다. 이런 경우가 setuid 또는
          setgid가 부여된 경우이다. 이 파일의 소유자와 그룹은 root이다.


2. TCP Wrapper란?
리눅스 커널 2.2 버전에서 TCP Wrapper는 슈퍼데몬인 inetd데몬에 의하여 수행되는 서비스들의 접근
을 제어한다. 즉, 시스템에 접속을 허락한 호스트만 접속할 수 있도록 한다거나, 또는 원하지 않는
호스트의 접근을 막도록 해주는 접근 제어 프로그램이다. TCP 연결을 기반으로 하는 TELNET, FTP,
FINGER,RLOGIN 등을 감시하고 필터링할 수 있다. 현재 사용하는 커널 2.4 버전에서는 inetd가 확장
된 xinetd라는 슈퍼데몬을 사용하면서 자체적으로 접근제어를 하지만 tcp wrapper의 구성요소중
/etc/hosts.allow와 /etc/hosts.deny을 이용한 접근제어는 아직도 사용하고 있다.

3. TCP Wrapper의 구성
(1) 개요: TCP Wrapper는 데몬 프로세서인 /usr/sbin/inetd와 환경파일인 /etc/inetd.conf로 구성
          되어 있다. 또한 리눅스에서는 스크립트파일인 /etc/rc.d/init.d/inet이 있고, /usr/sbin
          /tcpd에서 참조하는 /etc/hosts.allow 파일과 /etc/hosts.deny파일이 있다.
(2) 구성파일
   1) /usr/sbin/inetd
    이 데몬은 여러 가지 다른 서버 프로그램들(telnet, ftp 등)을 관리하기 때문에 슈퍼 데몬이라고
   불리운다. 만약 호스트에서 telnet서비스를 요청하면 inetd는 환경파일인 /etc/inetd.conf파일을
   참고하여 in.telnetd를 구동하고 telnet서비스를 처리한다.
  2) /etc/inetd.conf(커널 2.2 버전만 해당)
    ㄱ. 설명: TCP Wrapper가 구동될 때 참고하는 환경파일이다. 전반적인 설정에 관여한
             다.
    ㄴ. inetd.conf 필드의 구성 : 총 7개의 필드로 구성되어 있다.
      a. 구성예
       telnet  stream  tcp     nowait  root    /usr/sbin/in.telnetd  in.telnetd
      (서비스이름) (소켓타입)(프로토콜)(플래그)(사용자)(서버프로그램) (매개변수)
      b. 필드의 설명
        - 서비스이름 : /etc/services에 정의된 이름
        - 소켓타입 : stream은 tcp, dgram은 udp이다.
        - 프로토콜 : /etc/protocols에 있는 이름
        - 플래그 : 프로세스의 시작방법
        - 사용자 : 서비스가 수행될 때 그 서비스의 소유자
        - 서버프로그램 : 실제 서버 프로그램 및 경로
        - 매개변수 : 서버에 넘겨줄 명령어 라인 매개변수

    ㄷ. inetd.conf의 역할: 이 파일에서 TCP Wrapper에서 사용하는 서비스를 제어할 수 있다. 보통
                         telnet, ftp, shell, login, exec, talk, ntalk, dtalk, pop-2, pop-3,
                         imap, uucp, tftp, bootps, finger, cfinger, sysstat, netstat 등 TCP연
                         결을 기반으로 하는 것들을 제어할 수 있다. 서비스를 하지 않으려면 해당
                         서비스의 맨 앞에 '#'문자를 삽입한다. 즉, 해당서비스열이 주석처리된다.
   3) /etc/rc.d/init.d/inet: 리눅스 배포판만에 있는 스크립트 파일이다. 리눅스에서 inetd 전체의
                            시작과 종료는 이 파일을 이용한다. 커널 2.4에서는 xinetd이다.
   4) /usr/sbin/inetd 와 /usr/sbin/tcpd
     리눅스에서 /etc/inetd.conf 파일의 필드 구성을 보면 위의 구성예와 서버프로그램부분이 다
    르다.
       telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
    그럼 /usr/sbin/tcpd는 무엇인가? inetd는 /etc/inetd.conf파일을 참고하여 TCP Wrapper의 초기
    구동을 담당한다. 즉, /etc/inetd.conf 파일의 설정을 다음과 같이 했다고 가정하자.
       telnet  stream  tcp     nowait  root    /usr/sbin/in.telnetd  in.telnetd
     이 경우에 inetd는 단순히 텔넷서비스 요청이 들어오면 텔넷서비스로 연결만 해준다. 이런 설정
    은 텔넷서비스요청에 대한 어떠한 접근 거부나 허가를 할 수 없게 된다. 그래서, 중간에 접근
    여부를 판단하는 데몬이 tcpd이다. tcpd는 접근허용 파일인 /etc/hosts.allow와 /etc/hosts.deny
    파일을 참조하여 접근 여부를 결정한다. 또한 서비스에 접근하는 과정에서 발생하는 모든 사항에
    대하여 상세한 접속 로그를 남긴다. 즉, tcpd는 inetd와 서버사이에서 중요한 판단을 수행한다.

4.TCP Wrapper의 운용
(1) 개요: TCP Wrapper의 운용은 크게 3가지로 구분할 수 있다. 첫번째는 슈퍼 데몬인 inetd를 종료
          시켜 어떠한 서비스도 하지 않는 것이고, 두번째는 inetd.conf파일을 수정(커널 2.4에서는
          /etc/xinetd.d 디렉토리내의 서비스제어)하여 선택적으로 서비스를 제어하는 것이고, 마지
          막은 /etc/hosts.allows파일과 /etc/hosts.deny파일을 가지고 클라이언트를 선택제어하는
         것이다.
(2) TCP Wrapper 전체 서비스의 중단
   1) 설명: TCP Wrapper를 작동하지 않으려면 inetd 데몬을 중단시키면 된다. 보통 리눅스배포판에
           서는 스크립트파일을 이용하면 된다.
    ㄱ. 서비스의 중단
      /etc/rc.d/init.d/inet stop
    ㄴ. 서비스의 시작
      /etc/rc.d/init.d/inet start
        => 커널 2.4버전인 경우에는 xinetd이다.
(3)선택적인 서비스의 중단
   1) 설명: TCP Wrapper에서는 여러 서비스를 한다. telnet, ftp, rlogin등 많은 서비스등을 한꺼번
          에 관리한다. 따라서, 이중 한가지 서비스를 중단하려면 /etc/inetd.conf파일을 수정하면
          된다. 만약 현재 telnet서비스를 한다면 다음과 같이 설정되어 있을 것이다.
            telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
          그럼, 텔넷서비스를 중단해보자. 맨 앞에 주석을 뜻하는 '#'만 붙여주면 된다.
   2) 사용예
     #telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
(4)호스트의 접근제어 : /etc/hosts.allow와 /etc/hosts.deny파일을 이용하여 선택적으로 호스트
                       를 제어할 수 있다. 실제적으로 xinetd를 사용하는 커널 2.4버전에서도 사용
                       가능한 파일이 이 두 개의 파일이다.
    1)/etc/hosts.allow : 접근이 허가된 호스트들의 목록을 적는다.
    2)/etc/hosts.deny : 접근이 금지된 호스트들의 목록을 적는다.
    3)hosts.allow와 hosts.deny의 검색순서
       hosts.allow를 먼저 검색한 후 hosts.deny를 검색한다. 만약 hosts.deny에 모든 서비스에 대
     해 접근 금지로 설정했을 경우, hosts.allow에 허용된 접근외에는 모든 접근이 금지된다.

5.접근제어 규칙
(1) 설명: /etc/hosts.allow파일과 /etc/hosts.deny파일은 정해진 접근통제규칙을 가지고 있다. 이
         규칙대로 설정을 하여 접근을 제어해야 한다.
(2) 파일 작성시 문법상의 규칙
   1) 새로운 줄(줄바꿈)은 무시되고, 줄을 연장할 경우에는 백슬래쉬를 사용해야 한다.
   2) 빈줄 혹은 '#'으로 시작되는 줄은 주석처리된다.
   3) 다른 모든 줄은 아래의 형식을 따라야 한다.
      예) daemon_list  :  client_list   [ : shell_command ]
     daemon_list : 한개 이상의 데몬(서버프로그램)프로세스 혹은 예약어(와일드카드)
     client_list : 한 개 이상의 호스트 이름, 주소, 패턴 혹은 예약어(클라이언트 이름 혹은
                  주소가 일치하는 것)
(3) 예약어(와일드카드라고도 부름)
    ALL        : 모든 서비스 또는 모든 호스트를 나타냄.
    LOCAL      : 같은 네트워크에 있는 모든 호스트
    KNOWN      : 이름이 KNOWN인 호스트, 혹은 이름 또는 주소를 알고 있는 호스트
    UNKNOWN    : 이름이 UNKNOWN인 호스트, 혹은 이름이나 주소를 모르는 호스트
    PARANOID   : 호스트네임이 주소와 일치되는 않는 호스트
    B EXCEPT A : 리스트 B에서 A를 제외한 모든 B
(4) 패턴형식 : '.'의 위치에 유념해야 하고, ALL과 ':'은 공백이 있어야 한다.
    1)모든 서비스를 모든 호스트에 대해 거부 : /etc/hosts.deny파일에 적는다.
      ALL : ALL
    2) 특정 호스트에 특정서비스 접근 허용 : /etc/hosts.allow파일에 적는다.
      ALL : localhost, .aaa.com   => localhost와 aaa.com의 모든 호스트들에게 모든 서비스를
                                    허용한다는 뜻이다.
      in.telnetd : 192.168.0.2 => 192.168.0.2에서 텔넷 접속에 대해서만 접근을 허용한다.
      ALL : .aaa.com EXCEPT killer.aaa.com => killer.aaa.com를 제외한 aaa.com의 모든 호스트들
                                             에게 모든 서비스를 허용한다.
      ALL EXCEPT in.ftpd : .aaa.com EXCEPT bad.aaa.com => bad.aaa.com를 제외한 aaa.com의 모든
                                                         호스트들에게 ftp서비스를 제외한 모든
                                                         서비스를 허용한다.
      in.telnetd, in.figerd : 233.234.235., .aaa.com => 233.234.235.* 네트워크에 속한 모든 호
                                                       스트와 .aaa.com에 속하는 모든 호스트들
                                                       은 텔넷서비스와 finger서비스를 허용함.
      ALL : ALL : DENY => 그외의 모든 네트워크 호스트는 어떠한 서비스도 받을 수 없다. 만약에
                         hosts.allow를 이렇게 설정해 놓으면 별도로 hosts.deny파일이 필요없다.
      ALL : 192.168.0.0/24 => IP/넷마스크를 이용하여 설정하는 방법으로 192.168.0.0부터 192.16
                             8.0.255까지 모든 서비스에 대하여 허가한다.
(5) Shell Command
   1) 명령
     spawn : 현재 수행중인 프로세스의 자프로세스로 수행
     twist : 현재 수행중인 프로세스의 이미지 교체 후 수행(프로세스의 이미지가 교체되므로 규칙
            의 마지막 옵션으로 사용해야 한다.
   2) 확장 옵션
     %a (%A) : 클라이언트(서버)의 주소
     %c      : 클라이언트의 정보 (user@host 또는 user@address)
     %n (%N) : 클라이언트의 이름
     %d      : 서비스 데몬의 이름
     %h (%H) : 클라이언트(서버) 이름 또는 주소
     %n      : 클라이언트(서버) 이름
     %p      : 데몬 프로세스 ID
     %s      : 서버 정보
     %u      : 클라이언트 사용자 이름
   3) 사용예 : 의심되는 호스트(cracker.aaa.com)가 시스템에 접근을 시도할 경우 이 접속을 거부하
              고 관리자에게 관련 정보를 전송하기 위하여 hosts.deny파일에 다음과 같이 설정한다.
      ALL : cracker.aaa.com : twist (finger -l @%h | mail -s %d -%h root) &

6.TCP Wrapper의 단점
TCP Wrapper는 클라이언트에서 보내진 네트워크 패킷들로부터 제공된 발신지주소의 정보를 보고 그
호스트에 대해 접근을 허가를 하든지 거부를 하든지 동작을 하는데, 이 정보를 전적으로 믿을 수는
없다. 만약 TCP Wrapper에서 192.168.0.2로 부터 오는 telnet 요청을 허가하도록 설정되어 있다고
할 때, 크래커가 자신의 주소를 192.168.0.2라고 속여서 접근한다면 속수무책이다. 이런 식의 공격을
IP 스푸핑이라고 한다.

우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
Tips! (1)
OpenSource (1)
«   2018/10   »
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
  1. 2012/12 (2)
  2. 2012/04 (3)
  3. 2012/03 (6)
  4. 2012/02 (6)
  5. 2012/01 (2)