Необходимо сделать ограничение по траффику на каждого пользователя. Есть локальная сеть с кучей пользователей, все они ходят в интернет через сервер на базе debian'а. На нем через iptables траффик заворачивается в squid. Но т.к. у нас интернет платный, и по превышению некоторого лимита мне голову оторвут (ну или с ЗП вычтут). Хочу ограничить траффик на каждого пользователя. Как это сделать, вообще без понятия (иначе бы не спрашивал). Для простоты я думаю, может ограничение по месяцам сделать по ip'шникам (squid transparent стоит и каждому дается свой ip, mask, gate, dns). Т.к. насколько я понял, авторизацию прикручивать, это целое дело. Да и к тому, же компы в сети крутятся под виндой.

2

На tc

#!/bin/bash

/sbin/tc qdisc add dev eth1 root handle 1: htb default 30
/sbin/tc class add dev eth1 parent 1: classid 1:1 htb rate 100mbit burst 15k
/sbin/tc class add dev eth1 parent 1:1 classid 1:10 htb rate 1024kbit ceil 100mbit burst 15k
/sbin/tc class add dev eth1 parent 1:1 classid 1:20 htb rate 1024kbit ceil 100mbit burst 15k
/sbin/tc class add dev eth1 parent 1:1 classid 1:30 htb rate 1024kbit ceil 100mbit burst 15k
/sbin/tc class add dev eth1 parent 1:1 classid 1:40 htb rate 1024kbit ceil 2560kbit burst 15k
/sbin/tc class add dev eth1 parent 1:1 classid 1:50 htb rate 1024kbit ceil 2560kbit burst 15k

/sbin/tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10
/sbin/tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10
/sbin/tc qdisc add dev eth1 parent 1:30 handle 30: sfq perturb 10
/sbin/tc qdisc add dev eth1 parent 1:40 handle 40: sfq perturb 10
/sbin/tc qdisc add dev eth1 parent 1:50 handle 50: sfq perturb 10

/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip src 192.168.2.1/24 match ip dst 10.20.0.0/24 flowid 1:10
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 10.20.0.2 flowid 1:20
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 10.20.0.3 flowid 1:30
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 10.20.0.4 flowid 1:40
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 1 u32 match ip dst 10.20.0.5 flowid 1:50

/sbin/tc qdisc add dev eth1 handle ffff: ingress
/sbin/tc filter add dev eth1 parent ffff: protocol ip prio 50 u32 match ip dst 192.168.2.1/24 police rate 100mbit burst 10k drop flowid :1
/sbin/tc filter add dev eth1 parent ffff: protocol ip prio 50 u32 match ip src 10.20.0.2 police rate 100mbit burst 10k drop flowid :2
/sbin/tc filter add dev eth1 parent ffff: protocol ip prio 50 u32 match ip src 10.20.0.3 police rate 100mbit burst 10k drop flowid :3
/sbin/tc filter add dev eth1 parent ffff: protocol ip prio 50 u32 match ip src 10.20.0.4 police rate 1536kbit burst 10k drop flowid :4
/sbin/tc filter add dev eth1 parent ffff: protocol ip prio 50 u32 match ip src 10.20.0.5 police rate 1536kbit burst 10k drop flowid :5

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

3

kung-fu-master, squid + sams.

It is good day to die ...
MS Windows 10
Заметки о главном...

4

Думаю самое оптимальное
HAVP+SQUID+SARG
Могу поручится за каждый этаж, и дать готовые конфиги.

Истина ускользает от тех кто отказывается её видеть обоими глазами.
Талантам нужно помогать, бездарности пробьются сами.
В Туле настолько суровые парни, что вместо пены для бритья, используют пену монтажную.
cat /broken/hands > /dev/null

SAMS пробовал, не завелось.

HAVP - это только антивирус?
SARG - поставил, что дальше делать не понял, вроде как, в нем можно делать ограничение. Поставил через aptitude, что дальше делать?

6

HAVP это антивирусный прокси (может исмользовать кучу разных антивирусов, по одному конечно).
В итоге получается, что пользователь, запрашивая какую то инфу с сайта отдаёт запрос на съедение SQUID-у, тот смотрим по правилам, можно ли отдать запрашиваемое (чёрный или белый списки, или и то и то), если SQUID разреришил, то дальше запрос чере HAVP отправляется на сайт, сайт выдаёт какой то контент, и HAVP принимает и передаёт SQUID-у, тот кеширует, но если в контенте промелькнёт что то подозрительное, то то HAVP не позволит загрузить этот файл, либо вообще прервёт связь с подозрительным сайтом. Собственно чувствительность HAVP-а легко настроивается. В принципе им тоже можно блокироват ьсайты по примеру белого и чёрного списков, однако я так не делал, просто что бы не путаться.
SARG - этос просто считалка трафика. Его можно настроить, на превышение лимита например, что бы узер, который скачал больше положенного, лишался инета совсем, или на какие то сайты. SARG делает это через конфиги SQUID-а.
На мой взгляд это очень хорошая комбинация, для защиты интернет трафика на лету.
У меня так на работе построено и всё пучком работает.
Конфиги дать?

