当前位置: 澳门新濠3559 > 服务器运维 > 正文

代理分为正向代理和反向代理,因此我需要将升

时间:2019-11-08 22:07来源:服务器运维
让AWS虚机访问公司内网资源(SSH反向代理),aws虚机 Squid一款开源的代理服务软件,用于实现HTTP和FTP以及DNS查询,SSL等应用的应用层代理。squid作为应用层代理服务软件,主要提供缓存加

让AWS虚机访问公司内网资源(SSH反向代理),aws虚机

Squid 一款开源的代理服务软件,用于实现HTTP和FTP以及DNS查询,SSL等应用的应用层代理。squid 作为应用层代理服务软件,主要提供缓存加速,应用层过滤控制的功能(访问的目标,客户机地址,访问的时间)

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


1、代理服务器squid简介

  Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。

  squid可以做代理也可以做缓存。

  squid不仅可以做正向代理,又可以做反向代理。

  正向代理,squid后面是客户端,客户端上网要通过Squid去上;反向代理,squid后面是服务器,服务器返回给用户数据需要走squid。

  正向代理用在企业的办公环境中,员工上网需要通过squid代理来上网,这样可以节省网络带宽资源。而反向代理用来搭建网站静态项(图片、html、流媒体、js、css等)的缓存服务器,它用于网站架构中。


2、实验目标

  在网关上搭建代理服务器,使得内网可以通过代理服务器访问外网的WEB服务(即正向代理)


3、实验拓扑

澳门新濠3559 1


4、实验步骤

(1)搭建如拓扑图所示的内网测试主机和网关(使得内外网能相互Ping通)

澳门新濠3559 2

