第一部分:SQUID基础

Squid代理服务的基本配置:

http_port 3128                    #设置监听的IP与端口号
cache_mem 64 MB                    #额外提供给squid使用的内存,推荐大小为物理内存的1/3-1/2或更多
maximum_object_size 4 MB            #设置squid磁盘缓存最大文件,超过4M的文件不保存到硬盘
minimum_object_size 0 KB            #设置squid磁盘缓存最小文件
maximum_object_size_in_memory 4096 KB        #设置squid内存缓存最大文件,超过4M的文件不保存到内存
cache_dir ufs /var/spool/squid 100 16 256    #定义squid的cache存放路径 、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh        #log文件日志格式
access_log /var/log/squid/access.log combined    #log文件存放路径和日志格式
cache_log /var/log/squid/cache.log        #设置缓存日志
logfile_rotate 60                #log轮循 60天
cache_swap_high 95                #cache目录使用量大于95%时,开始清理旧的cache
cache_swap_low 90                #cache目录清理到90%时停止。
acl localnet src 192.168.1.0/24            #定义本地网段
http_access allow localnet            #允许本地网段使用
http_access deny all                #拒绝所有
visible_hostname qin1.qin.com            #主机名
cache_mgr qin@qin.com                #管理员邮箱

常用的ACL列表类型:

src              源地址
dst              目标地址
port             端口
srcdomain        源域
dstdomain        目标域
time             访问时间
maxconn          最大并发连接
url_regex        目标URL地址
urlpath_regex    整个目标URL路径
acl LAN1 src 192.168.1.0/24
acl PCRang  src  192.168.1.10-192.168.1.20/24
acl PC1 src 192.168.1.66/32
acl Blk_Domain dstdomain .qq.com .kaixin001.com
acl Work_Hours time MTWHF 08:30-17:30
acl Max20_Conn maxconn 20
acl Blk_URL url_regex -i ^rtsp:// ^mms://
acl ksuurl url_regex ^http://www.ksu.edu.tw/cht/.*
acl Blk_Words urlpath_regex -i sex adult
acl RealFile urlpath_regex -i \.rmvb$ \.rm$
acl OverConnLimit maxconn 6

第二部分:准备测试环境

物理机为Win10系统,网关192.168.1.1,自动获取IP地址上网。
三台虚拟机设置如下:


1、RHEL2 作为外网服务器,桥接到物理机无线网卡上,设置固定IP为 192.168.1.200


#hostnamectl set-hostname rhel2.rusky.com
#nmcli connection add type ethernet con-name enp0s3 ifname enp0s3 autoconnect yes
#nmcli connection modify enp0s3 ipv4.addresses 192.168.1.200/24 ipv4.gateway 192.168.1.1 ipv4.dns 211.139.29.170 ipv4.method manual connection.autoconnect yes

2、RHEL1 作为内网的一台SQUID代理服务器,部属squid服务,同时添加两块网卡,一块插到内网“交换机 VirtualBox Host-Only Network #6”,另外一块连接到内网(桥接到物理机无线网卡上),
如下图所示:
虚拟网卡 VirtualBox Host-Only Network #6 作为内网的交换机(IP为192.168.100.100)。

#hostnamectl set-hostname rhel1.rusky.com

# nmcli connection down enp0s3  --设置内网IP
# nmcli connection modify enp0s3 ipv4.addresses 192.168.100.1/24 ipv4.gateway 192.168.100.100 ipv4.dns 192.168.100.1 ipv4.method manual connection.autoconnect yes

# nmcli connection down enp0s8   --设置外网IP
# nmcli connection modify enp0s8 ipv4.addresses 192.168.1.201/24 ipv4.gateway 192.168.1.1 ipv4.dns 211.139.29.170 ipv4.method manual connection.autoconnect yes

3、RHEL3作为内网的另外一台客户端服务器,插到内网“交换机 VirtualBox Host-Only Network #6”,用于测试。

主机名:rhel3.rusky.com IP:192.168.100.3

=================================

