squid正向代理服務器

 原理:Squid 是一個萬維網客戶的高性能代理緩存服務器。它支持 FTPgopher 以及 HTTP 數據對象。與傳統的緩存軟件不同,Squid 只用一個非堵塞的 I/O 驅動的進程來處理所有請求。Squid 保存元數據,把特別熱門的對象緩存在內存中;它還緩存 DNS 查尋,支持非堵塞 DNS 查尋,並對失敗的請求實現負緩存。

Squid 由一個主服務器程序 squid,一個域名系統查尋程序 (dnsserver),一個用來檢索 FTP 數據的程序 (ftpget),以及一些管理和客戶工具組成。

squid正向代理服務器

 

原理:正向代理就是通常所說的代理,是某臺電腦通過一臺服務器來上Internet網的這種方式,其中這臺電腦就叫客戶機,這臺服務器就叫正向代理服務器也就是通常所說的代理服務器。在這種方式中,你是主動的,網站是被動的,網站那裏不能得到你的真實ip地址。(通俗講法)正向代理服務器。它只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器(一般在IE-Internet選項-連接-局域網設置),並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。

常見的代理服務器有SquidVarnish(只做反向代理)、ATSNginx(既是可以做web服務器又可以做反向代理,但通常做反向代理)

按照上面的原理我們來畫拓撲圖

 

實現正向代理服務器的過程

1先在正向代理服務器安裝squid組件,(服務器需要2塊網卡,1塊是(圖中eth1)接用來連接外網,一塊是(圖中eth0host-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 0.0.0.0:3128                0.0.0.0:*                   LISTEN      4508/(squid)       

udp        0      0 0.0.0.0:44439               0.0.0.0:*                               4508/(squid)       

udp        0      0 0.0.0.0:3130                0.0.0.0:*                               4508/(squid)       

[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對應ip3128端口

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/416表示16個一級子目錄,256個二級子目錄

5. 查找http_access  

http_access allow localhost  637

http_access allow all  #修改http_access deny allhttp_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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章