Board logo

标题: iptables 的防火墙正常运行时间和安全性(3) [打印本页]

作者: look_w    时间: 2018-4-23 15:43     标题: iptables 的防火墙正常运行时间和安全性(3)

保存和恢复规则在上一部分中,我们将规则保存至一个文本文件。然而,这并不能有效地告知服务器,它需要加载规则。此外,当服务器重启时,会丢失所有已执行的配置。
如果您正在使用命令行添加规则,那么您应该已经非常熟悉将那些更改保存至文本文件的操作。请参见  了解保存防火墙规则。
清单 10. 保存防火墙规则
1
iptables-save > /etc/iptables.rules




根据正在使用的操作系统,有几种方法可在启动时载入那些规则。一种简单方法是导航至一个公共接口,并告知它在联机前先加载那些规则。请参见 。
清单 11. 公共网络接口加载规则
1
2
3
4
5
6
7
<![CDATA[
auto eth0
iface eth0 inet static
  address 99.99.99.0
  netmask 255.255.255.0
  pre-up iptables-restore < /etc/iptables.rules
]]>




我们拥有 eth0 接口,并声明在接口启动前载入规则。正如您所想的,您可以使用这些命令手动更新文件中的防火墙规则。
灾难恢复前不久,我负责管理一个防火墙设备。虽然我定期进行规则和配置备份工作,但是却没意识到那些备份属于专门的格式,只能由所拥有的设备型号读取。当然,如果您所拥有的两个设备为同一品牌、型号和固件版本,那么这就不是问题,但是,在小型企业中,通常预算并不允许这样做。
有一天,设备无法运行了,我不得不实施同样可靠的(或更佳的)快速工具来替换它。我从中了解到,拥有可读配置和快速解决问题的功能非常重要。
很幸运的,我找到了一个状态良好的旧服务器,该服务器具备若干个网络接口,能够代替坏掉的设备。
到目前为止,我已经历了许多这样的场景,获取一个可轻松应用于任何服务器的规则副本以防止故障发生。现在让我们启用防火墙作为小型家用或商业网络的主要网关。
Iptables 充当主要网关如果您是在个人计算机上运行 iptables,那么到目前为止我们所谈及的一切对您非常有益,但是,如果整个办公室均需要共享 Internet 连接,那么我们所谈及的这一些就对您毫无意义。通过一些配置设置,我们就能够正确完成创建。
网关 服务器需要至少两个网络接口来作为合适的网关。一个接口 "告知" 公共连接,而另一个则 "告知" 内部受保护的连接。

我们将假设,此服务器拥有两个物理网络接口:eth0(公共的)和 eth1(专用的)。我需要对他们进行网络地址转换 (NAT),以便网络流量能从一个接口无缝地流动到另一个接口。专用网络的子网为 192.168.0.0/255.255.0.0,所以让我们看看带有转发功能的 NAT 规则,如  所示。
清单 12. NAT 和转发规则
1
2
3
4
iptables -A FORWARD -s 192.168.0.0/255.255.0.0 -i eth0 -o eth1 -m\
conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE




显示如何修改 proc 中的一些设置以启用服务器的转发功能。
清单 13. 启用服务器的转发功能
1
sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"




注意,proc 更改不稳定,在重启后会全部丢失。有几种方法可确保重启后这些修改依然存在。在 Debian/Ubuntu 发行版中,将这些行添加至 /etc/rc.local 并执行。
最后,如  所示,还需要一个设置更改,修改运行时 (sysctl) 的内核参数。这些配置通常已位于 sysctl.conf 中,但都被注释掉。取消注释(或者,如果它们不包含在您的发行版中,请添加它们)。
清单 14. Sysctl/内核转发
1
2
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.forwarding=1




DNS 阈值将 Linux 服务器作为网关运行会导致 DNS 出现某种问题。内核旨在保存 DNS 映射表,但是它提供的条目为最少,并不适合于过大的通信量。当到达此水平值时,就不会向询问的主机返回任何 DNS 查询。如果只有若干个客户端,那么很少出现超过这个水平值的情况,但是如果有超过 30 个客户端共用防火墙,就会出问题。
可能需要对环境进行一些调整,但是  中的值会在看见 DNS 问题之前提供空间。
清单 15. 增加 DNS 阀值
1
2
3
echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo 2048 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh3




注意观察与  相似的消息,这些消息会在需要增加刚刚设置的数值时发出警告。
清单 16. 系统日志记录 DNS 溢出的警告
1
2
3
4
5
6
Nov  22 11:36:16 firewall kernel: [92374.325689] Neighbour table overflow.
Nov  22 11:36:20 firewall kernel: [92379.089870] printk: 37 messages suppressed.
Nov  22 11:36:20 firewall kernel: [92379.089876] Neighbour table overflow.
Nov  22 11:36:26 firewall kernel: [92384.333161] printk: 51 messages suppressed.
Nov  22 11:36:26 firewall kernel: [92384.333166] Neighbour table overflow.
Nov  22 11:36:30 firewall kernel: [92389.084373] printk: 200 messages suppressed.




结束语我们已经通过一些简单的步骤使 iptables 正常运行并安全锁定 Linux 服务器。所应用的规则应该提供一个良好功能来判断使用 iptables 作为防火墙的服务器所发生的情况。我建议您试用一下 iptables,特别是在您依赖设备并想要拥有更多的控制和易于复制的高可读性配置的情况下。
虽然我们在此处所使用的规则非常简单,但是 iptables 的灵活性和复杂性已超出了本文所谈论的范围。有许多复杂的规则,您可以组合使用它们来创建一个安全且可控的防火墙环境。
iptables 中一个令人感兴趣的高级功能示例是负载平衡。大多数时间,在浏览高可用性 Web 服务时,您会寻求负载平衡解决方案。使用 iptables,可以通过 randomnth 标志进行设置和配置。
您也可以执行基于时间的规则。在小型办公室环境中,在周一至周五限制某些服务,而在周六和周日让防火墙以另一种方式进行工作,可能非常有用。在这种情况下可能用到的标志有:--timestart--timestopdays
我碰到的一个问题是,在某种类型的故障转移中我无法同一时间拥有两个防火墙。实现此项工作并不容易,但是有多种途径。最简单的解决方法是让路由器来完成此项作业,并负载平衡两个相同的防火墙服务器。如果网络环境是非常重要的资源,比如办公室或小型企业,那么我建议好好考虑此选项。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0