Squid 多用户与用户访问限制

要求

为Squid加上多用户并限制每个用户可访问的网页。

安装Squid

1
sudo yum install squid

添加用户认证方式

单用户配置

/etc/squid/squid.conf添加认证配置,这里认证方式为basic_ncsa_auth

1
2
3
4
5
6
7
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /data/user.pass    #设置认证方式与密码文件路径
auth_param basic children 15 #认证进程的数量
auth_param basic credentialsttl 24 hours #认证有效期
auth_param basic casesensitive off #用户名不区分大小写,可改为ON区分大小写
acl userlist proxy_auth REQUIRED
http_access allow userlist #与上一行的acl设置认证用户访问,用户与密码存于user.pass
http_access deny all # deny all需要配置在最后一行,禁止访问所有域名,除了上面http_access allow的规则外

生成用户名为Len,密码为Lenspassword的密码文件:

1
htpasswd -cb /data/user.pass Len Lenspassword

测试配置文件,查看是否有错误:

1
sudo squid -k parse

如无问题,重启:

1
sudo systemctl restart squid

之后在客户端使用代理时就需要使用Len用户登陆。

多用户配置

与前面一样需要配置认证方式与密码文件:

1
2
3
4
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /data/user.pass    #设置认证方式与密码文件路径
auth_param basic children 15 #认证进程的数量
auth_param basic credentialsttl 24 hours #认证有效期
auth_param basic casesensitive off #用户名不区分大小写,可改为ON区分大小写

配置中添加用户与用户组:

1
2
3
4
5
6
7
8
9
10
acl u1 proxy_auth Len                        # 设置单个用户Len
acl g2 proxy_auth "/etc/squid/group/g2user" # 设置用户组文件

acl u1web dstdom_regex "/etc/squid/u1web" # 设置可访问URL文件
acl g2web dstdom_regex "/etc/squid/g2web"

http_access allow u1 u1web # 需要同时满足u1与u1web的条件才能访问,这里可以看成允许u1访问u1web中的URL
http_access allow g2 g2web # 作用同上

http_access deny all # deny all需要配置在最后一行,禁止访问所有域名,除了上面http_access allow的规则外

添加用户组文件与可访问域名文件:

1
2
3
4
5
6
7
8
9
sudo vi /etc/squid/group/g2user
user3
user4

sudo vi /etc/squid/u1web
.qq.com

sudo vi /etc/squid/g2web
.sina.com.cn

创建并添加用户密码文件:

1
2
3
htpasswd -cb /data/user.pass Len Lenspassword
htpasswd -b /data/user.pass user3 password3
htpasswd -b /data/user.pass user4 password4

测试配置文件,查看是否有错误:

1
sudo squid -k parse

如无问题,重启:

1
sudo systemctl restart squid

到此配置完成,上面的完整规则是:

  • 允许Len用户访问qq.com,其它域名不允许访问
  • 允许g2user组成员访问sina.com.cn,其它域名不允许访问

注意事项

http_access deny all是禁止访问所有网页,需要注意下这行配置存放的位置,如果放在用户配置前,你的用户配置不会生效,打开网面时不会弹登录窗口,如果你的规则默认就是禁止访问所有网站的话,可以直接放最底部。如果你发现有些配置规则没生效的话,也可以看下是不是这行配置位置放错了。

测试机的完整配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
ident_lookup_access deny all

cache_mem 0 MB #正向代理不需要缓存
maximum_object_size_in_memory 8 MB
memory_replacement_policy heap LFUDA #动态使用最小的,移出内存cache
cache_replacement_policy heap LFUDA #动态使用最小的,移出硬盘cache
cache_dir ufs /data/cache 5000 32 512 #高速缓存目录 ufs 类型
refresh_pattern . 0 20% 4320 override-expire override-lastmod reload-into-ims ignore-reload #更新cache规则

cache_effective_user squid #这里以用户squid的身份Squid服务器
cache_effective_group squid
icp_port 0 #指定Squid从邻居服务器缓冲内发送和接收ICP请求的端口号。
#这里设置为0是因为这里配置Squid为内部Web服务器的加速器,
#所以不需要使用邻居服务器的缓冲。0是禁用
always_direct allow all
ignore_unknown_nameservers on


auth_param basic program /usr/lib64/squid/basic_ncsa_auth /data/user.pass #定义squid密码文件,记录所有用户与密码
auth_param basic children 15 #认证进程的数量
auth_param basic credentialsttl 24 hours #认证有效期
auth_param basic casesensitive off #用户名不区分大小写,可改为ON区分大小写

acl u1 proxy_auth user1 # 设置单个用户
acl g2 proxy_auth "/etc/squid/group/g2user" # 设置用户文件,文件内为用户列表,用于设置用户组

acl u1web dstdom_regex "/etc/squid/u1web" # 设置可访问URL
acl g2web dstdom_regex "/etc/squid/g2web"

http_access allow u1 u1web # 允许u1访问u1web中的URL
http_access allow g2 g2web

acl u2 proxy_auth user2
http_access allow u2 # 允许u2访问所有网站

acl u3 proxy_auth user3
acl get method GET # 设置允许的HTTP method
http_access allow u3 get # 允许u3访问所有网站,但只允许使用GET方法

http_access deny all #必须最后设置,禁止访问所有网站,除了上面允许的acl

- - END - -


腾讯云
0%