【问题标题】:IPTables Script to block Concurrent Connections用于阻止并发连接的 IPTables 脚本
【发布时间】:2017-11-23 05:41:12
【问题描述】:

我们使用的是 Suse Linux Enterprise Server 12。我们需要阻止每秒访问我们的 Web 服务器超过 50 次的并发 IP 地址,并阻止该 IP 地址 10 分钟。它还应该区分攻击者和真正的流量,并永远阻止攻击者的IP。我们目前已阻止使用 iptables ,以下是规则。

iptables -I INPUT -p tcp --dport 443 -i eth0 -m state --state NEW -m recent --set   
iptables -I INPUT -p tcp --dport 443 -i eth0 -m state --state NEW -m recent --update --seconds 1 --hitcount 50 -j DROP

它只会阻止超过50个连接的IPAddress,但不会将IPAddress列入黑名单。如果我们有一个匹配上面提到的所有场景的脚本,请告诉我们。请帮忙。

【问题讨论】:

  • 如果请求(SYN)在 1 秒内超过 50,您编写的规则将阻止来自同一 IP 地址的新连接。如果是这样,它将阻止 IP 地址 1 秒钟。您可以找到很多关于如何完成任务的示例。请注意,任何像这样的自动 IP 黑名单实施都容易通过欺骗源 IP 来拒绝服务。如果某人的浏览器进入循环,也可能发生无意的阻塞。 fail2ban 是一个很好的工具,旨在解决您的问题。

标签: bash shell scripting sh iptables


【解决方案1】:

我对此进行了测试,效果非常好。如果检测到该行为,IP 将被抑制 10 分钟并记录。您可以通过查看这些文件来验证它的操作。 /proc/net/xt_recent/NICE,/proc/net/xt_recent/NAUGHTY。如果您想永久列入黑名单,您需要构建一个脚本来解析错误 IP 的日志并将它们提交到启动时加载到 iptables 中的文件。这个概念已经很清楚了,所以我不需要包含它。

#flush and clear
iptables -F -t nat
iptables -F 
iptables -X

#this is where naughty kids go
iptables -N GETCAUGHT

#you got added to the naughty list 
iptables -A GETCAUGHT -m recent --name NAUGHTY --set                   #everyone here is bad
iptables -A GETCAUGHT -j LOG --log-prefix "iwasbad: " --log-level 4    #and it goes on your permanent record

#if you are on the NAUGHTY list you get a lump of coal                                
iptables -A INPUT -i eth0 -m recent --name NAUGHTY --rcheck --seconds 600 -j DROP       #check everyone at the door

#though everyone starts out on the NICE list
iptables -A INPUT -i eth0 -p tcp --dport 443 -m conntrack --ctstate NEW -m recent --name NICE --set     #you seem nice

#but if you GETCAUGHT doing this you are naughty 
iptables -A INPUT -i eth0 -p tcp --dport 443 -m conntrack --ctstate NEW -m recent --name NICE --seconds 1 --hitcount 50 --update -j GETCAUGHT    #that wasn't nice

【讨论】:

  • 命令“iptables -F”将刷新你的输入链。那是 UFW 和 Fail2Ban 存储它们的规则的地方——这样会破坏你的防火墙。即使您没有使用 UFW 和 Fail2Ban,大多数等效服务也以相同的方式使用 iptables。您可以在不调用 iptables -F 和 iptables -X 的情况下添加规则。我没有足够的知识来评论“iptables -F -t nat”,但建议进行更多研究和谨慎。
  • 我虽然在这件事上的评论很清楚。事实上,这将刷新所有链中的所有内容,并且以这种方式设计,以便用户可以调整设置并重新运行,直到他们对原型感到满意为止。使用此脚本中的命令需要具备基本的 netfilter 知识和用户空间程序、iptables 和 ufw 等。永远不要在没有理解的情况下简单地复制和粘贴。本文的工作旨在成为使用概念而不是单点菜来回答的示例。请把你需要的东西整合到你的规则中。感谢您的批评。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
相关资源
最近更新 更多