本文共 6852 字,大约阅读时间需要 22 分钟。
squid是一种用来缓存Internet数据的软件。接受来自人们需要下载的目标(object)的请求并适当的处理这些请求。也就是说,如果一个人想下载一web界面,他请求squid为他取得这个页面。squid随之连接到远程服务器并向这个页面发出请求。然后,squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时, squid可以简单的从磁盘中读到它,那样数据会立即传输到客户机上。
Squid(Squid cache,简称Squid)是Linux系统中最常用的一款开源代理服务软件,可以很好地实现HTTP和FTP,以及DNS查询、SSL等应用的缓存代理,功能十分强大,本篇博客详细介绍了传统代理、透明代理,squid日志分析的配置。squid的官方网站为http://www.squid-cache.org
使用代理的好处
传统代理模式
客户端必须在自己的浏览器里指定服务器的ip地址和监听的端口号,才能通过squid代理服务器上网。**
如上图所示,在服务器B上构建Squid代理服务器,允许客户机指定squid代理服务器作为Web代理,访问网站服务器,但禁止通过代理下载超过10MB的文件,超过4MB的文件不进行缓存。
环境介绍
主机 | 系统 | IP地址 | 主要软件 |
---|---|---|---|
squid代理服务器 | CentoS7.4 | 192.168.158.10 | squid-3.5.27.tar.gz |
WEB服务器 | CentoS7.4 | 192.168.158.20 | Apache |
客户机 | win10 | 192.168.158.60 | 自带的浏览器 |
[root@localhost ~]# hostnamectl set-hostname squid[root@localhost ~]# su[root@squid ~]# [root@localhost ~]# hostnamectl set-hostname web[root@localhost ~]# su
tar zxvf squid-3.4.6.tar.gz -C /opt/cd /opt/squid-3.4.6./configure --prefix=/usr/local/squid \--sysconfdir=/etc \--enable-arp-acl \--enable-linux-netfilter \--enable-linux-tproxy \--enable-async-io=100 \--enable-err-language="Simplify_Chinese" \--enable-underscore \--enable-poll \--enable-gnuregex
./configure --prefix=/usr/local/squid \ ##自定义安装路径--sysconfdir=/etc \ ##单独将配置文件修改到/etc目录下 --enable-arp-acl \ ##可在ACL中设置通过MAC地址进行管理,防止客户端使用IP欺骗--enable-linux-netfilter \ ##使用内核过滤--enable-linux-tproxy \ ##支持透明模式--enable-async-io=100 \ ##异步I/O提升存储性能,值可修改 --enable-err-language ="Simplify_Chinese" \ ##错误信息的提示语言--enable-underscore \ ##允许URL中有下划线--enable-poll \ ##使用 poll() 模式,提升性能--enable-gnuregex ##支持GNU正则表达式
make && make install#创建链接文件,优化路径ln -s /usr/local/squid/sbin/* /usr/local/sbin/#创建程序用户、组useradd -M -s /sbin/nologin squid #改变目录属主chown -R squid.squid /usr/local/squid/var/
vim /etc/squid.conf//增添下句并注释denyhttp_access allow all#http_access deny all //在端口port下增添三行代码 http_port 3128 cache_effective_user squid #添加指定程序用户 cache_effective_group squid #添加指定账号基本组coredump_dir /usr/local/squid/var/cache/squid #内存映像的地址squid -k parse #检查配置文件语法squid –k rec #重新加载配置文件squid -z #初始化缓存目录squid #启动服务netstat -ntap | grep 3128 #查看服务是否启动//编写优化脚本cd /etc/init.d/vim squid#!/bin/bash#chkconfig: 2345 90 25PID="/usr/local/squid/var/run/squid.pid"CONF="/etc/squid.conf"CMD="/usr/local/squid/sbin/squid"case "$1" in start) netstat -natp | grep squid &> /dev/null if [ $? -eq 0 ] then echo "squid is running" else echo "正在启动squid. . ." $CMD fi ;; stop) $CMD -k kill &> /dev/null rm -rf $PID &> /dev/null ;; status) [ -f $PID ] &> /dev/null if [ $? -eq 0 ] then netstat -natp | grep squid else echo "squid is not running" fi ;; restart) $0 stop &> /dev/null echo "正在关闭 squid...." $0 start &> /dev/null echo "正在启动 squid..." ;; reload) $CMD -k reconfigure ;; check) $CMD -k parse ;; *) echo "用法: $0 {start|stop|status|reload|check|restart}" ;;esacchmod +x squidchkconfig --add squidchkconfig --level 35 squid on #设置为开机自启动service squid stopservice squid startnetstat -ntap | grep 3128
[root@squid init.d]# vim /etc/squid.confhttp_port 3128 '//下面添加' cache_mem 64 MB //缓存64M的内容reply_body_max_size 10 MB //禁止下载的超过10MB的文件maximum_object_size 4096 KB //超过4MB:的文件不进行缓存
[root@squid init.d]# iptables -F[root@squid init.d]# setenforce 0[root@squid init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT#重载服务[root@squid init.d]# service squid reload[root@squid init.d]# netstat -ntap | grep 3128tcp6 0 0 :::3128 :::* LISTEN 11982
[root@localhost ~]# su[root@web ~]# systemctl stop firewalld.service [root@web ~]# setenforce 0[root@web ~]# yum install httpd -y[root@web ~]# systemctl start httpd[root@web ~]# netstat -ntap | grep 80tcp6 0 0 :::80 :::* LISTEN 85552/httpd #查看访问日志是没有东西的[root@web ~]# cat /var/log/httpd/access_log
[root@web ~]# cat /var/log/httpd/access_log
客户端192.168.158.60访问192.168.158.10网站服务,成功变为访问 squid代理IP
服务器 | ip |
---|---|
squid | ens33:192.168.158.10(外网) |
squid | ens37:192.168.100.10 |
web服务器 | 192.168.158.20(外网) |
client | 192.168.100.5 |
实现思路:
我这里的squid服务器和web服务器的安装就不介绍了。
大家可以看我的上一篇博客,链接:squid代理介绍----传统代理cd /etc/sysconfig/network-scripts/cp -p ifcfg-ens33 ifcfg-ens37vi ifcfg-ens36 ##修改ens37ip信息BOOTPROTO=static##删除uuid修改33为37IPADDR=192.168.100.10NETMASK=255.255.255.0
//重启网络服务service network restart //开启路由转发vim /etc/sysctl.conf net.ipv4.ip_forward=1sysctl -p ##加载使之生效
route add -net 192.168.100.0/24 gw 192.168.158.10
//修改配置文件vim /etc/squid.conf#http_port 3128 #删除添加下面这行,地址为与客户机在同网段的地址http_port 192.168.100.10:3128 transparent service squid restartnetstat -ntap | grep 3128
iptables -F #清空表缓存iptables -t nat -F//定义规则入口ens36,80端口重定向到3128iptables -t nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128iptables -t nat -I PREROUTING -i ens37 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128//允许3128端口访问iptables -I INPUT -p tcp --dport 3128 -j ACCEPTiptables -t nat -L
客户端win10设置IP地址、掩码、网关,打开IE浏览器,输入192.168.158.20(web服务器)同时查看web服务器的日志文件,看到192.168.158.10。
cd /etc/httpd/logs/cat access_log
即squid的ens33网卡开启透明代理服务!
日志的网址一直是client的网址
若配置文件全部都改好,防火墙规则全部设定好,若出现如下服务状态,重启机器转载地址:http://rydaf.baihongyu.com/