(参考:

(2)在外网测试主机上搭建WEB服务(默认未安装),并使得内网测试主机和网关均能访问

内网测试主机访问WEB:

澳门新濠3559 3

网关访问WEB:

澳门新濠3559 4

(参考:

(3)在网关上安装squid软件(默认未安装),并进行配置

[[email protected] ~]# yum install squid -y   //安装squid
[[email protected] ~]# gedit /etc/squid/squid.conf  //进入squid的配置文件 

修改配置文件如下:

澳门新濠3559 5

[[email protected] ~]# service squid start  //启动squid服务
[[email protected] ~]# squid -z  //初始化缓存目录

澳门新濠3559 6

(4)网关配置防火墙

要想使内网测试主机能使用代理服务器,必须在网关的防火墙规则中开放3128端口:

[[email protected] ~]# iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 3128 -j ACCEPT

澳门新濠3559 7

(5)在内网主机的浏览器中设置代理服务器

打开Firefox浏览器——编辑——首选项——高级——网络——设置——手动配置代理

澳门新濠3559 8


5、结果测试

在内网上再次访问WEB:

澳门新濠3559 9

在外网测试主机上用Wireshark查看报文信息:

澳门新濠3559 10

可以发现此时的源地址是网关的地址,而不是内网的地址,说明代理服务器生效!


 

1、代理服务器squid简介 Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)...

本文转载自:https://help.aliyun.com/knowledge_detail/41342.html

背景说明

今天我要将AWS虚机升级到beta版本并进行一些测试。

由于beta版本只在公司内网提供,因此我需要将升级用的文件手动拷贝到AWS虚机中。原始的方法,很容易理解:

然而这就遇到一个问题,因为镜像文件有4.2GB大小,传输过程不仅占用带宽资源,而且还会浪费很多时间。

官方站点:

Squid 介绍

研究过程

squid可构建的代理服务:传统代理、透明代理、反向代理

Squid 是一个缓存 Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向 Squid 发出一个申请,要 Squid 代替其进行下载,然后 Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid 把保存的备份立即传给用户。

方案1【被舍弃】

解决办法我首先想到将目录http://download.eng.pek2.redhat.com/pub/rhel/rel-eng/RHEL-7.4-20170621.0/compose/Server/x86_64/debug/tree/拷贝到虚机上,然后用它来做YUM源进行升级。但我很快就发现自己并不能确定哪些package是升级所需要的,因此只能上传全部的文件,这样做并不能有效解决问题。

DNS view(视图) + SQUID 反向代理 = CDN(内容分发网络)

 按照代理类型的不同,可以将 Squid 代理分为正向代理和反向代理,正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。

方案2【被舍弃】

其次,我想到在AWS虚机上安装客户端,通过VPN方式访问内网资源。这样做当然是可行的,只是openvpn配置起来需要将证书拷来拷去,这使我担心潜在的安全问题,也担心后续会过多地占用VPN服务器资源,因此这个想法只能作罢。

代理的工作原理:
客户端通过代理来请求web页面时,指定的代理服务器首先检查自己的高速缓存,是否有客户端请求的页面
  有    则直接从缓存中读取页面反馈给客户端
  没有   缓存服务器向Internet发送访问请求,将结果缓存到本地并返回给客户端,缓存对象主要是文字,图像等静态的元素

普通代理:需要客户机在浏览器中指定代理服务器的地址、端口。

方案3【被舍弃】

后来,我想到了一个办法,将公司内网的HTTP代理服务器,用反向连接的方式,共享给AWS虚机,用到的命令大概会是这样:

ssh -R 8080:squid.corp.redhat.com:3128 -i ~/.pem/ap-northeast-1-cheshi.pem [email protected]13-113-60-192.ap-northeast-1.compute.amazonaws.com

这样做应该是最简单的方案了,但是它还有一个小问题,所有流量都要去公司代理服务器上绕一圈,数据通路看起来会是这样的:

AWS虚机 <=> MyHost(内网主机) <=> ProxyServer(内网代理服务器) <=> FileServer(内网更新服务器)

浪费资源是一方面,更重要的是如果更新量很大,过多地占用了公司代理服务器的资源,有可能会被IT部门审计出来。

当客户机在不同的时候访问同一WEB元素,不同的客户机访问相同的WEB元素时,可以直接从代理服务器的缓存中获得结果

透明代理:适用于企业的网关主机(共享接入 Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的 Web 访问数据转交给代理服务程序处理。

方案4【被采纳】

于是,我将这个方案进行了一些改进。我直接将MyHost做成了ProxyServer,并将代理服务器端口映射到AWS虚机中,这样就不会过多地占用公司服务器的资源,速度也应该会快一些。此时的数据通路会是这样的:

AWS虚机 <=> MyHost(内网主机即代理服务器) <=> FileServer(内网更新服务器)

下面是我的实现步骤。

优点:

反向代理:是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

搭建代理服务

ProxyServer我用的是Squid,它是一款开源软件,配置十分简单,几乎不用修改任何配置就可以拿来当HTTP代理服务器用。首先,登录MyHost并执行:

[[email protected]1-202 ~]# yum install -y squid
[[email protected]1-202 ~]# squid -z  # 初始化数据库
[[email protected]1-202 ~]# systemctl start squid.service
  1. 减少向Internet提交重复访问过程
  2. 隐藏客户端的IP地址
  3. 加快客户端访问速度
  4. 在代理访问过程中过滤和控制机制(访问目标,客户机地址,时间段)

Squid  配置说明

反向映射端口(Reverse SSH tunnel)

我需要将本地的3128端口(也就是Squid服务的默认端口)映射到AWS虚机的8080端口,让虚机可以直接使用这个代理服务器。用到的命令是:

# ssh反向映射端口
ssh -R [服务器IP或省略]:[服务器端口]:[客户端能访问的IP]:[客户端能访问的IP的端口] [登陆服务器的用户名@服务器IP] -p [服务器ssh服务端口(默认22)]

换成我的情况,我需要使用下面这样的命令:

[[email protected]1-202 ~]# ssh -R 8080:127.0.0.1:3128 -i ~/.pem/ap-northeast-1-cheshi.pem -l ec2-user ec2-13-113-60-192.ap-northeast-1.compute.amazonaws.com
Last login: Wed Jul  5 05:00:34 2017 from 119.254.120.66
[[email protected]172-31-2-249 ~]$ 

这样的命令会同时打开一个到服务器(也就是AWS虚机)的console,在这个console连通的时候,代理服务器都是有效的,关闭这个console后,端口映射也就终止了。如果你想在不打开console的情况下使端口映射生效,你可以在上述命令中添加-Nf选项。

[[email protected]1-202 ~]# ssh -Nf -R 8080:127.0.0.1:3128 -i ~/.pem/ap-northeast-1-cheshi.pem -l ec2-user ec2-52-193-95-192.ap-northeast-1.compute.amazonaws.com
[[email protected]1-202 ~]# ps -ef | grep "ssh -Nf"
root     25126     1  0 13:10 ?        00:00:00 ssh -Nf -R 8080:127.0.0.1:3128 -i /root/.pem/ap-northeast-1-cheshi.pem -l ec2-user ec2-52-193-95-192.ap-northeast-1.compute.amazonaws.com
root     25176 16347  0 13:16 pts/0    00:00:00 grep --color=auto ssh -Nf
[[email protected]1-202 ~]# 

扩展阅读:使用ssh正向连接、反向连接、做socks代理的方法

注意:使用-Nf选项建立tunnel有可能使你在将来忘记它的存在。为此,出于安全考虑,我建议你使用不带-Nf选项的“阅后即焚”的连接方式。

传统代理:
      普通的代理服务,以提供 HTTP、FTP 代理为主,客户端需要在浏览器或QQ聊天工具,下载软件中手动指定代理服务器的地址和端口号(默认为3128),对于网页浏览器,域名解析也会发给指定的代理服务器。对于企业局域网来说同样可通过代理接入Internet,但只能访问 HTTP、FTP 代理的缓存机制可为用户访问web站点提高访问速度

实验环境信息

在虚机中使用yum

来到AWS虚机中,添加YUM源,并为其设置代理服务器(http://127.0.0.1:8080/)。

[[email protected]172-31-10-95 ~]$ cat /etc/yum.repos.d/rhel7u4.repo
[rhel7u4-debug]
name=rhel7u4-debug
baseurl=http://download.eng.pek2.redhat.com/pub/rhel/rel-eng/RHEL-7.4-20170621.0/compose/Server/x86_64/os
enabled=1
gpgcheck=0
proxy=http://127.0.0.1:8080/
[[email protected]172-31-10-95 ~]$ 

备注:因为有代理服务器在,所以这里的baseurl可以直接填写MyHost可以访问的任何一台更新服务器。

然后,就可以通过YUM源进行更新了:

[[email protected]172-31-10-95 ~]$ sudo yum update --enablerepo=rhel7u4-debug
Loaded plugins: amazon-id, rhui-lb, search-disabled-repos
Resolving Dependencies
--> Running transaction check
---> Package NetworkManager.x86_64 1:1.8.0-0.4.rc3.el7 will be updated
---> Package NetworkManager.x86_64 1:1.8.0-9.el7 will be an update
......
Complete!
[[email protected]172-31-10-95 ~]$ 

备注:如果没有设置代理服务器,或者代理服务器的连接有问题(通常是由于MyHost上的防火墙所致),就会收到"Could not resolve host: download.eng.pek2.redhat.com; Name or service not known"的消息。

QQ程序使用代理可以隐藏本机真实IP地址
下载工具使用多个代理规避服务器的并发连接限制

操作系统:CentOS release 6.5(Final)

在虚机中使用wget

搭建代理服务器的好处多多,比如可以通过wget下载:

[[email protected]172-31-10-95 ~]$ export http_proxy=http://127.0.0.1:8080/
[[email protected]172-31-10-95 ~]$ wget http://download.eng.bos.redhat.com/brewroot/packages/cloud-init/0.7.9/4.el7/x86_64/cloud-init-0.7.9-4.el7.x86_64.rpm
......
Saving to: ‘cloud-init-0.7.9-4.el7.x86_64.rpm’

100%[=================================================================>] 633,112      349KB/s   in 1.8s   

2017-07-05 02:17:51 (349 KB/s) - ‘cloud-init-0.7.9-4.el7.x86_64.rpm’ saved [633112/633112]

[[email protected]172-31-10-95 ~]$ 

 

Squid 版本:squid-3.1.23-9.el6.x86_64

在虚机中使用更多工具

除此之外,还有很多工具支持使用代理服务器,当然你需要经过适当的配置,这里就不再展开叙述了。

扩展阅读:Linux设置代理

透明代理(Transparent Proxy):
     提供与传统代理相同功能,对于客户端来说代理服务器是透明的,客户端不需要指定IP地址与端口号,而是通过默认路由,防火墙策略将web访问重定向,实际上还是交给代理服务器处理,域名解析优先发给DNS服务器。

本文仅介绍普通代理的搭建方式。相关操作步骤如下:

防火墙设置及功能调试

通过firewall-cmd可以很容易地为Squid服务添加防火墙规则:

[[email protected]1-202 ~]# firewall-cmd --get-default-zone 
FedoraServer
[[email protected]1-202 ~]# firewall-cmd --add-service=squid
success
[[email protected]1-202 ~]# firewall-cmd --list-services
ssh dhcpv6-client cockpit squid
[[email protected]1-202 ~]# 

调试和排错时,可以使用nmap这个工具,它可以列出某台主机对外开放的端口及对应的服务。

在MyHost上,我们应该可以看到3128/tcp端口被打开,对应的服务是squid-http

[[email protected]1-202 ~]# nmap localhost

Starting Nmap 7.40 ( https://nmap.org ) at 2017-07-05 12:31 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000050s latency).
Other addresses for localhost (not scanned): ::1
Not shown: 995 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
111/tcp  open  rpcbind
2049/tcp open  nfs
3128/tcp open  squid-http
9090/tcp open  zeus-admin

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
[[email protected]1-202 ~]# 

而在AWS虚机中,我们也应该可以看到8080/tcp端口被打开:

[[email protected]172-31-2-249 ~]$ nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2017-07-05 04:33 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00034s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 997 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds
[[email protected]172-31-2-249 ~]$ 

此时,还可以进一步使用nc命令验证8080/tcp端口的服务状态,这里不再赘述。

透明:客户端不需要在浏览器中指定代理服务器的地址和端口号

  1. 检 查squid 软件包安装其情况

澳门新濠3559,结束语

相信大家已经看到,ssh是个非常强大的命令,但无论是哪种连接方式,对于服务器和整个内网而言,它都不会隐藏你的真实身份,因此你仍然需要为自己的行为负责,不要去做一些违反公司政策的事情。

另外,你需要考虑一些安全问题。由于ssh提供了安全的连接,而内网又在防火墙的保护之中,因此你唯一需要关心的问题是——你所连接的服务器存在安全隐患吗?举例来说,如果你将代理服务器的端口映射到了一台具有弱口令的外网主机,而攻破这台主机的黑客,就有可能通过映射端口访问到一些内网资源,造成泄密事件的发生。好在AWS的虚机默认情况下都安全得很,我能够提醒你的是:不要允许密码登录并保管好你的证书

总而言之,技术本身是没有善恶的,但使用者要对自己的行为负责,也要对整个网络的安全负责。

Squid+Iptables 将访问请求通过Iptables(Redirect 重新定向)给本机的代理服务程序

rpm -qa|grep squid

参考文献

反向代理:
      反向代理(Reverse.Proxy)也同样提供缓存加速,只不过服务的对象反过来了。传统代理也好,透明代理也好,大多是为局域网用户访问Internet中的Web站点提供缓存代理;
而反向代理恰恰相反,主要为Internet中的用户访问企业局域网内的 Web 站点提供缓存加速,是一个反向的代理过程,因此称为反向代理。

  1. 如果未安装,则使用 yum 方式安装

对于一些访问量较大的Web站点(如新浪,搜狐等),提供反向代理可以起到加速作用,同时缓解Web服务器的压力。例如,使用nslookup工具解析出www.sina.com.cn站点
对应的IP地址(通常有多个,这是基于 DNS解析的负载分担),任选其中一个在浏览器中直接访问,就会发现Squid反向代理服务反向的错误信息。而使用www.sina.com.cn
域名访问新浪站点使,用户基本上感觉不出squid服务的存在。

yum -y install squid

 

澳门新濠3559 11

安装与运行控制:
1、编译安装SQUID

  1. 设置服务开机自启动
[root@proxy ~]# rpm -q squid
package squid is not installed

[root@proxy ~]# tar xf squid-3.4.6.tar.gz -C /usr/src/
[root@proxy ~]# cd /usr/src/squid-3.4.6/
[root@proxy 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 && make && make install


--prefix=/usr/local/squid              #安装目录
--sysconfdir=/etc/                     #单独将配置文件修改到其他目录
--enable-arp-acl                    #在规则中设置直接通过客户端MAC进行管理,防止客户端使用IP欺骗
--enable-linux-netfilter          #使用内核过滤
--enable-linux-tproxy           #支持透明模式
--enable-async-io=100         #异步I/O,提升存储性能,相当于 --enable-pthreads --enable-storeio=ufs,aufs 
--with-pthreads --with-aufs-thread=值
--enable-err-language="Simplify_Chinese"    #错误信息的显示语言
--enable-underscore                         #允许URL中有下划线
--enable-poll                          #使用poll() 模式,提升性能
--enable-gnuregex                            #使用GNU正则表达式

[root@proxy ~]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/
[root@proxy ~]# useradd -M -s /sbin/nologin squid
[root@proxy ~]# chown -R squid:squid /usr/local/squid/var/

chkconfig --level 35 squid on

2.Squid的基本配置

澳门新濠3559 12

配置项参考:/etc/squid.conf.documented
主配置文件:/etc/squid.conf

  1. 编辑 squid 的主配置文件 /etc/squid/squid.conf

参数介绍:
http_port 3128 #指定代理服务监听的地址和端口(默认端口 3128) http_port 192.168.1.1:3128
cache_effective_user squid #指定squid程序用户,用来设置初始化,运行时的缓存帐号
cache_effective_group squid #默认为cache_effective_user指定帐号的基本组
coredump_dir /usr/local/squid/var/cache/squid

澳门新濠3559 13

3.squid的运行控制
1)检查配置文件语法是否正确

http_port 3128

[root@proxy ~]# squid -k parse

2016/01/26 22:01:24| WARNING: 'proxy' rDNS test failed: (0) No error.
2016/01/26 22:01:24| WARNING: Could not determine this machines public hostname. Please configure one or set 
'visible_hostname'.2016/01/26 22:01:24| WARNING: 'proxy' rDNS test failed: (0) No error.

[root@proxy ~]# vim /etc/squid.conf
visible_hostname proxy 
[root@proxy ~]# hostname proxy

cache_mem 64 MB

 

maximum_object_size 4 MB

2)启动,停止squid
第一次启动,会自动初始化缓存目录,在没有squid服务脚本时,可以直接调用squid程序启动服务。

cache_dir ufs /var/spool/squid 100 16 256

[root@proxy ~]# vim /etc/squid.conf
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256

[root@proxy ~]# squid -z

[root@proxy ~]# ls /usr/local/squid/var/cache/squid
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

[root@proxy ~]# squid -z #用来初始化缓存目录
[root@proxy ~]# squid #启动squid服务
[root@proxy ~]# squid -D    #直接执行squid启动服务,-D不进行DNS测试
[root@proxy ~]# squid -k reconfigure    #用于重新加载配置文件
[root@proxy ~]# netstat -anpt |grep squid
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 88850/(squid-1)

access_log /var/log/squid/access.log

  

acl localnet src 10.0.0.0/8

3)squid服务脚本

http_access allow localnet

[root@proxy ~]# vim /etc/init.d/squid
#!/bin/bash
# chkconfig: 2345 90 25
# config: /etc/squid.conf
# pidfile: /usr/local/squid/var/run/squid.pid
# Description: Squid - Internet Object Cache.
PID="/usr/local/squid/var/run/squid.pid"
CONF="/etc/squid.conf"
CMD="/usr/local/squid/sbin/squid"

case "$1" in 
start)
netstat -anpt | 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 -anpt | grep squid 
else
echo "squid is not running."
fi
;;
restart)
$0 stop &> /dev/null
echo "正在关闭squid..."
$0 start &> /dev/null
echo "正在启动squid..."
;;
check)
$CMD -k parse
;;
reload)
$CMD -k reconfigure
;;
*)
echo "用法: $0 {start|stop|restart|reload|check|status}"
esac

