我正在使用 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 还很陌生,但从我读过的所有书和教程来看,它听起来像是:
- 您需要确保规则的顺序正确。
- 您想在进行更改之前将规则保存到文件中,以防出现问题。
- 按照您想要的方式制定规则后,您需要使用类似持久标志之类的东西,以便在重新启动时规则能够继续存在。
我的问题是,我需要制定哪些规则才能实现上述目标,按照什么顺序,并且这是否仅适用于 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 作为后端,我向他们提供了如何在每个站点实施访问控制的详细信息。