LINUX FIREWALL
리눅스에서의 방화벽 시스템[2]

    이수준 외 BIT NETWORK 67 기
    VIRUSAWALL & SSL APPLICATION 팀

     

 

    지난 호에서는 Linux Firewall을 구축하기 위한 방화벽과 라우팅 개념, 라우터, 베스천 호스트에 대해서 알아보았다. 이번 호는 계속해서 FWTK의 설치와 구성, 운영 방법 등에 대해 알아보기로 한다.

 

TIS Firewall Toolkit의 개요

    TIS Firewall Toolkit은 하나의 통합된 방화벽 패키지가 아니라 방화벽 소프트웨어를 제작하는데 필요한 여러가지 도구들의 모음이다. TIS Firewall Toolkit으로 구축이 가능한 방화벽 호스트는 프락시(proxy)방식의 방화벽 호스트이다. 따라서 각각의 네트워크 서비스 별로 프락시를 두고 이 프락시들이 방화벽의 기능들을 수행하게 되는 것이다. TIS Firewall Toolkit이 제공하는 프락시들은 원격 로그인 프락시, 파일 전송 프락시, 전자 우편 프락시 등이 있으며, 아울러 다양한 형태의 사용자 인증을 위한 인증 서버를 별도로 두고 있다. 이 모든 응용 프로그램들은 소스 코드의 형태로 제공되므로 사용자가 약간의 프로그램 개발 경험만 있다면 쉽게 컴파일하여 사용할 수 있고, 아울러 사용자의 지식에 따라 새로운 형태의 기능을 추가로 개발하여 사용할 수 있다.

    TIS Firewall Toolkit은 fwtk.tar.Z의 단일 파일 형태로 배포되고 있다. 파일을 입수하고 압축을 해제한 후 유닉스의 tar 명령어를 이용하여 풀면 <그림 2.1>과 같은 형태의 디렉토리를 볼 수 있다. 물론 각각의 디렉토리 내에는 해당 프로그램이나 도구의 소스 파일이 존재

     

                             fwtk
                             
      |
                             
      |

            auth----|----tools

         config----|           |----admin

        ftp-gw----|           |            |----flog

       http-gw----|           |            |----netscan

               lib----|           |            |----portscan

         netacl----|           |            |----progmail

      plug-gw----|           |            |----reporting

    rlogin-gw----|           |----client

          smap----|           |            |----gate-ftp

        smapd----|           |            |----misc

         tn-gw----|           |----server

          x-gw----|                         |----aix-auth

                                                    |----ftpd

                                                    |----login-sh

                                                    |----login-ts

                                                    |----syslog

                                                                  |---- x-gw


    TIS Toolkit 디렉토리 구조

    한다. TIS Firewall Toolkit은 여러가지의  프락시를 제공하고 있으며, 실제 방화벽을 구축할 때 이들 프락시를 선택적으로 설치할 수 있다. 여기서는 각 프락시들의 기능을 간단히 살펴보기로 하겠다.

     

접근 제어의 사용

    netacl은 서버에서 사용되는 다양한 TCP 기반의 서비스에 대한 접근의 정도를 결정해 주는 네트워크 접근 제어 프로그램이다. 예를 들면, 만약 어떤 인가된 사용자에 대해 방화벽 시스템으로의 telnet접근을 허용하고 싶다면 netacl과 적당한 규칙을 적용하여 해당 기능을 가능토록 할 수 있다. 물론 ftp와 rlogin서비스에도 마찬가지로 적용할 수 있다.

     

telnet 프락시

    telnet 프락시인 수-gw는 원하는 서버로의 telnet 서비스에 대한 유일한 경로를 제공하는데, 많은 네트워크 환경에서 시스템 관리자가 내부망으로 방화벽 호스트를 통한 telnet접근을 허용하지 않을 때 사용한다. netacl과는 다르게 telnet 프락시는 방화벽으로의 직접 접근을 제공하지 않는다. 즉, netacl을 경유하는 telnet은 방화벽 호스트로의 접근이 허용되지만 프락시를 경유하는 telnet은 단지 로깅 제어를 갖는 경로만을 제공받게 되는 것이다.

    방화벽 시스템의 관리자는 종종 방화벽 호스트의 원격 관리를 위한 접근 경로와 프락시 telnet을 구축해야 하는 딜레마에 빠질 수가 있는데, 이는 /etc/services 파일과 /etc/inetd. Conf 파일을 수정하여 실제의 telnetd를 telnet의 표준 TCP포트와는 다르게 설정하고, 프락시를 telnet 의 표준 TCP포트에 설정함으로써 해결할 수 있다. 아울러, 이 경우에는 보안을 위해 netcal등의 접근 제어가 필요하다.

    tn-gw의 동작은 매우 간단하다. 방화벽 호스트로의 표주 telnet포트로 들어오는 telnet접근이 감지되면 tn-gw프로그램이 기동되며, tn-gw에서는 프락시로의 해당 접근이 혀용된 호스트로부터 온 것인지를 판별하여 허용/거부를 결정하게 된다.

     

rlogin 프락시

    rlogin 프락시인 rlogin-gw는, telnet 서비스가 아닌, rlogin 서비스를 제공한다는 점을 제외하면 telnet 프락시와 동일한 동작 메커니즘을 가지고 있다. 그러나 일반적으로는, 방화벽 호스트를 통하는 접근의 경우에 rlogin 서비스를 허용하지 않는 것이 바람직하다. 이는 rlogin 서비스 자체가 많은 보안상의 허점을 내포하고 있기 때문이다. 따라서 방화벽 호스트로의 원격 로그인 서비스는 telnet으로 국한하도록 권한다.

     

