mcdanlj
(Michael K Johnson)
1
我正在测试在启用了 SELinux 的 CentOS 派生发行版 AlmaLinux 9 上部署 Discourse,并配置了外部 nginx。
由于基于 Ubuntu 的容器不了解 SELinux,每次启动容器时,它都会用一个未进行安全标记的新文件替换 Unix 域套接字,并且 nginx 在我运行 restorecon 命令为该文件提供 nginx 允许访问的安全上下文之前,无法与其通信。显然,这不能作为生产解决方案。
我不太想运行 semanage permissive -a httpd_t,因为我想真正利用 SELinux 来保护唯一对外开放的服务。
如果我代理到网络端口而不是 Unix 域套接字,它就可以工作:
setsebool -P httpd_can_network_connect 1
- 不使用
templates/web.socketed.template.yml
expose: - "8008:80"
- 在外部 nginx 中,
proxy_pass http://127.0.0.1:8008
这种配置有什么特别的缺点吗?我是否应该更改此配置中的连接限制等参数?
在进行更彻底的测试后,我会将此内容更详细地写成文档,如果还有其他问题,我可以在我写的内容中包含进去。
2 个赞
Falco
(Falco)
2
只要您阻止人们通过您偏好的方法直接连接到端口 8008,就没问题。
3 个赞
mcdanlj
(Michael K Johnson)
3
谢谢!
public (active)
target: default
...
services: dhcpv6-client http https ssh
ports:
protocols:
forward: yes
masquerade: yes
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Stephen
(Stephen)
4
延迟存在差异,套接字比本地回送端口快约 3 倍。
话虽如此,我们这里最好谈论的是 4-5us 的差异。
3 个赞
mcdanlj
(Michael K Johnson)
5
在进一步研究之后,我绝对想添加 proxy_set_header \"Connection\" \"\"; 来禁用默认的 Connection: close 标头。