게이트웨이에 보안 강화하기

By Chris Stoddard
번역 : 윤봉환/el@linuxlab.co.kr

 

     

Introduction

    리눅스 가제트 51호에(리눅스 월드 2000년 4월호) 실린 “케이블 모뎀과 IP 매스커레이딩을 이용한 사설 네트워크”라는 제목의 기사에서 보안이 잘 된 리눅스 기반 게이트웨이를 설치하는 방법을 설명했다. 저자는 보안은 안전한 설치에서 시작한다는 뛰어난 생각에서, 깨끗한 리눅스 설치부터 시작하라고 제안하는데, 이것은 이 글의 주제이기도 하다. 설치를 마쳤을 때, 비록 파일 관리를 위해 MC(Midnight Commander)는 넣겠지만, X Windows 없이, 약 130MB에 스왑공간을 더한 아주 날씬한 시스템이 될 것이다.

    나는 두 가지 가정을 할 것이다. 첫째, 여러분은 리눅스를 설치할 줄 알고, 사용하는 방법을 잘 안다. 둘째, 나는 여러분이 게이트웨이 컴퓨터를 케이블 모뎀이나 DSL, 또는 다른 매체를 통해 인터넷에 고정적으로 연결하고, ftp, telnet, 웹서버 등 어떤 것도 사용되지 않도록 설정한다고 가정한다.

 

What you will need

    내 머신은 오래된 Dell Optiplex 466/MXe 컴퓨터이다. 이 놈은 16MB RAM, 512MB 하드 드라이브, 사운드 카드와 4배속 IDE CDROM이 장착된 486 DX2 66 머신이다. 나는 50달러를 들여 486DX4 100, 40MB 시스템으로 업그레이드 했다. 사운드 카드는 없애고 대신 네트워크 카드 두 개를 더 장착했고, 스커지(SCSI) 카드를 꽂고 320MB 스커지 하드 드라이브를 설치했다. 게이트웨이 머신으로 사용하기 위한 최소 사양은, 486, 16MB 램, 200MB 하드 드라이브, 네트워크 카드 두 개, 그리고 설치를 위해 CDROM, 또는 네트워크 인스톨을 이용할 수도 있다. RedHat Linux 6.x 배포본도 필요하다. 다른 배포판을 사용해도 되지만 이 글에서 나는 RedHat만 다룰 것이다. 모니터는 설치할 때에만 필요할 뿐, 일단 설치가 끝나고 부트되고 나면 Openssh 원격접속을 통해 관리할 수 있다.

    시작하기 전에, ftp://ftp.redhat.com/에(또는 ftp://ftp.bora.net/pub/Linux/)가서 아래 패키지를 다운받아 플로피 디스크에 복사해 넣는다;

    e2fsprogs-1.17-1.i386.rpm
    initscripts-4.63-1.i386.rpm
    lynx-2.8.2-3.i386.rpm
    pam-0.68-8.i386.rpm
     

    譯註: 영문버전을 사용해야 하는가?

    서버는 굳이 한글을 지원하지 않아도 된다. 특히 이 글에서 소개하는 게이트웨이 머신에서는 더 그렇다. 관리자들은 몇 가지 이유를 들어 한글 패치된 배포판 보다는 영문판이 더 안전하다고 말한다. 어느 쪽을 선택하든 보안 관련 이슈에 늘 귀를 기울이고 제 때에 보안 패치를 적용하는 것이 중요하다. 여러분이 한글판을 꼭 사용하고 싶다면 패치가 가장 잘 제공되는 배포판을 사용하는 것이 좋다.

     

    여러분이 RedHat 6.2를 사용한다면, 앞서 파일들은 필요없다. ftp://thermo.stat.ncsu.edu/pub/openssh-usa 사이트에 가서 다시 파일들을 받고, 디스크에 복사해 넣는다; 

    ·openssh-1.2.3-1us.i386.rpm
    ·openssh-clients-1.2.3-1us.i386.rpm
    ·openssh-server-1.2.3-1us.i386.rpm
    ·openssl-0.9.5a-1us.i386.rpm

 