第三部分:在外网服务器RHEL2上架设测试网站,在RHEL1上配置SQUID代理,然后从RHEL3通过代理来访问RHEL2上架设的测试网站。之后完成一些简单的测试。

1、在RHEL2上架设测试网站

#yum install httpd -y
#firewall-cmd --permanent --add-service=http
#firewall-cmd --reload
#echo lxjtest > /var/www/html/index.html
#systemctl restart httpd

2、在RHEL1上配置squid服务器

#yum install -y squid
#firewall-cmd --permanent --add-port=3128/tcp
#firewall-cmd --reload
#systemctl restart squid

最简单的代理服务器,安装完成后,啥也不用修改,默认就可以使用了。内网其它客户机把RHEL1当做跳板来访问外网RHEL2上架设的网站。

3、在客户机RHEL3上访问测试

直接Ping RHEL2的IP 192.168.1.200 是不通的。
浏览器未设置代理服务器之前也无法访问RHEL2 192.168.1.200 上的网站,设置代理服务器为192.168.100.1:3128之后就可以访问了。(这就是正向代理)

SQUID初始化:

#vi /etc/squid/squid.conf
cache_dir ufs /var/spool/squid 100 16 256    #取消注释,再执行squid -z才会建立,如果不启用,则只使用内存,生产环境中一定要取消注释该行。
#squid -k parse  #检测配置文件
#systemctl stop squid
#squid -z  #重建缓存,在/var/spool/squid下生成很多缓存目录。

[root@rhel1 squid]# pwd
/var/spool/squid
[root@rhel1 squid]# ls
00  01  02  03  04  05  06  07  08  09  0A  0B  0C  0D  0E  0F  swap.state
[root@rhel1 squid]# ls 00/
00  0A  14  1E  28  32  3C  46  50  5A  64  6E  78  82  8C  96  A0  AA  B4  BE  C8  D2  DC  E6  F0  FA
01  0B  15  1F  29  33  3D  47  51  5B  65  6F  79  83  8D  97  A1  AB  B5  BF  C9  D3  DD  E7  F1  FB
02  0C  16  20  2A  34  3E  48  52  5C  66  70  7A  84  8E  98  A2  AC  B6  C0  CA  D4  DE  E8  F2  FC
03  0D  17  21  2B  35  3F  49  53  5D  67  71  7B  85  8F  99  A3  AD  B7  C1  CB  D5  DF  E9  F3  FD
04  0E  18  22  2C  36  40  4A  54  5E  68  72  7C  86  90  9A  A4  AE  B8  C2  CC  D6  E0  EA  F4  FE
05  0F  19  23  2D  37  41  4B  55  5F  69  73  7D  87  91  9B  A5  AF  B9  C3  CD  D7  E1  EB  F5  FF
06  10  1A  24  2E  38  42  4C  56  60  6A  74  7E  88  92  9C  A6  B0  BA  C4  CE  D8  E2  EC  F6
07  11  1B  25  2F  39  43  4D  57  61  6B  75  7F  89  93  9D  A7  B1  BB  C5  CF  D9  E3  ED  F7
08  12  1C  26  30  3A  44  4E  58  62  6C  76  80  8A  94  9E  A8  B2  BC  C6  D0  DA  E4  EE  F8
09  13  1D  27  31  3B  45  4F  59  63  6D  77  81  8B  95  9F  A9  B3  BD  C7  D1  DB  E5  EF  F9

#systemctl start squid
#tail -f /var/log/squid/access.log 查看访问日志
#tail -f /var/log/squid/cache.log  查看cache日志

测试一:通过SQUID服务来阻止某一网段或固定IP的客户端访问测试网站。

在RHEL1上修改SQUID配置文件,增加两行:

# vi /etc/squid/squid.conf

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl lxjtest1 src 192.168.100.3   #也可以设置成一个网段
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

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe ports
http_access deny lxjtest1
http_access deny !Safe_ports

# Deny CONNECT to other than secure SSL ports

添加完上面的两行后,重启SQUID服务。