[root@proxy ~]# chmod +x /etc/init.d/squid
[root@proxy ~]# chkconfig --add squid
[root@proxy ~]# chkconfig squid on
[root@proxy ~]# service squid start
[root@proxy ~]# service squid status

http_access deny all

 

visible_hostname squid.taotie.dev

配置传统代理:
代理服务器:192.168.200.211

cache_mgr admin@test.com

要求:

#注意:

  1. Squid为客户端提供网站的代理服务
  2. 禁止客户端通过代理服务器下载超过10MB大小的文件
  3. 客户端的相关程序例如:QQ、IE浏览器等需要指定代理服务器的IP地址及端口号。
  4. 如果客户机需通过域名方式访问,代理服务器本身需能够正确解析域名

# acl localnet src 10.0.0.0/8 中 10.0.0.0/8 是ECS内网的网段,要求 ECS 之间内网可以互通。可根据实际情况替换成所需内网 IP 段

1)编译安装SQUID
2)修改/etc/squid.conf 配置文件

  1. 初始化 squid
[root@proxy ~]# vim /etc/squid.conf
http_access allow all #允许任意主机使用代理服务器(注意:需要放在http_access deny all前面)
http_access deny all 
http_port 3128 #配置代理服务器端口号
reply_body_max_size 10 MB #限制下载文件大小
cache_effective_user squid
cache_effective_group squid
visible_hostname proxy
cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
coredump_dir /usr/local/squid/var/cache/squid

