期货交易自动化论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 16|回复: 0

[台式机]用IPTables实现字符串模式匹配(转载) - 比特币今日价格

[复制链接] |主动推送

285万

主题

285万

帖子

855万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
8553710
发表于 2022-9-11 07:49:12 | 显示全部楼层 |阅读模式
自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,标志等,而完全忽略了高层协议的有效载荷。由于上述原因,包过滤防火墙通常比应用代理防火墙的速度快。应用代理提供了更加有力度的安全控制而包过滤可以用于更高的带宽线路满足更高的吞吐量。
基于以上的情况,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的源码树内)或者从别处下载的核心源程序(比如 或者它的一个镜像)。
在本文中,将采用最新的2.4.16核心作为例子。测试也能运行在使用2.4.7核心的RedHat 7.2上,但是2.4.7的核心并不推荐使用,因为2.4.7的核心有一些小的安全问题,比如SYN-cookie保护和iptables的保存/恢复功能。
接下来需要从)运行:
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 WINFIELD@FREEGATES.BE
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
oriGinal=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
oriGinal=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 -p tcp -s 0.0.0.0/0 -m string --string "cmd.exe" -m limit
--limit 1/hour
Bill Steams(Mason firewall building script的作者)提供了一个极好的建议----转换网络IDS Snort的规则成为iptables字符串模式匹配的规则。Snort的攻击信号数据库中包含了大约1200种信号and appears to be the biggest publicly available attack database suitable for instant deployment。在iptables上使用现成的信号是合理的一种方式。的规则的例子:
Snort规则:
1、alert udp $EXTERNAL_NET any - $HOME_NET 518
(msg:"EXPLOIT ntalkd x86 linux overflow";
content:"|0103 0000 000 0 0001 0002 02e8|";
reference:bugtraq,210; classtype:attempted-admin; sid:313; rev:2;)
2、alert tcp $EXTERNAL_NET any - $HOME_NET 53
(msg:"EXPLOIT named tsig infoleak";
content: "|AB CD 09 80 00 00 00 01 00 00 00 00 00 00 01 00 01 20 20 20 20 02 61|";
reference:cve,CAN-2000-0010; reference:bugtraq,2302; reference:arachnids,482;
classtype:attempted-admin; sid:303; rev:3;)
3、alert udp $EXTERNAL_NET any - $HOME_NET 635
(msg:"EXPLOIT x86 linux mountd overflow";
content:"|5eb0 0289 06fe c889 4604 b006 8946|";
reference:cve,CVE-1999-0002; classtype:attempted-admin; sid:315; rev:1;)
转化的iptables规则:
1、iptables -A SnortRules -p udp -s $EXTERNAL_NET -d $HOME_NET --dport 518 -m
string --string " è" -j LOG --log-prefix "SID313 " # "EXPLOIT ntalkd x86
linux overflow" bugtraq,210 classtype:
attempted-admin sid:313
2、iptables -A SnortRules -p tcp -s $EXTERNAL_NET -d $HOME_NET --dport 53 -m
string --string "?í .a" -j LOG --log-prefix "
SID303 " # "EXPLOIT named tsig infoleak" cve,CAN-2000-0010 bugtraq,2302
arachnids,482 classtype:attempted-admin sid:303
3、iptables -A SnortRules -p udp -s $EXTERNAL_NET -d $HOME_NET --dport 635 -m
string --string "^° ‰ tè‰F ° ‰F" -j LOG --log-prefix " cve-CVE-1999-0002
" # "EXPLOIT x86 linux mountd overflow" classtype:attempted-admin sid:315
显而易见,上面的转化使用了针对漏洞所使用的缓冲区溢出字符串作为捕获攻击的方式,有些规则不便于转化主要是因为在桢的控制方面snort比iptables要强大一点。
总之,iptables的字符串模式匹配功能能够被用来保护那些开放了易受攻击的而一般的包过滤又无法保护的网络服务(如的字符串模式匹配功能还能够帮助实现强制安全策略,即通过关键字
转自杜松之家:/
matic地址
请帮助我,我破产了,需要钱来投资比特币和其他硬币,但愿您在帮助需要帮助的兄弟时仍然幸福。
我把赚的钱大部分收益,都买了房产了,哈哈,别人说经济不景气了,资产要暴跌,但是我感觉正是抄底的机会

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|期货交易自动化论坛

GMT+8, 2024-11-29 19:56 , Processed in 0.114203 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表