Linux Squid安装配置指南

简介:

一、Squid是什么

    Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。

二、Squid代理的作用

wKioL1XkFaTgwO85AAGpYpI_koM880.jpg


三、Squid各种代理的定义

正向代理

a、标准的代理缓冲服务器

  一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主机上(即代理服务器)。当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里获取请求数据而不再向原web站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。但是,要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。客户端上网时,每次都把请求送给代理服务器处理,代理服务器根据请求确定是否连接到远程web服务器获取数据。如果在本地缓冲区有目标文件,则直接将文件传给用户即可。如果没有的话则先取回文件,先在本地保存一份缓冲,然后将文件发给客户端浏览器。

 

b、透明代理缓冲服务器

  透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不需指明代理服务器的IP和端口),一般搭建在网络出口的地方。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)特别有用。

wKiom1XlGdzTBXUMAAFp10einxw694.jpg

反向代理

a、反向代理缓冲服务器

  反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之间,处理所有对WEB服务器的请求,组织了WEB服务器和Internet的直接通信。如果互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服务器的负载。

wKioL1XlQZ_jBZpzAADKhLo-Wsk440.jpg

四、Squid的安装

    如果没有什么特殊的需求,我还是建议yum安装,因为简单便捷,rpm包已经把我们需要的大部分功能都编译好了。

# yum install squid -y

# squid -v                  //查看版本和编译参数

# rpm -ql squid             //查看安装的文件


五、Squid的配置

1、Squid 配置介绍

# rpm -qd squid       //查看帮助文档

  …………

/usr/share/doc/squid-3.1.23/squid.conf.documented

   …………

我们可以把这个配置文件的帮助文档下载下来,后面我们会经常参照这个文档        

2、squid 常用配置选项        

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
http_port 3128 (还可以只监听一个一个ip  http_port 192.168.0.1:3128)
cache_mem 64MB         #缓存占内存大小
maximum_object_size 4096KB            #最大缓存块
reply_body_max_size  1024000 allow all  #限定下载文件大小
access_log / var /log/squid/access.log   #访问日志存放的文件
cache_log / var /log/squid/cache.log   #行为的信息
visible_hostname  proxy.test.xom  #可见的主机名
cache_dir ufs / var /spool/squid 100 16 256
usf:缓存数据的存储格式
       / var /spool/squid 缓存目录
       100 : 缓存目录占磁盘空间大小(M)
       16 :缓存空间一级子目录个数
       256 :缓存空间二级子目录个数
cache_mgr  webmaster@test.com   #定义管理员邮箱
http_access deny all   #访问控制

 以上参数都可以在我们下载的帮助文档中找到

3、squid中的访问控制

     使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。 Squid 访问控制有两个要素:ACL 元素和访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。

下面列出一些重要的 ACL 元素类型

  * src : 源地址 (即客户机IP地址)

  * dst : 目标地址 (即服务器IP地址)

  * srcdomain : 源名称 (即客户机名称)

  * dstdomain : 目标名称 (即服务器名称)

  * time : 一天中的时刻和一周内的一天

  * url_regex : URL 规则表达式匹配

  * urlpath_regex: URL-path 规则表达式匹配,略去协议和主机名

  * proxy_auth : 通过外部程序进行用户验证

  * maxconn : 单一 IP 的最大连接数


为了使用控制功能,必须先设置 ACL 规则并应用。ACL 声明的格式如下:

   acl acl_element_name type_of_acl_element values_to_acl

注:

  1. acl_element_name 可以是任一个在 ACL 中定义的名称。

  2. 任何两个 ACL 元素不能用相同的名字。

  3. 每个 ACL 由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换言之,即任一 ACL bbs.bitsCN.com 元素的值被匹配,,则这个 ACL 元素即被匹配。

  4. 并不是所有的 ACL 元素都能使用访问列表中的全部类型。

  5. 不同的 ACL 元素写在不同行中,Squid 将把它们组合在一个列表中。

  我们可以使用许多不同的访问条目。下面列出我们将要用到的几个:

  * http_access: 允许 HTTP 访问。这个是主要的访问控制条目。

  * no_cache: 定义对缓存请求的响应。


  访问列表的规则由一些类似 'allow' 或 'deny' 的关键字构成,用以允许或拒绝向特定或一组 ACL 元素提供服务。

  注: 

  1. 这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。

  2. 一个访问列表可以有多条规则组成。

  3. 如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。

  4. 一个访问条目中的所有元素将用逻辑与运算连接:

  http_access Action 声明1 AND 声明2 AND 声明 OR.

  http_access Action 声明3

  多个 http_access 声明间用或运算连接,但每个访问条目的元素间用与运算连接。

   5. 请记住列表中的规则总是遵循由上而下的顺序。

3、squid通过web管理

    通过rpm安装squid,会自动添加到apache一个配置文件/etc/httpd/conf.d/squid.conf,此时我们只需修改里面的allow from localhost改为allow from all,重新启动httpd,通过浏览器直接访问

http://192.168.0.51/Squid/cgi-bin/cachemgr.cgi 

wKiom1XlFsbzy-JdAAHarlF1np0301.jpg

wKioL1XlGObQworOAAPkl-s2wZk473.jpg

其中还可以配置访问的帐号密码,可以查看手册cachemgr_passwd字段进行设置



