centos 6或7 squid 代理服务器搭建
一、简介
代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。
Squid是一个缓存Internet 数据的软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向Squid 发出一个申请,要Squid 代替其进行下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid 把保存的备份立即传给用户,使用户觉得速度相当快。Squid 可以代理HTTP、FTP、GOPHER、SSL和WAIS等协议并且Squid 可以自动地进行处理,可以根据自己的需要设置Squid,使之过滤掉不想要的东西。
1.1 工作流程
当代理服务器中有客户端需要的数据时:
a. 客户端向代理服务器发送数据请求;
b. 代理服务器检查自己的数据缓存;
c. 代理服务器在缓存中找到了用户想要的数据,取出数据;
d. 代理服务器将从缓存中取得的数据返回给客户端。
当代理服务器中没有客户端需要的数据时:
1. 客户端向代理服务器发送数据请求;
2. 代理服务器检查自己的数据缓存;
3. 代理服务器在缓存中没有找到用户想要的数据;
4. 代理服务器向Internet 上的远端服务器发送数据请求;
5. 远端服务器响应,返回相应的数据;
6. 代理服务器取得远端服务器的数据,返回给客户端,并保留一份到自己的数据缓存中。
Squid代理服务器工作在TCP/IP的应用层。
1.2 Squid 分类
按照代理类型的不同,可以将Squid 代理分为正向代理和反向代理,正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。
-
- 普通代理:需要客户机在浏览器中指定代理服务器的地址、端口;
- 透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理;
- 反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
二、普通代理搭建
1、操作系统: centos 6.10
2、squid 服务器公网IP:123.123.123.5
3、客户端IP:110.11.3.0/24
4、实验拓扑图如下:
5、安装
a、关闭防火前 和 selinux、httpd
b、开启内核路由转发功能
#vim /etc/sysctl.conf
修改为: net.ipv4.ip_forward = 1
# sysctl -p
c、安装squid 包
# yum install squid -y
d、生成密码文件,用于squid代理的web认证 (如果不需要认证,此步骤无需操作)
# yum install httpd-tools -y
# sudo htpasswd -bc /etc/squid/passwords 用户名 密码
# sudo chmod o+r /etc/squid/passwords
e、编辑配置文件
# vim /etc/squid/squid.conf
#设置允许被代理的网段的ACL
acl test src 110.11.3.0/24 ( test:客户端IP组名称,参数:all 允许全部:acl test src all)
# 以下三行用于认证
centos6:auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwords
centos7:auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
#用于配置高匿()
request_header_access Via deny all
request_header_access X-Forwarded-For deny all
#开启https代理
http_access allow CONNECT !SSL_ports #将deny 改为allow
#开启ACL代理,或密码认证代理
http_access allow test
http_access allow authenticated
#设置服务端口(默认端口3128)
http_port 3128
#配置多IP模式
acl random11 random 1/11
acl random10 random 1/10
acl random9 random 1/9
acl random8 random 1/8
acl random7 random 1/7
acl random6 random 1/6
acl random5 random 1/5
acl random4 random 1/4
acl random3 random 1/3
acl random2 random 1/2
acl random1 random 1/1
tcp_outgoing_address 服务器IP_11 random11
tcp_outgoing_address 服务器IP_10 random10
tcp_outgoing_address 服务器IP_9 random9
tcp_outgoing_address 服务器IP_8 random8
tcp_outgoing_address 服务器IP_7 random7
tcp_outgoing_address 服务器IP_6 random6
tcp_outgoing_address 服务器IP_5 random5
tcp_outgoing_address 服务器IP_4 random4
tcp_outgoing_address 服务器IP_3 random3
tcp_outgoing_address 服务器IP_2 random2
tcp_outgoing_address 服务器IP_1 random1
#设置日志输出格式(日志默认路径:/var/log/squid/)
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %<A
#可以删除和注销一些无用配置
1、默认自带的ACL
2、注销一下行
#http_access allow localhost manager
#http_access deny manager
#http_access deny to_localhost
f、监测配置及初始化服务 (Centos7 不需要执行此步骤)
# squid -k check
# squid -z
g、启动服务并开机自启动
# service squid restart (Centos 6) # systemctl restart squid (Centos 7)
# chkconfig squid on (Centos 6) # systemctl enable squid (Centos 7)
三、客户端测试
1、浏览器测试
打开浏览器(以IE为例,其他类似),菜单栏 -> 工具 -> Internet 选项 -> 连接 -> 局域网设置 -> 代理服务器,按照以下格式设置。
浏览器访问:http://httpbin.org/get
2、代码测试多IP代理是否成功:
import requests #pip install requests
import time
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36',
}
proxies={
'http':'x.x.x.x:3128',
'https':'x.x.x.x:3128',
}
for i in range(10):
print(i)
try:
response = requests.get('http://httpbin.org/get',proxies=proxies,headers=headers)
print(response.text)
except requests.exceptions.ConnectionError as e:
print('Error',e.args)
time.sleep(10)