[root@proxy ~]# service squid check 
[root@proxy ~]# service squid restart && service squid reload && squid -k reconfigure

squid –z

  

澳门新濠3559 14

防火墙配置:
1)关闭防火墙

  1. 启动 Squid
[root@proxy ~]# service iptables stop

/etc/init.d/squid start

2)配置防火墙允许策略

澳门新濠3559 15

[root@proxy ~]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
[root@proxy ~]# service iptables save

[root@proxy ~]# netstat -anpt | grep squid
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 90052/(squid-1)

[root@proxy ~]# tail -f /usr/local/squid/var/logs/access.log 
1452937491.308 5 192.168.200.212 TCP_MISS/200 366 GET http://192.168.200.212/ - HIER_DIRECT/192.168.200.
212 text/html
1452937502.785 2 192.168.200.212 TCP_CLIENT_REFRESH_MISS/304 220 GET http://192.168.200.212/ - HIER_DIRE
CT/192.168.200.212 -

至此,squid 配置完毕。

web服务器:192.168.200.212

[root@web ~]# mount /dev/cdrom /media/cdrom/
[root@web ~]# rpm -ivh /media/cdrom/Packages/httpd-2.2.15-39.el6.x86_64.rpm 
[root@web ~]# echo "<h1>www.crushlinux.com</h1>" > /var/www/html/index.html
[root@web ~]# service httpd start
[root@web ~]# service iptables stop

