Freebsd 下安裝squid

lizhaohua1998發表於2010-12-10
1、獲取Squid原始碼
安裝 wget
cd /usr/ports/ftp/wget
make install clean
下載最新squid上傳到伺服器上或者
cd /home/zhangshi
wget
2、編譯及安裝
解壓縮
tar -zxvf squid-3.1.9.tar.gz
cd squid-3.1.9
配置
./configure --prefix=/usr/local/squid --enable-arp-acl --enable-linux-netfilter --enable-err-language="Simplify_Chinese" --enable-default-err-language="Simplify_Chinese" --enable-auth="basic" --enable-baisc-auth-helpers="NCSA" --enable-underscore --enable-delay-pools

--prefix=/usr/local/squid #指定squid安裝目錄
--enable-arp-acl #客戶端的MAC地址進行管理
--enable-linux-netfilter #允許使用Linux的透明功能,目前3.0以上好像不支援此功能
#--enable-pthreads
--enable-err-language="Simplify_Chinese" # 錯誤報告訊息語言,繁體為Traditional_Chinese
--enable-default-err-language="Simplify_Chinese" #設定error_directory預設中文,繁體為Traditional_Chinese
--enable-auth="basic" #認證方式
--enable-baisc-auth-helpers="NCSA" #認證程式
--enable-underscore #允許解析的URL中出現下劃線
--enable-delay-pools #限制頻寬

其他如:
./configure
--prefix=/usr/local/squid #指定squid安裝目錄
--mandir=/usr/share/man #指定man的安裝目錄
--enable-async-io=20 #採用同步io提高效能,負載高可設大點
--disable-icmp #禁止icmp協議代理(預設不允許)
--enable-delay-pools #允許延遲限止頻寬
--enable-cache-digests #允許快取摘要,可以加快請求緩衝內容的速度(叢集用)
--enable-snmp #允許snmp協議支援(如用mrtg進行流量監控等)
--disable-ident-lookups #禁止使用RFC931識別
--enable-epoll #支援epoll的IO模式,2.6以上核心才具有
--enable-basic-auth-helpers="NCSA" #允許帶密碼驗證,NCSA 風格的使用者名稱和密碼檔
--enable-linux-netfilter #允許透明代理
--enable-arp-acl #允許基於MAC地址的存取過濾
--enable-err-language="Simplify_Chinese" #支援的錯誤語言
--enable-default-err-language="Simplify_Chinese" #指定預設的錯誤語言
error_directory /usr/local/etc/squid/errors/Traditional_Chinese



編譯
make
安裝
make install
3、編譯生成Squid認證程式ncsa_auth
cd helpers/basic_auth/NCSA/
make
cp ncsa_auth /usr/sbin/
4、使用htpasswd來生成使用者名稱/密碼對應的檔案
cd /usr/local/squid
htpasswd -c /usr/local/squid/password zhangshi
在輸入兩邊密碼後,一個zhangshi使用者就生成了。如果以後需要新增使用者,把上面的命令去掉-c引數再執行即可。
第一次用c,以後不要加-c
5、修改Squid配置檔案
mv -f etc/squid.conf etc/squid.conf.bak
ee etc/squid.conf
插入如下內容:

其中password 檔案使用apache的 htpasswd命令生成

下面是設定好的squid.conf的全部





http_port 3128
#icp_port 3130
cache_mgr zs895@163.com
cache_effective_user squid
cache_effective_group squid
visible_hostname proxy
cache_dir ufs /tmp 1000 64 1024
cache_mem 172 MB
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https: ?
acl QUERY urlpath_regex -i cgi-bin ? .asp .php .jsp .cgi
#acl denyssl urlpath_regex -i ^https:
no_cache deny QUERY
#no_cache deny denyssl
cache_swap_low 85
cache_swap_high 90
coredump_dir /usr/local/squid/var/logs
cache_access_log /usr/local/squid/var/logs/access.log
cache_store_log /usr/local/squid/var/logs/store.log
cache_log /usr/local/squid/var/logs/cache.log
dns_nameservers 61.177.7.1 221.228.255.1
auth_param basic program /usr/sbin/ncsa_auth /usr/local/squid/password
auth_param basic children 32
#auth_param basic credentialsttl 2 hours
authenticate_ttl 24 hour
auth_param basic realm Please enter the user name and password

