原理:Squid 是一個萬維網客戶的高性能代理緩存服務器。它支持 FTP、gopher 以及 HTTP 數據對象。與傳統的緩存軟件不同,Squid 只用一個非堵塞的 I/O 驅動的進程來處理所有請求。Squid 保存元數據,把特別熱門的對象緩存在內存中;它還緩存 DNS 查尋,支持非堵塞 DNS 查尋,並對失敗的請求實現負緩存。
Squid 由一個主服務器程序 squid,一個域名系統查尋程序 (dnsserver),一個用來檢索 FTP 數據的程序 (ftpget),以及一些管理和客戶工具組成。
squid正向代理服務器
原理:正向代理就是通常所說的代理,是某臺電腦通過一臺服務器來上Internet網的這種方式,其中這臺電腦就叫客戶機,這臺服務器就叫正向代理服務器也就是通常所說的代理服務器。在這種方式中,你是主動的,網站是被動的,網站那裏不能得到你的真實ip地址。(通俗講法)正向代理服務器。它只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器(一般在IE-Internet選項-連接-局域網設置),並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。
常見的代理服務器有Squid、Varnish(只做反向代理)、ATS、Nginx(既是可以做web服務器又可以做反向代理,但通常做反向代理)
按照上面的原理我們來畫拓撲圖
實現正向代理服務器的過程
(1)先在正向代理服務器安裝squid組件,(服務器需要2塊網卡,1塊是(圖中eth1)橋接用來連接外網,一塊是(圖中eth0)host-only鏈接方式,用於和內網主機鏈接)
通過rpm來安裝squid軟件包
[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm #安裝squid軟件包
warning: squid-2.6.STABLE21-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:squid ########################################### [100%]
[root@localhost Server]# rpm -ql squid |less #安裝好後我們來查看文件存放路徑
/etc/httpd/conf.d/squid.conf #和apache可以一起使用
/etc/logrotate.d/squid
/etc/pam.d/squid
/etc/rc.d/init.d/squid #控制腳本
/etc/squid/squid.conf #服務器的主要配置文件
/etc/squid/squid.conf.default #如果配置文件不小心被刪除,這個文件是配置文件模板
/usr/lib/squid #服務器的安裝位置
/var/log/squid #日誌存放位置
/var/spool/squid #緩存存放
安裝好後這時我們來啓動squid
[root@localhost Server]# service squid start
init_cache_dir /var/spool/squid... 啓動 squid:. [確定]
#Squid的監聽端口是tcp/3128 udp/3130
[root@localhost ~]# netstat -tupln |grep squid
tcp 0 0
udp 0 0
udp 0 0
[root@localhost ~]#
安裝完成後squid默認配置是作爲正向代理,向內網用戶提供鏈接外網服務,可以配置squid.conf來限制內網用戶上網時間,訪問網址限制,訪問外網文件格式和圖片限制等
(2)我們進行配置
vim配置squid.conf文件 (別忘記配置前先複製備份)
squid的配置文件共有4519行
[root@localhost ~]# vim /etc/squid/squid.conf
1.# Squid normally listens to port 3128 #在920行
http_port 192.168.1.254:3128 # 讓squid監聽eth0對應ip的3128端口
2. # cache_mem 8 MB
cache_mem 80 MB #在1576行添加squid可以使用的內存大小
3.# TAG: visible_hostname #在1995行添加一行visible_hostname 自行解析容易出錯
visible_hostname 192.168.1.254 我使用的是主機的網關
4. 查找cache_dir # 此是設置緩存目錄
# TAG: cache_dir 在1638行
cache_dir ufs /var/spool/squid 100 16 256 #在安裝squid軟件包後,緩存就存放在該目錄,100表示緩存大小100M,一般爲內存的1/4,16表示16個一級子目錄,256個二級子目錄
5. 查找http_access
http_access allow localhost 在637行
http_access allow all #修改http_access deny all爲http_access allow all 允許用戶訪問
上述操作僅僅是設置完內網可以通過squid訪問外網,並沒有對訪問進行限制
啓動squid服務
[root@localhost]#squid –k parse #查看語法錯誤
[root@localhost ~]# service squid restart
停止 squid: [確定]
啓動 squid:. [確定]
(3)
PC1的設置
PC1我用的是windows server 2003虛擬機,此虛擬機用host-only連接,而且PC1不用配置網關地址,代理服務器在PC上的配置在IE瀏覽器→屬性→連接
(4)通過編輯主配置文件的acl實現正向代理的訪問控制
acl 列表名稱 列表類型 列表內容
1.acl aclname src ip-address/netmask ... (clients IP address)
#基於客戶端來源IP地址控制
例:1.acl MYNETWORKS src 192.168.1.100/32
http_access allow MYNETWORKS #允許上面的IP通過squid正向代理訪問網絡
http_access deny all #除了上面允許的訪問控制之外全部拒絕訪問
2.acl aclname src addr1-addr2/netmask ... (range of addresses)
#基於客戶端來源IP地址範圍的控制
3.acl aclname dst ip-address/netmask ... (URL host's IP address)
#基於目標主機IP地址控制
4.acl aclname myip ip-address/netmask ... (local socket IP address)
#基於本主機IP地址控制
5.acl aclname arp mac-address ... (xx:xx:xx:xx:xx:xx notation)
#基於MAC地址控制
6.acl aclname srcdomain .foo.com ... # reverse lookup, client IP
#基於來源域的控制此方法先解析ip再對ip禁止訪問,格式如.abc.com
7.acl aclname dstdomain .foo.com ... # Destination server from URL
#基於目標URL控制
8.acl aclname srcdom_regex [-i] xxx ... # regex matching client name
9.acl aclname dstdom_regex [-i] xxx ... # regex matching server
10.acl aclname time [day-abbrevs] [h1:m1-h2:m2]
day-abbrevs:
S - Sunday
M - Monday
T - Tuesday
W - Wednesday
H - Thursday
F - Friday
A - Saturday
h1:m1 must be less than h2:m2
#基於時間的控制
例 acl worktime time 08:00-12:00 14:00-18:00 #在這個時間段不能上網
http_access deny worktime
11.acl aclname url_regex [-i] ^http:// ... # url_regex -i 跟完整路徑-i忽略大小寫
12.acl aclname urlpath_regex [-i] \.gif$ ... #urlpath_regex 部分路徑,圖片格式控制
13.acl aclname port 80 70 21 ... #port端口訪問控制
14.acl aclname port 0-1024 ... # ranges allowed(端口範圍)
15.acl aclname myport 3128 ... # (local socket TCP port)
16.acl aclname proto HTTP FTP ... #proto定義協議
17.acl aclname method GET POST ... #方法
18.acl aclname browser [-i] regexp ... # browser 瀏覽器訪問控制
當然上面列的都是常用控制,我們這個實驗是允許局域網內192.168.1.0/24網段通過代理服務器上網,可以用IP範圍,也可以用網段,其他控制就要看你需求了。
1. acl ip src 192.168.1.0/24
http_access allow all ip
2.acl ip src 192.168.1.1 -192.168.1.243 255.255.255.255
http_access allow all ip