我很感兴趣你如何在充当防火墙的 Linux 路由器上编写复杂的数据包过滤规则集。一种具有默认丢弃策略。
我通常采用这种方法[只是一个人为的例子]:
iptables -F ; iptables -X; iptables -P FORWARD DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -N FORWARD_machineA
iptables -A FORWARD_machineA -d $machineA -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD_machineA -d $machineA -s $machineB -p tcp --dport 3306 -j ACCEPT
iptables -A FORWARD_machineA -d $machineA -j DROP
iptables -A FORWARD_machineA -s $machineA -d $machineC -p tcp --dport 2 -j ACCEPT
iptables -A FORWARD_machineA -s $machineA -j REJECT
iptables -N FORWARD_machineB
iptables -A FORWARD_machineB -d $machineB -s $machineA -p tcp --dport 3306 -j ACCEPT
iptables -A FORWARD_machineB -d $machineB -j DROP
iptables -A FORWARD_machineB -s $machineB -d $machineC -p tcp --dport 2 -j ACCEPT
iptables -A FORWARD_machineB -s $machineB -j REJECT
iptables -N FORWARD_machineC
iptables -A FORWARD_machineC -d $machineC -s $machineA -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD_machineC -d $machineC -s $machineB -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD_machineC -d $machineC -j DROP
iptables -A FORWARD_machineC -s $machineC -j REJECT
iptables -A FORWARD -s $machineA -j FORWARD_machineA
iptables -A FORWARD -d $machineA -j FORWARD_machineA
iptables -A FORWARD -s $machineB -j FORWARD_machineB
iptables -A FORWARD -d $machineB -j FORWARD_machineB
iptables -A FORWARD -s $machineC -j FORWARD_machineC
iptables -A FORWARD -d $machineC -j FORWARD_machineC
这工作正常,但远非完美:例如,如果我在需要通信的不同子网中添加两台服务器 - 需要在 machineA 和 machineB 的链中添加规则。
在这种情况下,我最感兴趣的是可管理性/可读性 - 所以不需要特殊的性能优化[例如最小化规则查找的平均数量]。
ps:类似的问题,但这不是我正在寻找的答案。
谢谢!
你可以改变
至
这样你就可以有这样的三个规则
在这三个规则之后,只需放一个
这样,如果您只允许在链 FORWARD_machineA 或链 FORWARD_machineB 中进行一次通信以用于机器 A 和机器 B 之间的通信,它可能会起作用。
至少它将六行 -j 链减少为三行 -g 链。它还消除了在每个链的末尾放置 -j REJECT 的需要。事实上,您必须从每个链的末尾删除 -j REJECT 才能使上述方法有效。
这是可以根据您的示例进行概括的简单改进。其他改进可能需要更多关于您想要允许的内容和想要阻止的内容的详细信息。
您可以改用pfSense。它有很多特点:
防火墙
RRD 图
pfSense 中的 RRD 图维护以下方面的历史信息。
动态 DNS
通过:
它有一个不错的、易于使用的基于 Web 的配置,只需查看屏幕截图。
最重要的是,您可以使用商品硬件自己构建它,而且它是开源的。