Solaris 시스템에 TCP Wrapper 프로그램 설치하기


	[ TCP Wrapper 설치하기 ]

1) TCP Wrapper
   TCP Wrapper는 inetd daemon으로부터 기동되는 network application에 대한
   엑세스 콘트롤 프로그램이다.

2) TCP Wrapper 프로그램을 입수한다.

   ftp://ftp.cert-kr.or.kr/pub/Security/tool/tcp_wrappers/tcp_wrappers_7.4.tar.gz

3) 입수한 프로그램을 적당한 디렉토리에서 푼다.
   예) 여기서는 /usr/local/etc directory
   tech% cd /usr/local/etc
   tech% ls
   tcp_wrappers_7.4.tar.gz
   tech% gunzip -cd tcp_wrappers_7.4.tar.gz | tar xpf -
   tech% cd tcp_wrappers_7.4
   tech% ls
   BLURB             fromhost.c        patchlevel.h      tcpd.8
   Banners.Makefile  hosts_access.3    percent_m.c       tcpd.c
   CHANGES           hosts_access.5    percent_x.c       tcpd.h
   DISCLAIMER        hosts_access.c    printf.ck         tcpdchk.8
   Makefile          hosts_ctl.c       ptx.c             tcpdchk.c
   README            hosts_options.5   refuse.c          tcpdmatch.8
   README.IRIX       inetcf.c          rfc931.c          tcpdmatch.c
   README.NIS        inetcf.h          safe_finger.c     tli-sequent.c
   clean_exit.c      misc.c            scaffold.c        tli-sequent.h
   diag.c            miscd.c           scaffold.h        tli.c
   environ.c         mystdarg.h        setenv.c          try-from.c
   eval.c            myvsyslog.c       shell_cmd.c       update.c
   fakelog.c         ncr.c             socket.c          vfprintf.c
   fix_options.c     options.c         strcasecmp.c      workarounds.c

4) 우선 README 화일을 읽어보는 것이 좋다.

5) Compile 방법
   ㉠ 우선 인스톨 하려는 시스템의 타입을 알아야 하므로
      시스템의 타입을 아래와 같이 확인한다.
      tech% uname -a
      SunOS tech 5.5.1 Generic_103640-01 sun4m sparc sun4m

   ㉡ 압축프로그램을 해동한 디렉토리에서 "make"를 수행하면 make sys-type 의
      형태로 입력하라는 메세지와 함께 샘플 타입이 리스트되며, 그중에서
      자신의 시스템에 맞는것을 골라 아래와 같이 컴파일한다.
      tech% make sunos5
      [주의 !]
      README file의 끝부분쯤 보면 easy configuration이라 하여 이 setting 방법
      이 나와 있다. 하지만 위의 uname명령문의 실행결과를 보고 sun, Sun, SunOS
      sun4m,sparc,sun4m등으로 써보니 make에서 error가 생겼다.
      그런데, Makefile을 열어보면 사용방법과 지원되는 시스템의 타입이 나온다.

      @echo "This Makefile knows about the following sys-types:"
      @echo
      @echo " generic (most bsd-ish systems with sys5 compatibility)"
      @echo " 386bsd aix alpha apollo convex-ultranet dell-gcc dgux dgux543"
      @echo " dynix epix esix freebsd hpux irix4 irix5 isc(untested) iunix linux"
      @echo " machten mips(untested) ncrsvr4 netbsd next osf ptx-2.x ptx-generic"
      @echo " pyramid sco sco-nis sco-od2 sco-os5 sunos4 sunos40 sunos5"
      @echo " sysv4 ultrix unicos7 unicos8 unixware1 unixware2 uxp

      Solaris 2.5에서는 sunos5를 선택하니 compile이 실행되었다.

      (다음은 README, Makefile에 쓰여진 실행방법이다.)
      여기서 예상대로 컴파일이 되지 않으면 Makefile을 "vi"에디터로 열어
      40 Line째 부터 기술된 REAL_DAEMON_DIR 부분을 자신의 시스템에 맞는것을
      골라 Uncomment한후, 다시  컴파일한다.
      물론, 처음부터 아래와 같이 수행하면 만사 OK !
      tech% make REAL_DAEMON_DIR=/usr/sbin sys-type
				 ~~~~~~~~~~~~~~~~~~
				  이부분은 시스템에 따라 다를수 있다.

   ㉢ 컴파일이 정상적으로 끝나면 tcpdchk, safe_finger, try-from, tcpdmatch,
      tcpd 등 5개의 실행화일이 생성된다.
      각각의 기능을 살펴보면 아래와 같다.
      tcpd 	: TCP Wrapper 프로그램(DAEMON)
      tcpdchk 	: TCP Wrapper 컨피규레이션 체크 프로그램
      tcpdmatch : TCP Wrapper 엑세스 콘트롤 체크 프로그램
      try-from	: 유저 체크 유틸리티
      safe_finger : finger 체크 유틸리티

