로그인
Sign in
IP Filter

      

SUN 제품 및 BSD계열 등에서 지원하는 IpFilter는 Sun Server에 사용할 수 있는 좋은 Freeware의 Packet Filter로 시스템 및 네트워크 보안에 아주 강력한 기능을 보유한 소프트웨어 이다. Stateful 패킷 필터이며 커널 모듈과 사용자 유틸리티로 구현되어있다.


IpFilter에서 하는일

       - 불필요한 패킷은 버린다.

       - 필요에 따라 패킷을 자른다

       - 정상적인 처리는 커널을 통과시켜 사용자 프로그램에게 보낸다


1. Installing IP Filter


솔라리스용 바이너리 IP Filter는 http://www.maraudingpirates.org/ipfilter/ 에서 다운로드 받을 수 있다.  32비트 커널 모듈과 64비트 커널 모듈로 컴파일 되어 있다.


2. IP Filter Configuration


    IP Filter의 구성파일은 /etc/opt/ipf/ipf.conf 이다. /etc/init.d/ipfboot , /etc/rc2.d/S65ipfboot 스크립트에의해 시스템이 런레벨 2 로 부팅될 때 구동된다. IP Filter의 Rules의 문법은 다음 형식이며, 룰은 위에서 아래로 순서대로 적용되며 하나에 대해 여러 개의 룰을 정의하게 되면 가장 마지막에 정의한 룰이 적용된다.

IP Filter의 rule 형식>  action  direction  packet

action은 패킷의 처리 방식을 지정한다.   block 은 통과시키지 않는 rule이며,  pass 는 통과 시키는 rule이다.

direction 은 패킷의 방향이다.  in 은 IP Filter로 들어오는 패킷에 대한 정책이며, out 은 패킷필터를 통해 나가는 패킷에 대한 정책이다.


3. IP Filtering Rules


기본적인 룰은 입력되는 모든 패킷에 대해 블록 시키며 나가는 모든 패킷에 대해 통과 시키는 정책이다. 패킷 정책 설정은 다음과 같다.

    block in all

    pass out all


(1) Matching Packets

패킷의 패턴 매칭은   패킷의 내용을 비교하여 매치되는 패킷에 대해서 정책을 적용한다.

block in from 192.168.0.0/24 to any

>> 송신자의  IP주소가 192.168.0.0 망에서 오는 모든 패킷은 막는다

pass in on hme0 all

>> 인터페이스 hme0로 들어오는 모든 패킷은 통과시킨다.

block in proto icmp all

>> 모든 들어오는 ICMP 패킷은 막는다.

Block in proto icmp-type echo

>> 모든 들어오는 ICMP echo 패킷은 막는다.

Block in proto tcp all port = 513

>> 모든 들어오는 tcp 513(rlogin)번 패킷은 막는다.

block in on hme0 proto udp from 192.168.0.0/24 to any  port = 2049

block in on hme0 proto tcp from 192.168.0.0/24 to any port = 2049

>> 192.168.0.0망에서 hme0 인터페이스로 들어오는 NFS 요청은 모두 블럭한다.


(2) Bypassing Rules

     quick 키워드는 모든 패킷에 대해 적용하는 절대적인 룰을 의미한다. 보통의 경우 룰의 처음부터 끝까지 비교하면서 제일 마지막 매치되는 패턴의 룰을 적용받지만 그럴 필요가 없는 경우 quick 키워드를 사용하여 더 이상 패턴 비교를 하지 않도록 설정할 수 있다.

block in quick from 192.168.0.0/24 to any

>> 192.168.0.0망에서 들어오는 모든 패킷은 블록시키고 더 이상 패턴 매칭 검사를 하지 않는다. group 룰을 사용하면 방화벽을 좀더 효율적으로 관리할 수 있다. hme0 의 패킷은 적당한 hme0의 룰에 의해 처리된다.  

block in log quick proto udp from any to any port=161

>> 모든 SNMP 패킷을 블록 시킨다.


(3) IP Filter Logging

    기본적으로 모든 룰 작동은 기록을 남기지 않는다. 하지만 log 라는 키워드를 사용하면 rule 작동에 대한 기록을 로그로 남길 수 있다.

Logging에서 사용되는 Rule Keyword

   log                   : rule작동에 대한 기록을 남긴다

   log first              : 첫번째 TCP세션의 패킷만 기록한다.

   log body             : 패킷의 헤더와 payload의 128비트를 기록한다.

   log level facility.level  : syslog가 로그를 기록하도록 설정

   dup-to               : 지정 인터페이스가 목적지인 패킷을 복사한다.

   to                    : 패킷을 지정한 인터페이스로 리다이렉트한다.


block in log quick proto tcp from any to any port=12345

block in log quick proto tcp from any to any port=12346

block in log quick proto tcp from any to any port=20034

block in log quick proto tcp from any to any port=31337

>> 모든 Back Orifice 와 NetBus 패킷을 블록 시키며 룰 동작에 대한 로그를 남긴다.

block in log-first quick on hme0 proto tcp from any to 192.168.0.1/32  port=80

>> 192.168.0.1 서버로 웹서비스를 요청하는 패킷을 블럭 시키고 첫번째 TCP 세션 패킷을 로그로 남긴다.

# /sbin/ipmon -s  

>>  ipmon명령을 사용하여 로깅디바이스인 /dev/ipl을 모니터링하고, 시스템 로그로 이벤트를 전송한다.


이제 패킷이 로깅되도록 rule을 작성해 보자

block in quick on hme0 to hme1 proto tcp from any to any port = 23

>> hme0 로 들어오는 모든 telnet 패킷을 hme1으로 보낸다. 이 경우 snort이 hme1을 listen하고 있다고 가정한다.

pass in quick on hme0 dup-to hme1 from any to 192.168.0.1/32 port = 80

pass in quick on hme0 dup-to hme1 from any to 192.168.0.1/32 port = 443

>> hme0 로 들어오는 192.168.0.1로 가는 웹서비스 요청 패킷은 hme1으로 복사된다. 이 경우 hme1은 snort이 listen하고 있는 인터페이스로 설정되어 있는경우다.


(4)  Stateful Filtering

      기본적으로 IP Filter는 네트웍 크래픽 처리에 관한 상태 정보를 추적하지 않고 각각의 패킷을 각각의 이벤트로 처리한다. 하지만 "keep state" 키워드를 사용하면  세션에 속해있는 패킷의 상태를 추적하여 매칭 시키는 룰을 작성할 수 이다.

       UDP같은 경우 stateless통신을 하므로 "세션"이라는 개념이 없다. 나가는 패킷의 소스와 목적지 포트를 관찰해 두었다가 들어올 때 확인하는 방법으로 상태를 추측해서 관리한다.

block in quick on hme0 all

pass out quick on hme0 proto icmp from 192.168.0.23 to any keep state

pass out quick on hme0 proto tcp from 192.168.0.23 to any keep state

pass out quick on hme0 proto udp from 192.168.0.23 to any keep state

>> 이 룰은 먼저 모든 들어오는 트래픽은 블럭시킨다. 그런다음 192.168.0.23에서 초기화된 ICMP,TCP,UDP패킷은 제한없이 나갈 수 있다.


(5)  Advanced Packet Matching

      “flags"키를 statefule 필터링과 연동해서 사용하게 되면 들어오는 패킷이 세션의 어디에 속하는 지를 정확하게 체크 할수 있으므로  스텔스 스캔과 같은 패킷을 효과적으로 막을 수 있다.


block in quick proto tcp from any to any port = 23 flags S

>>  port 23으로 SYN flag가 설정되어 들어오는 패킷은 막는다.

pass in quick proto tcp from any to 192.0.2.42/32  port = 22 flags S keep state

block in quick from any to 192.0.2.42/32

>>  들어오는 SSH 트래픽은 허용하고 나머지는 모두 막는다.

pass in quick proto tcp from any to 192.0.2.42/32  port = 22 flags S keep state keep flags

>>  "keep frags" 키워드는 필터링을 하기 전에 패킷 재조합을 한다.


(6)  IP Filter Stealthiness

     효율적인 방화벽을 구축하기위한 룰들에 대해 알아보았다. 그러나 이러한 것에는 중요한 한가지 결점이있다. 가장 바람직한 방화벽은 공격자가 방화벽이 있다는 것을 인식하지 못하도록 하는것이다. 디폴트 동작으로 IP Filter는 필터링된 패킷을 버린다. 이러한 것들이 방화벽이 중간에 존재한다고 알리는 역할을 하게 되는것이다.


block return-rst in proto tcp from any to 192.0.2.42/32 port = 23

>> "return-rst"키워드를 사용하여 필터링 패킷에 대해 "RST" 응답을 하도록 구성하는것이다.

block return-icmp(port-unr) in proto udp from any to 192.0.2.42/32 port = 69

>> non-listening UDP포트에는 ICMP port-unreachable packet을 응답한다.


   앞의 두가지 형태의 응답은 ICMP에러패킷에 소스의 IP가 포함되는데 원래 목적지의 IP가 아닌 방화벽의 IP가 들어가는점이 문제가 된다. 그래서 원래 목적지 IP를 소스IP 대신 집어넣어서 port-unreachable패킷을 전송하게 하는 키워드가 "return-icmp-as-dest"이다.

block return-icmp-as-dest(port-unr) in proto udp from any to 192.0.2.42/32 port = 69

>> ICMP 에러 패킷의 payload에 들어가는 소스의 IP주소를 원래 목적지로 변경한다.

block in quick fastroute proto u에 from any to any port 33434 >< 33465

>> “fastroute" 키워드를 사용하면 TTL값을 감소시키지 않도록 한다. 모든 들어오는 traceroute에대해 패킷의 TTL값을 감소시키지 않고 처리한다.


4.  IP Filter Tools