설치, 그리고 환경설정

    나는 기본 설정을 벗어나는 주제에 대해서만 다룰 것이다.

    1. ‘custom install’을 선택한다. Disk Druid 화면을 만나면 아래처럼 파티션을 구성한다.
     

      Partitio    Minimumsiz    % of total    Mine
                        40 M              10         75 MB
      /boo             5 M              5 M         5 MB
      /hom         100 M              25       200 MB
      /tm             40 M              10         75 MB
      /us            220 M              45       320 M  1
      /va             40 M              10%       75 MB
      swa            64 M          2X RAM      80 M  2

     

        ① 간단하게, 나는 SCSI 드라이브를 통째로 사용했다.

        ② 사실 여러분은 실제 램과 같거나 작은 크기로 스왑 파티션을 만들면 된다.
             나는 여러분이 나중에 웹이나 ftp 사이트를 설정할 경우를 가정해서 더 큰 값을 썼다.

        이 표는 여러분의 하드 드라이브를 어떻게 나누어야 하는지, 최소한의 경우에 사용할
        윤곽을 대강 보여준다. 여러분의 하드 드라이브가 512MB 보다 크면, swap과 /boot
        뒤에 퍼센테이지를 사용한다. 여러분의 드라이브가 512MB 보다 작으면, 스왑 파티션과
        루트 파티션만 만든다. 이렇게 하면, 침입자가 들어와도 /tmp나 /home 디렉토리에 큰
        파일들을 잔뜩 넣어서 하드 드라이브를 넘치게 만들지 못할 것이다. 또, /etc/fstab 파일에
        서 /tmp와 /home 디렉토리에 nosuid와 nodev 옵션을 덧붙이는 등 재미있는 일들을 할
        수도 있다. 어떤 이들은 진짜 유저가 있다면 모를까, 이 경우에는 이렇게 많을 필요가
        없는데 어째서 /home 파티션에 그렇게 큰 덩어리를 바치냐고 묻을 것이다. 답하자면,
        리모트 시스템과 파일을 주고 받거나, MP3 공유, 또는 다른 작업파일들을 두는 장소로
        쓰일 것이다.

    2. 설치할 ‘components’를 선택할 때, ‘Networked Workstation’, ‘Network Management
        Workstation’,‘Utilities’만 고르고, ‘Select Individual Packages’를 선택한다.
        만약 여러분이 RedHat6.2를 사용하고 업데이트된 RPM 패키지들을 다운로드하지
        않는다면 Lynx도 선택한다.

        제외할 패키지 목록이다: git, finger, ftp, fwhois, ncftp, rsh, rsync, talk,
        telnet ghostscript, ghostscript-fonts, mpage, rhs-printfilters arpwatch, bind-utils,
        knfsd-clients, procinfo, rdate, rdist, screen, ucd-snmp-utils, chkfontpath, yp-tools,
        XFree86-xfs, lpr, pidentd, portmap, routed, rusers, rwho, tftp, ucd-snmp, ypbind,
        XFree86-libs, libpng, XFree86-75dpi-fonts, urw-fonts

    3. 시스템이 리부트된 다음, root로 로그인하고 다음 명령들을 써 넣어서 설치과정에서 뺄 수
        없었던 패키지들을 지운다.

        rpm -e --nodeps pump mt-st eject bc mailcap apmd
        kernel-pcmcia-cs getty_ps setconsole setserial raidtools
        rmt sendmail

        또, inuxconf, kudzu, kbdconfig, authconfig, timeconfig, mouseconfig, ntsysv,
        setuptool 등 여러분의 기술 수준에서 의존하는 여러가지 관리도구들을 제거하는 것으로
        고려하고 있을지도 모르겠다. 이런 패키지들은 모두 rsh이나 XFree86처럼(필요도 없는
        것들이) 보안에 문제가 있다.

    4. 여러분이 RedHat에서 내려받은 모든 RPM 패키지들을 플로피 두 장에 복사해 넣는다.
        새로 설치된 머신에 디스크를 넣고, mount -t msdos/dev/fd0 /mnt/floppy 명령으로
        플로피 드라이브를 마운트한 다음 rpm -Uvh/mnt/floppy/*.rpm 명령으로 파일들을
        설치한다.

    5. Openssh 파일들을 모두 플로피 디스크에 복사하고 새로 설치된 시스템에 다시 넣는다.
        mount -t msdos/dev/fd0 /mnt/floppy 명령으로 플로피 디스크를마운트 한 다음
        rpm -ivh /mnt/floppy/open* 명령으로 설치한다. /etc/ssh 디렉토리로 옮겨가서
        sshd.config 파일을 연다.
        “PermitRootLogin yes” 줄을 찾아서 값을 no로 바꾼다. 리모트 시스템에서 root 권한으로
        시스템에 로그온 하는 것을 막기 위해서 이다. 여러분이 root로 원격접속해야 한다면,
        일반 사용자로 로그온 한 다음 su - 명령으로(뺄셈기호를 꼭 넣는다) root 권한을 얻는다.

 

마지막으로 주의할 것들

    나는 방화벽 설정에 대해서는 자세히 다루지 않을 것이다. 또, “케이블 모뎀과 IP 매스커레이딩을 이용한 사설 네트워크”은 훌륭한 글이지만, 다음 두 가지를 제안하려 한다.

    나는 보안적인 관점에서 DNS 서비스는 방화벽에 두지 말고, 클라이언트 각각이 ISP의 DNS를 사용하도록 설정하거나 네트워크 안의 다른 머신이 DNS 서버 역할을 하도록 설정하는 것이 좋다고 생각한다. 더해서, 방화벽 머신에서 inetd를 통해 실행할 서비스들을 설정할 필요가 없다고 생각하는데, 어차피 ssh 포트인 22번 포트만 열리기 때문이다. 나는 대개 inetd.conf 파일은 지우고 “touch /etc/inetd.conf” 명령을 사용해서 아무 것도 없이 빈 파일로 만들어 둔다.

    만약 여러분이 시스템에 둘이나 셋, 혹은 그 이상의 사용자를 둔다면, Web proxy/caching 프로그램으로 Squid를 사용하고 싶을지도 모르겠다. 이 프로그램은 자주 방문하는 웹사이트 문서들의 사본을 로컬 머신에 남겨 속도를 빠르게 한다. 또, 집에 나이 어린 사용자들이 있을 때, 웹사이트들을 블로킹하는데 사용되기도 한다. 여러분이 Squid를 사용하기로 마음 먹었다면, 적어도 1GB 이상의 하드 드라이브와 32MB 램, 그리고 486DX2/66 이상 프로세서는 가질 것을 권한다. Squid는 RedHat CD에서 설치할 수 있다. Squid 대신, 역시 프록시 프로그램인 Junkbuster를 설치할 수도 있다. Junkbuster는 웹사이트들의 캐시를 만들지 않으므로 더 큰 하드 드라이브나 램, 더 빠른 프로세서는 필요 없다. 대신 여러분이 사이트에 빠르게 연결할 수 있도록 배너광고와 여러분에 대한 정보를 긁어 가는 짓들을 막는다. Junkbuster는 http://www.waldherr.org/junkbuster에서 가져올 수 있다.

    쉽게 방화벽을 구성하려면, Seawall이나 pmfirewall 같은 프로그램을 다운받는다. 이 프로그램들은 간편하게 디자인된 ipchains 기반 방화벽 프로그램으로, 둘 다 사용해 보았는데 모두 믿을만 했다. Seawall이나 pmfirewall을 사용하면 ipchains를 공부하는 귀찮은 일에서 벗어날 수 있다. Seawall은 설정하기가 까다롭지만, 더 많은 설정 옵션들이 있고, pmfirewall은 설정하기 더 쉽지만, 옵션이 적다.

 

마치며

    이제 “케이블 모뎀과 IP 매스커레이딩을 이용한 사설 네트워크”로 돌아가서 게이트웨이 설정을 마치자. 이 글은 믿을만한 출발점을 간단하게 제시할 뿐, 모든 설정을 끝낸 것은 아니며 리눅스 보안의 모든 것도 아니라는 것을 기억하기 바란다. 관리자를 위한 리눅스 보안 튜토리얼을 (http://packetstorm.sercuify.com/papers/unix/Securing-Optimizing-RH-Linux-1_2.pdf) 다운받아 살펴본다. 이 문서는 475 페이지나 되지만, 처음 두 챕터만 읽을 만한 가치가 있다.




▲ top

home으로...