linux系统之编译内核实现iptables应用层过滤

本文涉及的产品
云防火墙,500元 1000GB
简介:

温馨提示

之前己经介绍了Linux防火墙iptables的原理命令用法,在前面说过iptables防火墙是工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙。以基于网络层的数据包过滤机制为主,同时提供少量的传输层、数据链路层的过滤功能。难以判断数据包对应于何种应用程序(如:视频,QQ)

一、前言

为了解决上述问题,可以为netfilter打上补丁,由于netfilter是基于Linux内核的,所以要重新编译,而后也要为iptables添加相应的补丁文件,重新编译安装后提供基于应用层(第7层)的扩展功能。通过独立的l7-protocols协议包提供对各种应用层协议的特征识别与定义,从而达到限定应用程序的目的。

二、具体实现过程

注:

1、 目前,官网的layer7只支持到内核版本较低,如要使用,只有两个办法,第一种方法将内核降级,另一个是修改layer7中的源代码,使之适用于当前内核的版本。

2、这里所说的内核版本是指redhat再编译整合后的发布的内核版本,并不是kernel.org中的内核版本。所以要使用请到redhat的ftp站点去下载。

=========================================================================================

1、实验所需要的相关包

内核源码包:kernel-2.6.32-431.11.2.el6.src.rpm  下载地址
iptables:iptables-1.4.7-11.el6.src.rpm  下载地址

l7-protocols协议包:l7-protocols-2009-05-28.tar.gz 下载地址

2、安装过程

⑴、 获取并编译内核

# useradd mockbuild
添加安装src格式的软件包需要的用户

wKiom1M76N_hU_v1AAGfVId5MMA773.jpg

  解压缩到指定的目录中

wKioL1M76SnjH7t0AAFooA8pUiU169.jpg

制作软链接,便于以后使用

wKioL1M77dGSTTOpAADeh8a4YLU376.jpg

⑵、为内核打上netfilter-layer7-v2.23补丁

wKioL1M77tOjdikYAAXiW55lm8E282.jpg

⑶、基于本地系统中的内核配置文件编译此内核

1
2
# cp /boot/config-2.6.32-431.el6.x86_64 .config
# make menuconfig

①、网络支持

wKioL1M78c3BkVEBAALRyyV3N0o174.jpg

②、参数设定子项

wKioL1M78gKgvvjaAAMBC5RGUCw887.jpg

③、设定过滤模板

wKiom1M78lzgXpSRAANjhtJxSeE645.jpg

④、核心过滤配置

wKioL1M78nXw_3ccAALw046ePh8420.jpg

⑤、支持layer7匹配器

wKiom1M78sqDiWG3AAK9IS_f900232.jpg

⑥、确保支持连接追踪

wKioL1M78tfS9G9zAAOPwEiNAMo288.jpg

⑦、基于IP过滤配置

wKiom1M78zTyXQDmAAMWi1EbwFs555.jpg

⑧、ipv4的nat连接追踪功能

wKiom1M788Hh7YlhAAM8ICpluaw360.jpg

⑨、取消编译验证

wKioL1M79BzA7suoAAJ_sJxKnKc119.jpg

⑩、取消模块签名认证

wKiom1M79ImQFMbdAAJlxrAfhtY853.jpg

进入API接口

wKiom1M79eqAvglsAAJawrcGwSI536.jpg

取消签名检查

wKiom1M79fmCcG50AANPtLN_unE874.jpg

退出并保存

wKioL1M79eORfAXNAAC86vq7Hwo217.jpg

⑷、编译并安装内核

1
2
3
# make
# make modules_install
# make install

这样就会在/boot/grub/grub.conf文件中有一个新的内核版本,将default设置到此内核版本次序上,就可以启动新的内核了。

(5)、重启系统,启用新内核

wKioL1M794jDvLwAAADzbwpakXs853.jpg

3、编译iptables

1
2
3
#cd /download
# tar xf iptables-1.4.20.tar.bz2
# cp /download/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* extensions/

说明:之前己经将nerfilter编译到内核中了,在此将netfilter新的功能支持到kernel2.6.20之后的版本复制到iptabels扩展功能中。

wKioL1M7-pPQ1kmmAASEkbfrLoE276.jpg

备份启动脚本与配置文件

1
2
# cp /etc/rc.d/init.d/iptables /download
# cp /etc/sysconfig/iptables-config /download

wKioL1M7-wjQ3NrjAAFvYtgkjQ0887.jpg

1
# make && make install

注:在此处出现如下警告,提示netfilter_conntrack没有找到,这个可以忽略,在安装完成后使用 modprobe加载即可。

wKiom1M7-1vCkc8bAABp34ZoU5Y134.jpg

还原启动脚本与配置文件

wKiom1M7_NLw5dZzAAEEla9B_4s368.jpg

4、为layer7模块提供其所识别的协议的特征码

1
2
3
# tar zxvf l7-protocols-2009-05-28.tar.gz
# cd l7-protocols-2009-05-28
# make install