[root@web ~]# tail -f /var/log/httpd/access_log
192.168.200.211 - - [17/Jan/2016:01:45:27 +0800] "GET / HTTP/1.1" 200 28 "-" "Mozilla/4.0 (compatible; MSIE 6

客户端设置:192.168.200.254
IE浏览器:工具-->Internet选项-->局域网(LAN)设置-->配置代理服务器IP和端口号
Firefox: 首选项 高级 网络连接

浏览器访问:WEB服务器IP地址

 

Linux客户机的命令行界面(elinks,wget)必须通过环境变量来指定代理服务器的地址,端口

[root@client ~]# vim /etc/profile
HTTP_PROXY=http://192.168.200.211:3128  #为使用HTTP协议指定代理
HTTPS_PROXY=http://192.168.200.211:3128 #为使用HTTPS协议指定代理
FTP_PROXY=http://192.168.200.211:3128   #为使用FTP协议指定代理
NO_PROXY=http://192.168.200.,192.168.100.   #对两个局域网段不使用代理
export HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY

source /etc/profile

 

配置透明代理并作为内网服务器的网关服务器(squid+iptables):

透明代理服务器:
透明代理服务器的功能与传统代理是一致的,其透明功能是结合默认路由和防火墙的重定向策略实现的。
域名解析功能建议采用专用DNS服务器来实现,不建议交给SQUID服务器。