acl SSL_ports port 443
acl Safe_ports port 80 # http
#acl Safe_ports port 21 # ftp
#acl Safe_ports port 443 # https
#acl Safe_ports port 70 # gopher
#acl Safe_ports port 210 # wais
#acl Safe_ports port 1025-65535 # unregistered ports
#acl Safe_ports port 280 # http-mgmt
#acl Safe_ports port 488 # gss-http
#acl Safe_ports port 591 # filemaker
#acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
#acl all src 0.0.0.0/0.0.0.0


#acl localhost src 192.168.2.0/24 192.168.1.0/24
acl manager proto cache_object
acl localhost src 127.0.0.1/32
http_access allow manager localhost
http_access deny manager

#acl our_networks src 192.168.138.0/24 192.168.168.0/24
#http_access deny !our_networks

#acl alloweddomain url_regex -i liufeng.com.cn
#http_access allow alloweddomain

#acl alloweddomain1 url_regex -i squid-cache.org
#http_access allow alloweddomain1

#acl badsrvip2 dst 1.2.3.4
#http_access allow badsrvip2

#acl alloweddomains url_regex "/usr/local/squid/etc/acl/alloweddomain.txt"
#http_access allow alloweddomains


#acl advance arp 00:90:90:5c:0f:95 00:90:90:5c:0f:97
#http_access allow advance

#acl localmac arp "/usr/local/squid/etc/acl/localmac.txt"
#http_access allow localmac

#acl office src "/usr/local/squid/etc/acl/worklist.txt"
#http_access allow office

#acl advanceip1 src 192.168.168.100
#http_access allow advanceip1

#acl badclientip1 src 192.168.168.200
#http_access deny badclientip1

#acl badclientnet1 src 192.169.168.0/24
#http_access deny badclientnet1

#acl badsrvip1 dst 1.2.3.4
#http_access deny badsrvip1

#acl baddomain1 dstdomain -i
#http_access deny baddomain1

#acl badurl1 url_regex -i qq.com
#http_access deny badurl1

#acl allow_list url_regex "/usr/local/squid/etc/acl/allow.list.txt"
#http_access allow allow_list

#acl deny_list url_regex "/usr/local/squid/etc/acl/deny.list.txt"
#http_access deny deny_list

#acl badhead dstdom_regex -i ^game ^pic ^xxx ^sex
#http_access deny badhead

#acl badurl2 url_regex -i game pic sex mp3 xxx
#http_access deny badurl2

#acl client1 src 192.168.168.50
#acl conn1 maxconn 5
#http_access deny client1 conn1

#S - Sunday, M - Monday, T - Tuesday, W - Wednesday, H - Thursday, F - Friday A - Saturday
#acl clientnet2 src 192.168.142.0/24
#acl worktime time MTWHF 12:00-13:00
#http_access deny clientnet2 worktime

#acl badfile1 urlpath_regex -i .mp3$ .exe$ .zip$ .rar$ .torrent$ .avi$
#http_access deny badfile1

#acl qq url_regex -i tencent.com
#http_access deny qq

acl normal proxy_auth REQUIRED
http_access allow normal

http_access deny !Safe_ports

http_access deny CONNECT !SSL_ports

http_access deny all
icp_access allow all

# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320

error_directory /usr/local/squid/share/errors/zh-cn

pid_filename /var/run/squid.pid

#request_body_max_size 20 KB



中文解釋:

####################################
#基本資訊:
#定義代理伺服器埠
http_port 192.168.168.40:3128
icp_port 3130
#定義管理員郵件地址
cache_mgr zs895@163.com
#設定快取的有效使用者
cache_effective_user squid
#設定快取的有效組
cache_effective_group squid
#執行squid的主機的名字,可以寫上該機器的IP地址
visible_hostname proxy