6) 온라인 매뉴얼의 인스톨
      # ls *.[1-8]
      hosts_access.3   hosts_options.5  tcpdchk.8
      hosts_access.5   tcpd.8           tcpdmatch.8
      # cp *.3 /usr/local/man/man3
      # cp *.5 /usr/local/man/man5
      # cp *.8 /usr/local/man/man8

7) 각종 설정

   ㉠ telnet등 각종 어플리케이션의 엑세스를 상기 TCP Wrapper 프로그램으로
      교체하기 위해 "/etc/inetd.conf"화일을 편집한다.
      # vi /etc/inetd.conf
      예로써 다음을 보면,
      ftp     stream  tcp     nowait  root    /etc/ftpd in.ftpd
					      ~~~~~~~~~ =======
      telnet  stream  tcp     nowait  root    /etc/telnetd in.telnetd
					      ~~~~~~~~~~~~ ==========
      와 같은 형태로 기술되어 있는 ~~~부분을 /usr/local/etc/tcpd 로
      아래와 같이 바꾸면 된다.
      ftp     stream  tcp     nowait  root    /usr/local/etc/tcpd in.ftpd
					      ~~~~~~~~~~~~~~~~~~~
      telnet  stream  tcp     nowait  root    /usr/local/etc/tcpd in.telnetd
					      ~~~~~~~~~~~~~~~~~~~
      (=== 부분은 ftpd, telnetd등으로 되는 시스템도 있으므로
       그런 경우는 in. 을 붙이지 않고  다음의 예와 같이 기술하면 된다.
       telnet  stream  tcp     nowait  root    /usr/local/etc/tcpd telnetd)

   ㉡ "/etc/inetd.conf"화일에서 ftp, telnet외에 finger, exec, rsh,
      rlogin, tftp, talk, comsat등 다른 tcp 또는 udp 서비스들도 사용할수
      있으므로 엑세스 콘트롤 해야할 필요가 있는 서비스들을 /usr/local/etc/tcpd
      으로 교체해 주면된다.
      [편집후의 예]
      ftp     stream  tcp     nowait  root    /usr/local/etc/tcpd in.ftpd
      telnet  stream  tcp     nowait  root    /usr/local/etc/tcpd in.telnetd
      tftp    dgram   udp     wait    nobody  /usr/local/etc/tcpd in.tftpd -n
      finger  stream  tcp     nowait  nobody  /usr/local/etc/tcpd in.fingerd
      exec    stream  tcp     nowait  root    /usr/local/etc/tcpd in.rexecd
      login   stream  tcp     nowait  root    /usr/local/etc/tcpd in.rlogind
      shell   stream  tcp     nowait  root    /usr/local/etc/tcpd in.rshd
      talk    dgram   udp     wait    root    /usr/local/etc/tcpd in.talkd
      ntalk   dgram   udp     wait    root    /usr/local/etc/tcpd in.talkd
   ㉢ 다음에는 tcpd에 의하여 엑세스 콘트롤을 결정하는 룰(규칙)을
      기술하는 콘트롤 화일을 작성한다.
      i) 우선 엑세스를 거부하는 화일 "/etc/hosts.deny"를 작성한다.
	 # cat /etc/hosts.deny
         ALL:    ALL : ( (/usr/local/etc/safe_finger -l %u@%h;\
	 echo "--- USERS LIST ---";/usr/bin/rusers -l -i %h) | \
	 /usr/bin/mail -s "%d에의해 %h에서 mars로..." root@tech.svc.hei.co.kr) &
	 #ALL:    ALL : (/usr/local/etc/safe_finger -l @%h | \
	 /usr/bin/mail -s %d-%h root) &
	 상기 첫번째 행은 외부에서 침입시도시 그 log를  tech의 root로
	 일정한 장소로 메일을 보내도록 한 것이며, 두번째 #으로 막아놓은 행은
	 그 시스템의 root로 메일을 보내도록 기술한 것이다.
      ii) 다음에는 엑세스를 허락하는 화일 "/etc/hosts.allow"를 작성한다.
         # cat /etc/hosts.allow
	 in.ftpd: LOCAL.svc.hei.co.kr 203.240.
	 in.telnetd: LOCAL.svc.hei.co.kr 203.240. 
	 in.tftpd: LOCAL.svc.hei.co.kr 203.240. 
	 in.fingerd: LOCAL.svc.hei.co.kr 203.240. 
	 in.rexecd: LOCAL.svc.hei.co.kr 203.240. 
	 in.rlogind: LOCAL.svc.hei.co.kr 203.240. 
	 in.rshd: LOCAL.svc.hei.co.kr 203.240. 
	 in.talkd: LOCAL.svc.hei.co.kr 203.240. 
	 (위의 daemon 중에서 /etc/ined.conf에서 사용된 데몬이 예를 들어
	  ftpd와 같이 앞에 in. 이라는 접두어가 없는 경우 여기서도 마찬가지로
	  앞에 in.이 없는 daemon을 아래의 예처럼 써야한다.
	  예) ftpd: LOCAL.svc.hei.co.kr 203.240.
	  만일, daemon이름이 서로 틀리거나 맞지않으면 모두 엑세스가 허용되지
	  않는등의 현상이 발생하므로 주의 바란다.)
      iii) 콘트롤 화일의 기술법
	 -. 콘트롤 화일의 서식
	    서버프로그램: 클라이언트 리스트 [ : 쉘의 리스트 ]
         -. 클라이언트 리스트 기술례
	    a) 호스트 IP Address에 의한 기술
	       203.240.159.31
            b) 네트웍 어드레스와 네트 마스크에 의한 기술
	       203.240.159.0/255.255.255.0
            c) 네트 그룹에 의한 기술
	       @local-network
	       (이 경우 지정한 네트웍 그룹이 /etc/netgroup에 등록 필요)
            d) 호스트 명에 의한 기술
	       hyundai2.svc.hei.co.kr
	       .svc.hei.co.kr
	       (상기 도메인명만을 기술하면 그 도메인에 등록된 모든 호스트에 적용)
            e) /etc/host내의 모든 로칼 호스트명을 표시 하는와일드카드
	       LOCAL
            f) 모든 호스트를 표시 하는 와일드카드
	       ALL
            g) 유저명과 호스트명의 조합 사용
	       melanie@hyundai2.svc.hei.co.kr
          -. hosts.allow와 hosts.deny에 기술되지 않은 호스트에 대하여는
	     엑세스가 허가되므로 통상은  hosts.deny 에서 모든 호스트를
	     거부한후 hosts.allow 에서 엑세스 허가를 지정하는 방법이 권장된다.
	  -. 특히, %h, %d 등은 TCP Wrapper에서의 표현으로 각각 호스트명과
	     데몬 프로세스명을 나타낸다.

8) 모든 설정이 끝났으면 inetd daemon을 kill 한뒤 다시 구동시킨다.
   초기화하면 적용된다.
   # kill -9   inetd daemon process ID
	       ~~~~~~~~~~~~~~~~~~~~~~~

Revision History

작성일자 : 97.3.24
작성자 : 심민선