功能用途

我们在生活中见过各种代理,比如我们距离火车站较远,我们可以选择通过距离最近的火车票代售点来购买火车票。又比如商品代理商,我们拿不到厂家的直接或者,可以通过厂家授权的代理经销商来获得产品。代理服务器负责转发你的请求到目标服务器,然后将目标服务器的响应反馈给你。你可以理解为它就是个联姻的媒婆。代理服务器可以有很多用途,比如:

  • 作为一个网络防火墙,将内网与外网隔开。是的外网只能访问代理服务器允许的边界,这是我们常见的正向代理,比如ningx的转发。另外,在一个局域网中如果有一台主机可以上外网,那么我们就可以把这台机器作为代理服务器,为其他机器提供外网的访问功能。
  • 作为反爬利器,如果爬虫爬取的目标网站具有较强的反爬机制,最常见的通过IP来限制抓取频率,如果你的爬虫抓取太快,你的IP就会被封禁一段时间甚至永久封禁。此时我们就可以通过高匿代理让抓取的网站识别不出我们的真实IP。

本文提供两种代理情形:

1、两台都有外网IP,一台服务器请求资源通过另外一个服务器,本文重点讲第一种。

2、两台服务器,其中一台服务器只有内网IP,另外一台服务器有公网和内网IP。

两种配置情形大同小异,与第一种情形不同的是只需确认下面配置即可

{

# 确认服务器端ip_forward转发开启
echo 1 > /proc/sys/net/ipv4/ip_forward
ip_forward需要设定为1
sysctl -a |grep -w ip_forward
net.ipv4.ip_forward = 1

#客户端配置

export https_proxy=http://服务端内网ip:3128

}

代理安装

服务器端安装squid3

我是在Ubuntu14.04 64位环境下使用squid3搭建的代理服务器。squid3是一个主流的可配置的、健壮、低消耗的代理服务器。

sudo apt-get install squid3

配置

squid3的配置文件在/etc/squid3/squid.conf,我们使用vim编辑器来配置。

sudo vim /etc/squid3/squid.conf

我们在配置文件的末尾加入以下几行:

#允许的客户端ip
acl allcomputers src 0.0.0.0/0.0.0.0
#配置用户名密码,后面会生成passwords文件
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/passwords
auth_param basic realm proxy
acl authenticated proxy_auth REQUIRED
http_access allow authenticated allcomputers

找到http_access deny all并注释掉

#http_access deny all

最好修改一下默认的3128端口,因为这个端口是默认的,很容易被网络上的代理爬虫探测到。

http_port 

用户名密码认证

网络上有很多专门爬免认证的代理的爬虫,如果我们自己搭建的代理服务器不加认证的话,会被这些爬虫探测到然后沦为了免费代理。

使用htpasswd来创建passwords文件,htpasswd命令在软件包apache2-utils中。

sudo apt-get install apache2-utils

生成password文件

sudo htpasswd -c -d /etc/squid3/passwords 自定义用户名

然后输入两次至少8位的密码,会在/etc/squid3/目录下生成passwords文件,要保证该文件是可读的。

sudo chmod o+r /etc/squid3/passwords

启动服务,也可以使用restart,stop进行重启和关闭。

sudo service squid3 start
或者
etc/init.d/squid start

验证代理是否起作用

squid3的访问日志文件在/var/log/squid3/access.log

tail -f /var/log/squid3/access.log
1543199344.191 118.31.0.74 TCP_DENIED/ HEAD http://www.baidu.com/ squid HIER_NONE/- text/html
1543199365.390 118.31.0.74 TCP_DENIED/ HEAD http://www.baidu.com/ squid HIER_NONE/- text/html

客户端配置

另找一台linux机器打开shell,将我们的代理配置上:

export http_proxy="http://用户名:密码@代理IP:代理端口"
curl -l "http://www.baidu.com"

如果代理配置正确,回输出html,同时代理服务器上的access.log会记录这次请求。

上面的配置只会在命令行界面临时生效,如果退出命令行界面,配置会失效,接下来,我们将上面配置加入到环境变量中去

加入全局环境变量

#备份文件(很重要)
cp /etc/profile /etc/profile.bak
vim /etc/profile
#http 代理
export http_proxy="http://用户名:密码@代理服务器IP:代理端口"

配置高匿

代理分为透明代理、匿名代理、混淆代理、高匿代理,这4种代理,主要是在代理服务器端的配置不同,导致其向目标地址发送请求时,REMOTE_ADDR, HTTP_VIA,HTTP_X_FORWARDED_FOR三个变量不同。

1.透明代理(Transparent Proxy)
REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Your IP
透明代理虽然可以直接“隐藏”你的IP地址,但是还是可以从HTTP_X_FORWARDED_FOR来查到你是谁。

2.匿名代理(Anonymous Proxy)

REMOTE_ADDR = proxy IP
HTTP_VIA = proxy IP
HTTP_X_FORWARDED_FOR = proxy IP
匿名代理比透明代理进步了一点:别人只能知道你用了代理,无法知道你是谁。

3.混淆代理(Distorting Proxies)

REMOTE_ADDR = Proxy IP
HTTP_VIA = Proxy IP
HTTP_X_FORWARDED_FOR = Random IP address

如上,与匿名代理相同,如果使用了混淆代理,别人还是能知道你在用代理,但是会得到一个假的IP地址,伪装的更逼真

4.高匿代理(Elite proxy或High Anonymity Proxy)