####################################
#快取選項
#定義硬碟快取空間,其中1000代表快取空間最大為1000M;16和256代表快取目錄下的一級和二級目錄數
cache_dir ufs /tmp 1000 64 1024
# cache_dir null /tmp 表示不需要快取策略
#定義快取記憶體,一般定義為實體記憶體大小的1/3。預設設定為8MB
cache_mem 172 MB
#用來強制某些特定的物件不被快取,主要是處於安全的目的。
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https: ?
#acl QUERY urlpath_regex -i cgi-bin ? .asp .php .jsp .cgi
#acl denyssl urlpath_regex -i ^https:
#no_cache deny QUERY
#no_cache deny denyssl
#指定進行空間交換的空佔比(快取數值超過或低於某個百分比時和交換空間進行資料交換)
cache_swap_low 85
cache_swap_high 90
#指最大的能儲存在記憶體中的物件。如果記憶體足夠多,可以適當將數值調整得大一些,可以加快客戶機讀取大物件的速度。
maximum_object_size 8 KB
#大於該值的物件將不被儲存在快取裡。如果要提高訪問速度,就降低該值;如果想最大限度節約頻寬,降低成本,就增加該值。建議將##它的值改為1024 KB。
maximum_object_size 4096 KB

####################################
#日誌選項
#定義dump的目錄,當squid突然掛掉的時候,或突然出現什麼故障的時候,將squid在記憶體中的資料寫到硬碟中
coredump_dir /usr/local/squid/var/logs

#設定訪問日誌檔案
cache_access_log /usr/local/squid/var/logs/access.log
#設定快取日誌檔案
cache_log /usr/local/squid/var/logs/cache.log
#設定網頁儲存日誌
cache_store_log /usr/local/squid/var/logs/store.log



####################################
#Dns伺服器
dns_nameservers 61.177.7.1 221.228.255.1



####################################
#身份驗證:
#選項定義了認證方式為basic,認證程式的路徑和認證需要讀取的帳戶檔案
auth_param basic program /usr/sbin/ncsa_auth /usr/local/squid/password

#此選項定義了認證程式的程式為5
auth_param basic children 5

#此選項定義了認證程式的時間為2小時,如果2小時過後使用者還需要使用squid,則必須重新輸入帳戶和密碼
auth_param basic credentialsttl 2 hours

#選項定義了使用者的登入時顯示的提示內容
auth_param basic realm Please enter the user name and password

#埠設定
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

#本機可以上網
acl localhost src 127.0.0.1/32
http_access allow localhost

#本網段使用者可以上網,其餘網段禁止
acl our_networks src 192.168.168.0/24 192.168.142.0/24 192.168.169.0/24
http_access deny !our_networks

#所有使用者都可以訪問以下網站
acl alloweddomain url_regex -i liufeng.com.cn
http_access allow alloweddomain

#所有使用者都可以訪問以下ip
acl badsrvip2 dst 1.2.3.4
http_access allow badsrvip2

#所有使用者都可以訪問檔案中的網站,alloweddomain.txt裡是允許訪問站點的列表,每行一個。
#acl alloweddomains url_regex "/usr/local/squid/etc/acl/alloweddomain.txt"
#http_access allow alloweddomains

#本網路卡mac地址使用者可以直接上網(高階使用者)
acl advance arp 00:90:90:5c:0f:95 00:90:90:5c:0f:97
http_access allow advance

#mac地址文件中的使用者可以直接上網,啟用則去掉註釋符
#acl localmac arp "/usr/local/squid/etc/acl/localmac.txt"
#http_access allow localmac

#ip地址文件中的使用者可以直接上網,啟用則去掉註釋符
#acl office src "/usr/local/squid/etc/acl/worklist.txt"
#http_access allow office

#本網路卡ip使用者可以直接上網(高階使用者)
acl advanceip1 src 192.168.168.100
http_access allow advanceip1

#禁止IP地址為192.168.168.200的客戶機上網。
acl badclientip1 src 192.168.168.200
http_access deny badclientip1

#禁止192.168.169.0這個子網裡所有的客戶機上網。
acl badclientnet1 src 192.169.169.0/24
http_access deny badclientnet1

#禁止使用者訪問IP地址為1.2.3.4的網站。
acl badsrvip1 dst 1.2.3.4
http_access deny badsrvip1

#禁止使用者訪問域名為的網站,-i表示不區分大小寫
#acl baddomain1 dstdomain -i
http_access deny baddomain1

#禁止使用者訪問域名包含有qq.com的網站。
acl badurl1 url_regex -i qq.com
http_access deny badurl1

