Squid Linux 代理服务器
简介:
Squid 是 Linux/Unix 平台下最为流行的高性能免费应用层代理服务器,它具有权限管理灵活、性能高和效率快的特点。
代理服务器可以提供文件缓存、复制和地址过滤等服务,充分利用有限的出口带宽,加快内部主机的访问速度。
同时可以作为一个防火墙,隔离内外网,并且能够提供监控网络和记录传输信息的功能,加强局域网的安全性。
代理服务器工作原理:
1、客户端 A 向代理服务器发出访问 Internet 的请求 。
2、代理服务器接受请求后,首先与访问控制列表中的访问规则相匹配,如果满足规则,则在缓存中查找是否有需要的资源信息。
3、如果缓存中存在客户端 A 的请求信息,那么将此信息返回给客户端 A ; 如果没有代理服务器将代替客户端去向 Internet 请求指定的信息。
4、Internet 上的主机将请求的信息发送到代理服务器,代理服务器会将信息存入缓存中。
5、代理服务器将 Internet 上主机的返回信息传给客户端 A 。
6、当客户端 B 也请求相同的信息时。
7、代理服务器也会接受请求后,与访问控制列表中的规则相匹配。、
8、如果满足规则,代理服务器将会把缓存中的信息直接传给客户端 B 。
Squid 对硬件的要求:
1、内存短缺会严重影响性能。
2、硬盘空间也是一个重要因素,更多的磁盘空间意味着更多的缓存目录和更高的命中率。
3、Squid 需要使用硬盘作为缓存 Cache ,所以对硬盘的存取速度要求较高,最好配置万转高速 SCSI 硬盘和磁盘阵列。
一、安装 Squid
shell > rpm -qa squid
shell >
shell > yum -y install squid
## 这里选择使用 yum 安装 ,也可以选择编译安装,下载地址:http://www.squid-cache.org/Versions/v3/3.4/squid-3.4.10.tar.gz
二、配置 Squid
shell > cd /etc/squid/
shell > cp squid.conf squid.conf.bak
## 首先备份一下 squid.conf 文件
shell > grep -P -v '#|^$' squid.conf acl manager proto cache_object
acl localhost src 127.0.0.1/ ::
acl to_localhost dst 127.0.0.0/ 0.0.0.0/ ::
acl SSL_ports port
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
http_access deny all
http_port
hierarchy_stoplist cgi-bin ?
coredump_dir /var/spool/squid
refresh_pattern ^ftp: %
refresh_pattern ^gopher: %
refresh_pattern -i (/cgi-bin/|\?) %
refresh_pattern . %
## 这是默认 Squid 的有效配置
shell > > squid.conf # 清空默认配置文件
shell > vim squid.conf # 重新写入配置( 当然你也可以直接修改原来的配置文件 ) http_port 192.168.1.88: ## 指定在哪个 IP 跟 端口监听客户机请求,默认为所有 IP 的 端口,即 http_port cache_mem MB ## 内存缓存大小,指定可以使用多少物理内存作为高速缓存。如果此服务器就是专门的缓存服务器,可以指定为物理内存的一半。否则不应大于三分之一 cache_dir ufs /opt/squid_cache ## 磁盘缓存区大小,ufs 为缓存的存储类型,一般为 ufs
/opt/squid_cache 指定缓存存放目录
缓存空间最大为 MB
硬盘缓存目录下可以创建 个一级子目录,默认为 个
每个一级子目录下可以创建 个二级目录,默认为 个 ## 之所以创建这么多子目录是因为: 如果子目录太少,则存储在一个子目录下的文件数目会很多很多,会导致系统寻找某一个文件的时间增加,从而影响整体性能 cache_effective_user squid ## 使用缓存的有效用户,如果系统没有此用户需手动添加 cache_effective_group squid ## 使用缓存的有效组,如果系统没有此组需手动添加 dns_nameservers 8.8.8.8 ## 为了使 Squid 能解析域名需定义真实 DNS 地址 cache_access_log /var/log/squid/access.log ## 访问日志文件路径,记录了用户访问 Internet 的详细信息,可以查看每用户的上网记录 cache_log /var/log/squid/cache.log ## 缓存日志文件路径,记录了缓存相关的日志信息 cache_store_log /var/log/squid/store.log ## 网页缓存日志文件路径,记录了网页在缓存中调用情况 visible_hostname 192.168.1.88 ## 定义运行 Squid 的主机名称,当访问发生错误时,该选项会显示在错误提示网页中 cache_mgr wangxiaoqiang888@.com ## 设置 Squid 代理服务器管理员 E-mail 地址,访问发生错误时会提示在错误页面中 acl all src 0.0.0.0/0.0.0.0 ## 访问控制列表,默认拒绝所有访问客户机的请求 acl 格式:acl 列表名 列表类型 [-i] 列表值 ## 列表名 区分各个访问控制列表,不能相同,尽量使用有意义的名称,如:badurl、badip、clientip、work time 等 ## 列表类型 src 源 IP 地址( 客户机 IP 地址 )
dst 目标 IP 地址 ( 服务器 IP 地址 )
srcdomain 源名称( 客户机所属的域 )
dstdomain 目标名称( 服务器所属的域 )
time 一天中的时间和一周内的一天
url_regex URL 规则表达式匹配
urlpath_regex:URL-path 略去协议和主机名的 URL 规则表达式匹配
proxy_auth 通过外部程序进行用户认证
maxcocnn 单一 IP 最大连接数
time 时间段:[星期][时间段]
[星期]:M( Monday ,星期一 )
T( Tuesday , 星期二 )
W( Wednesday , 星期三 )
H( Thursday , 星期四 )
F( Friday ,星期五 )
A( Saturday , 星期六 )
S( Sunday , 星期日 )
[时间段]:可以表示为 :-: ## -i 选项,加 -i 表示列表值的不区分大小写 ## 列表值 对应列表类型,值也不同,可以是 IP 、时间、域名等 http_access allow all ## 允许或拒绝某个访问控制列表的 HTTP 请求,格式为:http_access [allow|deny] 列表名
三、初始化 Squid
shell > mkdir /opt/squid_cache
shell > chown -R squid.squid /opt/squid_cache/
## 创建缓存目录并更改属主、属组,如果没有 squid 用户跟组要先创建
shell > squid -k check
// ::| ERROR: '0.0.0.0/0.0.0.0' needs to be replaced by the term 'all'.
// ::| SECURITY NOTICE: Overriding config setting. Using 'all' instead.
// ::| WARNING: (B) '::/0' is a subnetwork of (A) '::/0'
// ::| WARNING: because of this '::/0' is ignored to keep splay tree searching predictable
// ::| WARNING: You should probably remove '::/0' from the ACL named 'all'
squid: ERROR: No running copy
## squid -k check 检查 squid.conf 是否配置有误,最后一行是因为没有启动 squid 服务
## 前面五行是因为 3.0 版本后不让使用 all 这个列表名,默认就有一个 all 为所有
## 允许所有主机能够使用代理就变成了 http_access allow all ( 不需要 acl 申明了 ,即删除 acl all src 0.0.0.0/0.0.0.0 )
shell > squid -k check
squid: ERROR: No running copy
## 删除之后正常了,下面初始化
shell > squid -z
// ::| Creating Swap Directories
// ::| /opt/squid_cache exists
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/
// ::| Making directories in /opt/squid_cache/0A
// ::| Making directories in /opt/squid_cache/0B
// ::| Making directories in /opt/squid_cache/0C
// ::| Making directories in /opt/squid_cache/0D
// ::| Making directories in /opt/squid_cache/0E
// ::| Making directories in /opt/squid_cache/0F
## 看到创建了好多目录,接着看一下子目录下的二级目录
shell > ls /opt/squid_cache//
A0 A8 B0 B8 C0 C8 D0 D8 E0 E8 F0 F8
A1 A9 B1 B9 C1 C9 D1 D9 E1 E9 F1 F9
0A 1A 2A 3A 4A 5A 6A 7A 8A 9A A2 AA B2 BA C2 CA D2 DA E2 EA F2 FA
0B 1B 2B 3B 4B 5B 6B 7B 8B 9B A3 AB B3 BB C3 CB D3 DB E3 EB F3 FB
0C 1C 2C 3C 4C 5C 6C 7C 8C 9C A4 AC B4 BC C4 CC D4 DC E4 EC F4 FC
0D 1D 2D 3D 4D 5D 6D 7D 8D 9D A5 AD B5 BD C5 CD D5 DD E5 ED F5 FD
0E 1E 2E 3E 4E 5E 6E 7E 8E 9E A6 AE B6 BE C6 CE D6 DE E6 EE F6 FE
0F 1F 2F 3F 4F 5F 6F 7F 8F 9F A7 AF B7 BF C7 CF D7 DF E7 EF F7 FF
四、启动 Squid
shell > service squid start
正在启动 squid:.................... [失败]
## 启动失败,马上想到看日志
shell > cat /var/log/squid/cache.log // ::| /opt/squid_cache/swap.state: () Permission denied
FATAL: commonUfsDirOpenSwapLog: Failed to open swap log.
## 发现这两条可疑记录,权限问题,但是 /opt/squid_cache 目录的属主跟属组已经是 squid 了,那么想到可能是 SELinux 权限
shell > getenforce
Enforcing
shell > setenforce
## 发现 SELinux 是开启的,那么关闭试试
shell > service squid start
正在启动 squid:. [确定]
shell > netstat -anpt | grep
tcp 192.168.1.88: 0.0.0.0:* LISTEN /(squid)
## 果然成功启动了,记得修改 /etc/selinux/config 这个配置文件,并重启服务器
五、测试 Squid
shell > curl -x 192.168.1.88: www.sina.com
## 访问 www.sina.com 然后去看看缓存目录下有没有缓存文件
shell > find /opt/squid_cache/ -type f
/opt/squid_cache///
/opt/squid_cache/swap.state
## 其中这个 00000004 里面就是 www.sina.com 的首页内容
shell > iptables -I INPUT -i eth0 -p tcp --dport -j ACCEPT
## 插入一条防火墙规则用客户端浏览器测试代理服务
## 搜狗浏览器 -- 工具 -- 选项 -- 高级 -- 代理设置 -- 编辑 -- 连接 -- 局域网设置 -- 填写代理服务器 IP 端口 -- 确定
## 多次访问网站,体验速度
## 再次查看缓存目录
shell > find /opt/squid_cache/ -type f
/opt/squid_cache///0000001A
/opt/squid_cache///0000008E
/opt/squid_cache///000000D6
/opt/squid_cache///0000005B
/opt/squid_cache///000000B5
/opt/squid_cache///000000F6
/opt/squid_cache///000000C7
/opt/squid_cache///0000005E
/opt/squid_cache///
/opt/squid_cache///
/opt/squid_cache///000000AA
/opt/squid_cache///
/opt/squid_cache///000000EC
/opt/squid_cache///
/opt/squid_cache///000000C4
/opt/squid_cache///
/opt/squid_cache///
/opt/squid_cache///0000004E
/opt/squid_cache///000000A4
/opt/squid_cache///000000DE
/opt/squid_cache///000000E2
/opt/squid_cache///
/opt/squid_cache///
/opt/squid_cache///000000DD
/opt/squid_cache///000000BE
.....
## 发现多了好多内容,这就是缓存下来的信息,当下次访问相同的资源时,则代理服务器会直接把缓存中的信息返回给客户端
六、访问控制列表
1、禁止 192.168.1.110 使用代理上网
acl badclientip src 192.168.1.110
http_access deny badclientip
## 顺序很重要,把想拒绝的放前面,然后重新加载配置文件,当 1.110 访问网页时则提示拒绝访问
2、禁止一个网段上网
acl badclientnet src 192.168.1.0/
http_access deny badclientnet
## /24 也可以写成 /255.255.255.0 的形式
3、禁止访问 IP 为 61.135.169.121 的网站
acl badwebserver dst 61.135.169.121
http_access deny badwebserver
## 这里其实直接写成 baidu.com www.baidu.com 也是可以的
4、禁止访问域名为 www.163.com 的网站
acl badwebserver dstdomain www..com
http_access deny badwebserver
## 用户可以访问 163.com mail.163.com
5、禁止用户访问域名中包含 163.com 的网站
acl badwebserver url_regex .com
http_access deny badwebserver
## 这样就可以全面禁止所有包含 163.com 的网站
6、禁止用户访问域名包含 sex 的网站
acl badwebserver url_regex sex
http_access deny badwebserver
## 用户无法访问 www.sex.com www.abc.com/sex/index.html 等站点
7、限制 IP 为 192.168.1.110 的并发最大连接数为 10
acl clientip src 192.168.1.110
acl conn10 maxconn
http_access deny clientip conn10
## 通过两条 acl 来限制最大并发连接数,注意 有时候做完就直接不能访问网站了,是因为连接上限了,可以打开一个网页的连接数已经超过了 10
8、禁止 1.0 网段的 IP 在 9:00-18:00 上网
acl clientnet src 192.168.1.0/
acl worktime time MTWHF :-:
http_access deny clientnet worktime
## 只能说很强大
9、禁止下载 *.mp3 *.mp4 *.exe *.zip *.rar 类型的文件
acl badfile urlpath_regex -i .mp3 .mp4 .exe .zip .rar
http_access deny badfile
## urlpath_regex 略去协议和主机名的 URL 规则表达式匹配方式,-i 忽略列表值的大小写,此规则可以禁止下载这些后缀的文件
Squid Linux 代理服务器的更多相关文章
- 搭建Squid反向代理服务器
好吧,更新个文章,有段时间没写技术博文了.今天就说说squid反向代理这个服务,当然,这是在Linux下配置完成的.说自己没偏见似乎不可能 了.大概是相对喜欢Linux而已.但我从不否认Windows ...
- centos7.6_x86_64使用Squid搭建代理服务器让windows上网
centos7.6_x86_64使用Squid搭建代理服务器让windows上网 windows机器很多站点访问受限,可以在没有限制外网的机器上面搭建代理服务器,其它电脑可以配置代理通过这台不受限制的 ...
- 使用Squid做代理服务器,Squid单网卡透明代理配置详解(转)
使用Squid做代理服务器 说到代理服务器,我们最先想到的可能是一些专门的代理服务器网站,某些情况下,通过它们能加快访问互联网的速度.其实,在需要访问外部的局域网中,我们自己就能设置代理,把访问次数较 ...
- centos7.3使用squid搭建代理服务器
centos7.3使用squid搭建代理服务器 1 安装 yum install squid 2 编辑 vi /etc/squid/squid.conf 3 设置 最底部增加 如下http_acces ...
- Squid 缓存代理服务器的完整配置
Squid 缓存代理服务器 Squid 的作用 1.通过缓存的方式为用户提供web访问加速 2.对用户的web访问进行过滤控制 缓存代理服务器又分为普通代理服务器,透明代理服务器,和反向代理服务器. ...
- 31.Squid缓存代理服务器应用
Squid缓存代理服务器应用 Squid安装介绍 web缓存的工作机制 缓存网页对象,减少重复请求 squid 主要提供缓存加速.应用层过滤控制的功能. 工作机制 代替客户机问网站请求数据,从而可以隐 ...
- 高效配置Linux代理服务器 Squid介绍
作为一种免费的网络操作系统,Linux越来越受到广大网络爱好者的欢迎,目前Internet上运行的主机有相当一部分采用的就是Linux,而且中国已经把Linux作为政府上网的指定网络操作系统.种种迹象 ...
- Linux代理服务器—squid正向代理实验
1.代理服务器squid简介 Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器.Squid有广泛的用途,从作为网页服务器的前置cac ...
- Linux代理服务器使用
1. 介绍 代理(即网络代理)是一种特殊的网络服务, 允许一个网络终端(客户端)通过这个服务与另一个终端(服务器)进行非直接连接,从而提供服务. 其中, 提供代理的网络终端称为代理服务器(Proxy ...
随机推荐
- linux自学(一)之vmware虚拟机安装
之前有研究过linux,后来一段时间没有操作了,现在有点陌生,而且当初也没有记录学习内容.现在想从新开始包括虚拟机安装到部署Javaweb项目,把这之间所需要的全都记录下来,以便后边学习参考使用. 虚 ...
- (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
每次使用 Visual Studio 的模板创建一个 UWP 程序,我们会在项目中发现大量的项目文件.配置.应用启动流程代码和界面代码.然而这些文件在 UWP 程序中到底是如何工作起来的? 我从零开始 ...
- for(j=0,i=0;j
for(j=0,i=0;j<6,i<10;j++,i++) { k=i+j; } k 值最后是多少? <script type="text/javascript" ...
- JavaWeb向浏览器返回一个音频流
浏览器直接播放音频文件,1是直接访问一个html的音频文件,,2 是返回一个Java音频流给浏览器解析. 下面实现一个java的wav文件音频流,可以直接播放音频文件 package org.lib. ...
- 关于MySQL 通用查询日志和慢查询日志分析
MySQL中的日志包括:错误日志.二进制日志.通用查询日志.慢查询日志等等.这里主要介绍下比较常用的两个功能:通用查询日志和慢查询日志. 1)通用查询日志:记录建立的客户端连接和执行的语句. 2)慢查 ...
- Oracle DB备份恢复篇之丢失控制文件
实验目的 本篇主要模拟控制文件丢失后,如何根据实际情况恢复数据库,才能使数据库尽可能不丢失数据. 实验环境 1)Linux系统环境 [oracle@DG1 ~]$ lsb_release -a LSB ...
- win7 QT +opencv环境搭建
1.Win7 Qt4.8.5+QtCreator2.8.0+mingw环境参考前博文先搭建 2.下载Cmake2.8.11.2版本,安装.运行 [项目]那编译器选择:MinGW4.4.另外,重新编译O ...
- javascript基础-js对象
一.js对象的创建 1.普通最简单的方式 var teacher = new Object( ); teacher.name = "zhangsan"; teacher.age = ...
- elasticsearch 5.0 获取 TransportClient 操作客户端java API
本文转载自:http://blog.csdn.net/likui1314159/article/details/53233881 elasticsearch 5.0 获取 TransportClien ...
- Nginx (一)Windows下编译Nginx源码以及安装 nginx for windows方法步骤
转载自: http://apps.hi.baidu.com/share/detail/11192699#content Nginx介绍: Nginx ("engine x")是一个 ...