LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1195|回复: 8

有人使用过iptables来防pingofdeath攻击吗???

[复制链接]
发表于 2006-6-2 14:48:05 | 显示全部楼层 |阅读模式
使用以下脚本来做防pingofdeath攻击:
iptables -A FORWARD -i $WANIF -p icmp --icmp-type echo-request -j DOS
iptables -A INPUT -i $WANIF -p icmp --icmp-type echo-request -j DOS
iptables -A DOS -p icmp --icmp-type echo-request -m limit --limit 150/s --limit-burst 300 -j RETURN

iptables -A DOS -m limit --limit 150/s -j LOG --log-level 4 --log-prefix "[DOS]"

但不知道怎么回事,当我测试的时候我的log中始终没有有关pingofdeath的dos信息
发表于 2006-6-3 17:36:54 | 显示全部楼层
按照你上面的语句进行设置,是不会纪录到log的
因为iptables -A DOS -p icmp --icmp-type echo-request -m limit --limit 150/s --limit-burst 300 -j RETURN就已经把150/s一下的包给RETURN了,不会--log了
也就是说,不会匹配到DOS链的第二条(iptables -A DOS -m limit --limit 150/s -j LOG --log-level 4 --log-prefix "[DOS]")。
回复 支持 反对

使用道具 举报

发表于 2006-6-4 07:52:35 | 显示全部楼层
你试试将后两条换个位置
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-4 16:05:13 | 显示全部楼层
TO:orphen
说的有道理,那请问我在匹配ping of death攻击的时候应该怎么写呢?我试过将RETURN改为DROP什么的,可还是不行。我也试过将出LOG的链放在我的script里的前面,可依然没有用。
TO:springwind426
换位置好象没有用啊。
在此,我附上我写的dos的所有script,希望有高手可以给我看看。
#!/bin/sh

SYSLOG "DOS enabled"

# ------ [ Create logging chains ] --------------------------- #


SYSLOG "Create DOS attack chain"
$IPTABLES -N DOS 2> /dev/null


SYSLOG "UDP-flood protection"
$IPTABLES -A FORWARD_UDP -i $WANIF -p udp -j DOS
$IPTABLES -A INPUT_UDP  -i $WANIF -p udp -j DOS
$IPTABLES -I DOS -p udp -m limit --limit 150/s --limit-burst 300 -j RETURN

SYSLOG "Syn-flood protection"
$IPTABLES -A FORWARD_TCP -i $WANIF -p tcp --syn  -m state --state ! ESTABLISHED,RELATED -j DOS
$IPTABLES -A INPUT_TCP -i $WANIF -p tcp --syn -m state --state ! ESTABLISHED,RELATED -j DOS
$IPTABLES -I DOS -p tcp --syn -m limit --limit 150/s --limit-burst 300 -j RETURN

SYSLOG "ing of death"
#Drop icmp packet breaks the rate of 1/s
$IPTABLES -A PORT_FORWARD -i $WANIF -p icmp --icmp-type echo-request -j DOS
$IPTABLES -A INPUT -i $WANIF -p icmp --icmp-type echo-request -j DOS
$IPTABLES -A DOS -p icmp --icmp-type echo-request -m limit --limit 150/s --limit-burst 300 -j RETURN


# set default policy
$IPTABLES -A DOS  -m limit --limit 150/s -j LOG --log-level 4 --log-prefix "[DOS]"
$IPTABLES -A SCAN -j DROP
$IPTABLES -A DOS -j DROP
回复 支持 反对

使用道具 举报

发表于 2006-6-4 19:08:05 | 显示全部楼层
记住-m limit --limit 150/s --limit-burst 300是匹配小于等于150/s,突发300的包数量
按照你的PoD要求,我根据自己对于iptables的理解,设计如下,注意下面的代码没有经过试验

#iptables -A INPUT -p icmp --icmp-type echo-request -m limit ! --limit 150/s --limit-burst 300 -j LOG --log-level 4 --log-prefix "[DOS]"

这样的功能是将超出150/s突发300的icmp:echo-request包进行LOG操作

