在docker实例中放置一些入口规则以帮助抵御攻击仍然有意义,但是您将必须限制从docker映像所连接的任何上游路由器进行的出站(Internet)访问。这样做的原因是,如果您尝试使用实例内部的防火墙规则阻止出站访问,则如果实例受到攻击,攻击者可能会删除这些规则。通过阻止通过实例路由器的出口,即使在受到威胁的情况下,您也可以阻止出站访问-攻击者也必须对路由器进行破坏。
好的,因此,在收到一些解释说明该过滤是针对容器的主机的注释之后,要完成的目标要清楚得多。在这种情况下,您可以在主机上添加一些与此类似的规则:
iptables -A FORWARD -s lo.cal.sub.net -d con.tai.ner.ip -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -d lo.cal.sub.net -j ACCEPT
iptables -A FORWARD -s ! lo.cal.sub.net -d con.tai.ner.ip -p tcp --dport sftp -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -d ! lo.cal.sub.net -p tcp --sport sftp -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -m state --state related,established -j ACCEPT
iptables -A FORWARD -s con.tai.ner.ip -j DROP
前两个规则用于主机和容器之间的访问。第三条规则(大致)说,不是主机子网向SFTP传输的任何东西对我们来说都是可以的。第四个是出站规则,基本上是第三个规则的双胞胎;第五个规则是一个包罗万象的规则(如果使用了其他相关的端口),尽管不需要它,但是您可以将其删除;最后一条规则是防止访问主机子网以外的任何内容的魔力。由于访问是在前几个规则中给出的,因此除非前面的规则都不适用,否则它永远不会触发,在这种情况下,我们说的是“我们不在乎您想要什么,您没有匹配您所批准的任何东西,因此您无法从这里到达那里”。第3和第4条规则将满足来自外部的入站流量。