一、安装Squid代理服务器

#yum -y install squid

CentOS-7.2部署Squid服务_Linux

1、启动Squid服务和设置开机启动

#systemctl start squid
#systemctl enable squid

CentOS-7.2部署Squid服务_Linux_02

2、详解Squid服务器配置文件

默认的/etc/squid/squid.conf文件内容和文件结构如下,该文件由访问控制列表、参数设置和刷新模式三部分组成,更详细的内容可以参考**/usr/share/doc/squid-*/squid.conf.documented模板文件**

[root@fl ~]# more /etc/squid/squid.conf

第一部分:访问控制列表

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 localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
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 deny to_localhost
http_access allow localnet
http_access allow localhost
http_access deny all


第二部分:参数设置

http_port 128
#cache_dir ufs /var/spool/squid 100 16 256
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

3、介绍/etc/squid/squid.conf文件中可添加和修改的主要参数,以下内容为添加、修改内容,

仅作为参考,不作为修改内容,此处仅作介绍,可直接跳过此步骤

1)网络设置

#vi /etc/squid/squid.conf

CentOS-7.2部署Squid服务_Squid_03


第59行

CentOS-7.2部署Squid服务_缓存_04


添加如下内容:

icp_port 3130 //设置Squid发送/接受ICP查询时使用的端口

htcp_port 4827 //设置Squid发送/接收HTCP查询时使用的端口

CentOS-7.2部署Squid服务_缓存_05

2)临近代理设置
cache_peer 192.168.100.20 parent 3128 3130 no-digest no-netdb-exchange //表示指定其他代理服务器,192.168.100.20为上层服务器,http_port为3128,icp_port为3130,不发出建立摘要表的请求,不交换管理信息

cache_peer_access example.com allow aclcom //表示用不通的代理服务器获取特定的目标资源,使用example.com服务器去访问aclcom中定义的目标主机资源,这里的aclcom为用户自定义的ACL名称

CentOS-7.2部署Squid服务_Squid_06

3)缓存设置
cache_mem 256 MB //设置缓存区大小,一般为实际内存的1/3。

cache_dir ufs /var/spool/squid 100 16 256 //设置磁盘缓存目录和大小,ufs表示缓存格式,/var/spool/squid表示目录缓存,100表示磁盘缓存容量100MB,16表示最大16个二级子目录,256表示每个二级子目录最大有256个三级子目录

cache_swap_high 95 //设置最高缓存百分比,当实际缓存超过cache_swap_hig设置的百分比时,服务器会开始删除缓存直到百分比下降到cache_swap_low的设定值

cache_swap_low 90 //设置最高缓存百分比,当实际缓存超过cache_swap_hig设置的百分比时,服务器会开始删除缓存数据,直至容量达到cache_mem容量的90%

maxi mum_object_size 4096 KB //设置能缓存的最大单个文件的大小

maximum_object_size_in_memory 8 KB //在内存中单个文件最大缓存大小,超过这个大小将不缓存到内存中

ipcache_size 1024 //设置IP地址的最大缓存大小

fqdncache_size 1024 //设置完全合格的域名的最大缓存大小

CentOS-7.2部署Squid服务_Squid_07


4)日志文件名设置

cache_log /var/log/squid/cache.log //设置缓存日志文件路径,它记录服务器启动,关闭以及系统相关信息

cache_store_log /var/log/squid/store.log //网页缓存日志文件路径,记录了网页在缓存中的调用情况

access_log /var/log/squid/access.log //设置访问日志文件路径,记录了用户访问Internet的详细信息,可以查看每个用户的上网记录,格式由logformat参数指定

pid_filename /var/run/squid.pid //设置将squid的进程号记录在哪个文件中

CentOS-7.2部署Squid服务_Squid_08

5)认证设置
auth_param basic children 5 //设置鉴权程序的进程数

auth_param basic realm Squid proxy-caching web server //定义Web浏览器显示认证对话框时的领域名称,即用户输入用户名密码时看到的提示信息

auth_param basic credentialsttl 2 hours //用户通过认证后的有效时间,超出则必须重新认证

auth_param basic casesensitive off //用户名是否需要匹配大小

acl ncsa_users proxy_auth REQUIRED //所有成功鉴权的用户都归于ncsa_users组。

http_access allow nsca_uesrs //允许ncsa_users组的用户使用Proxy

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/squid_passwd //指定密码文件和用来验证密码的程序

CentOS-7.2部署Squid服务_服务器_09

6)禁止缓存
hierarchy_stoplist cgi-bin ? //出现cgi-bin或者?的URL不予缓存

hierarchy_stoplist -i ^https://?