将后面的-j LOG --log-level 4 --log-prefix "[DOS]"替换为-j DROP既是进行丢弃保护

因为iptables是逐条匹配的,所以我还没有想出来如何进行LOG和DROP操作的同时进行。
回复 支持 反对

使用道具 举报

发表于 2006-6-5 08:15:00 | 显示全部楼层
你试试:
iptables -I DOS 1 -j LOG --log-level 4 --log-prefix "[DOS]"
将记录的规则放到DOS链的第一条,看看能否记录到信息。
如果有的话,你在试试用limit参数慢慢加大,再看看记录的信息,直到调整到一个比较合理的数值。

然后再将这条规则放置到DOS链的最后。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-5 11:38:16 | 显示全部楼层
TOrphen
我试了你说的,将我的ping of death script改为以下:
SYSLOG "ing of death"
#Drop icmp packet breaks the rate of 1/s
$IPTABLES -A PORT_FORWARD -i $WANIF -p icmp --icmp-type echo-request -m limit ! --limit 150/s --limit-burst 300 -j LOG --log-level 4 --log-prefix "[DOS]"
$IPTABLES -A INPUT -i $WANIF -p icmp --icmp-type echo-request -m limit ! --limit 150/s --limit-burst 300 -j LOG --log-level 4 --log-prefix "[DOS]"

当这样的设置依然没有LOG,我用于测试的工具每秒可以发送800多个packet,所以工具上应该没有问题.同时我用iptables -L -v的命令去看,结果发现在我的INPUT链中匹配这个规则竟然一个packet都没有.很显然不知道怎么好象根本没有匹配的packet被送入INPUT.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-5 13:23:32 | 显示全部楼层
同时我试了syn-flood和udp-flood这两个就工作正常了.就是将syn-flood和udp-flood改为:
SYSLOG "UDP-flood protection"
$IPTABLES -A FORWARD_UDP -i $WANIF -p udp -j DOS
$IPTABLES -A INPUT_UDP -i $WANIF -p udp -j DOS
$IPTABLES -I DOS -p udp -m limit ! --limit 150/s --limit-burst 300 -j LOG --log-level 4 --log-prefix "[DOS]"

SYSLOG "Syn-flood protection"
$IPTABLES -A FORWARD_TCP -i $WANIF -p tcp --syn -m state --state ! ESTABLISHED,RELATED -j DOS
$IPTABLES -A INPUT_TCP -i $WANIF -p tcp --syn -m state --state ! ESTABLISHED,RELATED -j DOS
$IPTABLES -I DOS -p tcp --syn -m limit  ! --limit 150/s --limit-burst 300 -j LOG --log-level 4 --log-prefix "[DOS]"

但不知道怎么ping of death就是没有log.是不是--icmp-type echo-request有什么问题啊 .我看了ping of death的packet是很多个icmp的分片包.
回复 支持 反对

使用道具 举报

发表于 2006-6-5 18:29:42 | 显示全部楼层
Post by yetiancun
TOrphen
我试了你说的,将我的ping of death script改为以下:
SYSLOG "ing of death"
#Drop icmp packet breaks the rate of 1/s
$IPTABLES -A PORT_FORWARD -i $WANIF -p icmp --icmp-type echo-request -m limit ! --limit 150/s --limit-burst 300 -j LOG --log-level 4 --log-prefix "[DOS]"
$IPTABLES -A INPUT -i $WANIF -p icmp --icmp-type echo-request -m limit ! --limit 150/s --limit-burst 300 -j LOG --log-level 4 --log-prefix "[DOS]"

当这样的设置依然没有LOG,我用于测试的工具每秒可以发送800多个packet,所以工具上应该没有问题.同时我用iptables -L -v的命令去看,结果发现在我的INPUT链中匹配这个规则竟然一个packet都没有.很显然不知道怎么好象根本没有匹配的packet被送入INPUT.

把--icmp-type echo-request去掉,测试工具发送的有可能不是echo-request 包
回复 支持 反对

使用道具 举报

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

本版积分规则

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