在RHEL3客户机上访问测试不通,提示被拒绝。如果把上面配置文件第二行修改为allow,则访问正常。这个设置规则可以参照基础部分的列表类型来进行设置。

但是在其它客户端上通过代理访问测试网站正常。

测试二:通过一个列表文件来限制访问

创建一个列表文件:

# vi /etc/squid/ipblock.list  --名称随便写,把需要限制的IP地址加进来
192.168.100.3
192.168.200/24

#vi /etc/squid/squid.conf --修改主配置文件,添加里面两行内容

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
acl ipblocktest  src "/etc/squid/ipblock.list"
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

#
# Recommended minimum Access Permission configuration:
#
# Deny requests to certain unsafe portsa
http_access deny ipblocktest
http_access deny !Safe_ports

重启squid服务

# systemctl restart squid.service

通过客户端访问测试,可以看到我们配置的限制列表文件已生效了。

生产环境中经常通过限制域名的方式来限制用户对外网的访问,比如,新建一个/etc/squid/domainblock.list文件,添加如下内容:
.taobao.com
.qq.com
.jd.com
.toutiao.com
等等来限制员工对外网的访问。主配置文件添加下面的两行:

acl domainblock dstdomain "/etc/squid/domainblock.list"

http_access deny domainblock

从基础内容部分的列表类型可以看出,我们还可以限制用户在指定的时间范围内对外网的访问。SQUID确实功能挺强大。

测试三:ACL列表的另外一种写法

# vi /etc/squid/squid.conf

acl allowclienttest src 192.168.100.3 192.168.100.123   --可以添加多个IP,空格分隔
http_access allow allowclienttest
http_access deny !allowclienttest     --加!符号表示拒绝非allowclienttest指定的IP客户端访问。

测试四:通过时间范围控制对外网的访问

只允许指定客户端在指定时间范围内访问,否则全部拒绝。

# vi /etc/squid/squid.conf

acl allowclienttest src 192.168.100.111 192.168.100.10 192.168.100.123
acl allowtimetest time mtwhf 9:00-17:00  --指定周一至周五(周六a,周天s),9点至17点的时间范围
http_access allow allowclienttest allowtimetest
http_access deny all     --拒绝所有

实验五、SQUID安全机制:通过htpasswd工具生成认证

其实就是通过apache httpd自带的htpasswd工具创建一个存有用户名和密码的认证文件。之后,配置squid启动密码认证机制 auth_param basic program,用自己的basic_ncsa_auth命令去调认证文件。即当你在访问代理服务时,需要输入管理员给你指定的用户名和密码才能访问。如果不这么做,则任何用户只要知道squid服务器的IP和端口就可以通过代理服务器上网,这样也不安全。

在RHEL1上

安装httpd-tool工具
# yum install httpd-tools.x86_64

查看认证程序命令位置

[root@rhel1 ~]# rpm -ql squid | grep ncsa
/usr/lib64/squid/basic_ncsa_auth
/usr/share/man/man8/basic_ncsa_auth.8.gz

创建隐藏的用户密码文件userlist,并添加用户testusersquid1

[root@rhel1 ~]# htpasswd -c /etc/squid/.userlist testusersquid1  #-c 创建
New password:
Re-type new password:
Adding password for user testusersquid1

添加testusersquid2用户

[root@rhel1 ~]# htpasswd  /etc/squid/.userlist testusersquid2 #添加用户testusersquid2
New password:
Re-type new password:
Adding password for user testusersquid2

(不用加-c参数,否则会把前边加的用户覆盖了)。如果加参数m,则使用MD5加密,有时候客户端不支持,所以一般不加m参数。

查看认证文件:

[root@rhel1 ~]# cat /etc/squid/.userlist
testusersquid1:$apr1$CRSWnTTt$XnSYo.q3JHgdn5WTRUzwZ/
testusersquid2:$apr1$dG69l9Q/$al8O2ziswVuAIM7gw/otO.

修改主配置文件,加入下面的内容:

