SARG

回覆文章
yehlu
Site Admin
文章: 3245
註冊時間: 2004-04-15 17:20:21
來自: CodeCharge Support Engineer

SARG

文章 yehlu »

http://cha.homeip.net/blog/archives/200 ... squid.html

Jamyy's Weblog

« 網路安裝 Linux | 首頁 | VB6 HTML Parser 備忘 »
2005年06月28日
Linux NAT + Squid + SARG 製作使用者上網記錄報表

公司老闆想掌握員工上網情況? 家長想瞭解孩子們都在逛哪些網站?

一台 Linux 電腦, 加上 Transparent Proxy 機制與 SARG 報表, 當 Client PC 透過 Linux NAT 上網時, 即可記錄每個使用者的上網瀏覽狀況.

環境需求

Linux NAT (以下三種環境皆可應用, 本文以 Fedora Linux 為例)

* 雙網卡, eth0 接 Hub, eth1 接 ADSL Router
* 單網卡, eth0 接 Hub, ADSL Router 接入 Hub, Linux pppoe 上網
* 單網卡, eth0 接 Hub, IPSharing WAN Port 接 ADSL Router (並於 IPSharing 設定禁止 Client PC 直接透過 IPSharing 上網)

Linux NAT 基本設定:

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s your.local-area.network/netmask -j MASQUERADE

Client PC 基本設定:

Gateway 指向 Linux LAN IP 即可

架設 Transparent Proxy

安裝 Squid (以 yum 安裝為例)

yum install squid

設定 Squid

vi /etc/squid/squid.conf

http_access deny all → 改成 → http_access allow all

#以下是 Squid 2.5 以前的做法
httpd_accel_host your.host.name
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

#以下是 Squid 2.6 以後的做法
http_port 3128 transparent

設定 iptables

iptables -t nat -A PREROUTING -s your.local-area.network/netmask -p tcp --dport 80 -j REDIRECT --to-ports 3128

安裝分析報表

安裝 SARG (以 sarg-2.0.8 source install 為例)

wget http://nchc.dl.sourceforge.net/sourcefo ... 0.8.tar.gz
tar -zxf sarg-2.0.8.tar.gz
cd sarg-2.0.8
./configure
make
make install

建立 SARG 報表目錄

mkdir /var/www/html/sarg

設定 SARG

vi /usr/local/sarg/sarg.conf

access_log /var/log/squid/access.log
output_dir /var/www/html/sarg
resolve_ip yes
overwrite_report yes

設定每小時更新報表資料

vi /etc/cron.hourly/sarg

#!/bin/sh

/usr/bin/sarg > /dev/null 2>&1

chmod a+x /etc/cron.hourly/sarg

選擇性的其他相關設定

編輯 /etc/hosts IP hostname 對照表, 例如:

192.168.1.100 Mary
192.168.1.101 Jack
192.168.1.102 David
.
.
.

設定每日 23:59 清除 Proxy Cache 資料

vi /etc/squid/squid.freshcache

#!/bin/sh