适合与局域网,不适合Internet

Linux网关服务器+Squid服务器:
内网(VMnet8):192.168.200.211
外网(VMnet2):172.16.1.2

Client 192.168.200.201 <VMnet8> [192.168.200.101 <Linux网关服务器+Squid服务器> 172.16.1.2 ] <VMnet2> WEB服务器172.16.1.3
GW:192.168.200.101

修改squid主配置文件

[root@proxy ~]# vim /etc/squid.conf
http_port 3128 transparent

设置iptables的重定向(REDIRECT)策略,及本机端口重定向,将访问网站协议http,https的外发数据包交给本机的Squid服务(3128)端口
REDIRECT 重定向 ,在防火墙主机内部转发数据包(只能在nat表的PREROUTING或OUTPUT链及其他调用链中使用)结合 “--to-ports 端口号” 映射目标端口

[root@proxy ~]# iptables -t nat -I PREROUTING -i eth0 -s 192.168.200.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128

[root@proxy ~]# iptables -t nat -I PREROUTING -i eth0 -s 192.168.200.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128
[root@proxy ~]# service iptables save
[root@proxy ~]# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination 
REDIRECT tcp -- 192.168.200.0/24 anywhere tcp dpt:https redir ports 3128 
REDIRECT tcp -- 192.168.200.0/24 anywhere tcp dpt:http redir ports 3128

[root@proxy ~]# service squid restart
停止 squid:. [确定]
启动 squid:. [确定]

[root@proxy ~]# tail -f /usr/local/squid/var/logs/access.log
1453818728.932 10 192.168.200.254 TCP_MISS/200 358 GET http://172.16.1.212/ - ORIGINAL_DST/172.16.1.212 text/html

  

web服务器 外网(VMnet2):172.16.1.212

[root@web ~]# mount /dev/cdrom /media/cdrom/
[root@web ~]# rpm -ivh /media/cdrom/Packages/httpd-2.2.15-39.el6.x86_64.rpm 
[root@web ~]# echo "<h1>www.crushlinux.com</h1>" > /var/www/html/index.html
[root@web ~]# service httpd start
[root@web ~]# service iptables stop

[root@web ~]# tail -f /var/log/httpd/access_log

客户端设置 (VMnet8):192.168.200.254
网关设置为:iptables IP 即:192.168.200.211

浏览器访问:

linux 客户机的命令界面,可以通过Unset命令取消变量

[root@client ~]# unset HTTP_PROXY HTTPS_PROXY FTP_PROXY NO_PROXY

 

ACL 访问控制
Squid提供了强大的代理控制机制,通过结合ACL(Access Control List,访问控制列表)进行限制,可以针对源地址,目标地址,访问的URL路径,访问的时间等进行条件过滤。

在squid.conf文件中,HTTP的访问控制主要由 acl 和 http_access 共同实现,控制条件和实施控制
1)使用acl定义需要控制的条件
2)通过http_access对已定义的列表做allow或deny访问控制

1)定义acl访问控制列表
acl 列表名称 列表类型 列表内容

列表名称 管理员自定义的,用于识别控制条件
列表类型 squid预定的值,对应不同类别的控制条件
列表内容 控制的具体对象,不同类型的列表所对应的内容也不一样(可包含多个值,之间是“或”关系),只要满足一个值即可匹配成功

列表类型 列表内容示例 含义/用途
src 192.168.1.168 源IP地址、网络地址、IP地址范围
192.168.1.0/255.255.255.0
192.168.1.0-192.168.3.0/24

dst www.playboy.com 目标IP地址,网段、域名
216.163.137.3
61.135.167.0/24

port 80 8000 8080 21 目标端口

srcdomain .benet.com .accp.com 客户端来源域
dstdomain .qq.com .msn.com 目标域,匹配内的所有站点

time MTWHF 8:30-17:30 用户上网时间段
12:00-13:00 M Monday
AS T Tuesday
W Wednesday
H Thursday
F Friday
A Saturday
S Sunday

maxconn 20 每个客户端的并发HTTP连接数
url_regex url_regex -i ^rtsp:// ^mms:// 用户访问的整个URL网址,可使用正则表达式 -i 忽略大小写
url_regex -i .mp3$ .rar$

urlpath_regex urlpath_regex -i sex adult nude 匹配用户的访问路径,可使用正则表达式
urlpath_regex -i .mp3$ .rar$

 

2)设置访问权限

