公司老闆想掌握員工上網情況? 家長想瞭解孩子們都在逛哪些網站?
一台 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/sourceforge/sarg/sarg-2.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 架設延伸閱讀:
網路監控套件
BandwidthDMRTGNagiosntopOpenNMSSARG網站流量分析套件
AWStatsWebalizerJamyy‘s Weblog 相關文件
Fedora Core Sendmail 開放遠端收發信件Netmeeting 目錄伺服器 (ILS) on LinuxReplication in MySQLproftpd.conf 設定備忘PHP@Linux vs MS-SQL Server database (using FreeTDS)Sendmail + MailScanner + ClamAV 安裝實錄讓 AWStats 顯示 UTF-8 繁體中文使用 mgetty 建立 Linux Fax ServerBuilding Linux NAT with MRTG network monitoringiptables / route command notesSamba-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
from:
http://cha.homeip.net/blog/archives/2005/06/linux_nat_squid.html