CentOS7 Squid 網路代理安裝和配置
爬蟲代理的作用
在我們的爬蟲系統中,如果在一臺伺服器上不停的訪問通一個目標站點,很有可能因為對方的發爬蟲策略而將您的爬蟲請求給阻止,導致您無法獲取網站的資訊。所以我們一般採用一個代理池的方式,不停的切換代理,將爬蟲的請求偽裝成為不同代理髮起的,從而避開這種問題。這裡以 centos7 和 squid 為例介紹如何建立一個 http 或者 https 的代理伺服器。
軟體安裝
該軟體需要使用 openssl 元件,所以如果沒有安裝請執行如下命令進行安裝
yum install openssl
首先檢查是否已經安裝了 squid 軟體。執行如下的命令
rpm -qa squid
如果顯示 package squid is not installed 則表示沒有安裝,否則會顯示具體的安裝包資訊。如果沒有安裝,則執行安裝命令如下
yum install -y squid*
結束後,再執行檢查命令,則顯示結果如下
[root@localhost ~]# rpm -qa squid squid-3.5.20-12.el7.x86_64
軟體配置
squid 的配置檔案預設是 /etc/squid/squid.conf 檔案。預設情況下,squid 只允許有限幾個內網地址段來訪問。所以我們在的 acl localcal 部分加入如下的內容:
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl localnet src 0.0.0.0/20
上面一行是原來有的,下面一個行是我們先加入的。然後我們改一下預設的埠號
#http_port 3128 http_port 5872
最後修改一下訪問日誌配置
coredump_dir /var/spool/squid access_log /var/log/squid/access.log
下面一行設定了訪問日誌的檔案為 /var/log/squid/access.log
啟動服務
首先需要在防火牆中開放剛才配置的埠 5872 。執行如下命令
firewall-cmd --zone=public --add-port=5872/tcp --permanent firewall-cmd --reload
這個命將 5872 埠加入到防火牆的開發埠列表中持久化儲存,並且重新載入防火牆策略,讓其生效
然後執行命令啟動
systemctl start squid
啟動後,我們執行命令命令
[root@localhost ~]# netstat -lnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local AddressForeign AddressStatePID/Program name tcp00 127.0.0.1:250.0.0.0:*LISTEN1689/master tcp00 0.0.0.0:156780.0.0.0:*LISTEN20050/sshd tcp600 :::5872:::*LISTEN27903/(squid-1)
可以看到,squid 服務已經在埠 5872 上開始監聽了
使用和監控
已 chrome 為例。開啟 chrome “設定選單”,在底部展開“高階”,在底部找到“開啟代理設定”選單,在對話方塊中點選“區域網設定”按鈕,在新出現的介面中輸入代理伺服器的設定。如下圖所示

chrome 代理設定
確定後,就可以在瀏覽器中使用代理伺服器來訪問網路了。為了看到效果,我們在瀏覽器上訪問 ofollow,noindex">《不一樣的 Java 日期格式化大全》 這篇文章,同時對代理伺服器的訪問日誌進行監控,看到日誌輸出如下
[root@localhost ~]# tail -f /var/log/squid/access.log 1543289079.27316467 192.168.1.60 TCP_TUNNEL/200 3687 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 - 1543289079.27416715 192.168.1.60 TCP_TUNNEL/200 152 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 - 1543289079.27416667 192.168.1.60 TCP_TUNNEL/200 4159 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 - 1543289079.5240 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html 1543289081.6640 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html 1543289082.4330 192.168.1.60 TCP_DENIED/403 4085 CONNECT events.jianshu.io:4006 - HIER_NONE/- text/html 1543289097.96635623 192.168.1.60 TCP_TUNNEL/200 55584 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 - 1543289097.99135259 192.168.1.60 TCP_TUNNEL/200 16029 CONNECT upload-images.jianshu.io:443 - HIER_DIRECT/61.156.196.84 - 1543289099.31160913 192.168.1.60 TAG_NONE/503 0 CONNECT clients4.google.com:443 - HIER_NONE/- - 1543289100.32138894 192.168.1.60 TCP_TUNNEL/200 23165 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 - 1543289109.31247056 192.168.1.60 TCP_TUNNEL/200 10707 CONNECT upload.jianshu.io:443 - HIER_DIRECT/150.138.176.244 -
可以看到,是通過代理伺服器的轉發來訪問的目標網站。
代理伺服器鑑權
上面的代理伺服器如果是在公網上提供服務的,那麼所有人都能使用這個代理服務。如果我們想加入鑑權機制對這個進行限制,則需要增加其他配置。這裡我們採用使用者名稱和密碼的鑑權方式,具體方法如下。
首先用 apache 的密碼工具生成使用者密碼,如果沒有的話需要先安裝 httpd 軟體
yum install httpd
然後生成密碼。
[root@localhost ~]# htpasswd -c /etc/squid/passwd youname New password: Re-type new password: Adding password for user youname
如果沒有 htpasswd 命令,則安裝 apache
yum install -y httpd
在 http_access deny all 語句之前,加入如下的配置內容
cache_dir ufs /var/spool/squid 100 16 256 cache_mem 128 MB maximum_object_size 128 MB cache_dir ufs /var/spool/squid 100 16 256 auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd auth_param basic children 5 auth_param basic realm your message auth_param basic credentialsttl 5 hours acl ncsa_users proxy_auth REQUIRED http_access allow ncsa_users
然後重啟