1. TIS-FWTK
각 서비스별로 IP주소를 이용한 접근제어를 하기
위한 netacl 모듈과 각 서비스별 프락시로 구성되어 있으며, 각
프락시는 인증기능이 부여될 수 있다. 이러한 각 서비스 모듈은
서비스를 제공하기 위한 보안 정책을 정의한 netperm-table 파일을
참조하여 서비스 제공여부를 결정하고 서비스 접속거부 및 허용에
대한 관련 기록을 남긴다.
가. NETACL
netacl은, 서버에서 사용되는 다양한 TCP 기반의
서비스에 대한 접근의 정도를 결정해 주는 네트워크 접근 제어 프로그램이다.
예를 들면, 만약 어떤 인가된 사용자에 대해 방화벽 시스템으로의
telnet 접근을 허용하고 싶다면 netacl과 적당한 규칙을 적용하여
해당 기능을 가능토록 할 수 있습니다. 물론 ftp와 rlogin 서비스에도
마찬가지로 적용할 수 있다.
나. TELNET-GW
telnet 프락시인 tn-gw는 원하는 서버로의 telnet
서비스에 대한 유일한 경로를 제공하는데, 많은 네트워크 환경에서
시스템 관리자가 내부망으로 방화벽 호스트를 통한 telnet 접근을
허용하지 않을 때 사용한다. netacl과는 다르게 telnet 프락시는
방화벽으로의 직접 접근을 제공하지 않는다. 즉, netacl을 경유하는
telnet은 방화벽 호스트로의 접근이 허용되지만, 프락시를 경유하는
telnet은 단지 로깅 제어를 갖는 경로만을 제공받게 되는 것이다.
방화벽 시스템의 관리자는 종종 방화벽 호스트의
원격 관리를 위한 접근 경로와 프락시 telnet을 구축해야 하는 딜레마에
빠질 수가 있는데, 이는 /etc/services 파일과 /etc/inetd.conf
파일을 수정하여 실제의 telnetd를 telnet의 표준 TCP 포트와는
다르게 설정하고, 프락시를 telnet의 표준 TCP 포트에 설정함으로써
해결할 수 있다. 아울러, 이 경우에는 보안을 위해 netcal 등의
접근 제어가 필요하다.
다. FTP-GW
FTP 프락시인 ftp-gw는, 방화벽 호스트를 통과하는
사설 네트워크 또는 공용 네트워크로의 FTP 트래픽을 허용하는데,
telnet 프락시와 마찬가지로 방화벽으로 표준 FTP 포트를 경유하는
FTP 접근이 감지되면 프락시의 수행이 시작된다.
방화벽 호스트로 사용되는 시스템이 FTP 서비스를
제공하게 하는 것은 별로 좋지 않은 생각이다. 가장 좋은 방법은
별도의 FTP 서버를 운용하는 것이지만, 시스템의 원격 관리를 위해
FTP 서비스가 필요할 경우 telnet 서비스의 경우와 마찬가지로 /etc/services
파일과 /etc/inetd.conf 파일을 수정하여 실제의 ftpd를 FTP의 표준
TCP 포트와는 다르게 설정하고, 프락시를 FTP의 표준 TCP 포트에
설정하여 사용할 수도 있습니다. 물론 이 경우에도 netcal 등의
접근 제어가 필요하다.
라. SMTP-GW
방화벽 호스트를 통과하는 메일의 올바른 전송을
위해서는 smap과 smapd로 불리는 2개의 프락시가 필요하다. 이 중
smap은 SMTP의 최소 버전만을 구현한 클라이언트의 기능을 담당하게
되는데, 네트워크로부터의 메시지를 받아 들여 이를 디스크에 저장함으로서
후에 smapd가 저장된 메시지를 재전송하도록 하는 역할을 수행한다.
프락시로 동작되는 smap은, chroot된 상태에서 non-privileged 프로세스로
수행되도록 설계되어 있으므로 일반적인 privileged 메일러에 비해
높은 수준의 보안성을 제공하게 된다.
smapd 데몬은, smap에 의해 저장된 메일의 저장
영역을 주기적으로 검사하여 수집된 메일의 수신자에게 해당 메일을
전달하도록 하는 역할을 수행하게 되는데, 이 때 메일의 전송은
sendmail이라는 MTA(Mail Transfer Agent)에 의해 이루어지며 전송이
완료된 메일 메시지는 삭제된다. 만일 메일 전송이 불가능할 경우
smapd는 메일이 저장되어 있는 영역을 재구성하여 후에 있을 재전송에
대비하게 된다.
마. PLUG-GW
TCP 기반의 서비스 중에서 사용자에게 투명성
있는 서비스(NNTP, POP)를 제공하기 위해 플러그 보드 형태의 plug-gw
프락시를 제공하고 있다.
바. 인증서버
인증기능은 선택기능으로써 각 프락시에서 이
기능을 사용할 수 있다. 지원 가능한 인증방식은 “Bellcore’s
S/KEY”을 많이 사용한다.
사. 기타 tools
현재 TIS Firewall Toolkit이 갖는 리포팅 기능은
어느정도 충실하다고 볼 수 있으나, 문자 기반의 리포팅 형태를
취하고 있으므로 리포팅된 보고서의 분석이 다소 어려울 수도 있을
것이다 본 문서에서는 RLOGIN-GW, 인증서버, 기타 툴에 관련
사항은 제외될 것이다.
2. 베스쳔 호스트
일반적으로 베스쳔 호스트(Bastion Host)란 네트워크
보안에 가장 중요한 방화벽 호스트를 말한다. 대부분이 2개의 패킷
필터링 라우터 사이의 리눅스(유닉스) 시스템을 베스쳔 호스트라고
한다. 외부 라우터는 인터넷과 베스쳔 사이의 트래픽만 허락된다.
내부 라우터는 내부네트웍과 베스쳔 사이의 트래픽만이 허락된다.
2.1 리눅스를 베스천 호스트로 구축
가. 머신 자체
보안 수준을 높인다.
알려진 모든 시스템 관련 버그들을 수정하여
간결하고 무결한 시스템 상태로 만든다. 그리고 시스템 로그 기록을
활용한다.
나. 필요 없는
모든 서비스를 중지시킨다.
리눅스 머신이 동작하는데 반드시 필요한 서비스만
남기고 나머지는 중지시킨다. 일반적으로 베스쳔 호스트를 구축하기
위해 사용을 중지시켜야 할 서비스들은, (NFS, RPC, 부팅, BSD의
‘r’ 명령어, routed, fingerd, uucpd, rwhod, lpd) 등으로서 이들
서비스는 베스쳔 호스트에서 제공하지 않는 것이 안전합니다.
다. 불필요한
사용자 계정을 모두 삭제한다.
꼭 필요한 경우가 아니면 베스쳔 호스트 내의
사용자 계정은 모두 삭제시켜야 한다. 사용자 계정이 존재하지 않는
베스쳔 호스트가 높은 수준의 보안 수준을 제공할 수 있기 때문이다.
라. 중요치 않은
파일과 명령은 지운다.
특히 setuid/setgid 프로그램들은 해커들의 주요
공격 대상이 되므로 반드시 삭제해야 할 것이다. 삭제해야 할
프로그램을 찾기 위한 방법은 다음과 같다. [nic@fw nic]# find
/ -type f -perm -040000 -o -perm -02000 -ls
마. IP Forwarding기능,
Source Routing기능을 없앤다.
커널이 제공하는 기능 중 다음과 같은 몇가지의
기능은 보안의 위험성을 가지고 있는데, 이들 기능이 우선적으로
제거되어야 할 것이다. (IP forwarding OFF, IP Masquerading OFF,
NFS, RPC 관련 기능) 만약, 베스쳔 호스트가 듀얼-홈드 호스트로
구축되었으면 IP 포워딩 기능을 삭제해야한다.
[nic@fw nic]#
cat /proc/sys/net/ipv4/ip_forward 0 |
[nic@fw nic]#
grep “FORWARD_IPV4” /etc/sysconfig/network
FORWARD_IPV4 = no |
바. 보안점검
도구를 이용하여 보안취약성을 제거한다.
2.2 FWTK 컴파일하기
Makefile.config 파일을 만들고 컴파일 관련
환경변수를 설정하여 컴파일한다.
[nic@fw nic]#
cd /usr/local/src/fwtk [nic@fw nic]# cp Makefile.config.linux
Makefile.config |
[nic@fw nic]#
vi Makefiel.config # 시스템에 설치되어있는
컴파일러 선택 CC=cc # 실행 파일들을 저장하기
위한 디렉토리 지정 DEST=/usr/local/etc #
FWTK 소스 디렉토리 FWTKSRCDIR=/usr/local/src/fwtk
# 데이터베이스 지정 DBMLIB=-lgdbm # 프록시
관련 서비스 디렉토리 지정 DIRS= smap smapd netal
plug-gw ftp-gw |
2.3 서비스 관련 파일을 수정한다.
FWTK 요소 대부분은 inetd 데몬에 의해서 수행되고
또한 inetd 데몬은 inetd.conf 파일을 참조하도록 되어 있다.
따라서 외부에서 네트웍 서비스가 요청되었을 때 inetd가 방화벽
요소들을 수행하기 위해서는 “inetd.conf” 파일을 수정해야한다.
또한 네트웍 서바스를 제공하기 위헤서는 각 서비스에 대한되는
포트 번호가 필요하고, 각 서비스가 사용하는 프로토콜 또한 필요하다.
2.4 접근제어 규칙을 정의한다.
netperm-table에는 어떠한 네트웍/호스트에 대해서
서비스를 제공할 것인지 아닌지를 결정하기 위한 접근제어 규칙을
정의하게 된다. 이 파일의 위치는 기본적으로 “/usr/local/etc/”
이고 “:”(콜론)의 왼쪽은 서비스 이름을 나타내고 오른쪽은 허용
네트웍 및 관련 정보들을 기술하게 된다.
2.5 방화벽 기능 시험
방화벽의 기능을 시험하는 방법은 같은 이더넷
상에 있는 호스트를 이용하여 그 기능을 점검할 수 있다. 앞서 정의했던
접근제어 규칙을 이용하여 시험할 수 있다. 다른 네트웍 서비스에
대해서도 같이 테스트할 수 있다.
3. 실전 응용 계층 방화벽 구축하기
R1 : 외부라우터 R2 : 내부라우터 B1:
베스쳔호스트 (WWW / FTP 서버) B2 : 베스쳔호스트 (SMTP/ 2nd
Nameserver) S1 : BBS S2 : MAIL HUB, 1st Nameserver,
POP3 S3 : NAT (ipchains) S4 : 파일서버 DB : RDBMS
C1... : 클라이언트 PC
R1, R2에서 패킷필터링 규칙과 베스쳔호스트에
관련 프록시 서버를 구축하여 접근제어 규칙을 적용시킨다. 그리고
관련 설정 파일은 이 글의 마직막 부분을 참고하기 바란다.
3.1 네트워크 접근 제어
통상적으로 규칙의 이름은 netacl- 과 해당 서비스의
이름을 조합하여 사용하게 되는데, 서비스가 in.ftpd일 경우에는
netacl-in.ftpd로 규칙의 이름을 설정한다.
netacl-in.telnetd:
permit-hosts 127.0.0.1 -exec /usr/sbin/in.telnetd
netacl-in.telnetd: permit-hosts 210.217.111.* -exec
/usr/sbin/in.telnetd netacl-in.telnetd: permit-hosts
* -exec /usr/local/etc/tn-gw netacl-in.ftpd:
permit-hosts 210.217.111.* -exec /usr/sbin/in.ftpd
netacl-in.ftpd: permit-hosts unknow
-exec /bin/cat /usr/local/etc/noftp.txt netacl-in.ftpd:
permit-hosts * -exec /home/ftp /usr/sbin/in.ftpd
netacl-in.fingerd: permit-hosts 210.217.111.*
-exec /usr/sbin/in.fingerd netacl-in.fingerd:
permit-hosts unknow -exec /bin/cat/ /usr/local/etc/nofinger.txt |
위의 예에서는, netacl이 특정 서브넷 상의 호스트에게만
서비스가 허용되도록 구성되었고, 유효한 DNS 이름을 가지지 않은
시스템으로부터의 연결은 특정한 파일을 출력하도록 구성되었으며,
또한 위에서 언급된 호스트 이외의 모든 네트워크로부터의 FTP 서비스
요청은, 특정 디렉토리 상에서 별도의 FTP 서버를 사용하도록 하였으므로
별도의 FTP 서버에서 제공 서비스를 제한할 수 있다.
3.2 Telnet 프락시 운용
tn-gw 프로그램이 inetd 데몬에 의해 기동되게
되는데, 다음과 같이 /etc/inetd.conf 파일을 수정한다.
telnet stream
tcp nowait root /usr/local/etc/tn-gw tn-gw |
inetd이 활성화되며 클라이언트와 실제 털넷
서버 사이에서 털넷 서비스의 중계 역할을 하며 서비스를 제공시
네트웍/호스트에 대한 접근제어 및 로그기록을 갖는다.
tn-gw를 위하여 netperm-table에 다음과 같이
접근 규칙을 설정한다.
tn-gw : userid
bin tn-gw : directory /home tn-gw : prompt
“KRWEB@telnet-gw>” 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 : denydest-msg
/usr/local/etc/tn-denydest.txt tn-gw
: timeout 3600
tn-gw : deny-hosts unkown
tn-gw : permit-hosts 210.217.111.*
210.217.112.* tn-gw : permit-hosts 210.217.112.*
-dest bbs.krweb.co.kr -dest !*
-passok -xok |
접근규칙
도메인 이름을 DNS에서 발견할 수 없을 경우
접속을 거부한다. 210.217.111.0 및 210.217.112.0 네트워크로부터의
접근만을 허용한다. 210.217.112.0 네트워크로부터 요구된 접속
중 bbs.krweb.co.kr로의 접속만을 허용하고 이외의 접속 요구는
모두 거부한다.
telnet 프락시를 통한 접속
인가된 네트웍에서 접근
[nic@ns nic]$
telnet fw.krweb.co.kr Trying 210.217.111.10
Connected to fw.krweb.co.kr. Escape character
is ‘^]’.
******************** < 환 영
> ************************ KRWEB의 방화벽
Telnet Proxy에 접속되신 것을 환영합니다. 명령어
도움말은 ? 입니다 *******************************************************
KRWEB@telnet-gw>connect nownuri.net
Not permitted to connect to nownuri.net KRWEB@telnet-gw>connect
linux.krweb.co.kr Trying 210.217.111.5 Connected
to linux.krweb.co.kr. Escape character is ‘^]’.
login:_ |
위의 예에서, *.krweb.co.kr을 제외한 모든 호스트로의
접근이 금지되도록 규칙이 설정되어 있으므로 nownuri.net의 telnet
접근은 금지되며 linux.krweb.co.kr로의 접근만 허용된다.
인가되지 않은 네트웍에서 접근
[nic@xxx nic]$
telnet fw.krweb.co.kr Connecting to fw.krweb.co.kr
... **************** < 주 의
> ***************************** 당신은 인가(인증)되지
않은 네트웍에서 접속을 하였습니다. 본 털넷 서비스를
허가하지 않습니다. *********************************************************
Connection closed by foreign host |
위의 예에서는, 인가되지 않은 네트웍에서 접근할
때 접근 거부 메시지 파일을 출력하고 연결을 끊는다.
3.3 FTP 프락시 운용
다음과 같이 /etc/inetd.conf 파일을 수정하여
원하는 프락시 동작을 구현한다.
ftp stream tcp
nowait root /usr/local/etc/ftp-gw ftp-gw |
ftp-gw의 경우도 tn-gw의 경우와 마찬가지로
netperm-table에 설정되어 있는 접근 규칙에 따라 접속 허용 여부를
판별하게 된다.
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-gw: deny-hosts
unknown ftp-gw:
permit-hosts 210.217.111.*
210.217.112.* -log
{ retr stor } ftp-gw: permit-hosts *
-authall -log { retr stor } |
접근 규칙
규칙이 적용되게 되면 도메인 이름을 DNS에서
발견할 수 없을 경우 접속이 거부되며, 210.217.111 및 210.217.112
네트워크로부터의 접근을 허용하게 된다. 아울러 인증 옵션이 있는
경우, 인증 과정을 통과하여 접근하도록 한다. 모든 파일 전송에
대한 정보가 로그 기록으로 남게 된다. ftp 프락시를 통한 접근
인증 옵션이 없는 경우 (인가된 네트웍에서 접속)
[nic@ns nic]$
ftp fw Connected to fw.krweb.co.kr 220-
220- 220- 방화벽 FTP Proxy 에 접속되신 것을
환영합니다. 220- 사용자id@호스트명 (예, test@someplace.net)
Name (firewall:test): test@someplace.net 331-(----GATEWAY
CONNECTED TO someplace.net----) 331-(220 hen
FTP server (UNIX(r) System V Release 4.0) ready.)
331 Password required for knwook. Password:
230 User knwook logged in. ftp> |
인증 옵션이 없는 경우 (인가되지 않은 네트웍에서
접근)
[nic@xxx nic]$
ftp fw Connected to fw.krweb.co.kr.
500- 500-**************<주의>****************
500-FTP 서비스를 사용할 수 업습니다. 500-고객지원센터
e-mail:helpme@krweb.co.kr 500 ftp> |
인증 옵션이 있는 경우
[nic@ns nic]$
ftp fw Connected to fw.krweb.co.kr.
220- 220- 220-방화벽 FTP Proxy 에 접속되신
것을 환영합니다. 220-사용자 인증이 끝나면, 아래와
같이 입력하여 주십시오. 220-use 사용자id@호스트명
(예, use test@someplace.net) Name (firewall:nic):
nic 331 Enter authentication password for nic
Password: 230 User authenticated to proxy
ftp> use test@someplace.net 331-(----GATEWAY
CONNECTED TO someplace.net----) 331-(220 hen
FTP server (UNIX(r) System V Release 4.0) ready.)
331 Password required for test. Password:
230 User test logged in. ftp> |
먼저 FTP 프락시의 사용자 인증 절차가 끝나면,
“use user@ site”의 형식에 맞추어 원하는 사이트로의 FTP
접근을 시도하게 된다.
3.4 sendmail 프락시 운용
① smtp 클라이언트의 설치
smap 클라이언트는 방화벽 호스트의 smtp 포트로
접속 요청이 전달될 때마다 동작한다. 다른 프락시들과 마찬가지로
/etc/inetd.conf 파일에 다음과 같이 설정한다.
smtp stream
tcp nowait root /usr/local/etc/smap
smap |
inetd.conf 파일을 수정한 후에는 inetd 데몬을
재시작하여 smap을 활성화한다. 그리고 smtp 포트를 수동으로
검사해 본다.
[nic@ns nic]$
telnet fw 25 Trying 210.217.111.5...
Connected to fw.krweb.co.kr. Escape character
is ‘^]’. 220 firewall SMTP/smap Ready.
quit 221 Closing connection Connection closed
by foreign host. $ |
smtp 클라이언트의 구성 smap 클라이언트는
netperm-table내에 smap으로 시작하는, 자신을 위한 접속 규칙에
따라 동작을 하게 된다.
smap: userid
smtp
smap: directory /var/spool/smap
smap: timeout 3600
smap: maxbytes
10000 smap: maxrecip
20 |
② smtpd 에플리케이션의 설치
접속 요구에 따라 inetd로부터 기동되는 smap과는
달리, smapd는 /etc/rc3.d/S88smapd 스크립트 파일을 작성하여 시스템의
부팅시에 자동 기동되도록 설정합니다. 이 경우, 기존의 sendmail
동작을 데몬 모드에서 제거해야 한다.
#/etc/rc.d/init.d/sendmail
stop or # ntsysv →
sendmail 제거 |
아울러 파일 편집기를 사용, Sxx(xx는 숫자)smapd
스크립트 파일을 새로 작성합니다.
# vi S88smapd
echo “Starting Firewall Mail Processor
...” /usr/local/etc/smapd |
sendmail이 데몬 모드로 동작하지 않기 때문에,
배달이 불가능하여 누적된 메시지들은 주기적으로 불려지는 sendmail에
의해 배달되도록해야 한다. 이를 위해 다음 라인을 crontab에 추가한다.
0, 30 * * * *
/usr/lib/sendmail -q > /dev/null 2>&1 |
위의 라인을 추가함에 따라 smapd 에플리케이션에
의해 성공적으로 전달되지 못한 메시지들이 이후에라도 안정적으로
전달됨을 보장하게 됩니다.
smapd 에플리케이션의 구성 smapd 에플리케이션은,
주기적으로 메일 큐를 읽어 원격 시스템으로 배달하게 되는 동작을
수행한다.
smapd: executable /usr/local/etc/smapd
smapd: sendmail /usr/lib/sendmail
smapd: userid smtp
smapd: directory /var/spool/smap
smapd: baddir /var/spool/smap/bad
smapd: wakeup 900 |
smapd를 위한 DNS 구성 방화벽 시스템을
통과하는 메일이 성공적이고 정확하게 전달되기 위해서는 SMTP 메일이
보내어지는 곳이 구분되도록 MX 레코드가 지역 DNS 파일 내에서
알려져야 할 필요가 있다. 이러한 작업은 MX나 메일 익스체인저
추가, 네트워크 도메인이나 지역의 DNS 제공자에 등록 등에 의해
가능합니다.
위의 출력 내용은 nslookup 명령어를 실행하여
얻은 것입니다. 출력 내용 중 메일 익스체인저가 다음과 같이 등록되어
있음을 알 수 있다.
[nic@ns nic]#
nslookup Default Server: ns.krweb.co.kr
Address: 210.217.111.1
> set q=mx > krweb.co.kr
Server: ns.krweb.co.kr Address: 210.217.111.1
krweb.co.kr preference
= 10, mail exchanger = mail.krweb.co.kr krweb.co.kr
preference = 1. Mail
exchanger = fw.krweb.co.kr krweb.co.kr nameserver
= ns2.krweb.co.kr krweb.co.kr nameserver
= ns.krweb.co.kr mail.krweb.co.kr internet
address = 210.217.111.3 fw.krweb.co.kr internet
address = 210.217.111.5 ns2.krweb.co.kr internet
address = 210.217.111.2 ns.krweb.co.kr internet
address = 210.217.111.1 > |
도메인 krweb.co.kr로의 메일이 호스트로부터
보내어진 경우를 생각해보면, 해당 호스트는 먼저 krweb.co.kr 도메인
자체에서의 위치를 탐색하게 된다. 어느 호스트가 먼저 접속될지를
결정하기 위한 규칙은 매우 간단하다. 위의 예에서는, 주어진
email에 대해 방화벽 호스트인 fw.krweb.co.kr가 우선권이 1이므로
가장 먼저 접속된다. 권고하고 싶은 설정은, 방화벽 호스트로
사용되는 시스템이 가장 낮은 우선권을 갖도록 함으로써 외부와
직접적으로 접속되는 시스템이 없도록 한다. 만약 가장 낮은 우선권을
가진 시스템이 서비스 처리가 불가능할 경우, 다음 시스템이 접촉되게
됩니다: 위 경우에는 mail.krweb.co.kr이 해당된다. 메일이 mail.krweb.co.kr에게
배달되면, mail.krweb.co.kr 상의 sendmail 데몬이 해당 메일을
가장 낮은 우선권을 갖는 fw.krweb.co.kr 시스템으로 전달해야 할
책임이 있다. 아울러 sendmail의 동작은 원격 머신 상의 sendmail.cf
파일에 의해 제어된다.
3.5 pop 프락시 운용.
방화벽이 POP 서비스를 위한 접속을 수용하도록
하기 위해서는, inetd가 POP 포트로부터의 접속 요청이 있을 때마다
plug-gw를 실행시킬 수 있도록 /etc/inetd.conf 파일을 수정해야
한다.
pop stream
tcp
nowait
root /usr/local/etc/plug-gw plug-gw
110 |
방화벽을 통과하는 POP 서비스를 제공받기 위해서는
netperm-table에 plug-gw를 위한 구성을 추가해야 하는데, POP 포트는
/etc/services 파일에 110로 설정되므로 다음과 같은 설정으로 구현이
가능하다.
plug-gw : port
110 210.217.112.* -plug-to 210.217.111.110 |
이 라인은, 210.217.112 네트웍으로부터의 포트
110 (POP)로 접수된 임의의 연결은 210.217.111.110로 접속됨을
알려주고 있다. 그리고 MUA (Mail User Agent) 프로그램에서 POP
서버를 방화벽 시스템으로 설정한다.
3.6 http proxy 운용
본 문서에서는 TIS-FWTK의 HTTP-GW을 사용하지
않고, 대신에 웹전용 프록시 서버를 사용하겠다. 웹전용 프록시
프로그램은 squid 이다.
사이트 접근 제한 사이트 접근 제한은 ACL(Access
Control List)을 사용하여 정의하며 ACL은 사이트 접속 법칙을 정의한
변수의 나열이라 생각하면 된다.
HTTP Proxy를 설정한 파일은 /usr/local/squid/etc/
squid.conf에 있다. 이 파일의 중간 아랫 부분에 ACL에 대한
정의가 있다. ACL을 정의한 다음엔 반드시 http_access 구문을
사용하여 정의한 ACL을 활성화 시켜 주어야 한다.
(/usr/local/squid/etc/squid.conf
파일 예제) # cache 관련 설정 부분은 생략됨
#---------------------------------- # #
접근 설정 (ACL = 접근제어제한) # 불건전한 사이트를
들어가지 못하도록 금지할 사이트를 설정해 주는
부분이다. # # 사용 방법
# # acl aclname acltype string1 ... # acl
aclname acltype “file” ... # # 1) ip-address에
설정된 클라이언트들이 http를 사용하지 못하게 한다.
# ‘0.0.0.0/0.0.0’이면 모두 허용.
# acl aclname src ip-address/netmask
... (clients IP address) # acl aclname src addr1-addr2/netmask
... (addresses 범위) # # 2) ip-address에
설정된 사이트를 접속하지 못하게 한다. # acl
aclname dst ip-address/netmask
... (URL host’s IP address) # # 3) foo.com이라는
도메인을 가진 클라이언트의 http 접속을 불허한다.
# acl aclname srcdomain foo.com ...
(taken from reverse DNS lookup) # # 4) foo.com이라는
도메인을 사이트의 접속을 금지 시킨다. # acl
aclname dstdomain foo.com ... (taken
from the URL) # # 5) h1:m1에서 h2:m2 시간에는
클라이언트의 http 접속을 불허한다. # day-abbrevs는
금지할 요일도 지정할 수 있다. # acl aclname
time [day-abbrevs] [h1:m1-h2:m2]
# day-abbrevs:
# S
- Sunday # M
- Monday # T
- Tuesday # W
- Wednesday # H
- Thursday # F
- Friday # A
- Saturday # h1:m1
must be less than h2:m2 # # 6) http://www로
시작되는 URL의 접속을 불허한다. (앞에 반드시 ^ 필요)
# (^가 붙지 않으면 URL의 끝부분을
의미한다) # acl aclname url_regex ^http://www #
regex matching on whole URL # # 7) gif파일은
전송되지 않게 한다. # acl aclname urlpath_regex
\.gif$ ... # regex matching on URL path
only # # 8) 특정 포트로의 접속을 불허한다.
# acl aclname port 80 70
21 ... # # 9) HTTP와 FTP의 사용을 불허한다.
# acl aclname proto HTTP FTP ...
# # 10) HTML에서의 다음의 method가 들어간 라인의
실행을 금한다. # acl aclname method GET
POST ... # # ---------------------------------
# 예) # 앞부분이 sex으로 시작되는 URL을 금지시키고자
할때 # --> acl denysex url_regex ^http://sex
# 뒷부분이 adult.com으로 시작되는 URL을 금지시키고자
할때 # --> acl denyadult url_regex adult.com
# #---------------------------------- acl
manager proto cache_object acl localhost src
127.0.0.1/255.255.255.255 acl all src 0.0.0.0/0.0.0.0
acl SSL_ports port 443 563
acl Dangerous_ports port 7 9 19 acl CONNECT
method CONNECT
# 관리자가 새로운 ACL을 정의한다.
acl sexsite01 url_regex ^http://come.to/ladyx
acl sexsite02 url_regex ^http://sexygirl.com
acl sexsite03 url_regex ^http://www.korean-babes.com
#####################################
#################################### # #
위에서 정의된 ACL을 여기서 실제로 동작될 수 있도록
설정한다. # (allow는 허가고 deny는 불허가를
뜻한다) # # 위에서 정의된 ACL은 반드시 동작가능하도록
여기를 설정한다!! # # HTTP 포트로의 접근:
# http_access allow|deny
[!]aclname ... # # ICP 포트로의 접근:
# icp_access allow|deny
[!]aclname ... # # 예) 위에서 정의한 denysex
이라는 ACL 이름을 Enable 시킬때. # ---> http_access
deny denysex # ###################################
# Only allow access to the cache
manager functions from the local host. http_access
deny manager !localhost http_access deny CONNECT
!SSL_ports http_access deny Dangerous_ports
# 위에서 정의한 ACL의 허가/불허를
결정한다. http_access deny sexsite001 http_access
deny sexsite002 http_access deny sexsite003
###################################
# Allow everything else http_access
allow all
# Reply to all ICP queries we
receive icp_access allow all |
4. 보안정책 만들기
네트워크관리자가 라우터를 이용한 방화벽을
구성하고자 할 때 가장 우선적으로 수립되어야 할 것은 인터넷서비스의
제공범위와 종류이다. 다음과 같은 제공범위와 서비스를 정의할
수 있다.
외부 사용자에 대해 ·웹 / 파일전송
서비스를 제공 ·인가된 네트웍에서는 내부 서버에 telnet
및 e-mail 서비스를 이용 ·그 외의 인터넷 서비스는
제한
보안정책 |
제한여부 |
S_PORT |
D_PORT |
S_IP |
D_IP |
BBS |
허용 |
>
1023 |
23 |
지점 |
210.217.111.6 |
FTP |
허용 |
>
1023 |
21 |
Any |
210.217.111.5 |
WEB |
허용 |
>
1023 |
80 |
Any |
210.217.111.4 |
SMTP |
제한 |
>
1023 |
25 |
지점 |
210.217.111.3 |
POP |
허용 |
>
1023 |
110 |
지점 |
210.217.111.3 |
DNS |
허용 |
>
1023 |
53 |
지점 |
210.217.111.1 |
기타 |
제한 |
>
1023 |
>
1023 |
Any |
210.217.111/24 |
내부 사용자에 대해 ·불건전 사이트접속을
제한 (단, 해당 사이트의 네트웍 주소를 알고 있어야
가능하다.) ·그 외 인터넷서비스를 이용
보안정책 |
제한여부 |
S_PORT |
D_PORT |
S_IP |
D_IP |
서인싸이트 |
제한 |
> 1023 |
80 |
210.217.111/24 |
성인싸이트 |
DB |
허용 |
> 1023 |
3306 |
210.217.111/24 |
210.217.111.88 |
기타 |
허용 |
> 1023 |
> 1023 |
210.217.111/24 |
Any |
라우터의 ACL을 만들기 위해 필요한 정보
TCP/IP를 기반으로한 IP 패킷 내부에는 반드시
“source ip address, destination ip address, source port, destination
port”에 관한 정보를 가지고 있으며, 라우터는 이 정보들을 조합하여
특정 패킷을 필터링한다.
시스코 라우터에서 access-list 구성
내부사용자의 패킷에 대한 기본적인 ACL정의
RT(config)# access-list 101 permit tcp any any established
RT(config)# access-list 101 permit tcp any any gt 1023
RT(config)# access-list 101 permit udp any any gt 1023
RT(config)# access-list 101 permit tcp 210.217.111.0 0.0.0.255
host 210.217.111.88 eq 3306 RT(config)# access-list 101
permit udp 210.217.111.0 0.0.0.255 host 210.217.111.88 eq 3306
외부사용자에 대한 보안정책 ACL 정의 RT(config)#
access-list 101 permit tcp any host 210.217.111.4 eq 80
RT(config)# access-list 101 permit tcp any host 210.217.111.5
eq 20 RT(config)# access-list 101 permit tcp any host 210.217.111.5
eq 21
지점에 대한 보안정책 ACL 정의 RT(config)#
access-list 101 permit tcp 210.217.112.0 0.0.0.255 host 210.217.111.6
eq 23 RT(config)# access-list 101 permit tcp 210.217.112.0
0.0.0.255 host 210.217.111.3 eq 25 RT(config)# access-list
101 permit tcp 210.217.112.0 0.0.0.255 host 210.217.111.1 eq
53 RT(config)# access-list 101 permit udp 210.217.112.0
0.0.0.255 host 210.217.111.1 eq 53 RT(config)# access-list
101 permit tcp 210.217.112.0 0.0.0.255 host 210.217.111.1 eq
110 RT(config)# access-list 101 permit udp 210.217.112.0
0.0.0.255 host 210.217.111.1 eq 110
성인 site에 대한 보안정책 ACL 정의 RT(config)#
access-list 101 deny tcp 203.255.112.0 0.0.0.255 host 206.251.29.11
eq www 그외 허가되지않은 패킷에 대한 보안정책 ACL 정의
RT(config)# access-list 101 deny ip any any
방화벽에서 인터넷 서비스 필터링 일반 규칙
여기에서는 스크린 서브넷 구조의 가장 일반적인
방화벽 구조에서 인터넷 서비스 필터링에 대하여 알아보고자 한다.
서비스 환경 설정
Telent 패킷
필터링을 통하여 외부로 나가는 털넷을 제공한다. 프락시를
통하여 외부에서 내부로 들어오는 털넷을 제공한다(단 bbs로 한정).
ftp 패킷
필터링을 통하여 외부로 나가는 파일전송서비스를 제공한다.
프락시를 통하여 외부에서 내부로 들어오는 ftp을 제공한다(단 익명
ftp로 한정). 프락시를 통하여 인증된 사용자만 사용
Smtp 베스쳔
호스트를 통하여 직접 들어오는 메일들의 DNS MX 레코드들을 제공한다.
베스쳔 호스트를 통하여 메일을 밖으로 보내는 내부 컴퓨터에 대한
환경을 설정한다. 내부의 메일 서버로 들어오는 메일을 보내도록,
그리고 목적하는 곳으로 메일을 보낼 수 있도록 베스쳔 호스트의
환경을 설정한다.
http 패킷
필터링을 통하여 외부로 나가는 웹 서비스를 제공한다. 프락시를
통하여 불건전 웹 사이트를 배제한다. 공개 웹서버를 경계선
네트웍에 위치한다.
Dns 경계선에
위치하는 베스쳔호스트에 2차 네임서버를 운영하고, 내부 네트웍에
1차 네임서버를 운영한다.
패킷 필터링 규칙
우리는 가상의 라우터에서 우리가 가정한 필터링
규칙에 대하여 아래와 같은 것들을 제공한다. - 들어오고 나가는
패킷을 구분한다. - 출발지, 목적지의 주소 및 포트 그리고
페킷의 형태를 구별할 수 있다. - TCP 패킷에 대하여 ACK 비트가
조합인지 아니지를 필터링해준다. - 규칙은 순서대로 적용된다.
[nic@fw nic]#
cat /usr/local/etc/netperm-table # Netacl rules:
netacl-in.telnetd: permit-hosts 127.0.0.1 -exec
/usr/sbin/in.telnetd netacl-in.telnetd: permit-hosts
210.217.111.* -exec
/usr/sbin/in.telnetd netacl-in.telnetd: permit-hosts
* -exec
/usr/local/etc/tn-gw netacl-in.ftpd: permit-hosts
210.217.111.* -exec
/usr/sbin/in.ftpd netacl-in.ftpd: permit-hosts
unknow -exec
/bin/cat /usr/local/etc/noftp.txt netacl-in.ftpd:
permit-hosts * -exec
/home/ftp /usr/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 “KRWEB>”
tn-gw: permit-hosts
210.217.111.*
-auth -passok tn-gw: permit-hosts
210.217.111.*
210.217.112.* -auth # # FTP gateway rules:
ftp-gw: userid bin
tn-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
210.217.111.* -authall -dest
!202.30.113.2 ftp-gw: permit-hosts
210.217.115.* -auth stor
-log
# # 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. |
[nic@fw
nic]# cat /etc/inetd.conf # ftp stream tcp nowait root /usr/local/etc/ftp-gw ftp-gw
ftp-adm stream tcp nowait root /usr/local/etc/netacl in.ftpd
telnet stream tcp nowait root /usr/local/etc/tn-gw tn-gw
telnet-adm stream tcp nowait root /usr/local/etc/netacl in.telnetd
smtp stream tcp nowait root /usr/local/etc/smap smap
pop stream tcp nowait root /usr/local/etc/plug-gw plug-gw
pop finger stream tcp nowait roor /usr/local/etc/netacl in.fingerd
authsrv stream tcp nowait root /usr/local/etc/authsrv authsrv
time stream tcp nowait root /usr/sbin/tcpd in.timed
time dgram udp wait root /usr/sbin/tcpd in.timed |
[nic@fw
nic]# cat /etc/services ftp 21/tcp
retr stor ftp-adm 2021/tcp
telnet 23/tcp
telnet-adm 2023/tcp smtp
25/tcp
pop 110/tcp
... |
내부라우터 패킷 필터링
규칙 |
출발지주소 |
목적지주소 |
출발지포트 |
목적지포트 |
ACK
set |
정책 |
TELNET |
내부 외부 |
외부 내부 |
1023이상
23 |
23 1023이상 |
Any
Yes |
허가
허가 |
FTP-1 |
내부 외부 내부
외부 |
외부 내부 외부
내부 |
1023이상
21 1023이상 1023이상 |
21 1023이상
1023이상 1023이상 |
Any
Yes Any Yes |
허가
허가 허가 허가 |
FTP-2 |
내부 베스쳔 베스쳔
내부 |
베스쳔 내부 내부
베스쳔 |
1023이상
21 1023이상 1023이상 |
21 1023이상
1023이상 1023이상 |
Any
Yes Any Yes |
허가
허가 허가 허가 |
SMTP-1 |
내부 베스쳔 |
베스쳔 내부 |
1023이상
25 |
25 1023 |
Any
Yes |
허가
허가 |
SMTP-2 |
베스쳔 메일허브 |
메일허브 베스쳔 |
1023이상
25 |
25 1023이상 |
Any
Yes |
허가
허가 |
HTTP |
내부 베스쳔 |
베스쳔 내부 |
1023이상
80 |
80 1023이상 |
Any
Yes |
허가
허가 |
DNS-1 |
내부 |
베스쳔 |
53 |
53 |
(UDP) |
허가 |
DNS-2 |
베스쳔 |
내부 |
53 |
53 |
(UDP) |
허가 |
DNS-3 |
내부 베스쳔 |
베스쳔 내부 |
1023이상
53 |
53 1023이상 |
Any
Yes |
허가
허가 |
DNS-4 |
베스쳔 내부 |
내부 베스쳔 |
1023이상
53 |
53 1023이상 |
Any
Yes |
허가
허가 |
DEFAULT |
ANY ANY |
ANY ANY |
ANY
ANY |
ANY
ANY |
ANY
ANY |
거부
거부 |
규칙 |
출발지주소 |
목적지주소 |
출발지포트 |
목적지포트 |
ACK
set |
정책 |
TELNET |
내부 외부 |
외부 내부 |
1023이상
23 |
23 1023이상 |
Any
Yes |
허가
허가 |
FTP-1 |
내부 외부 내부
외부 |
외부 내부 외부
내부 |
1023이상
21 1023이상 1023이상 |
21 1023이상
1023이상 1023이상 |
Any
Yes Any Yes |
허가
허가 허가 허가 |
FTP-2 |
Any 베스쳔 베스쳔
Any |
베스쳔 Any Any
베스쳔 |
1023이상
21 1023이상 1023이상 |
21 1023이상
1023이상 1023이상 |
Any
Yes Any Yes |
허가
허가 허가 허가 |
SMTP-1 |
Any 베스쳔 |
베스쳔 Any |
1023이상
25 |
25 1023 |
Any
Yes |
허가
허가 |
SMTP-2 |
베스쳔 Any |
Any 베스쳔 |
1023이상
25 |
25 1023이상 |
Any
Yes |
허가
허가 |
HTTP-1 |
베스쳔 Any |
Any 베스쳔 |
1023이상
Any |
Any
1023이상 |
Any
Yes |
허가
허가 |
HTTP-2 |
Any 베스쳔 |
베스쳔 Any |
1023이상
80 |
80 1023이상 |
Any
Yes |
허가
허가 |
DNS-1 |
베스쳔 |
Any |
53 |
53 |
(UDP) |
허가 |
DNS-2 |
Any |
베스쳔 |
53 |
53 |
(UDP) |
허가 |
DNS-3 |
Any 베스쳔 |
베스쳔 Any |
Any
53 |
53 Any |
(UDP)
(UDP) |
허가
허가 |
DNS-4 |
베스쳔 Any |
Any 베스쳔 |
1023이상
53 |
53 1023이상 |
Any
Yes |
허가
허가 |
DNS-5 |
Any 베스쳔 베스쳔 |
베스쳔 Any 내부 |
1023이상
53 100 |
53 1023이상
1023 |
Any
Yes Yes |
허가
허가 허가 |
DEFAULT |
ANY ANY |
ANY ANY |
ANY
ANY |
ANY
ANY |
ANY
ANY |
거부
거부 |
결론
스크린 서브넷 구조는 혼자서도 설치할 수 있는
가장 일반적인 파이어얼 구조일 것이다. 그리고 TCP_WRAPPERS,
IPCHAINS 와 같은 방화벽 관련 프로그램도 이 구조에 포함한다면
보다나은 보안정책을 만들수 있을 것이다. 방화벽이 보안에
첨병인 것은 누구나 알고 있는 사실이지만 시스템 관리자의 노력도
중요한 부분을 차지한다.
▲ top
|