Answers:
据我所知,如果您要让iptables完全完全删除该规则,则将无法执行。目的是什么?如果您需要某种自动临时禁止,则标准解决方案是fail2ban。
或者,您可以使用cron作业来删除要添加的规则,或者,如果要以交互方式执行,最好使用一个at
作业:
iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm
还可以看一下recent
iptables 的模块。--seconds
根据您的实际需求,此选项可能会有所帮助。man iptables
了解更多信息。
/bin/sh
默认情况下是这样。但这在这种情况下可能不会成为问题。
在规则中加上时间戳(可能是从纪元开始的秒数)。定期扫描过期的规则。
请注意,最新的linux内核支持将IP地址动态加载到由iptable规则而非直接iptables规则查询的高速缓存中。
例:
iptables -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'
当然iptables -D INPUT $1
,您可以代替打印命令。
iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'
规则如下:iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
iptables提供了一种在满足用户定义条件的情况下将IP地址自动添加到列表的方法。我使用以下内容来帮助避免对我的ssh端口进行自动黑客攻击:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP
通过将来自同一IP地址的连接尝试限制为每60秒一次,这有助于限制自动尝试访问服务器。
如果要在一个时间范围内允许设置尝试次数,例如5分钟内进行4次尝试,并且在失败时将其列入较长时间(例如24小时)的黑名单中,则可以执行以下操作:
iptables -X black
iptables -N black
iptables -A black -m recent --set --name blacklist -j DROP
iptables -X ssh
iptables -N ssh
iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP
iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black
iptables -I ssh 3 -m recent --set --name timer -j ACCEPT
iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh
在上面,我们创建了2个链;“ ssh”和“ black”,以及2个列表;“计时器”和“黑名单”。
简短地; 上面显示的最后一个链是ssh链的“门口”。
“ --reap”选项告诉内核搜索列表并清除任何早于设置时间限制的项目;列表“计时器”为5分钟,列表“黑名单”为24小时。
注意:多余的空格用于提高可读性,并且在Shell脚本中是可选的。
您可以使用fail2ban来禁止IP地址并配置禁止地址的时间长度。
正如有人已经说过的:您应该使用ipset来实现此功能。
ipset可以添加具有超时值的IP地址。超时结束后,记录将自动从ipset中删除。
timeout
All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example:
ipset create test hash:ip timeout 300
ipset add test 192.168.0.1 timeout 60
ipset -exist add test 192.168.0.1 timeout 600
http://ipset.netfilter.org/ipset.man.html
这是控制此行为的首选方法。
根据要完成的确切操作,可以使用netfilter 最近模块或时间模块来完成此操作。
两者都记录在iptables手册页中。