Истина ускользает от тех кто отказывается её видеть обоими глазами.
Талантам нужно помогать, бездарности пробьются сами.
В Туле настолько суровые парни, что вместо пены для бритья, используют пену монтажную.
cat /broken/hands > /dev/null

7

Vadimsky если нежалко то выложы конфиги или вышли на пошту. Хочу посмотрерть как это всё вкуче работает.
СПС

Trouble  in WINDOWS reboot, trouble in UNIX be root.

8 (14.03.2011 22:44:34 отредактировано Vadimsky)

Выкладываю конфиги.
Взяты с рабочего сервера, можно и их использовать, но если хотите разобраться, то лучше установить с нуля, так как в конфигах много опций и они хорошо комментированны.
В комбинации опциями пожно сделать очень много, здесь так, потому что у меня большего не требуется.
Все соединения с Интернет идёт через прокси, на порт 3128 (кроме почты и FTP - эти напрямую). В правилах IPTABLES специально прописано отвергать соединения на 80-м порту и открыт для входящих только 3128, и форвард для 20,21,25,110, иещё парочки каких то не помню.
Ну суть не важно, думаю правила вы знаете как писать.
А вот сами конфиги.
Это havp.config

+ открыть спойлер

USER clamav
GROUP clamav
DAEMON true
PIDFILE /var/run/havp.pid
SERVERNUMBER 25
MAXSERVERS 200
ACCESSLOG /var/log/havp/access.log
ERRORLOG /var/log/havp/havp.log
USESYSLOG false
SYSLOGNAME havp
SYSLOGFACILITY daemon
SYSLOGLEVEL info
LOG_OKS false
LOGLEVEL 0
SCANTEMPFILE /var/spool/havp/havp-XXXXXX
TEMPDIR /var/tmp
#
# This only affects library scanners (clamlib, trophie).
# Other scanners must be updated manually.
#
DBRELOAD 60
#
FORWARDED_IP true
X_FORWARDED_FOR false
PORT 8000
BIND_ADDRESS 127.0.0.1
TEMPLATEPATH /etc/havp/templates/ru
WHITELISTFIRST true
WHITELIST /etc/havp/whitelist
BLACKLIST /etc/havp/blacklist
FAILSCANERROR true

MAXSCANSIZE 5000000

#####
##### ClamAV Library Scanner (libclamav)
#####

ENABLECLAMLIB true

CLAMDBDIR /var/lib/clamav/
CLAMBLOCKBROKEN true
CLAMBLOCKENCRYPTED false

Это squid.conf

+ открыть спойлер

#
cache_peer 127.0.0.1 parent 8000 0 no-query no-digest no-netdb-exchange default
cache_peer_access 127.0.0.1 allow all
#
acl server src 192.168.0.2      #Какой то сервер
#
acl group_user1 src 192.168.0.51-192.168.0.58
acl user1 src 192.168.0.56
acl group_user4 src 192.168.0.57       
acl user2 src 192.168.0.55
acl group_user4 src 192.168.0.62-192.168.0.72
acl user3 src 192.168.0.70
acl user4 src 192.168.0.80
acl group_user2 src 192.168.0.82-192.168.0.83
acl group_user3 src 192.168.0.92-192.168.0.93
acl user4 src 192.168.0.95
#
acl localhost src 127.0.0.1/32
acl localnet src 192.168.0.0/24         #Office lan
#
#acl worktime time MTWHF 09:00-18:00
#acl weekday time SA
#acl evening time 19:00-23:59
#acl night time 00:00-08:59
#
acl denied_sites dstdomain "/etc/squid/blacklist"
acl sites_BAN dstdomain "/etc/squid/ban"
#
acl sites_SERVERS dstdomain "/etc/squid/allowed_sites_SERVERS"
acl sites_user1 dstdomain "/etc/squid/allowed_sites_user1"
acl sites_group_user3 dstdomain "/etc/squid/allowed_sites_group_user3"
acl sites_group_user2 dstdomain "/etc/squid/allowed_sites_group_user2"
acl sites_group_user1 dstdomain "/etc/squid/allowed_sites_group_user1"
#
acl noporno url_regex -i "/etc/squid/noporno"
acl relax urlpath_regex -i \.mp3 \.avi \.flv
acl media urlpath_regex -i \.mpeg \.mov \.asf$ \.wma$ \.iso \.nrg \.tib \.wav \.wmv \.mpg \.vob \.ogg \.exe \.com \.bat \.cmd
acl multimedia url_regex -i "/etc/squid/multimedia"
acl file_type url_regex -i "/etc/squid/file_type"
#
acl QUERY urlpath_regex cgi-bin \? chat
#
acl SSL_ports port 443          # https
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl Safe_ports port 21          # ftp
acl Safe_ports port 8080        #
acl Safe_ports port 8000        #
#
acl Safe_proto proto http
acl Safe_proto proto https
acl Safe_proto proto ftp
#
acl CONNECT method CONNECT
#acl Scan_HTTP proto http
acl Scan_FTP proto ftp
#
always_direct allow Scan_FTP
always_direct allow SSL_Ports
#never_direct allow Scan_HTTP
#
no_cache deny QUERY
#
http_access allow CONNECT SSL_ports !denied_sites
http_access deny CONNECT !SSL_ports
http_access deny !Safe_proto
http_access deny !Safe_ports
#
# ======= RULES ========
#
http_access allow server sites_SERVERS
http_access deny server
#
http_access allow user1
http_access allow user2
http_access allow user3 sites_user3
#
http_access deny relax
http_access deny sites_BAN
#
http_access allow group_user1
http_access allow user4
http_access allow user3 sites_user3
http_access allow group_user2 sites_group_user2
http_access allow group_user3 sites_group_user3
#
http_access deny localnet noporno
http_access deny localhost noporno
http_access deny localnet denied_sites
http_access deny localhost denied_sites
#
http_access deny file_type
http_access deny multimedia
http_access deny media
#
http_access deny weekday
http_access deny evening
http_access deny night
#
http_access allow group_user4
http_access deny group_user4
#
http_access allow group_user3
http_access deny group_user3
#
http_access allow group_user2
http_access deny group_user2
#
http_access allow localhost
http_access deny all
#
# ======= END of RULES ========
#
hierarchy_stoplist cgi-bin ? chat