#vim /etc/squid/squid.conf
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.userlist   #启动密码认证机制,用basic_ncsa_auth命令去调用userlist文件。
auth_param basic children 100
auth_param basic realm Welcome to  lxjtest.rusky.com  web server
auth_param basic credentialsttl 2 hours
acl auth_user proxy_auth REQUIRED
http_access allow auth_user

#当用户在访问代理访问时,需要输入userlist文件中的配置的用户名和密码才能访问。

测试六:透明代理

前面使用的代理方式上网都很麻烦,客户端浏览器必须自己配置代理服务器的IP地址和端口号才能上网。而透明代理则通过在服务器上配置策略,强制用户走代理服务器上网,所以客户端浏览器不需要做任何设置。实现原理:配置防火墙端口转发策略来限制用户上网时自动转发到代理服务器的3128端口。

修改主配置文件:

#vim /etc/squid/squid.conf
#http_port 3128        #这一行是普通的正向代理,把这行注释掉,如果不注释会和下面冲突
http_port 192.168.100.1:3128 transparent    #透明代理加上这行。任何用户访问192.168.100.1的3128端口,则自动走透明代理服务。

添加防火墙策略:

如果采用iptables做防火墙,需要打开路由转发

#iptables -t nat -A PREROUTING -i eth0 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#iptables -t nat -A PREROUTING -i eth0 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128

如果采用firewalld做防火墙

#firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.0/24" forward-port port="80" protocol="tcp" to-port="3128" to-addr="192.168.100.1""

#firewall-cmd –reload 重新加载防火墙策略
#内网用户192.168.100.0/24网段的客户机如果上外网,则自动转向代理服务器。

建议采用图形化的方法添加富规则
#firewall-config
#family选择ipv4
#element选择forward-port 规则选择来源tcp/80转发到另一个ip为192.168.100.1的3128端口
#source选择192.168.100.0/24

测试七:反向代理

反射代理原理:假设 www.cnblogs.com(IP为192.168.1.201) 网站把试验中的RHEL1作为反向代理服务器,两块网卡,一块连内网,另外一块连外网(供用户通过外网访问),上面安装SQUID服务,未部属Apache httpd。然后他们公司内网的4台服务器(192.168.100.2~4)共享同一存储,每台服务器上都部属Apache httpd 服务。当有用户访问www.cnblogs.com(192.168.1.201)网站时,RHEL1上的反向代理服务会从内网的4服务器中的其中一台上把网页反向发送给用户,内网的4个网站由于共享存储,所以访问到任何一台服务器上时,网页内容都是一致的。反向代理服务器RHEL1还起到一个“负载均衡”的作用。

在RHEL1上安装squid,并修改主配置文件如下:

#vim /etc/squid/squid.conf
http_access allow all       #取消之前的规则,开启全部允许规则
#http_port 3128             #注释掉正向代理,防止冲突
http_port  192.168.1.201:80 vhost    #当有客户访问192.168.1.201 http 服务时,系统反向代理解析为下面的计算机

cache_peer 192.168.100.2 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.100.3 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.100.4 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.100.5 parent 80 0 originserver weight=5 max-conn=30

如果有多台服务器,就添加多条记录。weight 是权重,比如其中一台服务器的性能比较好,可以把这台服务器的 weight 值设置高一些。max-conn是最大连接数,当连接数达到最大值时,自动“负载”到另外一台服务器。如果其中某一台服务器上的httpd服务停止了,反向代理服务器也会自动到访问其它内网服务器。

# firewall-cmd --add-port=80/tcp –permanent   --还要添加防火墙策略,允许80端口。虽然RHEL1服务器并未部属httpd服务,但是它要反向代理内网的httpd服务,所以得开放80端口。