/usr/bin/sarg
sleep 5s
sync
service squid stop
sleep 5s
true > /var/log/squid/access.log
true > /var/log/squid/cache.log
true > /var/log/squid/store.log
true > /var/log/squid/squid.out
sleep 5s
sync
rm -rf /var/spool/squid/*
sleep 5s
sync
service squid start

chmod a+x /etc/squid/squid.freshcache

vi /etc/crontab

59 23 * * * root /etc/squid/squid.freshcache

參考資料: 鳥哥的 Linux 私房菜 - 簡易 Proxy Server 架設

延伸閱讀:

網路監控套件

* BandwidthD
* MRTG
* Nagios
* ntop
* OpenNMS
* SARG

網站流量分析套件

* AWStats
* Webalizer

Jamyy's Weblog 相關文件

* Fedora Core Sendmail 開放遠端收發信件
* Netmeeting 目錄伺服器 (ILS) on Linux
* Replication in MySQL
* proftpd.conf 設定備忘
* PHP@Linux vs MS-SQL Server database (using FreeTDS)
* Sendmail + MailScanner + ClamAV 安裝實錄
* 讓 AWStats 顯示 UTF-8 繁體中文
* 使用 mgetty 建立 Linux Fax Server
* Building Linux NAT with MRTG network monitoring
* iptables / route command notes
* Samba-vscan 安裝實錄
* 從 Linux 發送訊息到 Windows 作業系統
* 解決 Linux NAT ip_conntrack: table full 的方法


--- 2005.11.26 補充

Linux NAT + Transparent Proxy 的 CBQ 頻寬限制設定備忘:

環境: eth0 對內, eth1 對外, TCP Port: 3128

iptables -t mangle -A OUTPUT -p tcp --sport 3128 -d 192.168.0.0/24 -j MARK --set-mark=80

file: /etc/sysconfig/cbq/cbq-0080.tcp80

DEVICE=eth0,100Mbit,10Mbit
RATE=200Kbit
WEIGHT=10Kbit
PRIO=5
MARK=80

相關網頁: cbq.init 設定手札

--- 2005.12.27 補充

嫌 SARG 報表不夠 "即時" 嗎? 這裡還有 兩款不錯的 Squid Logfile 分析軟體 喔!

Posted by Jamyy at 2005年06月28日 15:03
Trackback Pings

TrackBack URL for this entry:
http://cha.homeip.net/cgi-bin/mt/mt-tb.cgi/95
Comments

請教站長:
原本環境是上網統一由一台硬體式防火牆連出去,
如果要用squid 做Transparent Proxy ,
該如何和這台防火牆做搭配呢?

Posted by: aven at 2006年04月15日 00:18

假設原環境如下:

Internet

Firewall (192.168.0.254)

LAN PCs (IP Range=192.168.0.[100-199], Gateway=192.168.0.254)


方式(1):

Internet

Firewall (192.168.0.254, 針對 192.168.0.1 控管即可)

Linux NAT with Transparent Proxy (eth0=192.168.1.254, eth1=192.168.0.1)

LAN PCs (IP Range=192.168.1.[100-199], Gateway=192.168.1.254)

優點: 可在 Linux NAT 進行各種封包蒐集、過濾、管制、監控
缺點: Linux NAT 使用之網卡會影響區域網路的效能與品質

方式(2):

Internet

Firewall (192.168.0.254, 只允許 192.168.0.253 對外連結 tcp 80 port)

Linux Proxy Server (eth0=192.168.0.253)

LAN PCs (IP Range=192.168.0.[100-199], Gateway=192.168.0.254, Proxy=192.168.0.253)

優點: 不影響原網路架構
缺點: 需在 LAN PCs 瀏覽器設定使用 Proxy

Posted by: Jamyy at 2006年04月15日 09:46

我現在是用第二種方式,因為每個user都要去設定proxy所以才想改成Transparent Proxy,看了您的回覆,已瞭解該怎麼改了,謝謝.

Posted by: aven at 2006年04月15日 16:47

請問一下
文章中的squid + CBQ是指上傳還是下載
我現在已經有架設squid
CBQ我也有用過
但是沒用過squid + cbq
可否舉個例子來說明squid + cbq的上下載做法
謝謝

Posted by: akong at 2007年04月18日 15:51

文中 cbq 設置是針對 HTTP 下載限制
若要限制上載速度:

iptables -t mangle -A OUTPUT -p tcp --dport 80 -j MARK --set-mark 10

vi /etc/sysconfig/cbq/cbq-0010.http_upload
DEVICE=eth0,100Mbit,512Kbit
RATE=50Kbit
WEIGHT=5Kbit
PRIO=5
MARK=10

其中, mark number 與 cbq-xxx filename 可隨意設置
上例是假設總上載頻寬 512Kbit, 限制上載頻寬為 50Kbit

Posted by: Jamyy at 2007年04月19日 10:35

感謝大大的教學
那假如我想限制某個User對某個網站的上傳頻寬
例如無名小站的上傳
iptables -t mangle -A OUTPUT -p tcp -d pic.wretch.cc --dport 80 -j MARK --set-mark 10
是這樣改嗎
那cbq那有需要動嗎
謝謝

Posted by: akong at 2007年04月19日 11:39

例外想請問一下
您範例中的eth0
是對client的user對吧
就是虛擬IP的User對吧
不好意思一次問了那麼多問題
謝謝

Posted by: akong at 2007年04月19日 11:45

您的做法是可行的
不過若要針對 "某個使用者" 還要加上 -s 參數搭配內部 user ip

如:
針對內部 IP: 192.168.1.100
iptables -t mangle -A OUTPUT -p tcp -s 192.168.1.100 -d pic.wretch.cc --dport 80 -j MARK --set-mark 10

當然 cbq 設定檔案也要設定 MARK=10 才能對上 iptables 的 mark number

至於要限制使用多少頻寬, 也是在 cbq 設定檔中調整就行了

我覺得編寫 iptables rule 與 cbq 設定檔需要有點 "想像力", 以 linux host 為中心, 想像封包行進的方向, 什麼時候應該設在 eth0? eth1? 還真的有點傷腦筋~

設定好後最好測試一下:
cbq stats
iptables -t mangle -L -n -v
查看是否有符合條件的封包流過

一開始設錯了也沒關係, 多試幾次總會成功的 :)

Posted by: Jamyy at 2007年04月19日 11:52

您好
我測試了一下午
有一個很奇怪的問題
我用iptables -A OUTPUT -t mangle -s 192.168.2.4 -p tcp -d www.wretch.cc --dport 80 -j MARK --set-mark 240
不管我怎麼去連無名
都沒有任何封包進出
可是我用iptables -A PREROUTING -t mangle -s 192.168.2.4 -p tcp -d www.wretch.cc --dport 80 -j MARK --set-mark 240
就有封包進出
另外
在CBQ這裡
DEVICE=dev1804289383,100Mbit,10Mbit
RATE=32Kbit
WEIGHT=3Kbit
MARK=240
PRIO=5
RULE=192.168.2.4
這是我的設定
但是我也是不論怎麼RUN
cbq stats的結果都是沒封包
class cbq 1:2 parent 1: leaf 2: rate 32000bit (bounded) prio 5
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
borrowed 0 overactions 0 avgidle 2.12805e+07 undertime 0
class tbf 2:1 parent 2:
是我的設定有問題嗎
以下是我的網路
LAN(192.168.2.0)--Gateway+squid(192.168.2.254)--Internet
eth0連Internet
dev1804289383連LAN

Posted by: akong at 2007年04月19日 17:02

封包主要流程分兩段:
LAN User:dynamic_port → Linux:3128 (dev=dev1804289383)
Linux:dynamic_port (dev=eth0) → Internet:80

依您的環境可設定如下

(使用者不透過 squid 上網的設置) --> LAN PC 預設網關為 Linux 內部 IP
iptables -t mangle -A FORWARD -s 192.168.1.101 -d www.wretch.cc -p tcp --dport 80 -i dev1804289383 -j MARK --set-mark 240

(透過 squid 上網的設置) --> LAN PC 瀏覽器 Proxy 指向 Linux 內部 IP, 或 Linux 當 Transparent Proxy
iptables -t mangle -A OUTPUT -p tcp -d www.wretch.cc --dport 80 -j MARK --set-mark 240

以上設置完成後, cbq 不需使用 RULE 參數即可作用

Posted by: Jamyy at 2007年04月20日 00:14

感謝大大的指導
不知大大有沒有研究過一套軟體
叫Dansguardian這個軟體
小弟在公司的環境
有用這套軟體來加強Proxy的功能
他是必須搭配squid的軟體
走的port也有些不同
但是他是必須啟動好squid才能用
也就是squid+dansguardian=Proxy
squid是走3128
Dansguardian是走8080
這個會不會是影響iptables及cbq呢
另外若搭配L7 filter有沒有什麼要注意的呢

Posted by: akong at 2007年04月20日 10:02

Squid 和 Dansguardian 主要負責網頁內容的 cache、log、filter
iptables 加上 l7-filter 主要針對網路封包做條件限制
cbq 則配合 iptables 的 set-mark 進行頻寬管制

以這個規則來說:
iptables -t mangle -A OUTPUT -p tcp -d www.wretch.cc --dport 80 -j MARK --set-mark 240
無關 3128 或 8080 port (proxy 使用的 port)
反正只要從本機 (proxy) 出去, 目的地是 web server 的封包, 通通打上 240 的 mark, 讓 cbq 去限速

這張圖清楚說明 iptables 對網路封包的管制流程
http://linux-ip.net/nf/nfk-traversal.html
我已經供奉很久了 :)

Posted by: Jamyy at 2007年04月20日 11:50

謝謝哦
那以我現在的環境
有兩個LAN
一個是192.168.2.0/24(PC)
另一個是192.168.1.0/24(Server)
那如果我不要CBQ檔到PC-->Server的流量
我該怎麼做呢
因為我會多用一行指令
設定所有的PC總上傳速度
但因為是指定到0.0.0.0
所以PC-->Server的速度就會被管制到了
可以設定內部網路不受CBQ控制嗎
謝謝

Posted by: akong at 2007年04月20日 12:56

您可以用 -d ! 192.168.1.0/24 排除往 server 網段的封包

Posted by: Jamyy at 2007年04月20日 13:45

感謝大大長期的指導
小弟已成功封鎖上傳
現在有一個很奇怪的現象
iptables -t mangle -A OUTPUT -p tcp -m layer7 --l7proto jpeg -s 192.168.2.254 --sport 8080 -d 192.168.2.0/24 -j MARK --set-mark 100
這是我封鎖下載jpeg時限速
看iptables -t mangle -L -n -v時
有封包進來
但是我用cbq時
DEVICE=eth2,100Mbit,10Mbit
RATE=300Kbit
WEIGHT=30Kbit
MARK=100
PRIO=5
然後再去執行cbq compile 及 cbq start
從cbq stats查看
卻沒有任何反應
class cbq 1:3 parent 1: leaf 3: rate 300000bit (bounded) prio 5
Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
borrowed 0 overactions 0 avgidle 2.26384e+06 undertime 0
請問是怎麼回事
如果說同一張網卡上我有鎖上傳及下傳
可以這樣做嗎

Posted by: akong at 2007年04月27日 18:50

您客氣了, 所謂教學相長, 我也因此學到不少經驗 :P
您的設定看起來都正確, 不過 cbq 設定裡應該是對內的網卡才是
請問您的 eth2 是對內的網卡嗎?
cbq 可以同時在同一張網卡鎖上/下載頻寬, 沒問題的.

Posted by: Jamyy at 2007年04月30日 12:00

感謝大大的回覆
我的eth2的確是對內的
ip為192.168.2.254
只是不知為何不行

Posted by: akong at 2007年05月02日 15:09

我試了也是不行
而且 iptables 所設定的 rule 也沒有符合條件的封包通過
(您之前可能看錯了)
當然 cbq 也就沒能發揮作用
後來試著將 rule 設到 FORWARD, 並試著以 HTTP、FTP 等方式傳輸 JPEG 圖檔, 觀察結果還是一樣 -- 沒有任何封包符合條件
很抱歉沒能幫上忙了

Posted by: Jamyy at 2007年05月02日 21:08
Post a comment (張貼後若沒看到您的留言, 請按 "F5" 重新整理網頁)

Name:

Email Address:

URL:
Remember Me? YesNo
Security Code:



Comments:
回覆文章

回到「Linux」