Ubuntu下搭建高匿HTTP代理(親測可用)


功能用途

     我們在生活中見過各種代理,比如我們距離火車站較遠,我們可以選擇通過距離最近的火車票代售點來購買火車票。又比如商品代理商,我們拿不到廠家的直接或者,可以通過廠家授權的代理經銷商來獲得產品。代理服務器負責轉發你的請求到目標服務器,然后將目標服務器的響應反饋給你。你可以理解為它就是個聯姻的媒婆。代理服務器可以有很多用途,比如:

  • 作為一個網絡防火牆,將內網與外網隔開。是的外網只能訪問代理服務器允許的邊界,這是我們常見的正向代理,比如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 8828

用戶名密碼認證

網絡上有很多專門爬免認證的代理的爬蟲,如果我們自己搭建的代理服務器不加認證的話,會被這些爬蟲探測到然后淪為了免費代理。

使用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     20 118.31.0.74 TCP_DENIED/407 444 HEAD http://www.baidu.com/ squid HIER_NONE/- text/html
1543199365.390     17 118.31.0.74 TCP_DENIED/407 444 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"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM