首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iptables规则解释

iptables规则解释
EN

Unix & Linux用户
提问于 2016-02-28 18:01:04
回答 1查看 1.4K关注 0票数 2

我希望在我们的was服务器上更新iptable,这将在一定程度上防止DoS攻击。

1)与网络流量有关,下面是我发现的iptable规则。

代码语言:javascript
复制
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 -j DROP

iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m limit --limit 50/minute --limit-burst 200 -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 50/second --limit-burst 50 -j ACCEPT

我能够理解前2条规则。有人能澄清过去的2条规则吗?考虑到最后两个规则,第一个规则是否意味着每分钟只接受50个新连接?极限爆破是做什么的?我试着读到它。但不确定我是否理解得很清楚。这是否意味着一旦有200个新的连接立即被接受,那么它的限制是每分钟只有50个新的连接。任何新的连接请求都将被删除。什么时候又会允许200次新的请求再次出现?

现在,最后一个规则意味着什么?每秒只有50个用户可以连接到我的per服务器?为什么这里的爆裂数又是一样的50?有了这两条规则,是否有可能有一些合法的流量会被丢弃?

2)我遇到了下面的一组规则,这些规则在很多地方都是用来阻止端口扫描的。看上去对吗?有人能解释一下这是怎么回事吗?我不太清楚逻辑,以及为什么dport在最近的4条规则中是139。

代码语言:javascript
复制
# Attempt to block portscans
# Anyone who tried to portscan us is locked out for an entire day.
iptables -A INPUT   -m recent --name portscan --rcheck --seconds 86400 -j DROP
iptables -A FORWARD -m recent --name portscan --rcheck --seconds 86400 -j DROP

# Once the day has passed, remove them from the portscan list
iptables -A INPUT   -m recent --name portscan --remove
iptables -A FORWARD -m recent --name portscan --remove

# These rules add scanners to the portscan list, and log the attempt.
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A INPUT   -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP

iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j LOG --log-prefix "Portscan:"
iptables -A FORWARD -p tcp -m tcp --dport 139 -m recent --name portscan --set -j DROP
EN

回答 1

Unix & Linux用户

发布于 2016-02-28 19:56:57

limit扩展实现了令牌桶机制。通常,当规则匹配时,netfilter跳转到提供的目标,在本例中为ACCEPT。当插入limit扩展时,netfilter必须在允许跳转之前从该规则的“桶”中移除一个“令牌”。如果桶中没有任何标记,则这个扩展可以防止netfilter跳转,即使规则是匹配的。

代码语言:javascript
复制
--limit 50/minute #tells netfilter to add 50 tokens per minute to the bucket
--limit-burst 200 #tells netfilter to use a bucket which holds up to 200 tokens

如果每分钟(或更多)有50个连接请求,您的服务器将允许每分钟有50个新连接。如果现在只有不到50个请求,桶就会被填满(实际上它已经满了)。这意味着,如果一分钟内只有几个请求,服务器将在下一分钟内接受50多个新请求。为了防止这种情况失控,对桶能容纳多少令牌有一个上限。在这个案子里是200。当桶满时,您的服务器将接受下一个传入的200个连接,即使它们同时访问了您的服务器。由于这是超过50,我们称之为突发,在那里接受连接的数量激增到超过我们想要的50在平均。

第二条规则意味着,只要属于流网络过滤器,此机器将第二次接受50个IP数据包,而无需进一步研究。要衡量这个规则的效果,我们需要看到整个链(以及它引用的每一个链以及它所引用的每个链)。然而,我可以告诉你们一些在这里排队的事情:

  1. Netfilter将TCP连接启动器的ACK计数为RELATED数据包,以完成握手。成功地建立了每分钟50次的连接,完全满足了你遇到困难的第二条规则。
  2. 大多数常见的TCP实现在放弃之前进行了四次连接尝试。在成功建立了50个连接之后,在最坏的情况下,您会收到200个连接请求。
  3. 无论端点多久一次提出特定的连接请求,只有一个端点在合理的时间内成功才能建立连接。大多数实现将60秒作为默认的合理时间。

如果最后一个规则是50/minute,那么这四个规则可能是一个非常酷的DoS保护框架的一部分。由于它缺少--dport 80过滤器,而且是50/second,所以我只能猜测:

( a)你完全断章取义,这与前三条没有直接关系。

( b)这是减缓交通的一般上限。

c)这是个错误,应该是50/minute

( d)在保护服务器免受DoS攻击和在DoS攻击期间和之后保持服务可访问性之间是一种权衡。

要理解第二个片段,首先必须深入到您的头脑中,recent扩展使用并维护有关源IP地址的知识。

recent扩展在列表中管理其知识。默认列表名为DEFAULT,如果没有提供其他列表,则使用它。其中一个使用--name提供另一个列表。

因此,前两条规则意味着“如果源IP在最后86400秒内被放到列表portscan中,则丢弃该数据包”。

第二条规则意味着“从列表portscan中删除此IP地址”。请不要只在上一条规则不匹配时才对此规则进行评估。此规则的存在是为了使列表portscan保持简短。更长的列表需要更长的搜索时间。

最后四个规则将源it放在portscan列表中,记录它并DROP数据包。--dport 139之所以存在,是因为只有在这种情况下才需要这种行为。我非常确信,在上下文中,这些规则更有意义,因为这不是防止端口扫描的完整规则集。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/266343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档