代理服务 SQUID 测试相关推荐

  1. Redis 存储分片之代理服务Twemproxy 测试

    Redis 存储分片之代理服务Twemproxy 测试 转载自:http://blog.jpush.cn/redis-twemproxy-benchmark/ 概述 实际业务场景中单点 Redis 容 ...

  2. NAT转换技术(SNAT、MASQUERADE、DNAT策略)及代理服务(squid服务)

    NAT地址转换技术 一.NAT网络拓扑图 二.实验环境 本次实验均是在 RHEL6.5 虚拟机上进行的. WEB-内网(Client)IP地址:192.168.10.150 (VMnet1) 网关   ...

  3. 部署代理服务 Squid

    目录 代理 常见的代理软件 web 代理的功能 squid 代理的基本类型 传统代理配置: 1.添加双网卡,并配置 IP 地址 2.启用路由转发 3.解压并安装 squid 软件(需要先将squid软 ...

  4. 服务器 解决方案_为什么无服务器解决方案不安全?

    服务器 解决方案 In recent years, the growth of Serverless has been monumental. More and more organisations ...

  5. 如何成为Web开发人员—编写第一个Web应用程序

    Where to begin? This is perhaps the most common question asked by all newcomers to IT. There are so ...

  6. squid代理服务器应用及它的几种代理模式

    文章目录 一:squid代理服务器概述 1.1:squid简介 1.2:squid代理请求流程 1.3:squid代理服务类型 二:部署环境实验操作 2.1:环境案例 2.2:安装squid服务 2. ...

  7. debian10 简单搭建squid

    安装 apt-get install squid 添加密码文件 此文件储存squid的用户与密码 echo "USERNAME:$(openssl passwd -crypt 'PASSWO ...

  8. 【squid缓存服务器】

    文章目录 一.Squid的简介 二.Squid工作模式 传统模式 透明模式 反向代理模式 三.Squid软件介绍 搭建Squid传统模式 搭建Squid透明模式 搭建Squid反向代理模式 四.Squ ...

  9. squid正向代理 反向代理 CDN加速

    文章目录 一.squid正向代理 反向代理 CDN加速. 1.正向代理 1.1如何实现正向代理 2.反向代理 2.1 如何实现反向代理 3.CDN加速 3.1.如何实现CDN加速 一.squid正向代 ...

最新文章

  1. 数据库类型少_全栈之数据库系列 - 数据库的设计、架构和使用规范
  2. 用 Flask 来写个轻博客 (37) — 在 Github 上为第一阶段的版本打 Tag
  3. Android Studio开发概要记录
  4. 微信暂停新用户注册标志一个时代的结束
  5. iis10 HTTP 错误 500.19 - Internal Server Error
  6. Beautiful选择器/遍历文档树Day3-7
  7. gerber文件怎么导贴片坐标_怎么用CAM350从Gerber中提取SMT元件贴片坐标-CAM350教程...
  8. centos7 防火墙
  9. 矩阵顺时针逆时针旋转90°
  10. python生成DataMatrix码(DataMatrix)
  11. 星星之火-52:6G十大领域关键技术
  12. 2021年5月16日 星期日 阴
  13. 深入理解Linux自旋锁(1.0)
  14. 计算机网络位置网盘怎么登陆,百度网盘使用小技巧,超全超详细!新手必备
  15. 分享企业融资技巧与方法及常见有效融资途径
  16. 搞定windows server 2008 R2 中IE8的增强安全配置功能
  17. TPS\QPS 名词解释
  18. 干货!住建“一网统管”《城市运行管理服务平台技术标准》
  19. 2021-2-26第一次电台稿件
  20. CentOS7中文语言乱码问题解决

热门文章

  1. 移动apn接入点哪个快_51物联卡:使用物联网卡时为什么总要让你设置APN?
  2. Unity 接入Apple登录
  3. windows 下在 码市(coding.net) 上配置远程 git
  4. cad怎么将图层后置_Auto CAD2014图层后置快捷键是什么啊?
  5. WinForm使用CefSharp,嵌入浏览器
  6. macbook蓝牙pan未连接_蓝牙自动重连机制
  7. 【直击DTCC】宝存CEO阳学仕:如何保障SSD的IO确定性?
  8. signature=0ca2720a9af9bfe70731d72325e6c137,Ca2+ signatures
  9. pg_repack 处理表和索引的膨胀
  10. pg_repack安装及使用