acl all src 0.0.0.0/0.0.0.0 #任意客户机地址
acl localhost src 127.0.0.1/255.255.255.255 #源地址为127.0.0.1
acl MYLAN src 192.168.1.0/24 192.168.200.0/24 #客户机网段
acl to_localhost dst 127.0.0.0/8 #目标地址为127.0.0.0/8网段
acl MC20 maxconn 20 #最大并发连接20
acl BlackURL url_regex -i ^rtsp:// ^emule:// #以 rtsp:// emule:// 等开头的URL路径
acl MEDIAFILE urlpath_regex -i .mp3$ .mp4$ .rmvb$ #以.mp3 .mp4 .rmvb结尾的URL路径
acl WORKTIME time MTWHF 08:30-17:30 #时间为周一至周五08:30-17:30

 

 

[root@proxy ~]# mkdir /etc/squid
[root@proxy ~]# cd /etc/squid
[root@proxy squid]# vim ipblack.list #建立目标IP地址名单
61.135.167.36
125.39.127.25
60.28.14.0/24

[root@proxy squid]# vim dmblack.list #建立目标域地址名单
.qq.com
.msn.com
.live.com
.verycd.com

  

设置acl访问权限,需放在对应的acl配置行之后:
http_access allow 列表名
http_access deny 列表名

[root@proxy squid]# vim /etc/squid.conf
acl localhost src 127.0.0.1/255.255.255.255
acl MYLAN src 192.168.1.0/24 192.168.200.0/24
acl to_localhost dst 127.0.0.0/8
acl MC20 maxconn 20
acl BlackURL url_regex -i ^rtsp:// ^emule://
acl MEDIAFILE urlpath_regex -i .mp3$ .mp4$ .rmvb$
acl WORKTIME time MTWHF 08:30-17:30

acl IPBLACK dst "/etc/squid/ipblack.list"
acl DMBLACK dstdomain "/etc/squid/dmblack.list"

http_access deny MYLAN MEDIAFILE #禁止客户机下载MP3,MP4等文件
http_access deny MYLAN IPBLACK #禁止客户机访问黑名单中的IP地址
http_access deny MYLAN DMBLACK #禁止客户机访问黑名单中的网站域
http_access deny MYLAN MC20 #客户机的并发连接超时20时将被组织
http_access allow MYLAN WORKTIME #允许客户机在工作时间上网
http_access deny all #默认禁止所有客户机使用代理

列表名可以出现多个 "与" 关系,空格分开,若需要使用取反条件,可以在控制列表前添加“!”符号

http_access 按照先后顺序进行扫描,找到匹配就不再向后搜索
没有设置任何规则时:Squid服务将拒绝客户端的请求
有规则但找不到匹配的项,squid将采用与最后一条规则相反的权限,即如果最后一条规则是allow,那么就拒绝客户端请求,否则就允许

建议将常用规则放到前面,减少squid的负载。在访问控制的总体策略上,建议采用“先拒绝后允许”或“先允许后拒绝”的方式
最后加上一条设为默认策略。 http_access allow all 或者 http_access deny all

3)验证访问控制效果

测试访问权限限制
[root@proxy squid]# cat ipblack.list
61.135.167.36
125.39.127.25
60.28.14.0/24
172.16.1.212
[root@proxy squid]# service squid restart

客户机访问

测试文件下载限制
[root@web ~]# dd if=/dev/zero of=/var/www/html/test bs=1M count=15
[root@web ~]# service httpd restart

客户机访问

 

Squid日志分析:
Sarg全名是Squid Analysis Report Generator 是一款 Squid日志分析工具,采用Html格式,可以列出每一位用户访问Internet的站点信息,时间占用信息,排名,连接次数,访问量等

1.安装GD库
[root@proxy ~]# yum -y install gd httpd
[root@proxy ~]# service httpd start
[root@proxy ~]# mkdir /usr/local/sarg
[root@proxy ~]# tar xf sarg-2.3.7.tar.gz -C /usr/src/
[root@proxy ~]# cd /usr/src/sarg-2.3.7/
[root@proxy sarg-2.3.7]# ./configure --prefix=/usr/local/sarg/ --sysconfdir=/etc/sarg --enable-extraprotection && make && make install

--sysconfdir=/etc/sarg         #配置文件目录,默认是/usr/local/etc
--enable-extraprotection             #添加额外的安全保护

2.配置sarg
[root@proxy ~]# cd /etc/sarg/
[root@proxy sarg]# vim sarg.conf
7 access_log /usr/local/squid/var/logs/access.log          #指定squid的访问日志文件
25 title "Squid User Access Reports"                    #网页标题
120 output_dir /var/www/html/sarg              #sarg报告的输出目录
178 user_ip no                            #使用用户名显示
206 exclude_hosts /usr/local/sarg/noreport          #指定不计入排序的站点列表文件
184 topuser_sort_field connect reverse              #在top排序中,指定连接次数,访问字节数,采用降序排序,升序将reverse换成normal
190 user_sort_field connect reverse          #对于用户访问记录,连接次数按降序排序
257 overwrite_report no              #当那个日期报告已经存在,是否覆盖报告
289 mail_utility mailq.postfix               #发送邮件报告的命令
434 charset UTF-8                   #使用字符集
518 weekdays 0-6                                         #指定top排序时的星期周期,0为周日
523 hours 9-12,14,16,18-20                               #指定top排序时的时间周期
633 www_document_root /var/www/html          #网页根目录