六、Squid的应用

1、默认情况下的普通代理

# egrep -v "^#|^$" /etc/squid/squid.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
acl manager proto cache_object
acl localhost src 127.0.0.1 /32  ::1
acl to_localhost dst 127.0.0.0 /8  0.0.0.0 /32  ::1
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 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 3128
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
access_log  /var/log/squid/access .log
cache_dir ufs  /var/spool/squid  100 16 256
cache_mem 50 MB

以上是我的基本配置文件,设置好之后就可以启动服务了,下面是浏览器的设定

wKioL1XlEjbyvXTZAAE3-Ee-tEQ717.jpg

设置好之后就可以浏览器访问了,并且查看日志可以看到代理的信息

# tail -f /var/log/squid/access.log


2、普通代理中的透明代理

   透明代理不需要客户浏览器设置,对用户来说没有感觉到发送任何变化,一般情况下我们把squid建立在网络的出口处,透明代理原理与正向代理基本相同,只是客户端的网关需要指向squid 的ip地址,配置也基本差不多。

   修改配置文件 http_port 3128 改为 http_port 3128 transparent

   设置防火墙

# iptables -t nat -A PREROUTING -s 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

(这一行代表所有192.168.0.0这个网段访问squid的80端口,都由防火墙转发到3128的squid服务端口)

   配置完成后重启服务。

client端配置

    首先取消浏览器中的代理服务 改为no proxy。然后将client的网关设置成squid的ip地址,访问web server 可以访问到测试页面,透明代理配置完成!


3、反向代理加速源站

修改配置文件中的http_port参数,修改成如下

 http_port 80 accel vhost vport

       

#          accelAccelerator mode. Also needs at least one of

#vhost / vport / defaultsite.

#

#   vhostAccelerator mode using Host header for virtual domain support.

#Also uses the port as specified in Host: header unless

#overridden by the vport option. Implies accel.

#

#   vportVirtual host port support. Using the http_port number

#instead of the port passed on Host: headers. Implies accel.


指定代理服务器IP

节点设为no-query以及originserver 参数指明是源服务器,round-robin参数指明squid通过轮询方式

192.168.1.2/3是内部web服务器,两台内容可以一样,实现均衡负载。
cache_peer 192.168.1.2 parent 80 0 no-query originserver round-robin name=a
cache_peer 192.168.1.3 parent 80 0 no-query originserver round-robin name=b

实现均衡负载。
cache_peer_domain a www.domain.com
cache_peer_domain b www.domain.com

设置好之后直接访问squid服务器即可实现反向代理,可能还有很多小细节需要设定,这里不再讲解,比如双网卡设定,开启流量转发等等,更多信息请查看配置手册。


七、Squid的ACL应用


请点击参考:Squid访问控制实例




     本文转自 wzlinux 51CTO博客,原文链接:http://blog.51cto.com/wzlinux/1690187,如需转载请自行联系原作者



相关文章
|
9月前
|
Ubuntu Linux 网络安全
Linux服务器之Ubuntu的安装与配置
Ubuntu Desktop是目前最成功、最流行的图形界面的Linux发行版;而Ubuntu Server也在服务器端市场占据了较大的份额。今天为大家详细介绍了Ubuntu Server的安装与配置,希望对你能有所帮助。关于VMware、VirtualBox等虚拟化软件的使用,朱哥还会在后续的文章中为大家详细介绍,敬请关注!
|
7月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
804 11
|
安全 Linux 开发工具
【Linux】vim使用与配置教程
Vim是一款功能强大的文本编辑器,广泛应用于Linux环境,是开发者和系统管理员的必备工具。本文介绍了Vim的基本操作与简单配置,涵盖命令模式、插入模式和底行模式的使用方法,以及光标定位、复制粘贴、搜索替换等常用技巧。同时,文章还提供了实用的分屏操作和代码注释方法,并分享了通过`.vimrc`文件进行个性化配置(如显示行号、语法高亮、自动缩进等)的技巧,帮助用户提升文本编辑效率。掌握这些内容,能让Vim更好地服务于日常工作与开发需求。
1045 3
|
10月前
|
Kubernetes Linux 网络安全
Rocky Linux 8.9配置Kubernetes集群详解,适用于CentOS环境
初始化成功后,记录下显示的 `kubeadm join`命令。
678 0
|
12月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
633 11
|
10月前
|
存储 安全 Linux
Linux服务器上安装配置GitLab的步骤。
按照以上步骤,一个基础的GitLab服务应该运行并可以使用。记得定期检查GitLab官方文档,因为GitLab的安装和配置步骤可能随着新版本而变化。
919 0
|
Java Linux 应用服务中间件
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
1904 21
|
11月前
|
Linux 网络安全 开发工具
在Linux下配置gitee与Github的远程仓库
注意,git push后,是输入你的账号与密码。这个步骤可以通过特殊设置省去,但是一开始还是不要太省。
541 0
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
533 10
|
监控 安全 Ubuntu
Linux下如何安装配置Fail2ban防护工具
通过以上步骤,可以在Linux系统中成功安装和配置Fail2ban,从而有效保护服务器免受暴力破解等攻击。Fail2ban通过实时监控日志文件,自动更新防火墙规则,为系统安全提供了一层重要的保护。
2777 36