带 https 过滤的 pfSense+Squid + 带 Active Directory 组过滤的单点登录 (SSO)
简要背景
该公司需要实施一个代理服务器,该服务器能够从 AD 中按组过滤对站点(包括 https)的访问,以便用户无需输入任何额外的密码,并且可以从 Web 界面进行管理。 很好的应用,不是吗?
正确的答案是购买 Kerio Control 或 UserGate 等解决方案,但一如既往没有钱,但有需要。
这是好老的 Squid 来拯救的地方,但是再次 - 我在哪里可以获得 Web 界面? SAMS2? 道德上已经过时了。 这就是 pfSense 派上用场的地方。
使用说明
本文将介绍如何配置 Squid 代理服务器。
Kerberos 将用于授权用户。
SquidGuard 将用于按域组进行过滤。
将使用 Lightsquid、sqstat 和内部 pfSense 监控系统进行监控。
它还将解决与引入单点登录 (SSO) 技术相关的一个常见问题,即尝试使用其系统帐户在罗盘帐户下上网的应用程序。
准备安装鱿鱼
pfSense将作为基础,
在其中,我们使用域帐户在防火墙本身上组织身份验证。
这非常重要!
在开始安装squid之前,需要先在pfsense中配置DNS服务器,在我们的DNS服务器上为它做一个A记录和一个PTR记录,并配置NTP,让时间和域控上的时间不一样。
在您的网络上,为 pfSense WAN 接口提供连接到 Internet 的能力,以及本地网络上的用户连接到 LAN 接口的能力,包括端口 7445 和 3128(在我的例子中为 8080)。
一切都准备好了吗? pfSense 上是否与授权域建立了 LDAP 连接并同步了时间? 伟大的。 是时候开始主进程了。
安装和预配置
Squid、SquidGuard 和 LightSquid 将从“系统/包管理器”部分的 pfSense 包管理器安装。
安装成功后,进入“Services/Squid Proxy server/”,首先,在Local Cache选项卡中,配置缓存,我全部设置为0,因为我认为缓存站点没有多大意义,浏览器在这方面做得很好。 设置完成后,按屏幕底部的“保存”按钮,这将使我们有机会进行基本的代理设置。
主要设置如下:
默认端口是 3128,但我更喜欢使用 8080。
代理接口选项卡中选定的参数决定了我们的代理服务器将侦听哪些接口。 由于此防火墙的构建方式使其在 Internet 上看起来像 WAN 接口,即使 LAN 和 WAN 可以在同一本地子网上,我建议使用 LAN 作为代理。
sqstat 需要环回才能工作。
下面你会发现Transparent(透明)代理设置,还有SSL Filter,但是我们不需要它们,我们的代理不会透明,而且对于https过滤我们不会更换证书(我们有文件流,银行客户等),让我们看看握手。
在此阶段,我们需要转到我们的域控制器,在其中创建一个身份验证帐户(您也可以使用在 pfSense 本身上配置用于身份验证的帐户)。 这是一个非常重要的因素 - 如果您打算使用 AES128 或 AES256 加密 - 请在您的帐户设置中选中相应的框。
如果您的域是一个包含大量目录的非常复杂的森林,或者您的域是 .local,则有可能(但不确定)您必须为此帐户使用一个简单的密码,该错误是已知的,但它可能根本无法使用复杂的密码,您需要检查特定的特定情况。
之后,我们为kerberos创建一个密钥文件,在域控制器上打开一个具有管理员权限的命令提示符并输入:
# ktpass -princ HTTP/[email protected] -mapuser pfsense -pass 3EYldza1sR -crypto {DES-CBC-CRC|DES-CBC-MD5|RC4-HMAC-NT|AES256-SHA1|AES128-SHA1|All} -ptype KRB5_NT_PRINCIPAL -out C:keytabsPROXY.keytab
在我们指示我们的 FQDN pfSense 的地方,一定要尊重大小写,在 mapuser 参数中输入我们的域帐户及其密码,在 crypto 中我们选择加密方法,我使用 rc4 进行工作,在 -out 字段中我们选择我们在哪里将发送我们完成的密钥文件。
成功创建密钥文件后,我们会将其发送到我们的 pfSense,为此我使用了 Far,但您也可以使用命令和 putty 或通过“诊断命令行”部分中的 pfSense Web 界面来执行此操作。
现在我们可以编辑/创建/etc/krb5.conf
其中 /etc/krb5.keytab 是我们创建的密钥文件。
请务必使用 kinit 检查 kerberos 的运行情况,如果它不起作用,则没有进一步阅读的意义。
配置不带身份验证的 Squid 身份验证和访问列表
成功配置 kerberos 后,我们将把它固定到我们的 squid 上。
为此,请转到 ServicesSquid 代理服务器,然后在主设置中进入最底部,在那里我们会找到“高级设置”按钮。
在自定义选项(授权前)字段中,输入:
#Хелперы
auth_param negotiate program /usr/local/libexec/squid/negotiate_kerberos_auth -s GSS_C_NO_NAME -k /usr/local/etc/squid/squid.keytab -t none
auth_param negotiate children 1000
auth_param negotiate keep_alive on
#Списки доступа
acl auth proxy_auth REQUIRED
acl nonauth dstdomain "/etc/squid/nonauth.txt"
#Разрешения
http_access allow nonauth
http_access deny !auth
http_access allow auth
在哪里 auth_param 协商程序 /usr/local/libexec/squid/negotiate_kerberos_auth - 选择我们需要的身份验证 kerberos 助手。
关键 -s 有意义的 GSS_C_NO_NAME — 定义使用密钥文件中的任何帐户。
关键 -k 有意义的 /usr/local/etc/squid/squid.keytab - 决定使用这个特定的密钥表文件。 在我的例子中,这是我们创建的同一个 keytab 文件,我将其复制到 /usr/local/etc/squid/ 目录并重命名它,因为 squid 不想与该目录成为朋友,显然没有足够的权利。
关键 -t 有意义的 -t 无 - 禁用对域控制器的循环请求,如果您有超过 50 个用户,这将大大减少它的负载。
在测试期间,您还可以添加 -d 键 - 即诊断,将显示更多日志。
auth_param 协商孩子 1000 - 确定可以同时运行多少个授权过程
auth_param 协商 keep_alive on - 不允许在授权链轮询期间断开连接
acl auth proxy_auth 需要 - 创建并需要一个访问控制列表,其中包括已通过授权的用户
acl nonauth dstdomain "/etc/squid/nonauth.txt" - 我们通知 squid 关于非授权访问列表,其中包含目标域,每个人都将始终被允许访问。 我们创建文件本身,并在其中以格式输入域
.whatsapp.com
.whatsapp.net
Whatsapp 不是白拿来举例的——它对带认证的代理很挑剔,认证前不让用就不行。
http_access 允许非授权 - 允许所有人访问此列表
http_access 拒绝 !auth - 我们禁止未经授权的用户访问其他网站
http_access 允许授权 - 允许授权用户访问。
就是这样,squid 本身已经配置好了,现在是时候开始按组过滤了。
配置鱿鱼卫士
转到 ServicesSquidGuard 代理过滤器。
在 LDAP 选项中,我们输入用于 kerberos 身份验证的帐户数据,但格式如下:
CN=pfsense,OU=service-accounts,DC=domain,DC=local
如果有空格或非拉丁字符,则应将整个条目括在单引号或双引号中:
'CN=sg,OU=service-accounts,DC=domain,DC=local'
"CN=sg,OU=service-accounts,DC=domain,DC=local"
接下来,一定要选中这些框:
切断不必要的 DOMAINpfsense
现在我们转到 Group Acl 并绑定我们的域访问组,我使用简单的名称,如 group_0、group_1 等,最多 3 个,其中 3 仅访问白名单,0 - 一切皆有可能。
组链接如下:
ldapusersearch ldap://dc.domain.local:3268/DC=DOMAIN,DC=LOCAL?sAMAccountName?sub?(&(sAMAccountName=%s)(memberOf=CN=group_0%2cOU=squid%2cOU=service-groups%2cDC=DOMAIN%2cDC=LOCAL))
保存我们的组,转到 Times,我在那里创建了一个间隙,这意味着它将始终有效,现在转到 Target Categories 并根据我们的判断创建列表,创建列表后我们返回到我们的组和组内,使用按钮进行选择谁可以去哪里,谁不能去哪里。
LightSquid 和 sqstat
如果在配置过程中,我们在 squid 设置中选择了环回,并在我们的网络和 pfSense 本身的防火墙中打开了访问 7445 的能力,那么当我们进入 Squid 代理报告的诊断时,我们可以轻松地打开 sqstat 和Lightsquid,对于后者我们需要在同一个地方,拿出一个用户名和密码,还有机会选择一个设计。
完成
pfSense 是一个非常强大的工具,可以做很多事情——流量代理和控制用户访问互联网只是整个功能的一小部分,然而,在拥有 500 台机器的企业中,这解决了问题并节省了购买代理。
我希望本文能帮助某人解决与大中型企业相关的问题。
来源: habr.com