ip6tables 规则仅允许端口 80 和端口 443 流量流向少数特定 IP 地址

ip6tables 规则仅允许端口 80 和端口 443 流量流向少数特定 IP 地址

我正在使用 ubuntu 18.04 并成功设置 nginx 和 uwsgi 来托管多个网站。

我有一个通过 DNS 提供商映射到 IPV6 地址的 AAAA 记录,并且我的 nginx 配置文件在端口 80 和 443 上监听该 IPV6 地址。

这个设置运行良好。

但是,我想将到端口 80 和 443 的 IPV6 流量限制到仅几个特定的​​ IP 地址。

当我使用 ip6tables -S 列出当前的 ip6table 规则时,底部有一行这样的内容。

-A ufw6-user-input -p tcp -m multiport --dports 80,443 -m comment --comment "\'dapp_Nginx%20Full\'" -j ACCEPT

我对 iptables 还很陌生,但从我读过的所有书和教程来看,它听起来像是:

  1. 您需要确保规则的顺序正确。
  2. 您想在进行更改之前将规则保存到文件中,以防出现问题。
  3. 按照您想要的方式制定规则后,您需要使用类似持久标志之类的东西,以便在重新启动时规则能够继续存在。

我的问题是,我需要制定哪些规则才能实现上述目标,按照什么顺序,并且这是否仅适用于 80/443 端口上的 ipv6 流量?

foo@example:~# sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
80,443/tcp (Nginx Full)    ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)
80,443/tcp (Nginx Full (v6)) ALLOW IN    Anywhere (v6)

答案1

您已在使用ufw因此制定规则ufw

对于 IPv4 允许接入 80,443,请尝试:

ufw allow proto tcp from 0.0.0.0/0 to port 80,443

对于 IPv6,我们需要使用更多规则:

ufw allow proto tcp from IPV6ADDRESS/128 to port 80,443
# Do the above more than once for more than one IPv6 address
ufw deny proto tcp from ::0/0 to port 80,443

根据的手册页ufw,这将实现您想要的 - 允许 IPv4 到达 TCP 端口 80 和 443,允许IPV6ADDRESS到达 TCP 端口 80 和 443,并禁止所有其他 IPv6 地址到达 TCP 端口 80 和 443。

请注意,如果没有 IPv6 连接,您就无法访问 IPv6 地址,因此如果您在相关的盒子上没有 IPv6 访问权限(即 IPv4),您就无法轻松访问 v6 地址。


请注意,我们最终简化了这个XY问题通过聊天,我将他们的访问控制目标缩小到特定的网站/子域,由于他们使用 NGINX 作为后端,我向他们提供了如何在每个站点实施访问控制的详细信息。

相关内容