wKioL1M7_Syw71QDAAEQIR0fpak618.jpg

5、如何使用layer7模块

⑴、安装完成后,查看iptabels的版本。

wKioL1M7_ZPSVetLAADzbPA8NVk184.jpg

⑵、修改脚本

wKioL1M7_c7CwT1DAAC2okgyMbU634.jpg

⑶、ACCT的功能已经可以在内核参数中按需启用或禁用。此参数需要装载nf_conntrack模块后方能生效

wKioL1M7_hThjPWKAAEESLPqPxI766.jpg

⑷、加载nf_conntrack模块(之前警告处提示的那个)

wKioL1M7_oyi4Vg4AADacQYBecA401.jpg

6、测试layer7应用层程序限定

注:更新后iptables在原有基础上新增了应用层的扩展语法,支持更多的扩展功能。

其格式如:

# iptables [specify table & chain] -m layer7 --l7proto [protocol name] -j [action]

三、测试环境
系统 :windows xp 安装软件QQ

系统 :linux 基于iptables 的防火墙。

1、网络属性:

windows xp

wKiom1M7_1TTLHWKAAL9jt0Krqo380.jpg

linux网络属性

wKioL1M7_1aTP-_1AAWPY0aZoyA386.jpg

2、配置完成后,测试windows xp与linux的连通性

注:

但无法ping通物理机所在的192.168.1.0网段中的网关(192.168.1.253)

3、linux开启包转发与地址伪装

wKiom1M7_7ygld7fAACNy7TDqNc346.jpg

wKioL1M7_7DBwksOAADKBqooi8E870.jpg

4、xp上网测试

wKiom1M8AAKyWXfQAAHJGy8s1Yw818.jpg

5、限定某一网络内的主机不可以上QQ
#iptables -I FORWARD -m layer7 --l7proto qq -j REJECT

wKiom1M8ADCRasGkAAKf-8zddio325.jpg

6、查看效果

wKiom1M8AG6R6NiKAAE2X6Ox_B4004.jpg

注:如果想了解更多的l7-protocols支持对那些应用程序限定,请移步官网

====================================完=============================================










本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1389297,如需转载请自行联系原作者
目录
相关文章
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
67 27
|
8天前
|
Linux系统ext4磁盘扩容实践指南
这个过程就像是给你的房子建一个新的储物间。你需要先找到空地(创建新的分区),然后建造储物间(格式化为ext4文件系统),最后将储物间添加到你的房子中(将新的分区添加到文件系统中)。完成这些步骤后,你就有了一个更大的储物空间。
58 10
|
2月前
|
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
103 24
Linux系统之whereis命令的基本使用
|
20天前
|
Linux系统中如何查看CPU信息
本文介绍了查看CPU核心信息的方法,包括使用`lscpu`命令和读取`/proc/cpuinfo`文件。`lscpu`能快速提供逻辑CPU数量、物理核心数、插槽数等基本信息;而`/proc/cpuinfo`则包含更详细的配置数据,如核心ID和处理器编号。此外,还介绍了如何通过`lscpu`和`dmidecode`命令获取CPU型号、制造商及序列号,并解释了CPU频率与缓存大小的相关信息。最后,详细解析了`lscpu`命令输出的各项参数含义,帮助用户更好地理解CPU的具体配置。
59 8
深度体验阿里云系统控制台:SysOM 让 Linux 服务器监控变得如此简单
作为一名经历过无数个凌晨三点被服务器报警电话惊醒的运维工程师,我对监控工具有着近乎苛刻的要求。记得去年那次大型活动,我们的主站流量暴增,服务器内存莫名其妙地飙升到90%以上,却找不到原因。如果当时有一款像阿里云 SysOM 这样直观的监控工具,也许我就不用熬通宵排查问题了。今天,我想分享一下我使用 SysOM 的亲身体验,特别是它那令人印象深刻的内存诊断功能。
|
10天前
|
微服务2——MongoDB单机部署4——Linux系统中的安装启动和连接
本节主要介绍了在Linux系统中安装、启动和连接MongoDB的详细步骤。首先从官网下载MongoDB压缩包并解压至指定目录,接着创建数据和日志存储目录,并配置`mongod.conf`文件以设定日志路径、数据存储路径及绑定IP等参数。之后通过配置文件启动MongoDB服务,并使用`mongo`命令或Compass工具进行连接测试。此外,还提供了防火墙配置建议以及服务停止的两种方法:快速关闭(直接杀死进程)和标准关闭(通过客户端命令安全关闭)。最后补充了数据损坏时的修复操作,确保数据库的稳定运行。
41 0
|
4月前
|
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
337 78
Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
通过以上步骤,您可以在Linux(OpenWrt)系统中使用iptables和tc工具实现网络流量限速控制(QoS)。这种方法灵活且功能强大,可以帮助管理员有效管理网络带宽,确保关键业务的网络性能。希望本文能够为您提供有价值的参考。
235 28
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
205 23
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
662 58

热门文章

最新文章