简介:

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 代理服务器的更多相关文章

  1. 搭建Squid反向代理服务器

    好吧,更新个文章,有段时间没写技术博文了.今天就说说squid反向代理这个服务,当然,这是在Linux下配置完成的.说自己没偏见似乎不可能 了.大概是相对喜欢Linux而已.但我从不否认Windows ...

  2. centos7.6_x86_64使用Squid搭建代理服务器让windows上网

    centos7.6_x86_64使用Squid搭建代理服务器让windows上网 windows机器很多站点访问受限,可以在没有限制外网的机器上面搭建代理服务器,其它电脑可以配置代理通过这台不受限制的 ...

  3. 使用Squid做代理服务器,Squid单网卡透明代理配置详解(转)

    使用Squid做代理服务器 说到代理服务器,我们最先想到的可能是一些专门的代理服务器网站,某些情况下,通过它们能加快访问互联网的速度.其实,在需要访问外部的局域网中,我们自己就能设置代理,把访问次数较 ...

  4. centos7.3使用squid搭建代理服务器

    centos7.3使用squid搭建代理服务器 1 安装 yum install squid 2 编辑 vi /etc/squid/squid.conf 3 设置 最底部增加 如下http_acces ...

  5. Squid 缓存代理服务器的完整配置

    Squid 缓存代理服务器 Squid 的作用 1.通过缓存的方式为用户提供web访问加速 2.对用户的web访问进行过滤控制 缓存代理服务器又分为普通代理服务器,透明代理服务器,和反向代理服务器. ...

  6. 31.Squid缓存代理服务器应用

    Squid缓存代理服务器应用 Squid安装介绍 web缓存的工作机制 缓存网页对象,减少重复请求 squid 主要提供缓存加速.应用层过滤控制的功能. 工作机制 代替客户机问网站请求数据,从而可以隐 ...

  7. 高效配置Linux代理服务器 Squid介绍

    作为一种免费的网络操作系统,Linux越来越受到广大网络爱好者的欢迎,目前Internet上运行的主机有相当一部分采用的就是Linux,而且中国已经把Linux作为政府上网的指定网络操作系统.种种迹象 ...

  8. Linux代理服务器—squid正向代理实验

    1.代理服务器squid简介 Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器.Squid有广泛的用途,从作为网页服务器的前置cac ...

  9. Linux代理服务器使用

    1. 介绍 代理(即网络代理)是一种特殊的网络服务, 允许一个网络终端(客户端)通过这个服务与另一个终端(服务器)进行非直接连接,从而提供服务. 其中, 提供代理的网络终端称为代理服务器(Proxy ...

随机推荐

  1. HDU2157 How many ways矩阵再识

    春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的路线去教室 ...

  2. BZOJ3277 串 【广义后缀自动机】

    Description 字符串是oi界常考的问题.现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中 至少k个字符串的子串(注意包括本身). Input 第一行两个整数n, ...

  3. 使用 ExceptionDispatchInfo 捕捉并重新抛出异常

    当你跑起了一个异步线程,并用 await 异步等待时,有没有好奇为什么能够在主线程 catch 到异步线程的异常? 当你希望在代码中提前收集好异常,最后一并把收集到的异常抛出的时候,能不能做到就像在原 ...

  4. Oracle中用exp/imp命令快速导入导出数据

    from: http://blog.csdn.net/wangchunyu11155/article/details/53635602 [用 exp 数 据 导 出]: 1 将数据库TEST完全导出, ...

  5. 【angularJS】Controller控制器

    1. 定义 控制器(Controller)在AngularJS中作用是增强视图(View),AngularJS控制器是一个构造方法,用来向视图(View)中添加额外功能. ng-controller指 ...

  6. 如何在aspx.cs 里面获取html 控件值

    aspx 页面 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default. ...

  7. hashids 了解

    用于隐藏真实的id 原理是从数字经过一个加盐(salted)算法产生一个哈希(hash)字符串.这样算法就是通过混淆使结果具有不可预测性,而唯一性依然由数字本身来达成,从而得到(类似 youtube ...

  8. Jenkins的项目管理

    新建Item 使用Jenkins最重要的是能够创建一些工作流,除了部署,还能做很多流程上的事情.同样,一条条项目建起来需要做一定的管理,在Jenkins首页Jenkins->新建可以按自己的需要 ...

  9. 使用GDI+保存带Alpha通道的图像

    带Alpha通道的图像(ARBG)在通过GDIPlus::Bitmap::FromHBITMAP等转为GDI+位图,再存储时,透明区域会变成纯黑(也有可能是纯白?).   网上找了两段保持透明的实现代 ...

  10. 北京师范大学第十六届程序设计竞赛决赛 F 汤圆防漏理论

    链接:https://www.nowcoder.com/acm/contest/117/F来源:牛客网 汤圆防漏理论 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他 ...