安全头¶
安全头是 HTTP 头,可用于通过限制现代浏览器能够运行的内容来提高 Web 应用程序的安全性。
在 OpenStack-Ansible 中,安全头在 HAProxy 中实现,因为所有公共端点都位于其后。
以下头默认在实现 TLS 的所有 HAProxy 接口上启用,但仅针对 Horizon 服务。安全头可以实现于其他 HAProxy 服务,但只有浏览器使用的服务才会利用这些头。
HTTP 严格传输安全¶
《OpenStack TLS 安全指南》建议所有生产部署都使用 HTTP 严格传输安全 (HSTS)。
设计上,一旦设置,此头很难禁用。建议在测试期间将时间设置为 1 天,测试完成后再将时间增加到 1 年。
要将默认最大年龄更改为 1 天,请在 /etc/openstack_deploy/user_variables.yml 文件中覆盖变量 haproxy_security_headers_max_age
haproxy_security_headers_max_age: 86400
如果您希望您的域名包含在浏览器内置的 HSTS 预加载列表中,在提交添加到 HSTS 预加载列表的请求之前,您必须将 preload 标记添加到您的响应头中。 preload 标记表明您同意将您的站点包含在 HSTS 预加载列表的维护者。
- "http-response set-header Strict-Transport-Security \"max-age={{ haproxy_security_headers_max_age }}; includeSubDomains; preload;\""
X-Content-Type-Options¶
X-Content-Type-Options 头可防止 MIME 类型嗅探。
可以通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_security_headers 变量来更改此功能。
Referrer Policy¶
Referrer-Policy 头控制随请求发送多少引用者信息。它默认为 same-origin,这不会为跨域请求发送源路径。
可以通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_security_headers 变量来更改此功能。
Permission Policy¶
Permissions-Policy 头允许您选择性地启用、禁用或修改浏览器功能和 API 的使用,以前称为 Feature Policy。
默认情况下,此头设置为阻止访问除以下来自同一源的功能外所有功能:全屏、剪贴板读取、剪贴板写入和空间导航。
可以通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_security_headers 变量来更改此功能。
内容安全策略 (CSP)¶
Content-Security-Policy 头允许您控制浏览器允许为给定页面加载哪些资源,这有助于缓解跨站脚本 (XSS) 和数据注入攻击的风险。
默认情况下,内容安全策略 (CSP) 启用一组最小的资源以允许 Horizon 正常工作,其中包括访问 Nova 控制台。如果您需要访问其他资源,可以通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_security_headers_csp 变量来设置这些资源。
仅报告¶
实施 CSP 可能会导致内容损坏,如果浏览器被阻止访问某些资源,因此建议在测试 CSP 时使用 Content-Security-Policy-Report-Only 头代替 Content-Security-Policy,这会将 CSP 违规行为报告到浏览器控制台,但不强制执行策略。
要通过在 /etc/openstack_deploy/user_variables.yml 文件中将 haproxy_security_headers_csp_report_only 变量覆盖为 true 来设置 CSP 策略为仅报告
haproxy_security_headers_csp_report_only: true
报告违规行为¶
建议您监控生产中的 CSP 尝试违规行为,这可以通过设置 report-uri 和 report-to 标记来实现。
联合登录¶
在使用联合登录时,您需要通过在 /etc/openstack_deploy/user_variables.yml 文件中覆盖 haproxy_horizon_csp 变量来覆盖默认内容安全策略,以允许访问您的授权服务器。
haproxy_horizon_csp: >
http-response set-header Content-Security-Policy "
default-src 'self';
frame-ancestors 'self';
form-action 'self' {{ external_lb_vip_address }}:5000 <YOUR-AUTHORISATION-SERVER-ORIGIN>;
upgrade-insecure-requests;
style-src 'self' 'unsafe-inline';
script-src 'self' 'unsafe-inline' 'unsafe-eval';
child-src 'self' {{ external_lb_vip_address }}:{{ nova_spice_html5proxy_base_port }} {{ external_lb_vip_address }}:{{ nova_novncproxy_port }} {{ external_lb_vip_address }}:{{ nova_serialconsoleproxy_port }};
frame-src 'self' {{ external_lb_vip_address }}:{{ nova_spice_html5proxy_base_port }} {{ external_lb_vip_address }}:{{ nova_novncproxy_port }} {{ external_lb_vip_address }}:{{ nova_serialconsoleproxy_port }};
"
也可以为 Skyline 设置特定的安全头。
haproxy_skyline_csp: ...