企業環境
公司搭建一台代理伺服器,需要提高内網通路網際網路速度并能夠對内部員工的上網行為進行限制,采用squid代理伺服器軟體,對内部網絡進行優化。
需求分析
提高使用者通路速度,需要對squid伺服器進行優化并且需要使用acl對通路行為進行相應限制。
解決方案
1、路由及NAT設定
設定網卡IP位址
eth0:192.168.8.188 netmask:255.255.255.0
vim /etc/sysconfig/network-scripts/ifcfg-eth0
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239091938opqo.png"></a>
eth1:dhcp擷取
vim /etc/sysconfig/network-scripts/ifcfg-eth1
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239091942UKD6.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239091950jO7A.png"></a>
開啟核心路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
<a href="http://redking.blog.51cto.com/attachment/200904/3/27212_1238726938V3j5.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239091953Nmdh.png"></a>
配置iptables設定nat,即透明代理
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
如果隻設定下面一句而上面一句不設定,用戶端也可以上網,隻是不通過squid哈~
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
儲存iptables設定
service iptables save
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_12390919557s14.png"></a>
2、修改selinux設定
setsebool -P squid_disable_trans on
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239091957YutH.png"></a>
注意:
如果配置squid透明代理,要開啟selinux的squid_disable_trans,否則squid不能啟動哈~
3、添加squid系統使用者群組
[root@rhel5 ~]# groupadd squidadmin
[root@rhel5 ~]# useradd squidadmin -g squidadmin -s /sbin/nologin
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239091965Kfhw.png"></a>
4、建立相應目錄
[root@rhel5 ~]# mkdir /usr/local/squid
[root@rhel5 ~]# mkdir /usr/local/squid/cache
[root@rhel5 ~]# mkdir /usr/local/squid/var
[root@rhel5 ~]# mkdir /usr/local/squid/var/logs
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239091966NKMg.png"></a>
5、改變目錄的所有者
為了保證服務正常啟動并可以寫入緩存、日志等資訊,我們更改目錄所有者為squidadmin哈~
[root@rhel5 ~]# chown -R squidadmin /usr/local/squid/cache
[root@rhel5 ~]# chgrp -R squidadmin /usr/local/squid/cache
[root@rhel5 ~]# chown -R squidadmin /usr/local/squid/var/logs
[root@rhel5 ~]# chgrp -R squidadmin /usr/local/squid/var/logs
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_12390919671Vt4.png"></a>
6、修改squid配置檔案
vim /etc/squid/squid.conf
設定監聽位址和端口
http_port 3128 transparent
紅色部分是支援透明代理,這是squid新版本的改進
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239091973bE3O.png"></a>
好多資料說透明代理設定為
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
實際上透明代理隻是在普通代理的基礎上加上了http_port 3128 transparent及IPTABLES的端口轉發功能,使用Iptables或者Ipchains實作,即把使用者對外部www站點的通路轉到Squid的端口上去,相對用使用者來講是“透明”的,不需在浏覽器中指明代理伺服器的IP和端口。
而對于反向代理來說,從squid2.6開始squid.conf已經沒有httpd_accel字段了哈~Squid 2.6與3.0一樣哈~相對于2.5的accel模式下配置要簡單許多,隻要設定不同的後端,cache_peer parent originserver就可以進行反向代理,而不再需要httpd_accel系列參數的配置.配置squid時最好制定内部dns,或者修改/etc/hosts檔案,否則squid可能會回環通路其自身而出現問題哈~
udp_incoming_address 0.0.0.0
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_12390919780Z3U.png"></a>
設定squid記憶體大小及cahce目錄
cache_mem 512 MB
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_12390919887bR2.png"></a>
cache_dir ufs /usr/local/squid/cache 10240 16 256
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092001nMMW.png"></a>
設定日志檔案和pid檔案位置
access_log /usr/local/squid/var/logs/access.log
cache_log /usr/local/squid/var/logs/cache.log
cache_store_log none
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092005O9Z9.png"></a>
emulate_httpd_log on
使Squid按照Web伺服器的格式建立通路記錄,Web通路記錄分析程式,就需要設定這個參數
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092013zCJk.png"></a>
pid_filename /usr/local/squid/var/logs/squid.pid
配置通路控制
acl all src 0.0.0.0/0.0.0.0
acl mynet src 192.168.8.0/255.255.255.0
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092028o30u.png"></a>
http_access allow mynet
http_access deny all
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092038dzK8.png"></a>
設定運作時的使用者群組權限
設定squid程序所有者
cache_effective_user squidadmin
設定squid程序所屬組
cache_effective_group squidadmin
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092045IoWE.png"></a>
設定管理資訊
設定squid可見主機名
visible_hostname 192.168.8.188
<a href="http://redking.blog.51cto.com/attachment/200904/3/27212_1238726996vQfD.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_12390920487fHN.png"></a>
swap性能微調
half_closed_clients off
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092052q0fh.png"></a>
cache_swap_low 80
cache_swap_high 100
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092057oY3y.png"></a>
maximum_object_size 1024 KB
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092064sI73.png"></a>
squid配置邏輯是自上而下,滿足條件即不再和下面比對。
7、檢查squid.conf配置檔案
當更改過配置檔案後最好驗證一下配置檔案:squid -k parse
8、squid服務初始化
在第一次啟動squid服務之前,一定要使用squid -z指令來使squid在硬碟緩存中建立cache目錄,或者重新設定了cache_dir字段的值之後也要使用此指令來重建立立硬碟緩存目錄哈~
如果我們要觀察此過程,我們可以加個-X參數哈~
squid -zX
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092083Vi31.png"></a>
注意:在cache目錄激活後永遠不要改變L1和L2的值哈~
9、啟動squid服務
service squid start
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_12390920940ClT.png"></a>
10、測試
squid -D檢查squid服務有沒啟動
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092095u2Ee.png"></a>
用戶端隻要設定IP位址、子網路遮罩、網關及DNS就可以直接上網了哈~
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092099eKKi.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092105VpPp.png"></a>
測試http網站
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092109IKBG.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092112fC50.png"></a>
測試https網站
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092115jIov.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092118CgX3.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092120zayM.png"></a>
測試郵箱網站
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092124UBj0.png"></a>
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092129Ny7J.png"></a>
tail /usr/local/squid/var/logs/access.log
我們會發現通路的記錄都在access.log中哈~~~
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092135mxDj.png"></a>
cat /usr/local/squid/var/logs/cache.log
<a href="http://redking.blog.51cto.com/attachment/200904/7/27212_1239092137eyed.png"></a>
此外我們還可以使用acl和http_access deny組合來禁止指定IP、指定網段、屏蔽通路指定網站及指定固定時間上網等等哈~~~
#################Michael分割線#######################
本文轉自redking51CTO部落格,原文連結:http://blog.51cto.com/redking/146981,如需轉載請自行聯系原作者