# 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
refresh_pattern -i \.gif$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.png$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.jpg$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.jpeg$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.pdf$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.zip$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.tar$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.gz$   43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.tgz$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.prz$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.inf$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.doc$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.ppt$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.xlc$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.xls$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.docx$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.rtf$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.txt$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.rar$  43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.7z$  43200 100% 43200 override-lastmod override-expire

# Main SQUID settings
http_port 192.168.0.1:3128
icp_port 0
cache_mem 2000 MB
cache_dir ufs /var/spool/squid 2000 16 256
error_directory /etc/squid/errors
coredump_dir /var/spool/squid
buffered_logs on
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
cache_mgr admin@my_firma.ru     # тут пишем своё
visible_hostname Super-Puper-Server     # тут тоже
cache_effective_user squid
cache_swap_high 95
cache_swap_low 80
maximum_object_size 16384 KB
maximum_object_size_in_memory 100 KB
minimum_object_size 0 KB
ipcache_size 1024
ipcache_high 95
ipcache_low 80
fqdncache_size 1024
quick_abort_max 16 KB
quick_abort_pct 90
read_ahead_gap 16 KB
negative_ttl 1 minutes
positive_dns_ttl 3 hours
negative_dns_ttl 3 minutes
range_offset_limit 0 KB
allow_underscore on
forwarded_for on
half_closed_clients on
store_objects_per_bucket 20

Это sarg.conf

+ открыть спойлер

# sarg.conf
#        English
#        Russian_koi8
#        Russian_UTF-8
#        Russian_windows1251
language Russian_UTF-8
#               Cyrillic
#               Windows-1251
#               Koi8-r
#               UTF-8
charset UTF-8
access_log /var/log/squid/access.log
output_dir /var/www/html/sarg
graphs yes
graph_days_bytes_bar_color orange
#
title "Название Вашей компании. Отчёт доступа к сети Интернет"
#
font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 9px
header_font_size 9px
title_font_size 11px
background_color white
text_color #000000
text_bgcolor lavender
title_color green
logo_image none
background_image none
password none
temporary_dir /var/tmp/sarg/
output_email none
resolve_ip yes
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse     
date_format e
lastlog 0
remove_temp_files yes
index yes
index_tree file
overwrite_report no
mail_utility mail
topsites_num 100
exclude_codes /etc/sarg/exclude_codes
report_type topusers topsites sites_users users_sites date_time denied auth_failures site_user_time_date downloads
date_time_by elap
privacy no
show_successful_message yes
show_read_statistics yes
topuser_fields NUM DATE_TIME USERID BYTES USED_TIME TOTAL AVERAGE
user_report_fields CONNECT BYTES USED_TIME TOTAL AVERAGE
topuser_num 0
site_user_time_date_type table
datafile none
hours 0-23
show_sarg_info no
show_sarg_logo no
parsed_output_log_compress /bin/gzip
external_css_file none

Собственно из всех пояснений тут только то, запросы клиентов получает SQUID и передаёт их HAVP-у, а ответ в обратном порядке.
Можно ещё было аутенефикацию по домененой учётке прикрутить, но ИМХО это лишний костыль в моём случае, поэтому вся привязка на уровне IP адреса (у меня они выдаются автоматом, к DHCP привязан МАС).
Как я уже сказал, вариаций решения может быть великое множество, у меня сделанно вот так.
Буду вопросы - пишите.

Истина ускользает от тех кто отказывается её видеть обоими глазами.
Талантам нужно помогать, бездарности пробьются сами.
В Туле настолько суровые парни, что вместо пены для бритья, используют пену монтажную.
cat /broken/hands > /dev/null