热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用IPTables实现字符串模式匹配

文章标题:用IPTables实现字符串模式匹配。Linux是中国IT实验室的一个技术频道。包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类

  自1995年ipfwadm开始进入1.2.1的核心,Linux的防火墙实现有很长的时间了。Ipfwadm实现了标准的tcp/ip包过滤功能,比如过滤源地址与目的地址以及端口过滤。早在1999年第一个稳定的2.2.0核心中防火墙的实现被ipchains替代了,ipchains的新功能包括支持规则链,碎片包控制,较好的网络地址翻译功能(NAT)以及其他一些有用的改进。我们需要明白Linux防火墙包括核心级代码(通常是可加载核心模块或者核心源程序的补丁)和用户级代码(一个配置的工具,比如/usr/bin/ipchains,这是用来插入包规则到核心空间的)因此无论如何,只要新的linux防火墙代码被引入,核心和用户空间的有关代码都要改写。
  2001年2.4的核心完成了,iptables出现了。它引入了很多重要的改进,比如基于状态的防火墙,基于任何TCP标记和MAC地址的包过滤,更灵活的配置和记录功能,强大而且简单的NAT功能和透明代理功能,通过速度限制实现DoS的阻止(更详细的资料请参看A Comparison of iptables Automation Tools一文)。
  然而,最重要变化是引入了模块化的架构方式。比如,ipchains和ipfwadm兼容模式是通过一个核心模块的设置实现的,该模块能够在运行的核心中插入,以便提供相应的通讯功能。在附加的变化中,用户自定义编码功能已经成为了可能,比如过滤一定范围的端口,根据TTL值和包的到达时间进行判断,对自定义的协议进行状态监视,对随机的数据包进行监视等,这些目前都还不是iptable的一部分,但是在未来将被实现。很多很有趣的新模块已经完成了。编写一个可加载的核心模块来创建核心级代码,通过用户级代码实现控制过滤器的行为。参见Rusty Russell's Linux iptables HOWTO
  本文主要关注字符串模式匹配的功能,(显然,是通过模块实现的),该功能可以限制和研究数据包的有效载荷。这是iptable技术的一个非常有意义的突破,它超越了传统的包过滤防火墙的标准TCP/IP标志监视功能。传统的防火墙可以分为包过滤和应用代理两种类型,应用代理防火墙可以分别出应用层的协议比如telnet,HTTP或者SMTP,能够监视这些协议的有效载荷和检查命令,但是应用代理防火墙带来了巨大的性能缺陷:当通过网络协议栈处理上层即应用层的数据包。同时我们需要为每一个要监控的协议编写新的代理程序。包过滤防火墙通常只监视源地址和目的地址,源端口和目的端口,TCP/IP标志等,而完全忽略了高层协议的有效载荷。由于上述原因,包过滤防火墙通常比应用代理防火墙的速度快。应用代理提供了更加有力度的安全控制而包过滤可以用于更高的带宽线路满足更高的吞吐量。
  基于以上的情况,iptables的新增功能提供了跨越两种防火墙类型的优势,避免了各自的缺陷,这个功能同时非常清晰的证明了新的模块化的架构较之老的ipchains的优势,它能够使得iptables工作在网络层(OSI模型的第三层)不必工作在高层协议,但是却可以监视高层协议的有效载荷,而不必分析应用层的通信结构。
  在2001年5月以前,还没有提出字符串模式匹配模块以前。有一个尝试添加内容监控的能力给iptables防火墙的工程:Hogwash。该工程结合了Snort IDS规则模式匹配引擎,以便于iptable能够响应带有攻击信号的数据包。
  现在我们提供了一个Step-By-Step的指导,以便于在RedHat Linux上实现模式匹配的包监视功能。标准的RH7.2提供了iptables 1.2.3的版本以及1.2.4的可用RPM升级包。然而,模式匹配功能没有被包含在标准的发行版中,因为开发人员将它标记为试验。
  如果你使用的是RH7.1-7.2,你就已经使用了2.4的核心。你至少需要2.4.4的核心以便能够使用iptables 1.2.4的功能。通常推荐你从发行商那里下载最新的可用的核心。目前,有一个例外:iptables-1.2.4的字符串模式匹配补丁不能在2.4.9的核心下工作。你应该安装核心的源码RPM包(通常被放在/usr/src/linux-2.4.x的源码树内)或者从别处下载的核心源程序(比如www.kernel.org或者它的一个镜像)。
  在本文中,将采用最新的2.4.16核心作为例子。测试也能运行在使用2.4.7核心的RedHat 7.2上,但是2.4.7的核心并不推荐使用,因为2.4.7的核心有一些小的安全问题,比如SYN-COOKIE保护和iptables的保存/恢复功能。
  接下来需要从http://netfilter.samba.org/iptables-1.2.4.tar.bz2下载iptables。当对压缩文件进行解压缩之后,需要对iptables进行配置,合并相关的核心源程序树。可以使用半自动化的程序来完成这个目的。首先,可能需要运行程序以便包含已经考虑过的稳定的iptables补丁,但是这个补丁没有被包含在kernel的发行版内。从iptables的解压目录(在本例中iptables在/home/anton/iptables-1.2.4,核心源程序在/usr/src/linux-2.4.16)运行:
  make pending-patches KERNEL_DIR=/usr/src/linux-2.4.16
  这将开始运行交互式的补丁应用程序,虽然你可以安全应用所有的补丁,但是没有一个补丁是iptables的字符串匹配所必需的。对任何你认为需要的补丁都回答y(yes)。如果你希望能够安全的使用iptables,则选择none。
  现在我们将准备应用试验部分的补丁,比如字符串模式匹配的支持。运行:
  make patch-o-matic KERNEL_DIR=/usr/src/linux-2.4.16
  在这个交互式的过程中,回答y(yes)以便应用string.patch。程序将遍历所有的可用的补丁,包括那些稳定的。
  Testing... string.patch NOT APPLIED ( 2 missing files)
  The string patch:
  
  Author: Emmanuel Roger
  Status: Working, not with kernel 2.4.9
  
  This patch adds CONFIG_IP_NF_MATCH_STRING which allows you to
  match a string in a whole packet.
  
  THIS PATCH DOES NOT WORK WITH KERNEL 2.4.9 !
  
  Do you want to apply this patch [N/y/t/f/q/?] y
  其余的补丁也许也让你非常感兴趣,不过它们与本文并不相关。如果你选择安装任何别的补丁,请注意开发者给出的警告信息,其中包括了补丁的功能(比如dropped表的补丁)确定你没有安装MAC过滤的补丁,因为最近发现这个补丁包含一个漏洞。
  现在我们开始编译用户空间程序和相关的Libraries:
  make KERNEL_DIR=/usr/src/linux-2.4.16
  然后我们安装它们(iptables在/usr/local/user/sbin,libraries在/usr/local/lib/iptables)在root身份下执行以下内容:
  make install KERNEL_DIR=/usr/src/linux-2.4.16
  紧接着我们配置和编译核心:
  Now we are ready to compile the user-space code and the libraries:
  make KERNEL_DIR=/usr/src/linux-2.4.16
  and then install them (iptables program goes in /usr/local/user/sbin and libraries go into /usr/local/lib/iptables). As root:
  cd /usr/src/linux-2.4.16
  可以使用任何的核心配置方法。有关详细的配置核心的方法,可以查阅Internet资源,Internet上有大量的这方面的文档,比如kernel HOWTO等。以下简要介绍一下:
  make xconfig
  在GUI界面下,选择Netfilter配置选项,然后在Strings match support前选择m(模块支持),如下图:
  
  然后执行通常的操作:
  make dep;make bzImage;make modules;make modules_install
  现在按照你喜欢的方式安装核心,并重新启动。重新启动系统以后,测试一下iptables是否支持模式匹配功能,在root身份下执行:
  /usr/local/sbin/iptables ?m string ?help
  该命令将显示如下标准的iptables帮助信息:
  STRING match v1.2.4 options:
  --string [!] string Match a string in a packet
  该功能允许你对匹配数据包的内容,我们可以通过netcat或者telnet来测试这一功能,从而确定我们确实可以获得数据包的内容。
  运行:
  iptables -A INPUT -m string --string "test" -j LOG --log-level
  info --log-prefix "TEST"
  然后启动一个netcat的服务器:
  nc -l -p 3456
  然后连接该netcat服务器:
  telnet localhost 3456
  然后输入:
  test
  whatevertestdoes
  这样将引起iptables产生一个简单的记录,我们在记录文件中将会看到如下的信息(当然你需要设置了记录信息的级别为info)
  Nov 27 23:16:53 pua kernel:
  TEST IN=lo OUT=MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
  
  SRC=127.0.0.1 DST=127.0.0.1 LEN=2154 TOS=0x00 PREC=0x00 TTL=64
  ID=42880 DF PROTO=TCP SPT=3128 DPT=33018 WINDOW=32767 RES=0x00 ACK PSH URGP=0
  
  Nov 27 23:16:53 pua kernel:
  TEST IN=lo OUT=MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00
  
  SRC=127.0.0.1 DST=127.0.0.1LEN=1830 TOS=0x00 PREC=0x00 TTL=64
  ID=17451 DF PROTO=TCP SPT=8000 DPT=33017 WINDOW=32767 RES=0x00 ACK PSH URGP=0
  在tcp/ip数据包中只要出现test字符串,以上的信息就会产生。这有什么好处呢?太多了。正如Filtering packets based on string matching这篇文章所建议的那样,该文章可以在linuxguru.net的sysctl内找到。它能够用来阻止那些讨厌的IIS蠕虫造成得Unix web服务器记录文件记录大量的对cmd.exe的请求,这些蠕虫将不再干扰你,但是如果你的/var分区(通常是记录文件存放的分区)不够大,那么这一功能将有一定的帮助。只要静静地丢弃蠕虫对80端口的请求或者使用记录限制功能,对这些信息进行记录,丢弃这些包的操作如下:
  iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe"
  每小时只记录一条这样的信息:
  iptables -I INPUT -j LOG
推荐阅读
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 问题描述:域名已经备案,我全部都有,也在后台配置了,但是手机预览,还是请求失败,PC端是可以请求 ... [详细]
  • linux6.5 配置邮件服务,centos 6.5服务器搭建邮件服务postfix和dovecot
    centos6.5搭建邮件服务postfix和dovecot------------------------------------------------安装DNS指定邮件交换记 ... [详细]
  • C++程序员视角下的Rust语言
    自上世纪80年代初问世以来,C就是一门非常重要的系统级编程语言。到目前为止,仍然在很多注重性能、实时性、偏硬件等领域发挥着重要的作用。C和C一样&#x ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 第七章•Firewalld防火墙实战
    1、防火墙安全基本概述在CentOS7系统中集成了多款防火墙管理工具,默认启用的是firewalld(动态防火墙管理器)防火墙管理工具,Firewalld支持CLI(命令行)以及G ... [详细]
  • 痞子衡嵌入式:对比MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异...
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是MbedTLS算法库纯软件实现与i.MXRT上DCP,CAAM硬件加速器实现性能差异。近 ... [详细]
author-avatar
靠谱的留一手_267
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有