我很感兴趣,你如何在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。
在这种情况下,我主要关心可pipe理性/可读性 – 所以不需要特殊的性能优化[例如,最小化规则查找的平均数量]。
PS: 类似的问题 ,但这不是我正在寻找的答案。
谢谢!
你可以改变
iptables -A FORWARD -s $machineA -j FORWARD_machineA iptables -A FORWARD -d $machineA -j FORWARD_machineA
至
iptables -A FORWARD -g FORWARD_machineA
这样你可以有三个这样的规则
iptables -A FORWARD -g FORWARD_machineA iptables -A FORWARD -g FORWARD_machineB iptables -A FORWARD -g FORWARD_machineC
这三条规则之后就放一条
iptables -A FORWARD -j REJECT
这样,如果只允许在FORWARD_machineA或FORWARD_machineB链中进行一次通信,以便在机器A和机器B之间进行通信,则可能会起作用。
至less它减less了六行-j链到三行-g链。 它也消除了在每个链的末端放置-j REJECT的需要。 事实上,您必须从每个链的末尾删除-j REJECT以使上述方法起作用。
这是一个简单的改进,可以根据你的例子进行概括。 其他改进可能需要更多关于您想要允许的内容以及要阻止的内容。
你可以使用pfSense来代替。 它有很多特点 :
火墙
RRD图
pfSense中的RRD图维护以下的历史信息。
dynamicDNS
通过:
最重要的是,你可以用商品硬件自己构build它,它是开源的 。