使iptables更易于维护


13

除了被列入白名单的几个站点之外,我的网络已完全锁定。这都是通过iptables完成的,看起来像这样:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 1.2.3.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 11.12.13.0/24 -j ACCEPT
iptables -A zone_lan_forward -p tcp -d 101.102.103.0/24 -j ACCEPT
iptables -A zone_lan_forward -p udp -d 101.102.103.0/24 -j ACCEPT
...

显然,这些地址是假设的,但是您知道了。我的防火墙越来越庞大。如果我能做到这一点,维护起来会容易得多:

# Allow traffic to google.com
iptables -A zone_lan_forward -p tcp -d google.com -j ACCEPT
iptables -A zone_lan_forward -p udp -d google.com -j ACCEPT

我相信这是可能的,因为这样man iptables说:

地址可以是网络名称,主机名(请注意,指定要通过远程查询解析的任何名称(例如DNS)是个坏主意),网络IP地址(带有/ mask)或纯IP地址。

但是我担心的是“指定要使用... DNS解析的任何名称”这一部分。为什么这是个坏主意?它会减慢一切速度吗?

如果我真的不应该在iptables规则中使用主机名,那么应该怎么做来简化防火墙?


您将在security.stackexchange.com上得到更好的答案
Jim B

您可能对这个问题属于该网站是正确的,但是如果您对接受的答案有疑问,请解释原因。
Big McLargeHuge 2013年

如果您想了解如何锁定网络以及如何进行锁定,请询问安全性,如果您要使用iptables(而不是使用IPtables),那么这里就在这里。
Jim B

Answers:


27
  • 添加规则时解析DNS名称,而不是检查数据包时解析。这违反了大多数人的期望。
    • 规则不会更新以反映更改后的DNS结果。添加时已解决,仅此而已。您将需要定期重新加载规则,否则某些站点可能会中断。
  • 有一个安全问题,因为您基本上是将防火墙规则的控制权委派给外部实体。
    • 如果您的父DNS服务器遭到破坏并返回错误数据该怎么办。

如果您的目的是阻止HTTP访问,那么通常最好设置一个旨在在该级别进行过滤的软件(例如squid + squidquard)。


1)我知道这可能是一个问题-google.com今天可以解决至1.2.3.4,但明天该地址无效。只需重启防火墙即可解决此问题吗?2)如果DNS服务器是众所周知的,例如Google的DNS或OpenDNS,这仍然是一个安全问题吗?
Big McLargeHuge

我将此标记为答案,因为它解释了为什么我不应该在iptables规则中使用主机名,并为我提供了简化防火墙的操作步骤。
2013年

我想增加对Squid的支持。我在办公室实现了Squid,一旦设置好,就可以很容易地将主机列入白名单(尽管我将其列入了黑名单)。看来您手头上有艰巨的任务。例如,我什至不知道从哪里开始将Google列入白名单。www.google.com单独解析为5个IP,对于ssl.gstatic.com而言,这什么也没有说,对于身份验证,G +等涉及的所有其他主机,可能每个解析为多个IP。
s.co.tt

纪念性的表达方式是不错的选择。但是我只是以Google为例。我的防火墙的基本轮廓如下:如果数据包的目的地被列入白名单,请接受它。否则通过代理服务器发送。
Big McLargeHuge

还有使用DNS进行负载平衡的系统的问题。如果您连续两次查询这样的域,则可能不会得到相同的结果,因此,一次查找甚至无法为您提供该域可能解析为的IP地址的详尽列表。
cdhowie

9

如果在防火墙中使用主机名,则防火墙现在依赖于DNS。这使防火墙面临许多问题:

  • 高容量下的DNS查找可能会导致延迟。
  • DNS更改不会立即传播。因此,您的防火墙可能正在使用缓存的IP。
  • DNS可以被欺骗,劫持,被黑。
  • DNS可能会失败-这意味着您的防火墙会失败。
  • 您的防火墙规则现在由第三方控制。

如果使用主机名而不控制DNS,则其他人将有效控制IPtables规则。错误,错误或安全问题最终将成为您的问题。

我唯一看到主机名使用得当的地方是内部操作。我曾在通过DHCP分配IP和主机名的办公室工作。防火墙使用主机名在不同组之间设置屏障。由于所有这些都是内部控制的,因此效果很好。


2
这是一个很好的答案,但是缺少帮助我简化防火墙的部分。
Big McLargeHuge

3

您可以在iptables(例如Shorewall)周围使用包装器,以使规则更易于维护。


这是一个好主意,但您没有告诉我为什么我不应该在iptables规则中使用主机名。
Big McLargeHuge 2013年

我对Shorewall的了解不多,但给人的印象是davidkennedy85仍需要维护他希望在Shorewall配置中允许的服务的每个IP地址的列表。这可能会使netfilter [&etc]的管理稍微容易一些,但是并不能解决他的核心问题,后者是大量IP。
s.co.tt

2

正如其他人已经说过的那样,您不应在iptables规则中使用DNS可解析的名称。它们是不准确的,受第三方控制,通常是不道德的行为(tm)。我还要补充一点,在iptables服务启动时,您的DNS可能会失败或无法访问。在这种情况下,根本不会添加该规则,并且可能会发生全新的问题(例如,重新启动后失去ssh访问权限)。

您可以做的是:

  1. 使用自定义链在逻辑上分隔规则
  2. 使用ipset来将地址分组并与规则分开
  3. 在规则中添加注释

也没有人对没有由DNS解析的主机名说不好(即在中指定)hosts。如果确实需要,可以使用它们。


是的,ipsets是答案。使用从crontab运行的脚本来更新ipset。
mivk

1

我个人在/ etc / hosts中手动将主机名分配给ip ,然后在iptables中使用它。

这样你

  1. 不要将防火墙规则卸载到外部实体
  2. 具有易于维护的iptables
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.