diaoyudao 发表于 2018-12-27 06:27:15

Squid(Version 3.1.23)

一、安装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 squidtest888@163.com
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 客户端设置
局域网代理设置
http://s3.运维网.com/wyfs02/M02/73/91/wKiom1YBDY6yM3b3AAG-wEocIF4586.jpg
测试方式:多次打开同一个网站,查看其速度访问速度,也可通过如下的命令,查看squid缓存的信息


# 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连接互联网)
http://s3.运维网.com/wyfs02/M01/73/8F/wKioL1YBD9_xBIYNAAC_BYSsDnE182.jpg

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

客户端可以正常上网
# 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

#
curl -I http://www.china.com.cn/cppcc/2015-09/18/content_36622331.htm

http://s3.运维网.com/wyfs02/M00/73/91/wKiom1YBDbTzm9A0AAFfKEY6tho853.jpg
http://s3.运维网.com/wyfs02/M01/73/8F/wKioL1YBD_Oj9CY9AABeJ9D4D4I474.jpg

注意:Curl -I 测试的时候,如果只测试www.baidu.com或者www.qq.com域名是看不到hit效果的

3、反向代理的基础配置
反向代理,既squid后面是服务器,服务器返回给用户数据需要走squid,在网站架构中,主要用来搭建网站静态项(图片、html、流媒体、js、css等)的缓存服务器。
http://s3.运维网.com/wyfs02/M01/73/8F/wKioL1YBEnmz5RslAADxk3LP23U576.jpg


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 squidtest888@163.com
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,其测试结果如下(通过浏览器查看):
http://s3.运维网.com/wyfs02/M01/73/8F/wKioL1YBEGujbEINAADqxXwfgA0430.jpg

squid服务器上可以查看命中率,如下所示
查看缓存命中率
使用命令:squidclient -h host -p port mgr:info
比如:/usr/local/squid/bin/squidclient -h 127.0.0.1 -p 8080 mgr:info
http://s3.运维网.com/wyfs02/M01/73/91/wKiom1YBDpeilFDfAABdcpdOMAc885.jpg

删除缓存: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
  




页: [1]
查看完整版本: Squid(Version 3.1.23)