一、安装squid
Yum install squid
squid -v 查看版本以及编译参数
二、配置squid
Vim /etc/squid/squid.conf
1、正向代理的基础配置(代理上网+缓存)
1.1 squid服务器配置(保证该主机能够连接互联网)
http_port 192.168.1.121:3128 #设置squid代理服务器
cache_mem 64 MB
cache_dir ufs /data/cache1 4096 16 256 #缓存目录设置4GB缓存空间,16个目录,256个子目录
cache_effective_user squid #设置运行squid的用户
cache_effective_group squid #设置运行squid组的用户
dns_nameservers 8.8.8.8 #设置互联网dns解析
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
visible_hostname 192.168.1.121
#定义运行 Squid 的主机名称,当访问发生错误时,该选项会显示在错误提示网页中
#cache_mgr [email protected]
http_access allow all
mkdir /data/cache #创建缓存目录
chown -R squid:squid /data/cache1 #更改权限
squid -z #初始化缓存目录
/etc/init.d/squid start
squid -kcheck #可以检测配置文件是否有错
squid -k rec #可以重新加载配置
service squid restart #重启squid服务
1.2 客户端设置
局域网代理设置
测试方式:多次打开同一个网站,查看其速度访问速度,也可通过如下的命令,查看squid缓存的信息
[root@mysql ~]# find /data/cache1/ -type f
/data/cache1/00/00/0000001C
/data/cache1/00/00/0000000B
/data/cache1/00/00/00000029
/data/cache1/00/00/00000011
/data/cache1/00/00/00000012
2、透明代理(代理上网+缓存)
考虑到正向代理要修改浏览器的设置,在实际应用中,肯定应用比较麻烦,所以接下来就通过“透明代理”完成这样的工作。
原理:简单点说,就是把所以得数据发送到squid上,让squid完成数据的处理和转发,并完成数据缓存等工作。测试环境(squid服务器可通过192.168.1.121连接互联网)
2.1 完成基础网络配置
客户端的配置如下:
IPADDR=172.16.1.2
NETMASK=255.255.255.0
GATEWAY=172.16.1.1 #注意网关指向squid服务器的地址172.16.1.1
DNS1=8.8.8.8
Squid服务器配置
eth3接口:
IPADDR=172.16.1.1
NETMASK=255.255.255.0
eth2接口:
IPADDR=192.168.1.121
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
打开转发功能
echo "1" > /proc/sys/net/ipv4/ip_forward
启动nat功能
iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
客户端可以正常上网
[root@web1 sysconfig]# ping www.baidu.com
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125: icmp_seq=1 ttl=53 time=46.9 ms
64 bytes from 61.135.169.125: icmp_seq=2 ttl=53 time=51.4 ms
64 bytes from 61.135.169.125: icmp_seq=3 ttl=53 time=48.1 ms
64 bytes from 61.135.169.125: icmp_seq=4 ttl=53 time=48.0 ms
2.2 squid的配置
根据2.1的配置,只需修改如下内容
http_port 172.16.1.1:3128 transparent
执行squid -k rec
重新启动squid:/etc/init.d/squid restart
接下来的一般就比较关键,让所有访问80端口的服务都转到3218端口
iptables -t nat -A PREROUTING -i eth3 -p tcp -s 172.16.1.0/24 --dport 80 -j REDIRECT --to-ports 3128
[root@mysqlcache1]#
curl -I http://www.china.com.cn/cppcc/2015-09/18/content_36622331.htm
注意:Curl -I 测试的时候,如果只测试www.baidu.com或者www.qq.com域名是看不到hit效果的
3、反向代理的基础配置
反向代理,既squid后面是服务器,服务器返回给用户数据需要走squid,在网站架构中,主要用来搭建网站静态项(图片、html、流媒体、js、css等)的缓存服务器。
3.1 squid的配置
http_port 192.168.1.121:80 accel vhost vport
cache_peer 172.16.1.2 parent 80 0 originserver name=web1
cache_peer_domain web1 www.web1.com
cache_mem 64 MB
cache_dir ufs /data/cache1 4096 16 256
cache_effective_user squid
cache_effective_group squid
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
visible_hostname 192.168.1.121
#cache_mgr [email protected]
http_access allow all
说明:cache_peer设置。表示从客户端过来的请求,如果是 www.web1.com,则Squid向 Server 172.16.1.2的端口80发送请求,如果有多台服务器可以设置多行,name表示设置cached_peer的别名
3.2 客户端配置
设置DNS解析(注意,此时web服务器的IP地址为如上图所示的外网地址)
192.168.1.121 www.web1.com
访问www.web1.com,其测试结果如下(通过浏览器查看):
squid服务器上可以查看命中率,如下所示
查看缓存命中率
使用命令: squidclient -h host -p port mgr:info
比如: /usr/local/squid/bin/squidclient -h 127.0.0.1 -p 8080 mgr:info
删除缓存:http://www.aminglinux.com/bbs/thread-5297-1-1.html
故障汇总: http://www.aminglinux.com/bbs/thread-148-1-1.html
三、访问控制列表
1、禁止 192.168.1.0使用代理上网
acl badclientnet src 192.168.1.0/24
http_access deny badclientip
## 顺序很重要,把想拒绝的放前面,然后重新加载配置文件,当 1.110 访问网页时则提示拒绝访问
2、禁止访问 IP 为 61.135.169.121 的网站
acl badwebserver dst 61.135.169.121
http_access deny badwebserver
## 这里其实直接写成 baidu.com www.baidu.com 也是可以的
3、禁止访问域名为 www.163.com 的网站
acl badwebserver dstdomain www.163.com
http_access deny badwebserver
## 用户可以访问 163.com mail.163.com
4、禁止用户访问域名中包含 163.com 的网站
acl badwebserver url_regex 163.com
http_access deny badwebserver
## 这样就可以全面禁止所有包含 163.com 的网站
5、限制 IP 为 192.168.1.110 的并发最大连接数为10
acl clientip src 192.168.1.110
acl conn10 maxconn 10
http_access deny clientip conn10
## 通过两条 acl 来限制最大并发连接数,注意 有时候做完就直接不能访问网站了,是因为连接上限了,可以打开一个网页的连接数已经超过了 10
6、禁止 1.0 网段的 IP 在 9:00-18:00 上网
acl clientnet src 192.168.1.0/24
acl worktime time MTWHF 9:00-18:00
http_access deny clientnet worktime
7、禁止用户访问域名包含abc的网站(针对url的关键字)
acl badwebserver url_regex abc
http_access deny badwebserver
## 用户无法访问 www.abc.com/index.html 等站点
8、禁止下载 *.mp3 *.mp4 *.exe *.zip *.rar 类型的文件(针对文件)
acl badfile urlpath_regex -i .mp3 .mp4 .exe .zip .rar
http_access deny badfile
9、防止盗链
squid防盗链,通过设置Referer值。
acl has_referer referer_regex . #直接访问的
acl allow_referer referer_regex -i baidu\.com
acl allow_referer referer_regex -i google\.com
acl allow_referer referer_regex -i yahoo\.cn
acl allow_referer referer_regex -i google\.cn
http_access allow !has_referer
http_access deny !allow_referer deny_info http://img1.test.com/images/noposter.jpg allow_referer
解释一下,has_referer匹配Referer存在,然后利用!has_referer来匹配没有Referer,即直接访问的请求,这部分请求不予做防盗链处理,allow。allow_referer即允许使用源站资源的网站,然后利用!allow_referer来匹配不在允许列表的网站,这些不允许的Referer过来的请求就返回deny_info的内容
七、常见的安全配置(acl匹配安装顺序进行)
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl SSL_ports port 443
acl Safe_ports port 80 8080 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localhost