我的服务器上有几个 docker 容器,暴露端口。现在我尝试将对端口的访问限制为能够插入规则而不允许策略的 IP 地址。我以编程方式在 dotnet 应用程序上应用 IP 表规则,该应用程序也在主机上的容器内运行,但在主机上而不是桥接网络上。因此,以下是在应用程序启动时应用的规则
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F INPUT
然后我将删除所有 DOCKER-USER 规则,但保留 RETURN 规则,并应用以下内容
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
然后我添加了所有需要的端口用于 web 接口等,并且在建立了连接的场景中,为所有这些端口制定规则(它们存储在数据库中)
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
iptables -A DOCKER-USER -p tcp -m conntrack --ctorigsrc {my_ip} -m tcp --dport 5000 -j ACCEPT
iptables -A INPUT -p tcp -s {my_ip} --dport 5000 -j ACCEPT
然后我删除 INPUT 和 FORWARD 链。到目前为止一切顺利。
现在我需要将连接限制到单个 IP,并能够动态删除和添加 IP 规则。我尝试像上面一样附加和插入 INPUT 和 DOCKER-USER 规则,但附加或插入规则都不会限制与 IP 的连接,总是有所有客户端或没有客户端能够连接到端口。
有人知道我遗漏了什么吗?
答案1
要动态添加或删除特定 IP 地址的规则,您可以创建自定义链并管理这些链的规则。
创建自定义链以允许来自特定 IP 地址:
iptables -N ALLOWED_IPS
添加规则允许的 IP 地址链接受来自特定 IP 地址的流量:
iptables -A ALLOWED_IPS -s {allowed_ip1} -j ACCEPT
iptables -A ALLOWED_IPS -s {allowed_ip2} -j ACCEPT
将新 IP 添加到允许的 IP 地址:
iptables -I ALLOWED_IPS -s {new_ip} -j ACCEPT
从列表中删除 IP允许的 IP 地址:
iptables -D ALLOWED_IPS -s {ip_to_remove} -j ACCEPT
允许来自允许的 IP 地址链:
iptables -A INPUT -j ALLOWED_IPS