[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 프로젝트에서 한 버전으로 설치
– 예전에 했던 작업을 문서로 남겨놓지 않아 다시 하면서 고생하여 이번에는 문서로 남김. -_-;;