1. 背景
? ? ? ?由于去年集團(tuán)某分公司發(fā)生了信息泄露的安全事故,所以集團(tuán)公司今年采取比較嚴(yán)格的網(wǎng)絡(luò)安全管理措施。原來不通過代理服務(wù)器的上網(wǎng)方式已經(jīng)一去不復(fù)返了,部門內(nèi)有些項目中使用的虛擬機(jī)系統(tǒng)還有訪問網(wǎng)絡(luò)的需求,因而需要通過配置代理上網(wǎng)。此類配置的文章網(wǎng)上有很多,但都不夠完整。比如,對有認(rèn)證要求的代理服務(wù)器的配置鮮有提及。本文主要把這些配置做了總結(jié)記錄,希望能給有類似需求的人帶來些微幫助。
2. 虛擬機(jī)環(huán)境
虛擬機(jī):VMware(R) Player 6.0.4 build-2249910
主機(jī)OS:Windows 7 Professional, 64-bit 6.1.7601, ServicePack 1
Ubuntu OS: ubuntukylin-17.04 64bit
虛擬機(jī)網(wǎng)絡(luò)連接方式:NAT (共享主機(jī)的IP地址)
注:上述是本文試驗成功的環(huán)境。
3. 無認(rèn)證要求的代理設(shè)置
? ?3.1 ?圖形界面方式設(shè)置
? ? ? 在虛擬機(jī)中的ubuntu系統(tǒng)桌面,進(jìn)入系統(tǒng)設(shè)定,然后點擊網(wǎng)絡(luò)設(shè)定;在網(wǎng)絡(luò)設(shè)定的彈出框中,選擇Network proxy,如上圖輸入代理服務(wù)器的IP地址和段口號;點擊Apply system wide按鈕,將當(dāng)前代理設(shè)置適用全系統(tǒng)。
? ?3.2 CLI方式設(shè)置
????????① 用Vi命令打開環(huán)境變量文件environment(或者使用你喜歡的其他文件編輯器打開),
????????????sudo vi /etc/environment
????????????這個environment文件中儲存了ubuntu系統(tǒng)啟動時初始化完成的系統(tǒng)全局變量。
????????② 在environment文件中追加下述內(nèi)容(其中的代理服務(wù)器當(dāng)然要使用自己的)。
????????????http_proxy="http://172.32.1.222:8080/"
????????????https_proxy="http://172.32.1.222:8080/"
????????????ftp_proxy="http://172.32.1.222:8080/"
????????????no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
????????????socks_proxy="http://172.32.1.222:8080/"
????????????HTTP_PROXY="http://172.32.1.222:8080/"
????????????HTTPS_PROXY="http://172.32.1.222:8080/"
????????????FTP_PROXY="http://172.32.1.222:8080/"
????????????NO_PROXY="localhost,127.0.0.1,localaddress,.localdomain.com"
????????????SOCKS_PROXY="http://172.32.1.222:8080/"
????????有人可能已經(jīng)注意到了,上面包括了大小寫區(qū)分的兩種重復(fù)設(shè)定。為什么要這樣重復(fù)設(shè)置呢?原因就是有的程序只使用一種設(shè)定(小寫或者大寫),既然不能確定使用的哪一種,安全起見,就把大小寫都包含。使用圖形界面方式設(shè)置網(wǎng)絡(luò)代理,也修改了上面這個文件。可以在圖形界面設(shè)置完后,打開這個文件看一下。但是圖形界面的修改方式更全面一些,它同時還修改了與apt-get網(wǎng)絡(luò)訪問相關(guān)的配置文件/etc/apt/apt.conf。
????③?apt-get網(wǎng)絡(luò)代理設(shè)置
? ? 在/etc/apt/apt.conf文件中追加如下內(nèi)容:
????????Acquire::http::proxy "http://172.32.1.222:8080/";
????????Acquire::https::proxy "https://172.32.1.222:8080/";
????????Acquire::ftp::proxy "ftp://172.32.1.222:8080/";
????????Acquire::socks::proxy "socks://172.32.1.222:8080/";
????還有普遍的一種做法就是,在/etc/apt/apt.conf.d/目錄下創(chuàng)建95proxies文件,追加上述內(nèi)容,效果也是一樣的。但是對于需要認(rèn)證的代理服務(wù)器而言,這種設(shè)置方法是無效的,這種情況下如何設(shè)置,下文會有講述。
????④ git的代理設(shè)定方式
? ? ??http及https協(xié)議
????????git config --global http.proxy http://172.32.1.222:8080
????????git config --global https.proxy https://172.32.1.222:8080
? ? ??git協(xié)議代理
????????$ sudo apt-get install socat
????????$ sudo vi /usr/bin/gitproxy
????????--------------------------
????????#!/bin/bash
????????PROXY=172.32.1.222
????????PROXYPORT=8080
????????PROXYAUTH=username:password
????????exec socat ?STDIO PROXY:$PROXY:$1:$2,proxyport=$PROXYPORT,proxyauth=$PROXYAUTH
????????--------------------------
????????$ sudo chmod+x /usr/bin/gitproxy
????????$ git config --global core.gitproxy gitproxy
????????注:記得修改上面的代理服務(wù)器地址以及gitproxy 文件中的username和password 。
4. 有認(rèn)證要求的代理設(shè)置
? ? 4.1 圖形界面的設(shè)置方式
????? 沒弄懂怎么設(shè)置,知道的可以在評論中貼出來。
? ? 4.2 CLI方式設(shè)置
? ? ? ? ? ?設(shè)置文件還是 /etc/environment,內(nèi)容稍稍不同。需要把代理設(shè)定內(nèi)容改為如下的形式:
?????????????????? "http://username:password@172.32.1.222:8080/"
????????????與apt-get網(wǎng)絡(luò)訪問相關(guān)的配置文件也要進(jìn)行如上的修改。
????????????但是修改/etc/apt/apt.conf.d/95proxies文件不起作用,而是應(yīng)該修改/etc/apt/apt.conf。
????4.3 URL encoding
? ? ? ? ? ? 要注意的是,上面那些設(shè)定內(nèi)容是URL格式的,因此需要對用戶名和密碼進(jìn)行URL編碼。
??????? ????例如,訪問代理服務(wù)器的用戶名為mobai,密碼為(mobai4u,\) ?那么上述地址就要編碼為:
???????????????? "http://mobai:(mobai4u%2C%5C)@172.32.1.222:8080/"
?????????? 這算是一個坑吧,解決了后覺得理所當(dāng)然,實際上也頗費了一點時間。
? ? ? ? ? ?至于URL編碼,可以通過以下幾個網(wǎng)站進(jìn)行:
?????????????????http://meyerweb.com/eric/tools/dencoder/
?????????????????http://www.url-encode-decode.com/
?????????????????http://www.blooberry.com/indexdot/html/topics/urlencoding.htm
5. 結(jié)束語
?? 虛擬機(jī)中Ubuntu系統(tǒng)的上網(wǎng)代理配置其實比較簡單,對于有認(rèn)證要求的代理配置稍微有點麻煩,要注意特殊字符的URL編碼。另外,如果修改了配置文件后,仍然不能訪問網(wǎng)絡(luò),別忘了打開一個新的console嘗試一下,實在不行重啟系統(tǒng)。其實這種配置方法還是比較繁瑣,有簡單點的方法,那就是使用ProxyChains,具體內(nèi)容請參考 Ubuntu系統(tǒng)中使用ProxyChains設(shè)置網(wǎng)絡(luò)代理。