源码包编译 Linux 下iptables+l7 实现七层结构。
当前系统linux内核2.6.18
所需源码包:linux-2.6.28.10.tar.gz, netfilter-layer7-v2.22.tar.gz, iptables-1.4.6.tar.gz, l7-protocols-2009-05-28.tar.gz
#
首先tar zxvf linux-2.6.28.10.tar.gz -C /usr/src
tar zxvf netfilter-layer7-v2.22.tar.gz -C /usr/src
ln -sv /usr/src/linux-2.6.28.10 linux
切换到cd /usr/src/linux
patch -p1 < ../patch -p1 < ../netfilter-layer7-v2.22/kernel-2.6.25-2.6.28-layer7-2.22.patch
cp /boot/config-2.6.18-164.el5 ./.config (到当前目录下来)
make menuconfig
将如下选项选中
Networking support → Networking Options →Network packet filtering framework →Code Netfilter Configuration
Netfilter connection tracking support
“layer7” match support
“string” match support
“time” match support
“iprange” match support
“connlimit” match support
“state” match support
“conntrack” connection match support
“mac” address match support
"multiport" Multiple port match support
Networking support → Networking Options →Network packet filtering framework → IP: Netfilter Configuration
IPv4 connection tracking support (required for NAT)
Full NAT
MASQUERADE target support
NETMAP target support
REDIRECT target support
接下来编译内核:
make (需要等待一段时间)
make modules_install
make install
编译完成后编辑/boot/grub/grub.conf 配置文件将默认启动的内核设为编译好的新内核。
重启restart(init 6)
重启完成后接下来编译iptables,首先cp /etc/init.d/iptables ./
rpm -e iptables iptables-ipv6 【ipstate】 --nodeps
tar jxvf iptables-1.4.6.tar.bz2 -C /usr/src
cd /usr/src/iptables-1.4.6/
cp ../netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* ./extensions/
./configure --prefix=/usr --with-ksource=/usr/src/linux 【--with-ksource=PATH Path to kernel source directory】
make
make install
接下来编译l7
tar zxvf l7-protocols-2009-05-28.tar.gz
cd l7-protocols-2009-05-28/
make install
一切准备就绪,mv iptables /etc/init.d/ 【值得注意的是iptables配置文件中需要修改一下路径】【/usr/sbin/iptables】
servers iptables start
接下来就可以定义iptables规则
例:iptables -A INPUT -s 192.168.0.0/24 -m layer7 --l7proto qq -j REJECT
下面是L7-filter以协议进行过滤的例子
(1)阻止MSN的数据通信
iptables -m mangle -A POSTROUTING -m layer7 --l7-proto msnmessenger -j DROP |
(2)阻止MSN的数据通信,除了IP地址为192.168.0.100的主机。
iptables -t mangle -A POSTROUTING -s 192.168.0.100 -m layer7 --l7proto msnmessenger -j ACCEPT iptables -t mangle -A POSTROUTING -d 192.168.0.100 -m layer7 --l7proto msnmessenger -j ACCEPT
iptables -t mangle -A POSTROUTING -m layer7 --l7proto msnmessenger -j DROP |
(3)阻止MSN的文件传输的数据通信。
iptables -t mangle -A POSTROUTING -m layer7 --l7proto msn-filetransfer -j DROP |
(4)阻止QQ的数据通信
iptables -t mangle -A POSTROUTING -m layer7 --l7proto qq -j DROP |
(5)阻止CS的数据通信。
iptables -t mangle -A POSTROUTING -m layer7 --l7proto counterstrike -j DROP |
(6)阻止BitForrent的数据通信(由于有些BT软件可以将通信加密,所以该方式并不能完全阻止BitTorrent的通信)。
iptables -A OUTPUT -m layer7 --l7proto bittorrent -j DROP |
(7)阻止电驴的数据通信。
iptables -A OUTPUT -m layer7 --l7proto edonkey -j DROP |
(8)阻止socks代理。
iptables -t mangle -A POSTROUTING -m layer7 --l7proto socks -j DROP |
(9)阻止包含EXE文件的数据通信。
iptables -t mangle -A POSTROUTING -m layer7 --l7proto exe -j DROP |
阅读(1706) | 评论(0) | 转发(0) |