acl QYERY urlpath_regex -i cgi-bin /? /.asp /.php /.jsp /.cgi

acl denyssl urlpath_regex -i ^https://

no_cache deny QUERY

no_cache deny denyssl

以上几条设置遇到URL中包换有cgi-bin和以https://开头的都不要缓存,asp\cgi\php\等动态脚本也不要缓存,。https://开头的不缓存是因为一般我们进行电子商务交易,例如银行付款等都是采用这个,如果把信用卡号等进行缓存是十分危险的!

CentOS-7.2部署Squid服务_Squid_10

7)超时设置

connect_timeout 1 minute //设置连接超时时间

peer_connect_timeout 30 seconds //设置与上层服务器之间的连接超市时间。

request_timeout 5 minutes //设置建立连接后请求的超时时间

persistent_request_timeout 1 minute //设置持续请求的超时时间

CentOS-7.2部署Squid服务_Squid_11

4、详解Squid访问控制列表(ACL)

1)内容格式

Squid服务支持访问控制,可以控制客户是否能够连接,以及连接后可以使用的资源,使用acl命令对不通性质的客户进行分类赋予名称,然后使用http_access命令对某一类客户实施允许还是拒绝的操作,下面给出Squid访问控制列表的内容格式,其中类型如下表1所示,时间表示方法如表2所示,匹配模式如表3所示,参数-i 使Squid不区分大小写:

acl ACL名称 ACL类型 [-i] 值|文件

http_access allow|deny ACL名称

CentOS-7.2部署Squid服务_CentOS_12

CentOS-7.2部署Squid服务_服务器_13

CentOS-7.2部署Squid服务_CentOS_14

二、配置正向代理服务器

1、Squid服务器与客户端网卡设置

CentOS-7.2部署Squid服务_服务器_15

2、规划代理服务器参数

项目要求:

在公司内部配置一台Squid服务器,为公司网络内的用户提供代理上网服务,具体参数如下表所示

CentOS-7.2部署Squid服务_Linux_16

1、编辑服务器配置文件

#vi /etc/squid/squid.conf

修改以添加如下内容:

修改并添加

添加acl规则,允许192.168.100.0/24访问,并将 192.168.0.0/16这行注释掉

CentOS-7.2部署Squid服务_服务器_17

http_port 3128   //此处为修改内容,第59行
cache_mem 512 MB
cache_dir ufs /var/spool/squid 20480 16 256
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
cache_access_log /var/log/squid/access.log
cache_mgr root@fl.com
cache_effective_user squid
cache_effective_group squid
dns_nameservers 8.8.8.8
visible_hostname prox.fl.com

CentOS-7.2部署Squid服务_服务器_18

2、重启squid服务器

#systemctl restart squid

CentOS-7.2部署Squid服务_CentOS_19

3、打开内核转发功能

编辑文件/etc/sysctl.conf,添加如下内容

net.ipv4.ip_forward=1

CentOS-7.2部署Squid服务_Squid_20

生效配置

#sysctl -p

CentOS-7.2部署Squid服务_缓存_21

4、本机测试Squid服务

#curl -x 192.168.100.10:3128 www.baidu.com  //注意此处192.168.200.20为外网网卡

CentOS-7.2部署Squid服务_服务器_22

停止squid服务再次测试

#systemctl stop squid
#curl -x 192.168.100.20:3128 www.baidu.com

CentOS-7.2部署Squid服务_Linux_23

5、配置Squid客户端

1)标准正向代理
当Squid服务程序顺利启动后,默认即可使用标准正向代理模式,在此模式下,Windows客户端只需设置IP地址和子网掩码即可,网关和DNS可不设置。在Win7中打开浏览器,依次单击”工具”,”Internet选项”,在“Internet选项”对话框中单击,“连接”,“局域网设置”,“局域网设置”对话框,填写Squid服务器的IP地址和端口号,然后尝试访问互联网网站

先确保您的Squid服务已重新启动

设置Win7的VM1的IP地址

CentOS-7.2部署Squid服务_Linux_24

CentOS-7.2部署Squid服务_服务器_25

CentOS-7.2部署Squid服务_Linux_26

2)透明正向代理(此处仅作介绍,并不演示)
Linux网关提供透明代理服务,局域网可以通过透明代理访问Internet中的网站,在使用透明正向代理服务器时,无需在修改客户端的浏览器选项,但必须将客户端的网关IP指向Squid服务器,可不设置DNS,然后尝试访问互联网网站,会发现失败,无法解析目标主机域名,原来Squid服务程序是不支持DNS解析代理的,这个就需要配置SNAT