为不计入排序的站点准备配置文件,文件中添加的域名不被显示在排序中

[root@proxy sarg]# touch /usr/local/sarg/noreport

设置命令符号连接,便于执行sarg
[root@proxy sarg]# ln -s /usr/local/sarg/bin/sarg /usr/local/bin/

[root@proxy sarg]# sarg
SARG: 纪录在文件: 20, reading: 100.00%
SARG: 成功的生成报告在 /var/www/html/squid-reports/2016Jan2
9-2016Jan29

客户机访问

计划任务:
[root@proxy ~]# vim /usr/local/sarg/daily.sh #每日报告
#!/bin/bash
#Get current date
TODAY=$(date +%d/%m/%Y)
#Get one week ago today
YESTERDAY=$(date -d "1 day ago" +%d/%m/%Y)

/usr/local/sarg/bin/sarg -l /usr/local/squid/var/logs/access.log -o /var/www/html/sarg -z -d $YESTERDAY-$TODAY &> /dev/null exit 0

[root@proxy ~]# chmod +x /usr/local/sarg/daily.sh
[root@proxy ~]# crontab -e #添加计划任务,每天00:00执行
00 00 * * * /usr/local/sarg/daily.sh
[root@proxy ~]# service crond restart
[root@proxy ~]# chkconfig crond on

 

扩展实验:配置反向代理

主要面向Internet中的客户端提供服务,对访问企业内部的web站点提供缓存加速,访问目标相对比较固定
使用squid反向代理,真正提供web服务的站点可以位于Internet,也可以位于企业局域网内,提供web服务的主机可以只有一个,也可以有多个(集群)

WEB服务器 192.168.200.212 <VMnet8> [192.168.200.211 <Linux网关服务器+Squid服务器> 172.16.1.2 ] <VMnet2> Client 172.16.1.100

反向代理服务器地址:

内网(VMnet8):192.168.200.211
外网(VMnet2):172.16.1.2

添加反向代理支持
[root@proxy ~]# vim /etc/squid.conf
http_port 172.16.1.2:80 vhost

vhost 虚拟主机映射(vhost与transparent不可同时使用)

cache_peer web服务器地址 服务器类型 http端口 icp端口 [可选项]

服务器类型:到目标主机的缓存级别,上游web主机一般使用parent
icp端口: 用于连接相邻ICP(Internet Cache Protocol)缓存服务器(通常为另一台squid主机没有则为 0)
可选项: 提供缓存时的一些附件参数,
originserver 该服务器作为提供web服务的原始主机
weight=n 指定服务器的优先级,n为数字,数字越大优先级越高(默认为 1)
max-conn=n 指定反向代理主机到该web服务器的最大连接数

案例:
cache_peer 192.168.200.212 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.200.200 parent 80 0 originserver weight=2 max-conn=15

[root@proxy ~]# vim /etc/squid.conf
cache_peer 192.168.200.212 parent 80 0 originserver

[root@proxy ~]# service squid restart
停止 squid: [确定]
启动 squid:. [确定]
[root@proxy ~]# service iptables stop
清除防火墙规则: [确定]
把 chains 设置为 ACCEPT 策略:nat filter [确定]
正在卸载 Iiptables 模块: [确定]

[root@proxy ~]# tail -f /usr/local/squid/var/logs/access.log
1453824172.602 3 172.16.1.100 TCP_MISS/200 358 GET - FIRSTUP_PARENT/192.168.200.212 t
ext/html

web服务器:192.168.200.212
[root@web ~]# hostname web.com
[root@web ~]# bash
[root@web ~]# mount /dev/cdrom /mnt/
[root@web ~]# rpm -ivh /mnt/Server/httpd-2.2.3-43.el5.i386.rpm
[root@web ~]# echo "www.crushlinux.com" > /var/www/html/index.html
[root@web ~]# service httpd start
停止 httpd: [确定]
启动 httpd: [确定]

[root@web ~]# tail -f /var/log/httpd/access_log
192.168.200.211 - - [27/Jan/2016:08:03:20 +0800] "GET / HTTP/1.1" 200 28 "-" "Mozilla/4.0 (compatible; MSIE 6
.0; Windows NT 5.1; SV1)"

客户端设置 (VMnet2):172.16.1.100
浏览器访问:

 

编辑:服务器运维 本文来源:代理分为正向代理和反向代理,因此我需要将升

关键词: