[Bridge-Firewall] layer7 Filter

o. 개요

– LAN 카드 2개는 Bridge를 구성해 DMZ Zone을 제어하고 1EA의 LAN카드는 일반 사용자의

   MASQ를 이용한 라우팅 방화벽을 구성하여 상용방화벽과 같은 구성을 구현한다.

– layer 7계층을 제어함으로써 랜덤포트를 사용하는 프로그램를 제어한다.

   (예. 당나귀, 메신져등의 port로 제어하기 힘든 것도 제어할 수 있다)

o. 구성도(이상적인 구성도)

   라우터—–eth0-(Bridge/layer7 Firewall)-eth1——스위칭 허브——서버(DMZ)

     (Cross Cable)        |

                         eth2(MASQ/Router Firewall/DHCP)—-스위칭 허브—– PC

o. 필요 S/W 및 사용 프로그램

– H/W : P4 2.6 / 512M / GBit 2ea 랜카드 / 100MB 1ea 랜카드(모니터링으로 활용)

   (100MB 네트워크 카드는 트래픽 못 버팀/기존 장비 과부하 현상 발생)

– OS : CentOS release 5 (Final)

– kernel : linux-2.6.21.1.tar.bz2 (Open Project 공식 버전 / ftp.kernel.org)

– Layer7 : netfilter-layer7-v2.16.1.tar.gz (커널패치, iptables 패치가 포함되어 있음)

– l7proto : l7-protocols-2007-11-22.tar.gz

– F/W : iptables-1.3.8-6.src.rpm

– 적용장소 : 서버 + 클라이언트 = 600ea 이상인 네트워크 적용

o. Bridge Firewall

커널 2.6.x에서는 Bridge가 포함이 되어 있어 커널 컴파일을 할 필요가 없으며

layer7 계층을 제어하기 위해서는 패치 후 컴파일을 다시 해줘야 한다. Bridge F/W 문서는

많으니 따로 설명하지 않겠다.

o. nat

F/W에 랜카드만 하나 더 달아서 MASQ를 구성하고 eth2 인터페이스에 대해 패킷필터링을 적용한다.

덤으로 DHCP도 같이 구성해주면 좋다. (사용자 입장에서 좋아한다)

o. layer7 Firewall 설치

– ~ 표시는 압축을 푼 경로를 뜻함

1. kernel 컴파일

– /usr/src/linux 에 압축해제 (linux-2.6.21.1.tar.bz2)

– netfilter-layer7-v2.16.1.tar.gz 압축해제 후

   => ~/netfilter-layer7-v2.16.1/for_older_kernels/kernel-2.6.20\\

     -2.6.21-layer7-2.16.1.patch 파일을 커널 소스에 패치

cd /usr/src/linux

patch -p1 < /usr/local/src/netfilter-layer7-v2.0/kernel-2.6.13-2.6.14-layer7-2.0.patch

– 체크 확인 및 항목(make menuconfig)

   => “Prompt for development and/or incomplete code/drivers”

   => “Network packet filtering framework”

   => “Netfilter Xtables support”

   => “Netfilter connection tracking support”

   => “Connection tracking flow accounting”

   => “Layer 7 match support”

– GRUB 확인 후 재부팅 (새 커널 부팅후 iptables 설치)

ex)

Code maturity level options –> [*] Prompt for development and/or incomplete code/drivers

Networking –> Networking options –>

    [*] Network packet filtering (replaces ipchains) –>

        IP: Netfilter Configuration –>

            Connection tracking (required for masq/NAT)

            [*] Connection tracking flow accounting

            IP tables support (required for filtering/masq/NAT)

            Layer 7 match support

2. iptables 재설치

– 기존 iptables 삭제 (rpm -e iptables)

– 압축해제 : tar -jxvf iptables-1.3.8.tar.bz2

– 패치 : ~/netfilter-layer7-v2.16.1/iptables-1.3-for-kernel-2.6.20forward-laye\\

          r7-2.16.1.patch 파일을 가져와서 패치

  => patch -p1 < ~/iptables-1.3-for-kernel-2.6.20forward-layer7-2.16.1.patch

cd /usr/local/src/iptables-1.3.8

patch -p1 < ../netfilter-layer7-v2.0/iptables-layer7-2.0.patch

chmod +x ./extensions/.layer7-test

make KERNEL_DIR=/usr/src/linux

make install KERNEL_DIR=/usr/src/linux

– make&&make install

– iptables -v 로 버전확인

– 참고로 본인은 rpm 버전을 좋아하는 관계로 rpmrebuild를 했으나 설치의 용이성을 위해

   문서에서는 소스 컴파일로 설명함.

3. l7-protocols 설치

– l7-protocols-2007-11-22.tar.gz 압축해제 후 디렉토리로 이동하여

– 설치 : make install

– 단순히 압축 해제된 디렉토리를 /etc 로 복사

– /etc/l7-protocols/protocols 상에 있는 프로그램 제어 가능이라고 하나 국내상황에서는

   안되는 것들도 있음

4. Test

– # iptables -t mangle -A POSTROUTING -m layer7 –l7dir /etc/l7-protocols –l7proto \\

    edonkey -j DROP

– 에러가 없으면 설치 성공(에러시 커널 옵션 실수가 주 원인)

– rule 확인 : iptables -t mangle -L -v -n (v, n 옵션을 추가하면 패킷량을 볼 수 있음)

– 세부 Rule은 iptables 와 DIY하기 바람.

5. 기타 도구 (함께 운영하면 좋음)

– shapecfg(or iproute) 도구를 방화벽에 추가하여 QoS(CBQ) 적용 – 속도제한

– ntop 도구를 이용한 네트워크 모니터링

6. 관련 링크

– http://l7-filter.sourceforge.net/

– http://www.kernel.org

– http://netfilter.org/

– 최초참고 : http://oops.org/SERVICE/jsboard/read.php?table=jsboard_oopsFAQ&no=456

  (layer7 계층을 제어할 수 있다는 것을 알게 해준 글)

기타.

– 커널 2.6.23등의 최신 버전으로 하다가 삽실 많이하고 l7-filter 프로젝트에서 한 버전으로 설치

– 예전에 했던 작업을 문서로 남겨놓지 않아 다시 하면서 고생하여 이번에는 문서로 남김. -_-;;

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.