web-dev-qa-db-ja.com

インターネットプロキシ(squid)ユーザーの月間データ制限を設定する

Linuxボックスのオフィス環境でsquidプロキシサーバー(バージョン3.1.4)を使用しています。合計で約20人のユーザーがいて、すべてが1つのネットワークにあり、月額25GBのインターネットプランがあります。ここで必要なのは、各ユーザーを特定のサイズ、たとえば1GB /ユーザー/月に制限することです(より構成可能であれば、たとえば512MBの場合はさらに良くなりますユーザー、一部のユーザーは2GB)、誰もが平等にアクセスできるようにします。

私はインターネット上で 帯域幅で制限 または 最大ダウンロードサイズパラメータreply_body_max_size遅延パラメータ 。しかし、私が欲しいものを見つけることができません。

Squidまたは他のオープンソースオプションでこれを行う方法はありますか?

3
Tejas

1週間以上検索した後、 sarg --Squid Analysis Report Generator のhtmlレポートを使用し、単純なbashスクリプトを使用してデータを抽出することで解決策を見つけました。

sargはそのデータを/var/www/sargディレクトリに保存します。月次レポートを生成するには、次のコマンドを手動で使用する必要があります:sarg -d 01/08/2015-31/08/2015

このコマンドの後で、次のように制限を超えているIPアドレスでブロックする簡単なスクリプトを作成しました。

#!/bin/bash
range=2015Aug03-2015Aug25
ip=( 192.168.3.111 192.168.3.49 192.168.3.53 )
maxsize=100000000
cd /var/www/sarg/$range/

for system in "${ip[@]}"; do
        size=`cat $system/$system.html | grep TOTAL | awk '{print $4}' | tr -d 'class="header2"></t.<t'| sed 's/K/0/' | sed 's/M/0000/'`
        if [ "$size" -gt "$maxsize" ]
            then
                iptables -A INPUT -s $ip -p tcp --dport 3128 -j DROP
                iptables -A OUTPUT -s $ip -p tcp --dport 3128 -j DROP
                echo "$system blocked because data usage over $size bytes"
            else
                echo "$system used size is $size"
        fi
done
service iptables save

注:このスクリプトは現時点では完全には提供されておらず、すべてを完全に自動化して柔軟にするためにもう少し作業する必要があります。

1
Tejas

Squid wikiページによると、ユーザーデータの割り当ては開発中です(以下のリンクを参照)。

squish は、1か月あたりのIPごとのデータを制限するために使用できます。 (イカを使用)

Features/Quote-Squid Web Proxy Wiki http://wiki.squid-cache.org/Features/Quota

1
totti

私もこの機能を追加するのに苦労してきました。スキッシュの問題は、スクイーズされるはずのないユーザーをスクイーズすることです。

私が使用した回避策は、/var/lib/lightsquid/report/<date>/.totalに格納されているlightsquidからの毎日のデータを使用することでした。 lightsquidデータは10分ごとに更新されるため、squidのセットアップにもほぼ「リアルタイム」のクォータ機能が提供されました。

1
Toushin Taishi

おそらく、squidが呼び出すカスタムヘルパーを介して、たとえば http://wiki.squid-cache.org/Features/Redirectors クライアントIPを調べ、データベースにどのくらいの帯域幅があるかを調べます使用され(おそらく他の何かによってイカのログから解析されます)、終わったら申し訳ないページにリダイレクトします。そのようなコードがまだ存在しない場合、これにはおそらく一連のコーディングが必要になります。

1
thrig

sQUIDのみを使用したい場合は、NFQUEUEを使用できます。最初にすべてのトラフィックをNFQEUEにリダイレクトし、ユーザースペースプログラミングでトラフィックを制御できます。次に、DROPを決定するか、SQUID(3128)ポートに転送するかを決定できます。小さなプリペイド充電システムを作成する必要があります。これについては私の小さな 記事 を参照してください。

ただし、要件を達成するには、RADIUS(dolaRadius)ソリューションを使用することをお勧めします。SQUIDをFreeRADIUSと統合し、トラフィックを制御する可能性があります。

0
FariZ