# 定義allow.list和deny.list路徑,禁止或者允許上網的網站地址
# 允許allow.list 的域名列表被訪問
#acl allow_list url_regex "/usr/local/squid/etc/acl/allow.list.txt"
#http_access allow allow_list

# 拒絕deny.list 的域名列表被訪問
#acl deny_list url_regex "/usr/local/squid/etc/acl/deny.list.txt"
#http_access deny deny_list


#禁止某些關鍵字開頭的網址
acl badhead dstdom_regex -i ^game ^pic ^xxx ^sex
http_access deny badhead

#禁止使用者訪問域名包含有sex等關鍵字的URL。
acl badurl2 url_regex -i game pic sex mp3 xxx
http_access deny badurl2

#限制IP地址為192.168.168.50的客戶機併發最大連線數為5。
acl client1 src 192.168.168.50
acl conn1 maxconn 5
http_access deny client1 conn1

#禁止192.168.142.0這個子網裡所有的客戶機在週一到週五的9:00到18:00上網。每天則為SMTWHFA,允許則為allow,上下午可以用2條分開
#S - Sunday, M - Monday, T - Tuesday, W - Wednesday, H - Thursday, F - Friday A - Saturday
acl clientnet2 src 192.168.142.0/24
acl worktime time MTWHF 9:00-18:00
http_access deny clientnet2 worktime

#禁止客戶機下載*.mp3、*.exe、*.zip和*.rar型別的檔案。
acl badfile1 urlpath_regex -i .mp3$ .exe$ .zip$ .rar$
http_access deny badfile1

#禁止QQ透過Squid代理上網。
acl qq url_regex -i tencent.com
http_access deny qq

#授權使用者可以訪問web
acl normal proxy_auth REQUIRED
http_access allow normal

#拒絕某些不安全的埠要求
http_access deny !Safe_ports

#拒絕連線到其他安全的SSL埠
http_access deny CONNECT !SSL_ports

#其他使用者連線一律拒絕
http_access deny all
#資料儲存多久.在此為一筆已在cache中的資料,若一個禮拜內沒人再來access, 則這筆資料會被清掉

reference_age 7 days

#最大下載檔案大小
reply_body_max_size 20 MB



##上面第一行假如網址開頭是ftp的話,那麼在一天(1440分鐘)後,
#假如proxy再次取用這個檔案時,則cache內的資料會被更新!
# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|?) 0 0% 0
refresh_pattern . 0 20% 4320

#squid.pid的路徑
pid_filename /var/run/squid.pid

#錯誤提示語言,編譯的時候已經給出了錯誤提示語言,現在可以更改
error_directory /usr/local/squid/share/errors/zh-cn
#上傳檔案大小限制
request_body_max_size 20 KB

訪問控制說明:
為了使用控制功能,必須先設定 ACL。ACL 宣告的格式如下:
acl acl_element_name type_of_acl_element values_to_acl
acl 列表名稱 控制方式 控制目標
下面列出一些重要的 ACL型別(type_of_acl_element)
l src : 源地址(即客戶機IP地址)
l dst : 目標地址(即伺服器IP地址)
l srcdomain : 源名稱 (即客戶機名稱)
l dstdomain : 目標名稱 (即伺服器名稱)
l time : 一天中的時刻和一週內的一天
l url_regex : URL 規則表示式匹配
l urlpath_regex: URL-path 規則表示式匹配,略去協議和主機名
l proxy_auth : 透過外部程式進行使用者驗證
l maxconn : 單一 IP 的最大連線數
注:
1. acl_element_name 可以是任一個在 ACL 中定義的名稱。
2. 任何兩個 ACL 元素不能用相同的名字。
3. 每個 ACL 由列表值組成。當進行匹配檢測的時候,多個值由邏輯或運算連線;換言之,即任一 ACL的值被匹配,則這個 ACL即被匹配。
4. 並不是所有的 ACL都能使用訪問列表中的全部型別。
5. 不同的 ACL寫在不同行中,Squid 將把它們組合在一個列表中。
我們可以使用許多不同的訪問列表。我們常用的是http_access: 允許 HTTP 訪問,這個是主要的訪問控制列表。
訪問列表的規則由一些類似 'allow' 或 'deny' 的關鍵字構成,用以允許或拒絕向特定或一組 ACL 元素提供服務。
注:
1. 這些規則按照它們的排列順序進行匹配檢測,一旦檢測到匹配的規則,匹配檢測就立即結束。
2. 一個訪問列表可以又多條規則組成。
3. 如果沒有任何規則與訪問請求匹配,預設動作將與列表中最後一條規則對應。
4. 一個訪問條目中的所有元素將用邏輯與運算連線:
http_access Action 宣告1 AND 宣告2 AND 宣告 OR.
http_access Action 宣告3
多個 http_access 宣告間用或運算連線,但每個訪問條目的元素間用與運算連線。
5. 請記住列表中的規則總是遵循由上而下的順序。






