🔗 门户闪屏页面
🔗 目录
当 Squid 作为 Web 门户时,有时需要向用户展示服务协议、访问条款、广告或其他初始显示内容。
🔗 浏览会话
此配置会将新访问者重定向到一个初始闪屏页面,然后在可配置的时间内允许访问,之后会重新显示闪屏页面。在此期间的进一步访问将延长他们的会话。如果访问者消失的时间超过会话超时时间,任何新请求都会被重定向回闪屏页面,并启动一个新的会话。
从 1.1 版的会话助手开始,可以使用“-T”选项代替“-t”。这将提供一个固定的超时时间,迫使闪屏页面定期显示。
🔗 HTTP 状态 511
强制门户闪屏页面会在截获的流量响应上使客户端软件感到困惑。客户端软件可能会将闪屏页面误认为是来自目标源服务器的响应。
RFC 6585 定义了一个扩展 HTTP 状态码(511),将信息传递回客户端软件,表明响应不是来自源服务器,并且未来可能会发生变化(例如,在执行任何闪屏页面登录后)。Squid-3.2 及更高版本可以配置为使用 `deny_info` 指令发送此扩展状态码和模板闪屏页面。
版本低于 3.2 的 Squid 无法发送扩展状态码。对于旧版本 Squid,您应该在 `deny_info` 指令中使用重定向 URL。 |
🔗 Squid 配置文件 - 简单示例
注意:以下示例中
- 假设 Squid 助手安装在 /usr/local/sbin/squid/。请根据您的安装情况进行更改。
- 假设要重定向到的 URL 在不经过代理的情况下即可访问。可能需要在配置之前添加一个绕过访问控制。
- 会话总体超时时间为 7200 秒。一旦超过此时间长度,将再次向用户显示闪屏。如果您想要一个固定的超时时间,请使用“-T”选项(在 1.1 版的会话助手可用)。
- 会话最多每 60 秒检查一次。这意味着用户将看到闪屏 60 秒,在此期间他们将无法浏览任何其他网站。
- 需要一个会话数据库文件。创建一个名为“/var/lib/squid/session.db”的空文件,并确保 Squid 用户对其具有写入权限。
Squid-3.2 及更高版本(会话助手重命名,以及带闪屏模板的 511 状态码)
# mind the wrap. this is one line:
external_acl_type splash_page ttl=60 concurrency=100 %SRC /usr/local/sbin/squid/ext_session_acl -t 7200 -b /var/lib/squid/session.db
acl existing_users external splash_page
deny_info 511:/etc/squid/splash.html existing_users
http_access deny !existing_users
🔗 Squid 配置文件 - 主动模式
您可能会发现使用上面的示例时,闪屏页面并不总是显示给用户。这是因为用户计算机上的其他进程(例如自动安全更新)会重置会话计数器,因此是那个进程而不是用户的浏览接收了闪屏。
以下配置示例添加了一个 `url_regex` 规则,强制用户在会话重置之前浏览到某个特定网站。此示例适用于 Squid-3.2 及更高版本,但可以适应早期版本。
# Set up the session helper in active mode. Mind the wrap - this is one line:
external_acl_type session concurrency=100 ttl=3 %SRC /usr/lib/squid3/ext_session_acl -a -T 10800 -b /var/lib/squid/session/
# Pass the LOGIN command to the session helper with this ACL
acl session_login external session LOGIN
# Normal session ACL as per simple example
acl session_is_active external session
# ACL to match URL
acl clicked_login_url url_regex -i a-url-that-must-match$
# First check for the login URL. If present, login session
http_access allow clicked_login_url session_login
# If we get here, URL not present, so renew session or deny request.
http_access deny !session_is_active
# Deny page to display
deny_info 511:/etc/squid/splash.html session_is_active
🔗 配置调整
- 这只是导致闪屏页面和会话生效的配置片段。允许访问者使用代理的规则应放置在它们下方适当的位置。基本的默认安全网应一如既往地放在它们之上。
- 如上所述,上述配置模拟了 Web 浏览器会话。这种行为在门户网站中最常见,但可能不完全符合预期。要实现其他行为,需要一个自定义的外部 ACL 助手。
- 在某些情况下,可以使用传递给 `deny_info` 的自定义错误页面模板来消除对外部 Web 服务器发布闪屏页面的依赖。但是,请注意,该页面只能是静态 HTML 页面。
更多信息请参阅 ext_session_acl、external_acl_type、acl、deny_info、http_access
⚠️ Disclaimer: Any example presented here is provided "as-is" with no support
or guarantee of suitability. If you have any further questions about
these examples please email the squid-users mailing list.
类别: ConfigExample
导航:站点搜索、站点页面、分类、🔼 向上