我已经从官方 Fedora 存储库安装了 haproxy 和 certbot。然后我将 certbot 配置为使用端口 380 通过 HAProxy 提供服务。
Certbot 命令:
certbot certonly --standalone --non-interactive --dry-run --staging --agree-tos -m [email protected] --preferred-challenges http-01 --http-01-port=380 --cert-name mydomain --domain mydomain
我发现 certbot 命令(使用端口 80 而不是 380)本身可以正常工作。然后我尝试直接设置 HAProxy 在端口 80 上提供 LetsEncrypt 服务,结果与 503 类似。
问题是使用
setsebool -P haproxy_connect_any 1
是否有危险?谢谢
事实证明
setsebool -P haproxy_connect_any 1
命令将“修复”503 错误并允许 certbot 通过 haproxy 正常工作。实际上我怀疑我可能在其他端口上的其他 127.0.0.1 上也遇到过类似的问题。
日志中弹出以下 SELinux 错误:
type=AVC msg=audit(1709286088.992:15086): avc: denied { name_connect } for pid=107707 comm="haproxy" dest=380 scontext=system_u:sys
对于 haproxy 配置,只需说它是 80 上的简单前端绑定和服务器为 127.0.0.1:380 的后端。没有其他配置选项以任何方式干扰。一直都是 SELinux。
使用 certbot,您需要 haproxy 才能向 LetsEncrypt 服务器发送 http 请求,因此它需要比仅连接到本地主机更多的权限。
问题是使用setsebool -P haproxy_connect_any 1是否有危险?
$ sesearch -A | grep haproxy_connect_any
allow haproxy_t packet_type:packet recv; [ haproxy_connect_any ]:True
allow haproxy_t packet_type:packet send; [ haproxy_connect_any ]:True
allow haproxy_t port_type:tcp_socket name_bind; [ haproxy_connect_any ]:True
allow haproxy_t port_type:tcp_socket name_connect; [ haproxy_connect_any ]:True
allow haproxy_t port_type:tcp_socket { recv_msg send_msg }; [ haproxy_connect_any ]:True
这对于 HAProxy 要做的工作来说是可以的。 不过,如果您想更多地限制 HAProxy,以防此过程可能受到损害,您可以使用 dns 挑战来运行 certbot,这样它就不会以
haproxy_t
的方式运行,并且您也不需要 haproxy_connect_any
。