REMOTE_ADDR = Proxy IP
HTTP_VIA = not determined
HTTP_X_FORWARDED_FOR = not determined
可以看出来,高匿代理让别人根本无法发现你是在用代理,所以是最好的选择。

下面是squid3高匿的设置,我们修改配置文件squid.conf,在最后加上

request_header_access X-Forwarded-For deny all
request_header_access From deny all
request_header_access Via deny all

测试高匿是否生效,我们用上面同样的方法访问,会显示出你使用的IP的地址,我们就可以判断显示的IP和我们使用的代理IP是否相同,如果相同,则匿名生效。

curl -l "http://www.abc.com"

Ubuntu下搭建高匿HTTP代理(亲测可用)的更多相关文章

  1. centos7下搭建高匿HTTP代理

    一.一般适用情况1.两台都有外网IP,一台服务器请求资源通过另外一个服务器,本文重点讲第一种.2.两台服务器,其中一台服务器只有内网IP,另外一台服务器有公网和内网IP. 二.前提 # 确认服务器端i ...

  2. ubuntu创建wifi热点(android可识别)亲测可用

    转自http://jingyan.baidu.com/article/ea24bc39b03fc6da62b331f0.html 如何在ubuntu系统下创建android可识别热点?一般环境下创建的 ...

  3. 【TP3.2】TP3.2下实现ajax分页(原创+亲测可用)

    一,写在最开始:ajax分页的原理,是利用了js的ajax执行请求,获取分页list和分页page [代码块],去替换页面显示数据的[代码块] 技术:js的ajax + TP3.2的fetch(&qu ...

  4. win7中python3.4下安装scrapy爬虫框架(亲测可用)

    貌似最新的scrapy已经支持python3,但是错误挺多的,以下为在win7中的安装步骤: 1.首先需要安装Scrapy的依赖包,包括parsel, w3lib, cryptography, pyO ...

  5. linux下 几个常用makefile模板,亲测可用

    一 生成动态链接库的模板: ####################### # Makefile ####################### # compile and lib parameter ...

  6. linux 一分钟搭建zookeeper linux 单机版(亲测可用)

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gzt ...

  7. 数据库工具DbVisualize安装、破解教程,亲测可用

    之前工作中遇到生产环境不允许导入Oracle的dmp文件,只能导入sql脚本,但是表中存在clob字段,直接用plsql工具无法导出clob字段,用了下dbvisualizer可以直接导出,亲测可用. ...

  8. Ubuntu下搭建yocto

    参考自: https://www.jianshu.com/p/f6e0debb5e1f https://blog.csdn.net/qq_31041847/article/details/902114 ...

  9. 在Ubuntu下搭建ASP.NET 5开发环境

    在Ubuntu下搭建ASP.NET 5开发环境 0x00 写在前面的废话 年底这段时间实在太忙了,各种事情都凑在这个时候,没时间去学习自己感兴趣的东西,所以博客也好就没写了.最近工作上有个小功能要做成 ...

随机推荐

  1. ADO.NET Entity Framework学习笔录(一)

    今天开始学习了EF的相关内容,以前只知道ADO.NET,今天学习后觉得有必要写个相关的学习心得,今天就先写第一篇. 我们的再学习的过程中所用到的环境是Windows7+SQLServer2008+VS ...

  2. 自定义GrildView实现单选功能

    首先看实现功能截图,这是一个自定义Dialog,并且里面内容由GrildView 绑定数据源,实现类似单选功能. 首先自定义Dialog,绑定数据源 自定义Dialog弹出框大小方法 最主要实现的就是 ...

  3. LeetCode-Count Univalue Subtrees

    Given a binary tree, count the number of uni-value subtrees. A Uni-value subtree means all nodes of ...

  4. Linux下修改网卡的mac地址

    方法1: # ifconfig ethX down # ifconfig ethX hw ether NEW_MAC_ADDR # ifconfig ethX up 但是这样重启后就失效了,需要再敲一 ...

  5. Chapter 1 First Sight——6

    "You didn't need to do that, Dad. I was going to buy myself a car." 你不需要这样,父亲,我会自己买一辆车的 &q ...

  6. forEach、map、filter、some、every五个数组方法

    forEach() 方法对数组的每一个元素执行一次提供的函数. map() 方法创建一个新数组,其结果是该数组都执行一次函数,原函数保持不变. filter() 方法使指定函数测试数组的每一个元素,并 ...

  7. TensorFlow简易学习[3]:实现神经网络

    TensorFlow本身是分布式机器学习框架,所以是基于深度学习的,前一篇TensorFlow简易学习[2]:实现线性回归对只一般算法的举例只是为说明TensorFlow的广泛性.本文将通过示例Ten ...

  8. Linux进程间通信-消息队列(mqueue)

    前面两篇文章分解介绍了匿名管道和命名管道方式的进程间通信,本文将介绍Linux消息队列(posix)的通信机制和特点. 1.消息队列 消息队列的实现分为两种,一种为System V的消息队列,一种是P ...

  9. C# linq操作是否延迟对照表

    ·Select - Select选择:延迟 ·Where - Where查询:延迟 ·OrderBy - 按指定表达式对集合正序排序:延迟 ·OrderByDescending - 按指定表达式对集合 ...

  10. HTTP响应状态码 含义

    100 客户端可以继续 101 指示服务器正根据 Upgrade 头切换协议 200 请求正常成功 201 指示请求成功并在服务器上创建了一个新资源 202 指示已接受请求进行处理但处理尚未完成 20 ...