FTP 프락시

    FTP 프락시인 ftp-gw는, 방화벽 호스트를 통과하는 사설 네트워크 또는, 공용 네트워크로의 FTP 트래픽을 허용하는데, telnet 프락시와 마찬가지로 방화벽으로 표준 FTP포트를 경유하는 FTP 접근이 감지되면 프락시의 수행이 시작된다. 방화벽 호스트로 사용되는 시스템이 FTP 서비스를 제공하게 하는 것은 별로 좋지 않은 생각이다. 가장 좋은 방법은 별도의 FTP 서버를 운용하는 것이지만, 시스템의 원격 관리를 위해 FTP 서비스가 필요할 경우, telnet 서비스의 경우와 마찬가지로 /etc/services 파일과 /etc/inetd.conf 파일을 수정하여 실제의 ftpd를 FTP의 표준 TCP 포트에 설정하여 사용할 수 있다. 물론, 이 경우에도 netcal등의 접근 제어가 필요하다.

     

sendmail 프락시

    방화벽 호스트르 메일의 올바른 전송을 위해서는 smap과 smapd로 불리는 2개의 프락식 필요하다. 이중에 smap은 SMTP의 최소 버전만을 구현한 클라이언트의 기능을 담당하게 되는데, 네트워크로부터 메시지를 받아들여 이를 디스크에 저장함으로서 후에 smapd가 메시지를 받아들여 이를 디스크에 저장함으로서 후에 smapd가 저장된 메시지를 재전송하도록 하는 역할을 수행한다. 프락시로 동작되는 smap은, chroot된 상태에서 non-privileged프로세스로 수행되도록 설계되어 있으므로 일반적인 privileged 메일러에 비해 높은 수준의 보안성을 제공하게 된다.

    Smapd 데몬은, smap에 의해 저장된 메일의 저장 영역을 주기적으로 검사하여 수집된 메일의 수신자에게 해당 메일을 전달하도록 하는 역할을 수행하게 되는데, 이 때 메일의 전송은 sendmail이라는 MAT(Mail Transfer Agent)에 의해 이루어지며 전송이 완료된 메일 메시지는 삭제된다. 만일 메일전송이 불가능할 경우 smapd는 메일이 저장되어 있는 영역을 재구성하여 후에 있을 재 전송에 대비하게 된다.

     

HTTP 프락시

    HTTP 프락시인 http-gw는, 방화벽 호스트를 통과하는 HTTP요구에 대해, 보다 간략화된 메커니즘을 제공한다. 또한 Gopher나 Gopher+등의 Gopher 클라이언트들에 대한 요구를 지원하며, Gopher 클라이언트로부터의 FTP요구와 WWW 클라이언트로부터 전달된 HTTP, Gopfer, Gopher+ 및 FTP 요구를 지원한다.

    HTTP 프락시는 또한 넷스케이프나 익스플로러등의 프락시옵션이 있는 웹 브라우져를 지원할 수 있다. 만약 프락시 옵션을 제공하지 않는 웹 브라우져를 사용할 때는 사용자의 URL설정시 프락시를 경유하도록 하여야만 한다.

     

X Windows 프락시

    x-gw 는, tn-gw와 rlogin-gw 접근 제어하에서 사용자-레벨의 X Windows 인터페이스를 가능케하는 X-Windows 프락시이다. 따라서 x-gw는 단독 실행이 불가능하며 반드시 tn-gw나 rlogin-gw를 통해 방화벽 호스트로의 접근이 허용되었을 경우에만 사용할 수 있다.

     

인증 서버

    TIS Flrewall Toolkit는 광범위한 사용자 인증 메커니즘을 포함하고 있다. TIS인증 서버는 두가지 컴푸넌트로 구성되어 있는데, 첫번째가 실제 서버 그 자체이며 두번째가 인증서버를 구성하고 인증 서버와 상호 동작을 하는 사용자 인증 관리자이다.

    authsrv로 불리는 인증 서버는, 내부 사용자 데이터베이스를 가지면서 다양한 종류의 사용자 인중 프로세스를 지원하도록 설계되어 있는데, 사용자 정보를 가지고 있는 사용자 데이터 베이스는 다음과 같은 내용으로 구성된다.

      ① 사용자의 로그인 ID
      ② 사용자의 그룹
      ③ 사용자의 이름
      ④ 최근의 성공적인 인증 정보

    패스워드로는 내부 사용자를 위한 plaintext 형식과 그 외 사용자를 위한 암호화된 형식을 모두 사용할 수 있는데, plaintext형식의 패스워드는 내부의 허가된 사용자들만이 사용해야 하며, 외부망 등 인가되지 않은 네트워크로부터의 사용자들에게 의해서는 사용되지 않는 것이 바람직하다. 따라서 방화벽 시스템 관리자는 외부 네트워크의 사용자들에게는 암호화된 패스워드만을 제공하여 네트워크 스니핑 등의 공격으로부터 내부 망을 보호해야 할 것이다.
    authsrv 데이터베이스에 등록된 사용자들은 각기 다른 그룹에 속할 수 있으며, 각 그룹 관리자들만이 해당 그룹의 사용자들을 관리할 수 있다. authsrv는 또한 다음관 같이 다양한 형태의 사용자 인증 도구들을 지원하도록 구성되어 있다.

      ① 내장 plaintext 패스워드
      ② Bellcore 사의 S/Key
      ③ Security Dynamics사의 SecurID
      ④ Enigma Logics사의 Silver Card
      ⑤ Digital Pathways사의 SNK004 Secure Net Key

    위의 인증 도구들 중, Plaintext 패스워드와 Bellcore사의 S/Key 는 현재 별도의 하드웨어 추가 없이도 무료로 사용 할 수 있다.

 

기타 서비스를 위한 프락시

    일반적으로 네트워크 트래픽의 80% 이상이 위에서 언급된 서비스 (telnet 과 rlogin, FTP, sendmail 및 HTTP)로 이루어져 있다. 그러나 여기에 언급되지 않은 Network News Transfer Protocol(NNTP)과 Post Office Protocol(POP)등의 서비스는 어떻게 처리해야 할까?
    TIS Firewall Toolkit에서는 이에 대한 해결책으로 플러그 보드 형태의 연결을 위한 plug-gw 프락시를 제공하고 있다.

 

TIS Firewall Toolkit의 입수

    먼저 http://www.tis.com/에 접속하면 다운로드 방법을 비롯하여 TIS Firewall Toolkit 을 다운로드 받으려 할 경우에 send라는 단어를 내용으로 한 메일을 fwtk-request@tis.com 에게 보내라는 내용의 안내글이 나오 있으므로 그대로 따르기 바란다. 하루나 이틀 후에 TIS Firewall Toolkit을 다운로드 받을 수 있는 FTP 사이트와 디렉토리를 알려주는 전자 메일이 TIS 사로부터 전송되어 도착되므로, 해당 사이트와 디렉토리로 FTP 로그인하여 파일을 받아오면 TIS Firewall Toolkit을 입수할 수 있다. 이와 함께 TIS에서는 TIS Firewall Toolkit과 관련된 문서들을 모아 fwtk-doc-only_tar.tar.Z라는 별도의 파일로 제공하고 있다. 보통의 경우, 이 문서 파일도 프로그램 파일과 동일한 디렉토리 상에서 압축을 풀고 tar를 해제하여 사용에 참조하게 된다.

     

베스천 호스트의 구축

 

베스천 호스트 사용자 계정의 삭제

    꼭 필요한 경우가 아니면 베스천 호스트 내의 사용자 계정은 모두 삭제시켜야 한다. 사용자 계정이 존재하지 않는 베스천 호스트가 보다 높은 수준의 보안 수준을 제공할 수 있기 때문인데, 이에 대한 이유는 다음과 같다.

      ① 계정 자체가 보안상의 취약성을 내포하고 있다.
      ② 계정 관리를 위한 서비스들이 보안상의 취약성을 내포하고 있다.
      ③ 머신의 안정성과 신뢰성을 감소시킬 수 있다.
      ④ 사용자에 의해 베스천 호스트의 방어력이 감소될 수 있다.
      ⑤ 공격의 감지가 어려워진다.

 

베스천 호스트의 구축 순서

    일반적인 운영체제를 사용하는 베스천 호스트를 구축은 다음의 순서에 따라 이루어 진다.

      ① 머신의 자체 보안 수준을 높인다.
      ② 필요없는 모든 서비스를 중지시킨다.
      ③ 기능 제공을 원하는 서비스를 설치하고 수정.
      ④ 원하는 동작 상태의 환경으로 머신을 재구성
      ⑤ 기준에 적합한지 보안 감사 도구를 동작
      ⑥ 감사 결과에 따라 머신을 네트워크에 연결시켜 사용

     

