一、squid服务介绍
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
squid服务有三种常用代理模式:分别为传统代理、透明代理(正向代理)、反向代理。
特别说明:如果服务器主机时间不同步,可能将会出现一直缓存失败的情况,即TCP_MISS。时间同步配置如下
echo '*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com>/dev/null 2>&1' >>/var/spool/cron/root crontab -l
二、安装squid服务
1、主机环境
操作系统:CentOS7.5
主机名:squid01
eth0:10.0.0.17
2、安装squid服务之前系统优化
#增加文件描述符并检查 echo '* - nofile 65535' >>/etc/security/limits.conf tail -1 /etc/security/limits.conf #调整端口范围并检查 cat /proc/sys/net/ipv4/ip_local_port_range echo "net.ipv4.ip_local_port_range = 4000 65000">>/etc/sysctl.conf sysctl -p|grep port_range cat /proc/sys/net/ipv4/ip_local_port_range
3、创建squid用户运行squid服务
useradd -s /sbin/nologin -M squid
4、下载并安装squid(这里采用编译安装squid)
#下载安装包 cd /usr/local/src/ wget http://www.squid-cache.org/Versions/v3/3.5/squid-3.5.20.tar.gz #解压tar包并进入解压之后的目录 tar -xvf squid-3.5.20.tar.gz cd squid-3.5.20 #编译参数并make和make install ./configure --prefix=/usr/local/squid3.5.20 \ --enable-async-io=100 \ --with-pthreads \ --enable-storeio="aufs,diskd,ufs" \ --enable-removal-policies="heap,lru" \ --enable-icmp \ --enable-delay-pools \ --enable-useragent-log \ --enable-referer-log \ --enable-kill-parent-hack \ --enable-cachemgr-hostname=localhost \ --enable-arp-acl \ --enable-default-err-language=English \ --disable-poll \ --disable-wccp \ --disable-wccpv2 \ --disable-ident-lookups \ --disable-internal-dns \ --enable-basic-auth-helpers="NCSA" \ --enable-stacktrace \ --with-large-file \ --disable-mempools \ --with-filedescriptors=64000 \ --enable-ssl \ --enable-x-accelerator-vary \ --disable-snmp \ --with-aio \ --enable-linux-netfilter \ --enable-linux-tproxy make && make install echo $?
5、创建squid软链接
ln -s /usr/local/squid3.5.20 /usr/local/squid
6、配置squid环境变量
export PATH="$PATH:/usr/local/squid/sbin/:/usr/local/squid/bin/" echo "PATH="$PATH:/usr/local/squid/sbin/:/usr/local/squid/bin/"">>/etc/profile source /etc/profile echo $PATH
7、编辑squid配置文件(vim /usr/local/squid/etc/squid.conf)
*设置运行squid服务的用户和组 #run user cache_effective_user squid cache_effective_group squid *设置可见主机名 #hostname visible_hostname squid01 *设置管理员联系邮件 #admin email cache_mgr wutaokl@163.com *打开cache_dir注释 cache_dir ufs /usr/local/squid3.5.20/var/cache/squid 100 16 256
8、squid服务管理脚本
#!/bin/bash #squid Manage case "$1" in start) /usr/local/squid/sbin/squid -s ;; stop) /usr/local/squid/sbin/squid -k shutdown ;; restart) /usr/local/squid/sbin/squid -k reconfigure ;; parse) #检查语法 /usr/local/squid/sbin/squid -k parse ;; check) /usr/local/squid/sbin/squid -k check ;; *) echo "Usage:$0 start|stop|restart|check|parse" esac
9、授权目录
chown -R squid /usr/local/squid/var
10、初始化缓存目录
squid -z /usr/local/squid/var/cache
11、检查squid配置文件无误之后启动squid服务并检查服务是否运行(这里使用命令行命令启动)
squid -k parse squid -s lsof -i:3128
三 、配置传统代理
1、浏览器设置
2、跟踪access.log日志文件,用浏览器访问网站,访问日志写入access.log
tail -f /usr/local/squid/var/logs/access.log
3、停止squid服务,用浏览器访问网站,出现如下页面
squid -k shutdown
#到此,传统代理配置完成。
四、配置透明代理
1、实验环境
主机01:主机名->squid01 eth0->10.0.0.17 eth1->172.16.2.17 DNS->223.5.5.5
主机02:主机名->squid02 eth0->172.16.2.18 gw->172.16.2.17 DNS->223.5.5.5
2、实验说明
squid01即时squid代理服务器又是防火墙服务器,squid02表示公司内网工作环境,实验环境架构图如下
3、在squid01上配置透明代理,编辑squid.conf文件
http_port 3128 transparent cache_mem 99 MB cache_swap_low 90 cache_swap_high 95 maximum_object_size 8192 KB minimum_object_size 0 KB maximum_object_size_in_memory 4096 KB memory_replacement_policy lru
4、检查配置文件并重启squid服务
squid -k parse
squid -k reconfigure
lsof -i:3128
5、在squid01安装iptables防火墙
yum install -y iptables
6、把内网访问的80端口映射到squid01服务器的3128端口上,并让内容可以上网
iptables -F iptables -F -t nat iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128 iptables -t nat -A POSTROUTING -o eth0 -s 172.16.2.0/24 -j MASQUERADE
7、启动路由转发功能
echo "net.ipv4.ip_forward = 1">>/etc/sysctl.conf
sysctl -p
8、添加内网上网网关
roude -add default gw 172.16.2.17
9、在squid01上跟踪access.log访问日志
tail -f /usr/local/squid/var/logs/access.log
10、在squid02上访问百度(多curl几次)
curl baidu.com
11、在squid01的访问日志出现TCP_MEM_HIT/200说明透明代理搭建成功,如下所示
五、搭建反向代理
1、实验环境
主机01:主机名->squid01 eth0->10.0.0.17
主机02:主机名->squid01 eth0->10.0.0.18 (充当web服务器)
2、在squid01配置反向代理,编辑squid.conf文件
http_port 80 accel vhost vport cache_peer 10.0.0.18 parent 80 0 no-query no-digest max-conn=32 originserver #代理的机器 hosts_file /etc/hosts request_header_max_size 128 KB ipcache_size 1024 ipcache_low 90 ipcache_high 95 offline_mode on #离线模式
3、检查squid.conf配置文件并重启squid服务
squid -k parse
squid -k reconfigure
lsof -i:80
4、增加hosts解析
echo "10.0.0.18 squid02">>/etc/hosts
5、在squid02安装Apache
yum install -y httpd
6、上传或下载一张图片到/var/www/html/下
7、启动httpd服务
systemctl start httpd
lsof -i:80
8、跟踪squid01的access.log访问日志
tail -f /usr/local/squid/var/logs/access.log
9、访问内网的web站点
10、查看access.log日志,出现TCP_IMS_HIT或TCP_MEM_HIT表示squid搭建反向代理并缓存成功
六、squid一些配置参数说明
#提供给squid使用的内存
cache_mem 99 MB
#cache目录使用量大于95%时,开始清理旧的cache
cache_swap_low 90
#cache目录清理到90%时停止
cache_swap_high 95
#设置squid磁盘缓存最大文件,超过8M的文件不保存到硬盘
maximum_object_size 8 MB
#设置squid磁盘缓存最小文件
minimum_object_size 0 KB
#设置squid内存缓存最大文件,超过4M的文件不保存到内存
maximum_object_size_in_memory 4096 KB
#缓存算法
memory_replacement_policy lru
#反向代理的Web源站的域名
cache_peer 10.0.0.18 parent 80 0 no-query no-digest max-conn=32 originserver
#域名映射文件位置
hosts_file /etc/hosts
#请求头部的最大大小
request_header_max_size 128 KB
#ip对应cache的大小为1024
ipcache_size 1024
#缓存IP地址的最低基线
ipcache_low 90
#缓存IP地址的最高基线
ipcache_high 95
#域名全称cache的大小为1024(默认1024)
fqdncache_size 1024
#离线模式
offline_mode on