6、增加使用者&組,修改許可權:
先使用cat /etc/passwd | grep squid
看看有沒有使用者squid,沒有則增加
增加組
pw groupadd squid
增加使用者,給他加入squid組
pw adduser squid -g squid -s /nonexistent
修改目錄使用者許可權
chown -Rf squid /usr/local/squid
修改目錄組許可權
chgrp -Rf squid /usr/local/squid
修改許可權
chmod -R 777 /usr/local/squid
chmod 777 /usr/local/squid/var/log/


7.初始化快取空間
/usr/local/squid/sbin/squid -z 初始化快取空間
初始化cache目錄,只需在第一次啟動squid服務之前執行(在初次執行squid之前,或者無論何時你增加了新的cache_dir,你必須初始化cache目錄。)


8.啟動Squid
/usr/local/squid/sbin/squid


9.開機啟動
ee /etc/rc.local
增加
/usr/local/squid/sbin/squid
或者
/usr/local/squid/sbin/squid -sD
或者
ee /etc/rc.conf
/usr/local/squid/sbin/squid


10.squid常用命令:
/usr/local/squid/etc/squid.conf 配置檔案位置
/usr/local/squid/sbin/squid -z 初始化快取空間
/usr/local/squid/sbin/squid 啟動
/usr/local/squid/sbin/squid -k shutdown 停止
/usr/local/squid/sbin/squid -k reconfigure 重新載入配置檔案
/usr/local/squid/sbin/squid -k rotate 輪循日誌
cat /usr/local/squid/var/logs/access.log 檢視log







禁止qq代理(只允許部分ip可以上)
acl ip src 192.168.168.200
#acl qqip dst "/usr/local/squid/etc/acl/qqip.txt"
#http_access deny !ip qqip

不能上qq.com和tencent.com
acl badurl1 url_regex -i qq.com
http_access deny badurl1

acl qq url_regex -i tencent.com
http_access deny qq


qqip.txt內容
獲取方式
現去官方網站下一個新的QQ,然後,安裝好,先登入一次。
然後,把電腦的網線拔下來,你就會看到QQ登入了半天沒有登入完成,這個時候會有一個錯誤資訊,你點一下就可以看到QQ登入的全過程了。

219.133.60.206
112.95.240.110
219.133.63.54
58.60.14.242
121.14.100.89
112.90.141.105
119.147.18.52
58.60.9.66
58.251.62.17
58.251.62.77
219.133.49.8
219.133.60.174
219.133.49.7
219.133.48.104
58.60.14.51
112.95.240.111
113.108.80.249
58.60.14.195
221.236.11.35
219.133.51.243
119.147.12.198
121.14.74.246
121.14.101.193
112.90.138.187
112.95.240.162
121.14.95.42




禁止下載可以透過URL方式避免
限制特定使用者才能上MSN
方法1
acl msnip src 192.168.168.20
acl CONNECT method CONNECT
http_access !deny msnip CONNECT

方法2
acl msnip src 192.168.168.20
acl msnmessenger req_mime_type ^application/x-msn-messenger$
http_access !deny msnip CONNECT

方法3
acl msn url_regex -i gateway.dll
http_access deny !msnip msn

同時禁止webmsn
acl webmsn url_regex -i webmsn.msn.com.tw live.com live.cn meebo.com
http_access deny webmsn


參考:



http://blog.sina.com.cn/s/blog_417b97470100kaap.html

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29207/viewspace-1042889/,如需轉載,請註明出處,否則將追究法律責任。

相關文章