轉載 http://kangshuo.blog.51cto.comlinux
簡介:web
squid 是 Linux系統中最經常使用的一款開源代理服務軟件正則表達式
(官方網站:http//www.squid-cache.org)瀏覽器
能夠很好地實現HTTP和FTP,以及DNS查詢、SSL等應用的緩存代理,功能十分強大。緩存
做爲應用層的代理服務軟件,squid主要提供緩存加速、應用層過濾控制的功能。安全
代理的工做機制服務器
當客戶機經過代理來請求web頁面時,指定的代理服務器會先檢查本身的緩存,若是緩存中已有客戶機須要的頁面,則直接將緩存中頁面內容反饋給客戶機;若是緩存中沒有客戶機要訪問的頁面,則由代理服務器向Internet發送訪問請求,當得到返回的web頁面之後,將網頁數據保存到緩存中併發送給客戶機網絡
HTTP代理的緩存加速對象主要是文字、圖像等靜態web元素。當客戶機在不一樣的狀態下訪問同一網站應用時,或者不一樣的客戶機訪問同一網站應用時,能夠直接從代理服務器的緩存中獲取相應的結果。這樣就大大減小了向Internet提交重複的網站web頁面請求的過程,提升了客戶機的訪問響應速度。
併發
因爲客戶機的web訪問請求其實是由代理服務器來代替完成的,從而能夠隱藏用戶的真實IP地址,起到必定安全保護做用。dom
代理的基本類型:
1.傳統代理:
必須在客戶機經過瀏覽器、QQ聊天工具、下載應用軟件程序中,手動設置代理服務器的IP地址和端口。
纔可使用代理來訪問網絡應用。
傳統代理適用於Internet互聯網環境中。
2.透明代理:
和傳統代理同樣,主要區別在於客戶機不須要指定代理服務器的地址和端口號,而是經過默認路由、防火牆策略將訪問web請求的80端口重定向到代理服務器的3128端口作映射,重定向的過程對客戶機來講是透明的
透明代理使用於局域網環境中。
安裝squid服務的相關配置及命令
squid的版本:3.4.6
squid的版本:3.4.11 特性:輔助協議擴展、騰訊雲SSL證書、Store-ID、交易註釋、組播DNS
1、搭建傳統代理服務
1.編譯安裝squid
上述編譯模塊參數含義以下:
--prefix=/usr/local/squid //安裝目錄
--sysconfdir=/etc //單獨將配置文件修改到其餘目錄
--enable-arp-acl //能夠在規則中直接經過客戶端MAC進行管理,防止客戶端使用IP欺騙
--enable-linux-netfilter //使用內核過濾
--enable-linux-tproxy //支持透明模式
--enable-async-io=值 //異步I/O提高存儲性能
--enable-err-language="Simplify_Chinese" //錯誤信息的顯示語言
--enable-underscore //容許URL中有下劃線
--enable-poll //使用poll()模式,提高性能
--enable-gnuregex //使用GNU正則表達式
安裝完後,建立連接文件,建立用戶和組
2.Squid的配置文件
Squid的配置文件位於/etc/squid.conf,更詳細的配置項請參考/etc/squid.conf.documented文件。
3.Squid的運行控制
(1)檢查配置文件語法是否正確
(2.)啓動、中止Squid
第一次啓動squid服務時,會自動初始化緩存目錄。在沒有可用的Squid服務腳本的狀況下,也能夠直接調用Squid程序來啓動服務,這時須要先進行初始化。
(3.)使用squid服務腳本
爲了使squid服務的啓動、中止、重載等操做更加方便,並使用chkconfig和service工具來進行管理。
將編寫好的腳本受予執行權限,而後再將squid的程序添加爲系統服務
在squid服務器上添加一條防火牆規則,容許客戶端經過squid代理去訪問web網站
客戶機的代理配置
注意:若是客戶機是一臺Linux的話,要想使用代理服務器(如elinks網頁瀏覽器、wget下載工具),必須經過環境變量來指定代理服務器的地址、端口等信息。
傳統代理服務的驗證方法
(1.)查看squid訪問日誌的新增記錄
tail /usr/local/squid/var/logs/access.log
經過查看squid的服務器的訪問日誌,能夠發現客戶機172.16.16.110去訪問web網站服務器172.16.16.172的記錄消息。
(2.)查看web訪問日誌的新增記錄
tail /var/log/httpd/access_log
在被訪問的web服務器中,經過訪問日誌發現來自代理服務器172.16.16.22的訪問記錄,說明當使用代理服務器時,web服務器並不知道客戶機的真實IP地址,由於實際是由代理服務器替它在訪問。
172.16.16.22的IP地址是代理服務器的地址。
2、搭建透明代理服務
在Linux網關上,構建squid代理服務爲局域網客戶機去訪問Internet提供服務
在全部的局域網客戶機上,只需正確配置IP地址、默認網關便可。
1.配置squid支持透明代理
squid服務的默認配置是不支持透明代理的,所以須要修改配置文件。squid2.6以上版本的只需在http_port配置行後面加上一個transparent選項便可。
2.設置iptables的重定向策略
注意:透明代理服務中的squid服務器是構建在Linux網關主機上的,因此要設置防火牆策略將客戶機訪問外網的數據包交給squid服務器去處理,在防火牆上設置一條REDIRECT(重定向策略),其做用就是將客戶機訪問互聯網的端口映射給squid服務器的3128端口。
注意:REDIRECT也是一種數據包控制類型,只能在nat表的PREROUTING或OUTPUT鏈以及被調用的鏈中使用。
注意:此時還要開啓路由轉發功能,不然數據是過不去的!!!
3.驗證透明代理的使用
注意:清除手動代理相關的配置
驗證結果:
在squid代理服務器日誌發現,客戶機192.168.4.110訪問過目標網站172.16.16.172的記錄信息
在被訪問的web網站服務器上發現,來自代理服務器的IP地址爲172.16.16.1的訪問記錄,從而隱藏了真實IP。
3、ACL訪問控制
能夠針對源地址、目標地址、訪問的URL路徑、訪問的時間等各類條件進行過濾
ACL訪問控制經過如下兩個步驟來實現:其一,使用acl配置項定義須要控制的條件 其二,經過http_access配置項對已定義的列表作容許 或 拒絕 訪問的控制。
1.定義訪問控制列表
acl 列表名稱 列表類型 列表內容
經常使用的訪問控制列表類型:
src : 源IP地址、網段、IP地址範圍
dst : 目標IP地址、網段、主機名
port : 目標端口
dstdomain :目標域,匹配域內全部站點
time : 使用代理服務的時間段
maxcom : 每一個客戶機的併發鏈接數
url_regex : 目標資源的URL地址,-i表示忽略大小寫
urlpath_regex :目標資源的整個URL路徑。
2.設置訪問權限
http_access allow或deny 列表名 取反時,加!符號
驗證訪問控制結果