IP 필터는 추가적인 커널 모듈과 여러 가지의 유틸리티를 제공한다. ipf 유틸리티는 기본적인 룰셋을 구현하기위한 기본명령이다.

#  /sbin/ipf -Fa -f /etc/opt/ipf/ipf.conf

>> ipf.conf 파일로부터 방화벽정책을 읽어서 설정한다.

#  /sbin/ipfstat

>>  IP Filter의 퍼포먼스 상태를 요약해서 출력해 준다.

# /sbin/ipfstat -oh

# /sbin/ipfstat -ih

>> outbound, inbound 에 적용된 룰을 보여준다. 그리고 룰이 적용된 횟수도 출력해 준다.

# /sbin/ipfstat -s

>> state table의 demp를 출력한다.


# /usr/sbin/ipmon -s

>> log 를 syslogd에게 넘겨서 처리한다.


방화벽 설정에 대한 테스를 위한 유틸리티들도 같이 제공되고 있다.

# ipftest        

>>rule list 를 테스트

# iptest

>>  기형의 패킷을 전송

# ipsend      

>> sendip와 같이 패킷을 만들어서 전송한다.

# ipresend

>> snoop이나 tcpdump 데이타 파일에 있는 기록을  "play back"으로 사용한다.


5.  IP Filter Extensions


laba는 http://inc2.com/isba 사이트에서 다운로드 받을 수 있다. isba는 IP 필터의 관리를 위한 강력한 그래픽 인터페이스를 제공하는 패키지이다. isba를 사용하면 그래픽 에디터를 사용하여 쉽게 정책을 정의하거나 수정하는 작업을 할 수 있다. 또한 리모트 관리 콘솔을 지원하고 있다. SSH 터널을 사용하여 중앙 웍스테이션에서 엔터프라이즈 방화벽을 관리할 수 있다. 이 패키지는 프리라이센스의 소스코드로 제공되고 있으며, 이 패키지를 설치하기 위해서는 Perl 과 Perl/TK 라이브러리가 설치되어 있어야 한다.


fwanalog는 http://tud.at/programm/fwanalog/ 에서 다운로드 받을 수 있다. 이 패키지는 프리 라이센스 의 간단한 본쉘 스크립트로 작성되어 있다. 이 스크립트는 IP필터의 로그를 분석하여 요약하여 결과를 그래프로 생성하거나 웹 기반의 보고서를 생성하는 작업을 한다. cron을 기반으로 시간마다 실행하게 하여 시간대별 리포트 분석을 할 수 있다. fwanalog는 웹 로그 분석을 위해 analog 패키지가 설치되어 있어야 한다. analog는 가장 만힝 사용되고 있는 웹 로그를 분석하는 패키지로 http://www.analog.cx/ 사이트에서 Solaris 환경의 소스코드 또는 바이너리 파일을 다운로드 받을 수 있다.
조회 수 :
974
추천 수 :
15 / 0
등록일 :
2006.11.23
11:47:25 (*.236.3.225)
엮인글 :
http://bestceok.com/xe/index.php?mid=sun_faq&document_srl=3016&act=trackback&key=ad5
게시글 주소 :
http://bestceok.com/xe/index.php?mid=sun_faq&document_srl=3016
List of Articles
번호 제목 글쓴이 날짜 조회 수
151 솔라리스 10 컴파일 에러 문제 하록 2007-12-18 4927
150 기본 network setup 하록 2007-12-18 694
149 Volume Manager에서 Root Disk Mirroring 하록 2007-12-18 1349
148 ce 인터페이스 속도 설정 하록 2007-12-18 610
147 UNIX System Crash Dump 분석스크립트 (analysis.sh) 하록 2007-12-18 988
146 Process Name별로 Kill하는 Script 하록 2007-11-13 616
145 Solaris 10 보안 적용 스크립트 하록 2007-11-02 1812
144 ps 명령어 Full List 하록 2007-06-20 601
143 솔라리스 부트 매니저를 이용한 부트 디스크 미러링 방법 하록 2007-03-20 948
142 Sun One Webserver 설치 하록 2007-03-19 487
141 새로운 장치를 달고 device file을 만들려면? 하록 2007-03-06 546
140 ufsdump & ufsrestore Manual 하록 2007-01-31 1045
139 [SUN Disksuite] Metadb & Metadevice 구성 매뉴얼 하록 2007-01-22 810
138 SOLARIS한글 사용하기 하록 2006-11-30 524
137 솔라리스10 x86 에서의 POP3 서버 구축!! 하록 2006-11-23 779
» IP Filter 사용법 하록 2006-11-23 974
135 Solaris Security tools 50종 하록 2006-11-23 710
134 fsck에 관한 내용, 갑자기 다운 되었을 경우 하록 2006-11-23 784
133 OBP(Open boot PROM) command 정리 하록 2006-11-23 745
132 솔라리스10 x86 에 sendmail 8.13.3 설치하기 하록 2006-11-23 1291