所谓ACL(Access Control List)就是在服务器端设定特定的上网策略,哪些用户能上网,能访问什么网站,能下载什么文件等等对用户的上网行为进行约束和管理,这个企业一般都会进行ACL上网控制,对员工的上网行为进行控制,从而提高工作效率。这里要说的就是基于redhat代理服务程序squid的ACL控制。
Squid 服务程序的 ACL 是由多个策略规则组成的,它可以根据指定的策略规则来允许或限制访问请求,而且策略规则的匹配顺序与防火墙策略规则一样都是由上至下;在一旦形成匹配之后,则立即执行相应操作并结束匹配过程。
准备一台Windows用来测试,一台redhat用来配置规则。
下面进行访问控制的配置
1.允许指定ip上网:比如我指定192.168.10.1到192.168.10.50这个ip段的人可以上网,其他ip的都不能上网。
vim /etc/squid/squid.conf
进入配置文件后用 set nu 显示行号,方便寻找,在25行和30行后分别加入如下语句,注意:一定要将acl和http_access分开
acl allow_user src 192.168.10.1-192.168.10.50
http_access allow allow_user
http_access deny all
意思就是通过acl 命名一个为allow_user的变量,这个变量的地址范围为1-50,然后允许allow_user这段ip进行http访问,拒绝其他链接的访问。
保存退出后重启服务:systemctl restart squid
然后回到Windows机测试:用ip为192.168.10.51测试,效果如下:
2.对关键字屏蔽,比如不能登录baidu.com/qq.comgoogle.com等网站
vim /etc/squid/squid.conf,在上个实验的配置后面继续添加规则,将新的规则加在哪里尤为重要,关乎到ACL访问能否起到作用
acl deny_word url_regex -i baidu qq google
http_access deny deny_word
记得是空格隔开关键字,过滤网站的话将 -i 参数去掉后面加上网址就行,但是关键字比较高效,所以建议直接过过滤关键字。
这里的配置信息是浏览一行执行一行,当系统浏览完acl列表时就会开始执行http_access,哪些是允许访问,哪些是拒绝。关键字过滤在我们的思维角度中是:让能上网的用户禁止访问含有关键字的网站。
对服务器来说是:先过滤掉含有关键字的网站,再允许用户上网。而不是让用户先上网,再对关键字进行过滤。allow的优先级高,所以要先让deny语句执行,再执行allow,也就是先进行关键字的过滤,再允许上网。这样我们的ACL设定才能起到作用,如果你将32和33行颠倒一下,那么关键字过滤并不会起到作用。所以allow和deny的顺序尤为重要。
重启服务后进行测试如下:baidu,qq,google这些都上不了
3.禁止下载某些类型的文件
vim /etc/squid/squid.conf
acl deny_file urlpath_regex -i \.rar$ \.exe$ \.zip$
http_access deny deny_file
注意deny的顺序,考虑优先级,原理和第2个一样。
然后重启服务测试:zip文件无法下载
以上的所有操作都是基于RedHat7.6,环境是局域网环境,希望能帮到大家。
一步一步来,多加思考,杜绝细小的错误,是成功的关键