Firewalld阻止/丢弃并允许IP


2

我们有一个linux root服务器,它主要是一个docker服务器。托管容器和CI运行器。

为了保护这个服务器,现在的基本思路是

  • 阻止所有流量
  • 除了一个(或多个)允许的IP。

我昨天为ip4添加了丰富的规则

  • 阻塞0.0.0.0/0
  • 明确允许我们的静态IP

这导致我被阻止访问。Docker容器仍然可以访问。容器生成一个新的接口,据我所知,这些接口应该只负责从主机到容器的通信。我希望至少,firewalld在流量从例如eth0转发到dockerinterface1234之前过滤流量。

到目前为止我的研究表明。省略区域中的接口信息使该区域负责所有流量。但是,我自己的测试表明我配置错了或者我的研究错了。

Answers:


1

采用我的firewalld基于IP的区域教程

首先将默认区域更改为删除:

firewallctl config set default-zone drop

丢弃区域会丢弃所有传入连接。您可能需要考虑block执行相同操作的区域,除了它返回阻塞连接而不是静默删除它。然后创建一个新区域并将其绑定到IP地址的子网(或单个地址):

 firewallctl new --permanent zone --name "myzone"
 firewallctl zone "myzone" --permanent add source "198.51.100.0/24"
 firewallctl zone "myzone" --permanent add source "2001:0DB8::/32"

(请记住要准备好IPv6!)检查您的区域是否正常:

 firewallctl info zones --active

此时,您开始添加端口或服务myzone。这些服务只能从您添加的区域/ IP子网访问,而不能在默认的drop / public区域访问。


0

Wikipedia在https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg上有一个很好的数据包流程示意图

Docker将其端口映射规则置于“mangle prerouting”阶段。此阶段在“过滤器输入”之前运行,其中大多数防火墙尝试放置其输入过滤规则,但是如果查看原理图,则可以看到数据包将在转发时避开该阶段(“路由决策”)。这可能是你发生的事情。

您可以使用“原始”表完全抢占它们,而不是与Docker的规则作斗争。将所有流量从“eth0”丢弃到端口12345

iptables -t raw -I PREROUTING -i eth0 -p tcp --dport 12345 -j LOG

请注意,'raw'表也会影响内部(Docker)流量,因此如果您要根据源IP地址丢弃,请确保您还将localhost和docker的内部IP范围列入白名单

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.