使用squid定制企业上网行为管理系统
场景:一台路由带约300台机器上网,内网服务器一台,内网ip192.168.6.172,其实这台机器还有个公网IP,为了避免部分网友逻辑混乱,先不提这个公网IP,如果只有内网IP也一样操作。
实现目标:
(1)使用Squid缓存部分常用资源,轻出口带宽压力
(2)实现部分办公室职员和所有车间职员只允许访问邮箱和几个固定网站,中层领导和有其它需要的职员访问黑名单(淘宝、股票、游戏等)之外的网站,公司高层不受限制。
操作:
1、开启路由转发
echo "1" > /proc/sys/net/ipv4/ip_forward
2、安装Squid
yum -y insall squid
3.配置/etc/squid/squid.conf
http_port 3128 transparent #Squid默认端口
acl baimingdansite url_regex -i "/etc/squid/baimingdan.site" #定义白名单
acl heimingdansite url_regex -i "/etc/squid/heimingdan.site" #定义黑名单
acl liwai src "/etc/squid/liwai_ip" #定义例外IP
acl lingdao src "/etc/squid/lingdao_ip" #定中层领导IP(受控,使用黑名单人员)
acl zhiyuan src "/etc/squid/zhiyuan_ip" #定义职员IP(受控,使用白名单人员)http_access allow liwai #首先允许例外IP
http_access deny heimingdansite #拒绝黑名单
http_access allow lingdao #允许中层领导(黑名单用户)上网
http_access deny !baimingdansite #拒绝不在白名单内的网站
http_access allow zhiyuan #职员IP(白名单用户)上网cache_mem 512 MB #分配内存
maximum_object_size 4 MB #不存储超过4MB的文件
maximum_object_size_in_memory 4096 KB #超过4M的文件内存不进行缓存
cache_dir ufs /var/spool/squid 4096 16 256 #缓存文件夹路径和参数,4096表示4G,目录分16组,每组256个目录
cache_effective_user squid #用户,默认的
cache_effective_group squid #用户组
access_log /var/log/squid/access.log #日志
cache_log /var/log/squid/cache.log #日志
cache_store_log /var/log/squid/store.log #日志
logfile_rotate 10 #一般LOG文件轮换,用处不大,小型网络可以设置10-20,中型5-10,大型1-2
visible_hostname mail.iewb.nett #服务器名
cache_mgr [email protected] #你的邮箱
http_access deny all #拒绝不在ACL控制列表中的所有访问
以上是我按我的需要进行的配置,当然还可以配置只允许特定端口之类的,这些网友自己去摸索。以上配置squid3.0以上版本适用,2.0需要修改下。
现在建立黑、白名单和IP列表文件。注意,启动时这几个文件中最少要有一行数据,这几个文件使用touch或vi新建,随便输入几个网站和IP就行,格式一行一个,简单直接。
完成以上步骤就可以启动Squid,然后将内网电脑Http代理配置成使用192.168.6.172端口3128就可以上网了。可以将内网一台电脑的IP依次配置到liwai_ip,lingdao_ip,zhiyuan_ip查看访问黑白名单中网站的效果。测试时关闭selinux和iptables。
测试完成后我们打开iptables配置下转向,让其它客户端电脑直接把网关设置成192.168.6.172就可以受控上网了,不用再手动设置Http代理。
- iptables -F #清空原来列表
- iptables -t nat -F #清空原来列表
- iptables -I INPUT -p tcp --dport 3128 -j ACCEPT #开放3128端口
- iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -p udp --dport 53 -o eth1 -j MASQUERADE #开启外网eth1,DNS的NAT网络地址转换功能(我的公网IP配置在eth1上)
- iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128 #设置端口转发功能,把内网eth0的80端口转发到外网eth1的3128端口
完成。
部署中可能用到的命令:
squid -k reconfigure #启动完squid后又修改squid.conf可以使用这个命令重新载入配置,比重启服务要快很多。
备注:写下本文是想以最简化的代码提供一个思路,实际运用过程中还需要解决很多问题,比如普通职员(白名单用户)想要访问腾讯邮箱的话,在baimingdan.site中不仅要加入mail.qq.com这个网址,还要加入其它一些腾讯的网址,不然会有界面比较乱或不能上传附件之类的事情,具体加入什么自己可以应该能搞定。
另外,如果只使用192.168.6.172网关而不配置浏览器HTTP代理的话,访问加密网站(HTTPS)也会有问题,看实际需要,可以把路由网关只允许服务器上网,用户必须通过Sqdid网关。
欢迎订阅启光博客RSS: http://www.iewb.net/index.php/feed