방화벽 환경 구축을 위한 준비

    방화벽 환경 구축을 위한 첫번째 단계는, 앞서 언급된 바와 같이 불필요한 서비스를 중지시키는 것이다.

      ① /etc/inetd.conf 파일을 수정
      ② /etc/re,/etc/rc2.d/* 등의 시스템 시작 스크립트를 수정
      ③ 운영체제 구성을 수정하여 불필요한 커널 기반 서비스들을 제거

     

네트워크 허용 테이블

    방화벽 소프트웨어가 정상적으로 설치되었을 경우,/usr/local/etc/netperm-table 의 파일로 존재하는 네트워크 허용 테이블 (Network Permission Table)은, TIS Firewall Toolkit 기반 방화벽 프로그램의 요소들(neactl, smap, smapd, ftp-gw, tn-gw 및 plug-gw등)을 위한 중요한 환경 구성 파일이다.

    TIS Firewall Toolkit의 프락시가 동작을 시작하면, 네트워크 허용 테이블로부터 환경 구성과 접근 허용 정보를 읽어와, 메모리에 데이터베이스 형태로 저장하고 이후 사용에 대비한다. 접근 허용/구성 파일은 접근 규칙에 따라 만들어지는데, 각각의 접근 규칙들은 해당 규칙이 적용되는 어플리케이션 프락시로 명명되며, "어플리케이션 프락시명: 접근 규칙"과 같이 콜론(:)을 사용하여 표시한다. 또한 동일한 접근 규칙이 적용되는 여러 어플리케이션 프락시들은 "어플리케이션 프락시명 1, 어플리케이션 프락시명 2: 접근 규칙"과 같이 콤마(,)를 사용하여 한꺼번에 표시할 수도 있고 "*"등의 기호도 사용이 가능하다. 특정 어플리케이션 프락시가 환경 정보를 추출할 경우에는, 자신에게 해당되는 규칙만을 추출하여 순서대로 적용하게 되는데, 다음의 리스트에 smap과 smapd에 적용되는 접근 규칙의 예를 보여주고 있다.

      # sample rules for smap
      smap, smapd: userid   4
      smap, smapd: directory  /mail/inspool
      smap:         timeout  3600

    어플리케이션 프락시가 자신을 위한 접근 규칙을 발견하면, 해당 규칙은 내부적으로 공백 문자 단위의 문자열로 구분되어 이후 사용에 대비한다. 일반적으로 첫번째 단어가 규칙을 나타내고, 다음에 이어지는 단어들이 해당 규칙에 적용되는 옵션 파라미터를 나타낸다.

    앞의 smap 클라이언트와 smapd서버의 예를 보면, userid 항목은 해당 어플리케잇ㄴ이 실행될 때의 사용자 ID를 나타내며, directory 항목은 파일의 위치를, 그리고 timeout 항목은 최대 대기 시간을 나타내게 된다.

    접근 규칙을 나타내는 문자열에는 여러가지의 다양한 의미들이 적용 가능한데, 한 예로 permit-hosts혹은 deny-host로 시작할 경우에는 접속을 허용, 혹은 거부할 호스트의 IP어드레스가 동반되며 여기에 해당하는 호스트들은 접속을 허용, 혹은 거부하도록 운용 된다.

      # sample rules for netacl    
      netacl - in.ftpd:      permit-hosts 202.30.113.5 -exec/usr/sbin/in.ftpd
      netacl-in. ftpd:      permit-hosts 203.68.35.112 -exec/usr/sbin/in.ftpd
      netacl-in.ftpd:       deny-hosts unknown
      netacl-in.ftpd:       deny-hosts *

    네트워크 허용 테이블을 만들 때 고려되어야 할 약속들이 몇 개 있는데, 이러한 약속들은 파일의 일관성을 약속하며, 보다 더 이해하기 쉽고 관리가 편한 규칙 목록을 만들 수 있도록 도와준다. 이해를 쉽게 하기 위해, 규칙에 호스트의 이름이나 발신지 호스트의 IP 어드레스가 설정되고 패턴 매칭에 따른 허용 호스트를 판단하는 경우를 예로 들어 보자.

      netaci-in.ftpd: permit-hosts 202.30.113.5 -exec/usr/sbin/in.ftpd

    위와 같은 규칙이 적용된 상태에서 접속 요구가 들어오게 되면, 규칙의 부합 여부를 판단하기 위해 원격 머신의 IP어드레스가 사용될 것이다. 다음은 도메인 이름으로 허용 규칙을 작성하였을 경우를 살펴보자.

      netaci-in.ftpd: permit-hosts*.nca.or,kr -exec/usr/sbin/in.ftpd

    접근 규칙에 원격 머신의 IP 어드레스가 아닌 도메인 이름이 사용된 경우, DNS 스푸핑(spoofing)의 가능성에 의해 방화벽 호스트의 보안성이 취약해질 수 있으므로 사용을 남용하지 않도록 권고한다.

    어플리케이션 프락시가 IP 어드레스를 도메인 이름으로 바꾸기 위한 리버스 룩업(reverse lookup)시도가 실패하는 경우 호스트 이름은 "unknown"으로 설정되며, 이외의 경우 원격 시스템의 호스트 이름을 반환받게 된다. 아울러 도메인 이름 찾기가 방화벽 호스트에 의해 수행될 경우, 리버스 룩업에 의해 반환되는 도메인 이름을 알아내기 위한 작업은 안전을 보장받을 수 있게 되며, 이러한 환경 구성으로 DNS 스푸핑을 막을 수 있다. 만일 IP 어드레스가 DNS시스템 내에 위치할 수 없다면, 호스트 이름은 "unknown"으로 설정 되고 경고가 로그되는데, 이와 같이 방화벽은 유효한 DNS 매핑을 가지지 않은 호스트에 대해서도 동작하는 규칙을 허용한다. 즉, 인터넷 상에서 어떤 호스트도 방화벽을 통과하도록 한다거나, 혹은 리버스 DNS 어드레싱이 잘 구성되어 있을 경우 특정 서비스에 접근 하도록 하는 것이 가능하다는 뜻이 될 수 있다.

 

네트워크 접근 제어

    TIS Firewall Toolkit 기반의 방화벽에서는 네트워크 접근제어의 기능을 위해 netacl이라 불리는 프로그램을 제공한다. Netacl프로그램은 inetd데몬에 의해 기동되게 되며, 원격 사용자/시스템으로부터의 서비스 요구를 허용하거나 거부하는 기능을 담당 한다. Inetd.conf파일에서 netacl을 설정할 경우에, netcal이 오직 하나의 인수를 취한다는 것은 매우 중요한데, 이 인수로는 시작하고자 하는 서비스의 이름이 사용된다. 아울러 이외의 인수들은 netcal이 기동하는 서비스가 사용하게 되는데, inetd.conf파일에 대한 아래의 예를 참조하시기 바란다.

      ftp  stream tcp nowait root /usr/local/etc/netacl /usr/sbin/in.ftpd

    위와 같이 구성되었을 경우, ftp 서비스 접속 요구가 inetd에 의해서 받아들여지게 되면, netcal 프로그램이 /usr/sbin/in.ftpd를 인수로 하여 동작을 시작하게 된다. ftpd 데몬이 시작되기 전에 netacl은, 해당 요구가 netperm-table 내 접속 규칙에 부합되는지를 검사하여 ftpd데몬의 실행 여부를 판단하게 된다. 통상적으로 규칙의 이름은 netacl- 과 해당 서비스의 이름을 조합하여 사용하게 되는데, 서비스가 in.ftpd일 경우에는 neta치-in.ftpd로 규칙의 이름을 설정되어야만 한다.

      netacl-in. ftpd: permit-hosts 202.30.113.5 -exec/usr/sbin/in.ftpd

     

    서비스

    키워드

    설 명

    netacl

    permit-hosts IP 어드레스
    또는 호스트이름

    접속을 허용하고자 하는 호스트를
    나타낸다.

    deny-hosts IP 어드레스
    또는 호스트이름

    접속을 거부하고자 하는 호스트를
    나타낸다.
    서비스 거부 정보는 syslogd에 의해
    기록된다.

    -exec 실행파일 [arg]

    요청 서비스 처리를 위한 프로그램을
    나타낸다.
    이 옵션은 반드시 마지막에 사용되어야 하며, 반드시 사용되어야 한다.

    -user 사용자 ID

    숫자로 표시된 UID나 /etc/passwd
    내에 기록된 사용자 이름으로, 프로그램이 기동될 때 사용되어야 한다.

    -chroot rootdir

    서비스 프로그램을 호출하기 위해 netacl이 chroot(2) 명령어를 실행하는 디렉토리를 나타낸다.
    이 항목은 서비스 프로그램이 사용할 새로운 루트 디렉토리를 지정하기 위해 필요하다.


    표 3.1 netacl 을 위한 접근 규칙

    위의 예에서는, 202.30.113.5의 IP 어드레스를 갖는 호스트만이 방화벽으로의 ftp 서비스를 위한 접근을 할 수 있다. 아울러 <표 3.1>에 netacl 을 위한 여러가지의 키워드 리스트가 표시되어 있으므로 이를 참조하여 접근 규칙을 설정하기 바란다.

    요청 서비스의 수용과 거부는 syslog 데몬에 의해 다음과 같이 기록되므로 추후 방화벽 시스템 분석에 사용될 수 있을 것이다.

      Oct 31 00:12:30 firewall netacl[339]: deny host=test.nca.or.kr/
      202.30.113.3 service=in.ftpd
      Oct 31 00:13:30 firewall netacl [354]: deny host=test.nca.or.kr/
      202.30.113.3 service=in.ftpd excute=/usr/sbin/in.ftpd

    로그 리포트의 첫 번째 라인은 호스트 test.nca.or.kr이 요청한 ftp 서비스가 netacl에 의해 거부되었음을 알려 주고 있으며, 두번째 라인은 ftp 접속 요청이 허가 되었음을 알려 주고 있으며, 두번째 라인은 ftp 접속 용청이 허가되었음을 나타낸다. 그러나 접속을 요청한 사용자에 대해서는 아무런 정보도 보여주지 못하므로 불법 사용자의 추적에 한계가 있다고 볼 수 있다. 다음에 보여주는 netacl 규칙을 참조하여 필요한 접근 규칙을 만들어 사용하면 효과적으로 접근을 제어할 수 있다.

      netacl-in.telnetd: permit-hosts 198.53.64.* -exec /usr/sbin/in.telnetd
      netacl-in.ftpd: permit-hosts unknown -exec/usr/bin/cat noftp.txt
      netzcl-in.ftpd: permit-hosts 204.191.3.* -exec/usr/sbin/in.ftpd
      netacl-ftpd: permit-hosts* -chroot/home/ftp-exec/usr/etc/ftpd

    위의 예에서, netacl이 특정 서브넷 상의 호스트에게만 telnet서비스가 허용되도록 구성되었고, 유효한 DNS 이름을 가지지 않은 시스템으로부터의 모든 FTP연결은 noftp.txt파일을 출력하도록 구성되었으며, 특정 서브넷 상의 호스트에게만 FTP 서비스가 허용되도록 구성되었다. 또한 위에서 언급된 호스트 이외의 모든 네트워크로부터의 FTP 서비스 요청은, 특정 디렉토리에 별도의 FTP 서버를 사용하도록 하였으므로, 별도의 FTP 서버에서 제공 서비스를 제한할 수 있다.

     

프락시 서버의 운용

 

1). telnet 프락시

    TIS Firewall Toolkit 기반의 방화벽에서는 telnet서비스를 위한 tn-gw라 불리는 telnet프락시를 제공한다. tn-gw프로그램도 inted 데몬에 의해 기동되는데, 다음과 같이 /etc/inetd.conf 파일을 수정하여 원하는 프락시 동작을 구현할 수 있다.

      telnet stream tcp nowait root /usr/local/etc/tn-gw tn-gw

     

    명령어

    설   명

    c[onnect]호스트이름[포트]
    telnet 호스트이름[포트]
    open

    원격호스트로의 연결을 시도한다. 원격 호스트로의 접근은 대상 호스트 규칙에 의해 거부될 수도 있다.

    x[-gw] [display/호스트이름]

    X Windows 게이트웨이를 불러오는 명령어이다. 디폴트 표시 이름은 test.nca. or.kr:0.0 등과 같이 :0.0이 사용된다.

    help
    ?

    사용자가 설정한 도움말 파일을 나타낸다.

    quit
    exit
    close

    게이트웨이로부터의 접속 종료를 나타낸다.


    표 4.1 tn-gw 명령어

     

    옵 션

    설 명

    userid 사용자

    숫자로 표시된 UID나 /etc/passwd내에 기록된 사용자 이름으로 프로그램이 기동될 떄 사용되어야 한다.

    directory pathname

    서비스 프로그램을 호출하기 위해 tn-gw chroot(2) 명령어를 실행하는 디렉토리를 나타낸다.

    prompt 문자열

    명령어 모드에서의 tn-gw를 위한 프롬프트를 나타낸다.

    denial-msg 파일

    프락시 사용이 거부되었을 경우 원격 사용자에게 표시할 메시지를 담고 있는 파일의 이름을 나타낸다. 이 옵션이 설정되지 않으면 디폴트 메시지를 표시한다.

    timeout 초

    프락시의 연결을 끊을 대기 시간을 나타내며, 디폴트는 시간이 설정되지 않는다.

    welcome-msg 파일

    프락시 사용이 허용되었을 경우 원격 사용자에게 표시할 메시지를 담고 있는 파일의 이름을 나타낸다. 이 옵션이 설정되지 않으면 디폴트 메시지를 표시한다.

    help-msg 파일

    'help' 명령어에 대하여 원격 사용자에게 표시할 도움말을 담고 있는 하일의 이름을 나타낸다. 이 옵션이 설정되지 않으면 디폴트 도움말을 표시한다.

    denydest-msg 파일

    사용자 인증이 거부되었을 경우 원격사용자에게 표시할 메시지를 담고 있는 파일의 이름을 나타낸다. 이 옵션이 설정되지 않으면 디폴트 메시지를 표시한다.

    authserver 호스트
    [포트번호 [ciperkey]]

    네트워크 인증에 사용되는 시스템의 일름이나 IP 어드레스를 나타낸다. tn-gw가 인증서버 및 포트를 내부적으로 가지고 컴파일 되었을 경우 디폴트 설정에 사용되지만, 본 규칙이 설정되었을 경우 해당 구칙에 적용을 받게 된다. 만일 서버가 DES 암호화를 지원하면 ciperkey 옵션을 사용하여 보다 안전한 통신이 보장된다.

    hostd 호스트이름
    [호스트이름2...] [옵션]

    해당 호스트에 대한 접근 허용 규칙을 나타낸다.


    표 4.2 tn-gw를 위한 접근 규칙

    이러한 환경 구성에서, telnet 포트로의 접속 시도가 발생되면 tn-g가 동작을 시작하게 되며, tn-gw는 요청 호스트가 프락시 접속이 허용된 호스트인지를 검사하게 된다. tn-gw의 경우도 netacl의 경우와 마찬가지로 netperm-table에 설정되어 있는 접근 규칙에 따라 접속 허용 여부를 판별한다. tn-gw를 위하여 netperm-table에 다음과 같이 접근 규칙이 설정되어 있을 경우를 예로 들어 보자.

      tn-gw: denial-msg  /usr/local/etc/tn-deny.txt
      tn-gw: welcome-msg /usr/local/etc/tn-welcome.txt
      tn-gw: help-msg  /usr/local/etc/tn-help.txt
      tn-gw: timeout   3600
      tn-gw: permit-hosts 202.30.113.* -dest*.nca.or.kr -dest !* -passok  -xok

    이 경우, 202.30.113.*이외의 사이트로부터 접속을 시도하는 사용자는 접속이 거부되지 않고 원하는 서비스의 이용이 불가능하게 된다. 접속이 허용된 호스트로 판명되었을 경우 tn-gw 프로그램은 명령어 대기 루프로 동작을 시작하게 되는데, 이 경우에 사용이 가능한 명령어들은 <표 4.2>에 표시된 것과 같다.

    허가된 호스트가 프락시로 접속하게 되면, tn-gw옵션에 따라 접속 환영 파일의 내용을 처음 접하게 된 후 명령어 프롬프트 상태로 들어가게 된다. 프롬프트상에서는 <표 4.1>에 표시된 명령어만을 사용할 수 있다.

    telnet 프락시에 대한 접근 허용 및 거부 규칙은 몇가지 추가 옵션에 의해 변경될 수 있다.
    <표 4.2>에 따라 다음의 규칙을 살펴 보기로 하자.

      tn-gw:  deny-hosts    unknown
      tn-gw   hosts          202.30.113.*192.94.12.*

    이 규칙이 적용되게 되면, 도메인 이름을 DNS에서 발견할 수 없을 경우, 접속이 거부되며, 202.30.113및 192.94.12네트워크로부터의 접근만을 허용하게 된다. 앞서 적용된 규칙을 다시 한번 살펴보기로 하자.
     

    명령어

    설  명

    -dest 패턴
    -dest { 패턴1 패턴2 ...}

    유효한 대상 시스템의 리스트를 나타낸다. 아무런 리스트도 설정되지 않으면 모든 대상 시스템이 유효하도록 설정된다. -dest 에 ! 옵션이 사용되면 부정을 의미한다.

    -auth

    프락시가 사용자 인증 기능을 사용함을 의미한다. 따라서 별도의 인증 서버의 인증을 받아야 접근 허용이 이루어질 수 있다.

    -passok

    허용된 사용자가 자신이 사용할 비밀번호를 변경할 수 있도록 되어 있음을 나타낸다.


    표 4.3호스트 접근 규칙

     

    옵  션

    설  명

    userid 사용자

    숫자로 표시된 UID나 /etc/passwd 내에 기록된 사요자 이름으로 프로그램이 기동될 때 사용되어야 한다.

    directory pathname

    서비스 프로그램을 호출하기 위해 ftp-gw chroot(2) 명령어를 실행하는 디렉토리를 나타낸다.

    prompt 문자열

    명령어 모드에서의 ftp-gw를 위한 프롬프트를 나타낸다.

    denial-msg 파일

    프락시 사용이 거부되었을 경우 원격 사용자에게 표시할 메시지를 담고 있는 파일의 이름을 나타낸다. 이 옵션이 설정되지 않으면 디폴트 메시지를 표시한다.

    timeout 초

    프락시의 연결을 끊을 대기 시간을 나타내며, 디폴트는 시간이 설정되지 않는다.

    welcome-msg 파일

    프락시 사용이 허용되었을 경우 원격 사용자에게 표시할 헤시지를 담고 있는 파일의 이름을 나타낸다. 이 옵션이 설정되지 않으면 디폴트 도움말을 표시한다.

    help-msg 파일

    'help' 명령어에 대하여 원격 사용자에게 표시할 도움말을 담고 있는 파일의 이름을 나타낸다. 이 옵션이 설정되지 않으면 디폴트 도움말을 표시한다.

    denydest-msg 파일

    사용자 인증이 거부되었을 경우 원격 사용자에게 표시할 메시지를 담고 있는 파일의 이름을 나타낸다. 이 옵션이 설정되지 않으면 디폴트 메시지를 표시한다.


    표 4.4 ftp-gw를 위한 접근 규칙

      tn-gw: permit-hosts 202.30.113.* -dest* .nca.or.kr -dest !  * -passok-xok

    이 경우, 202.30.113 네트워크로부터 요구된 접속 중 nca.or.kr로의 접속만을 허용하고 이외의 접속 요구는 모두 거부하게 된다. 추가의 옵션은 하이픈과 함께 사용될 수 있는데, -dest 옵션은 접속을 허용하는 대상 시스템을 의미하며, !와 함께 사용될 경우에는 허가되지 않은 시스템을 나타낸다. 아울러 추가 사용 옵션에 대한 설명이 <표 4.3>에 주어져 있다.

 

2). FTP 프락시

    FTP 프락시인 ftp-gw 프로그램도 inetd 데몬에 의해 기동되게 되는데, 다음과 같이 /etc/inetd.conf 파일을 수정하여 원하는 프락시 동작을 구현할 수 있다.

      ftp  stream  tcp  nowait   root/usr/local/etc/ftp-gw  ftp-gw

    이러한 환경 구성에서, FTP 포트로의 접속 시도가 발생되면 ftp-gw가 동작을 시작하게 되

     

    명령어

    설  명

    -dest 패턴
    -dest { 패턴1 패턴2 ...}

    유효한 대상 시스템의 리스트를 나타낸다. 아무런 리스트도 설정되지 않으면 모든 대상 시스템이 유효하도록 설정된다. -dest 에 ! 옵션이 사용되면 부정을 의미한다.

    -auth

    프락시가 사용자 인증 기능을 사용함을 의미한다. 따라서 별도의 인증 서버의 인증을 받아야 접근 허용이 이루어질 수 있다.

    -passok

    허용된 사용자가 자신이 사용할 비밀번호를 변경할 수 있도록 되어 있음을 나타낸다.

    -virus

    FTP 파일 전송시 바이러스 포함여부를 알려준다.
    (추가된 기능)


    표 4.5 호스트 접근 옵션

    며, ftp-gw는 요청 호스트가 프락시 접속이 허용된 호스트인지 검사하게 된다. ftp-gw의 경우도 tn-gw의 경우와 마찬가지로 netperm-table 에 설정되어 있는 접근 규칙에 따라 접속 허용 여부를 판별하게 되는데, <표 4.4>에 ftp-gw를 위한 키워드 리스트가 표시되어 있으므로 이를 참조하여 접근 규칙을 설정하기 바란다.

    ftp-gw를 위하여 netperm-table에 다음과 같이 접근 규칙이 설정되어 있을 경우를 예로 들어 보자.

      ftp-gw:  denial-msg   /usr/local/etc/ftp-deny.txt
      ftp-gw:  welcome-msg  /usr/local/etc/ftp-welcome.txt
      ftp-gw:  help-msg  /usr/local/etc/ftp-help.txt
      ftp-gw:  denydest-msg  /usr/local/etc/ftp-baddest.txt
      ftp-gw:  timeout     3600

    FTP프락시에 대한 접근 허용 및 거부 규칙은 몇가지 추가 옵션에 의해 변경될 수 있다.

      ftp-gw:  deny-hosts   unknown
      ftp-gw:  hosts         202.30.113.* 192.94.12.*

    이 규칙이 적용되게 되면, 도메인 이름을 DNS에서 발견할 수 없을 경우 접속이 거부되며, 202.30.113 및 192.94.12네트워크로부터의 접근만을 허용하게 된다. 아울러 추가 사용 옵션에 대한 설명이 <표 4.5>에 주어져 있다.

    FTP 프락시를 통한 접속이 이루어지게 되고 허가된 호스트로 판명되면 접근 규칙에 따라 사용자 인증이 요구될 수 있다. 사용자 인증이 사용된 경우의 netperm-table의 내용은 다음과 같다.

      ftp-gw:  permit-hosts 202.30.63.* -authall -log { retr stor }

     

정리된 sytem file들

     

    netperm-table의 예

     

    #  cat /user/local/etc/netperm-table
    #  Sample netperm configuration table
    #
    #  To get a good sample working netperm-table, just globally
    #  substitute YOURNET for your network address (e.g.; 666.>>777.888
    #
    #  Netacl rules:
    #------------------------------------------------------------
    netacl-in.telentd : permit-hosts 202.30.113.3 -exec /user/sbin/in.telnetd
    netacl-in.ftpd :     permit-hosts 202.30.113.3 -exec /user/sbin/in.ftpd 
    #------------------------------------------------------------
    #
    #Telnet gateway rules :
    #------------------------------------------------------------
    tn-gw :   userid                    bin
    tn-gw :   directory                /home/telnet
    tn-gw :   denial-msg            /usr/local/etc/tn-deny.txt
    tn-gw :   welcome-msg        /usr/local/etc/tn-welcome.txt 
    tn-gw :   timeout                  3600
    tn-gw :   prompt                  "Enter Commend>"
    tn-gw :   permit-hosts          202.30.113.*  -auth  -passok
    tn-gw :   permit-hosts          202.30.114.*  202.30.113.*  -auth
    #------------------------------------------------------------
    #
    #  FTP gateway rules:
    #------------------------------------------------------------
    ftp-gw : userid               bin
    ftp-gw : directory            /home/ftp
    ftp-gw : denial-msg        /usr/local/etc/ftp-deny.txt
    ftp-gw : welcome-msg    /usr/local/etc/ftp-welcome.txt
    ftp-gw : timeout              3600
    ftp-gw : permit-hosts      202.30.113.*  -authall  -dest  !202.30.113.2
    ftp-gw : permit-hosts      202.30.114.*  -virus  -log  { retr stor }
    ftp-gw : permit-hosts      202.30.115.*  -auth { stor } -log { >>retr stor }
    #------------------------------------------------------------
    #
    #  HTTP gateway rules :
    #------------------------------------------------------------
    http-gw : userid bin
    http-gw :             deny-hosts   unknown
    http-gw :             timeout   3600
    http-gw :             permit-hosts   * -http web.nca.or.kr
    http-gw :             default=gopher  web.nca.or.kr
    #------------------------------------------------------------
    #
    #  NNTP gateway rules :
    #------------------------------------------------------------
    plug-gw :             timeout   3600
    plug-gw :             port nntp  * nca.or.kr   -plug-to  ds.krnic.net -port nntp
    plug-gw :             port 23  * -plug-to 202.30.113.7 -port 23
    #------------------------------------------------------------
    #
    #  SMAP/SMAPD rules :
    #------------------------------------------------------------
    smap, smapd :      userid    smtp
    smap, smapd :      directory   /var/spool/smap
    smap :                  timeout   3600
    smapd :                executable   /usr/local/etc/smapd 
    smapd :                sendmail   usr/lib/sendmail
    #------------------------------------------------------------
    #
    #  Auth server rules :
    #------------------------------------------------------------
    authsrv :               permit-hosts       127.0.0.1
    #------------------------------------------------------------
    #
    #Auth client rules :
    #------------------------------------------------------------
    * :    authserver   127.0.0.1   7777
    #
    #  END.

     

    inetd.conf 파일의 예

      

    #  ca /etc/inetd.conf
    #
    #ident   "@(#) inetd.conf  1.16   94/03/08  SMI"  /* SVr4.0  1.5  */
    #  Configuration file for inetd(1M). See inetd.conf(4).
    #
    #  To re-configure the running inetd process, edit this file, then
    #  send the inetd process a SIGHUP.
    #
    #  Syntax for socket-based Internet service :
    #   <service_name> <socket_type> <proto> <flags> <user> <server_pathname>      >> <args>
    #
    #  Syntax for TLI-based Internet services :
    #   <service_name> tli <proto> <flags> <user> <server_pathname> <args>
    #
    #  Ftp and telnet are standard Internet services.
    #
    ftp    stream   tcp   nowait   root   /usr/local/etc/ftp-gw   ftp-gw
    ftp-a    stream   tcp   nowait   root   /usr/local/etc/netacl  in.ftpd
    telnet    stream   tcp   nowait   root   /usr/local/etc/tn-gw   tn-gw
    telnet-a    stream   tcp   nowait   root   /usr/local/etc/netacl  intelnetd
    #
    #  smap/ smapd
    smtp   stream   tcp   nowait   root   /usr/local/etc/smap   smap
    #
    #  authsrv
    authsrv   stream   tcp   nowait   root   /usr/local/etc/authsrv   authsrv
    #
    #  HTTP
    http   stream   tcp   nowait   root   /usr/local/etc/http-gw   http-gw
    gopher   stream   tcp   nowait   root   /usr/local/etc/authsrv   authsrv
    #
    #NNTP
    nntp   stream   tcp   nowait   root   /usr/local/etc/plug-gw   plug-gw nntp
    #
    #  Tnamed serves the obsolete IEN-116 name server protocol.
    #
    name   dgram   udp   wait   root   /usr/sbin/in.tnamed   in.tnamed
    #
    #  Sell, login, exec, comsat and talk are BSD protocols.
    #
    #sell   stream   tcp   nowait   root   /usr/sbin/in.rshd   in.rshd
    #login   stream   tcp   nowait   root   /usr/sbin/in.rlogin   in.rlogin
    #exec   stream   tcp   nowait   root   /usr/sbin/in.rexecd   in.rexecd
    #comsat   dgram   udp   nowait   root   /usr/sbin/in.comsat   in.comsat
    #talk   dgram   udp   nowait   root   /usr/sbin/in.talkd   in.talkd
    #
    #  Must run as root (to read /etc/shadow) ; "-n" turns off logging in utmp/wtmp.
    #
    #uucp   stream   tcp   nowait   root    /usr/sbin/in.uucpd   in.uucpd
    #
    #  Tftp service is provided primarily for booting. Most site run this
    #  only on machines acting as "boot servers."
    #
    #tftp   dgram   udp   wait   root   /usr/sbin/in.tftpd   in.tftpd   -s   /tftpboot
    #
    #  Finger, systat and netstat give out user information which may be
    #  valuable to potential "system crackers." Many sites choose to disable
    #  some or all of these services to improve security.
    #
    #finger   stream   tcp   nowait   nobody   /usr/sbin/in.fingerd   in fingerd
    #finger   stream   tcp   nowait   root  /usr/local/etc/netacl   in fingerd
    #systat   stream   tcp   nowait   root   /usr/bin/ps   ps   -ef
    #netstat   stream   tcp   nowait   root   /usr/bin/netstat   netstat   -f   inet
    #
    # Time service is used for clock synchronization.
    #
    time   stream   tcp     nowait   root   internal
    time   dgram   udp     wait       root   internal
    #
    #  Echo, discard, daytime, and chargen are used primarily for testing.
    #
    echo            stream     tcp      nowait     root     internal
    echo            dgram     udp      wait        root     internal
    discard         stream     tcp      nowait     root     internal
    discard         dgram     udp      wait        root     internal
    daytime        stream     tcp      nowait     root     internal
    daytime        dgram     udp      wait         root     internal
    chargen        stream     tcp      nowait     root     internal
    chargen        dgram     udp      wait        root     internal
    #
    # END.

     

    services 파일의 예

     

    #cat /etc/services
    #
    #ident  "@(#)services    1.9    93/09/10   SMI"   /*  SVr4.0  1.8    */
    #
    #
    #  Network services, Internet style
    #
    tcpmux             1/tcp
    echo                7/tcp
    echo                7/udp 
    discard             9/tcp          sink null
    discard             9/udp         sink null 
    systat              11/tcp         users
    daytime           11/udp
    daytime           13/udp
    netstat             15/tcp
    chargen           19/tcp          ttytst source
    chargen           19/udp         ttytst source 
    ftp                   21/tcp
    telnet               23/tcp
    smtp                25/tcp          mail
    time                 37/tcp          timeserver
    time                 37/udp         timeserver 
    name               42/udp         nameserver
    whois               43/tcp         nicname          #usually to sri-nic
    domain            53/udp
    domain            53/tcp
    hostnames       101/tcp         hostname       #usually to sri-nic
    sunrpc             111/udp        rpcbind
    sunrpc             111/tcp        rpcbind
    #
    #  Host specific functions
    #
    tftp                  69/udp
    gopher             70/tcp
    rje                   77/tcp
    finger               79/tcp
    http                 80/tcp
    link                  87/tcp           ttylink
    supdup            95/tcp
    iso-tsap          102/tcp
    x400                103/tcp                              # ISO Mail 
    x400-snd         104/tcp
    csnet-ns          105/tcp
    pop-2              109/tcp                              # Post Office
    uucp-path       117/tcp
    nntp                119/tcp          usenet               # Network News Transfer
    ntp                  123/tcp                                  # Network Protocol
    ntp                  123/udp                                 # Network Protocol
    NeWS              144/tcp         news               # Window System
    #
    #  UNIX specific services
    #
    #  these are NOT officially assigned
    #
    exec               512/tcp
    login               513/tcp
    shell               514/tcp           cmd              # no passwords use
    printer            515/tcp            spooler         # line printer spooler
    courier           530/tcp            rpc               # experrmental
    uucp              540/tcp            uucpd          # uucp daemon
    biff                 512/udp           comsat
    who                513/udp           whod
    syslog             514/udp
    talk                 517/udp
    route              520/udp           router routed
    new-rwho       550/udp           new-who        # experimental
    rmonitor          560/udp          rmonitord        # experimental
    monitor           561/udp                                # experimental
    pcserver          600/tcp                                # ECD Integrated PC board
    kerberos         750/udp           kdc                # kerberos key server
    kerberos         750/tcp           kdc                # kerberos key server
    ingreslock       1524/tcp   
    ftp-a              2021/tcp
    telnet-a          2023/tcp
    listen              2766/tcp                               #System V listener port
    nfsd               2049/udp         nfs                 # NFS server daemon
    lockd             4045/udp                               # NFS lock daemon/manager
    lockd             4045/tcp   
    #
    #  authentication port
    authsrv          7777/tcp                                # 7777 was for authsrv
    #
    #  END.

     

    나가는 말

    이번달에는 TIS FWTK에 대한 전반적인 사항과 그 사용법에 대해 알아보았다. tn-gw, ftp-gw외 다른 프락시 서버에 대한 내용은 지면상 다 쓰지 못함을 아쉽게 생각하며, 다본 프로젝트에서 추가했던 내용과 기타 사항에 대해서 언급하기로 하겠다. 본 기사 외에 더 추가된 원문은 다음달 내에 소스코드와 함께 모두 공개하기로 한다.




▲ top

home으로...