Итак встала задача в конторе переехать с ворованного ххххххпрокси на бесплатный со всеми текущими настройками каждого пользователя. Перебрав варианта 3-4 различных прокси серверов, мой выбор пал на 3PROXY (http://3proxy.ru). Синтаксис у oops, squid,etc почти что одинаков, а вот у 3proxy со своим оригинальным синтаксисом и возможностями известными только автору — пришлось курить маны, факи и хауту, чтобы написать работоспособный конфиг под своих юзеров. Кстати. У 3proxy мне очень понравилось — быстрая установка и запуск, а также переносимость конфига с минимальными изменениями UNIX <-> Windows.

Итак задача. Пустить в инет 25 юзеров — авторизация по IP и по логину с пассвордом. Каждому юзеру канал определённой «толщины «, или же один канал на несколько пользователей(например для бухгалтеров). Ограничение времени работы (только в рабочее время). В выходные скорость в рабочее время для всех по минимуму (2-3кб/сек). Несколько фильтров ресурсов (список запрещённых ресурсов и список разрешённых ресурсов). Весь трафик идёт через вышестоящий прокси в другом филиале. TCP и UDP портмаппинг(можно через вышестоящий прокси(если такое возможно) а можно и напрямую).


3proxy.cfg
###############################################################
# AgR^ config for my company
# ver: 0.3.0 (25-04-2010)
# ver: 0.4.1 (27-04-2010)
# ver: 0.4.2 (01-05-2010)    dasable nscache
###############################################################
daemon
internal 10.0.0.233
external 10.0.0.233
nserver 10.0.0.230
# nscache 65536
# nsrecord 1234567.ru google.ru
timeouts 1 5 30 60 180 1800 15 60
maxconn 100
#dnspr
###############################################################
monitor "/usr/local/etc/3proxy.cfg"
# monitor "/usr/local/etc/3proxy/allow.ip"
# monitor "/usr/local/etc/3proxy/deny.ip"
monitor "/usr/local/etc/3proxy/count.txt"
monitor "/usr/local/etc/3proxy/speed.txt"
monitor "/usr/local/etc/3proxy/users.txt"
###############################################################
logformat "L%C - %U [%d/%m/%Y:%H:%M:%S %z] ""%T"" %E %I %O %N/%R:%r"
log /var/log/3proxy/3proxy.log D
counter "/var/log/3proxy/3proxy.3cf" D "/var/log/3proxy/traf"
include /usr/local/etc/3proxy/count.txt
###############################################################
users Administrator:CL:change_this_pass1
users change_this_name:CL:change_this_pass2
###############################################################
nobandlimout * * * 25
nobandlimin * * * 110
###############################################################
# speed of users !!!! Must be here after nobandlim(in/out)    #
###############################################################
include /usr/local/etc/3proxy/speed.txt
###############################################################
auth iponly strong
deny * * *sex*,*porn*,*adult*,*xxx*,*gamepark*,*zaycev*,*dofiga.net*,*anekdot*
include /usr/local/etc/3proxy/users.txt
#allow * 10.0.0.198,10.0.0.199 * * * 1-5 08:00:00-18:00:00
###############################################################
# Раздаём для любого айпишника по логин/пассворд
###############################################################
allow change_this_name
# Запуск HTTP прокси #
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
proxy -p3128 -n
###############################################################
# Administrator section                                                                                         #
###############################################################
flush
auth strong
allow Administrator * * 8082 * *
deny *
admin -p8082

flush
auth iponly
allow *
admin -p8081 -s
###############################################################
# Запускаем сервер от пользователя nobody
# (возможно в вашей ОС uid и gid пользователя nobody
# будут другими. Для их определения воспользуйтесь коммандой id nobody)
#chroot /usr/local/jail
setgid 65534
setuid 65534
# ------------------------------------
# После того как мы создали конфигурационный файл сервера, запускаем 3proxy командой:
# /usr/local/3proxy/3proxy /usr/local/3proxy/3proxy.cfg
# $Id: example1.txt,v 1.5 2006/02/08 17:59:07 vlad Exp $
end

users.txt

###############################################################
# allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
# deny <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
###############################################################
allow * 10.0.0.3 * * * * *
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.11 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.12 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.13 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.18 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.19 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.25 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.37 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.41 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.42 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.62 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.64 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.71 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.76 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.85 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.88 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.89 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.101 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.203 * * * 1-5 08:00:00-18:00:00
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.231 * * * * *
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.251 * * * * *
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial
allow * 10.0.0.252 * * * * *
parent 1000 connect proxy.filial.ru 3128 login_of_filial pass_of_filial

------------------------------------------------------------------------------------

speed.txt

###############################################################
# bandlimin <rate> <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist>
#           64000 bit = 8kbit
###############################################################
bandlimin 800000 * 10.0.0.3
bandlimin 120000 * 10.0.0.11
bandlimin 120000 * 10.0.0.12
bandlimin 120000 * 10.0.0.13
bandlimin 120000 * 10.0.0.18
bandlimin 56000 * 10.0.0.19
bandlimin 56000 * 10.0.0.25
bandlimin 56000 * 10.0.0.37
bandlimin 8000 * 10.0.0.41
bandlimin 240000 * 10.0.0.42
bandlimin 56000 * 10.0.0.62
bandlimin 120000 * 10.0.0.64
bandlimin 56000 * 10.0.0.71
bandlimin 56000 * 10.0.0.76
bandlimin 56000 * 10.0.0.85
bandlimin 56000 * 10.0.0.88
bandlimin 56000 * 10.0.0.89
bandlimin 120000 * 10.0.0.101
bandlimin 240000 * 10.0.0.203
bandlimin 1000000 * 10.0.0.231
bandlimin 1000000 * 10.0.0.251
bandlimin 1000000 * 10.0.0.252
# bandlimin 56000 * * * * *

count.txt

###############################################################
# countin <number> <type> <amount> <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>
###############################################################
countin "1/Beljaev Vadim" M 100 * 10.0.0.3 * * *
countin "2/Efimova Galina" M 100 * 10.0.0.11 * * *
countin "3/Dashkina Irina" M 100 * 10.0.0.12 * * *
countin "4/Kozlova Vera" M 100 * 10.0.0.13 * * *
countin "5/Trapeznikov Sasha" M 100 * 10.0.0.18 * * *
countin "6/Seleznev Ura" M 100 * 10.0.0.19 * * *
countin "7/Nasirov Shamil" M 100 * 10.0.0.25 * * *
countin "8/Abdrahmanov Vill" M 100 * 10.0.0.37 * * *
countin "9/R18-5-XP" M 100 * 10.0.0.41 * * *
countin "10/Mikrukov Aleksey" M 100 * 10.0.0.42 * * *
countin "11/Muhtahova Venerka" M 100 * 10.0.0.62 * * *
countin "12/Fedorova Irina" M 100 * 10.0.0.64 * * *
countin "13/Ushakova Ulja" M 100 * 10.0.0.71 * * *
countin "14/R23-2-XP" M 100 * 10.0.0.76 * * *
countin "15/Nasirova Elvira" M 100 * 10.0.0.85 * * *
countin "16/Kashfutdinov Ural" M 100 * 10.0.0.88 * * *
countin "17/Rudneva Ulja" M 100 * 10.0.0.89 * * *
countin "18/Beloborodova Tatjana" M 100 * 10.0.0.101 * * *
countin "19/Server-203" M 100 * 10.0.0.203 * * *
countin "20/inetserver 1/3-231" M 100 * 10.0.0.231 * * *
countin "21/inetserver 2/3-231" M 100 * 10.0.0.251 * * *
countin "22/inetserver 3/3-231" M 100 * 10.0.0.252 * * *

К сожалению пока не понял как избавиться от запроса логин/пароль при запросе запрещённого URL  и как изменять скорость на выходные дни(хотя спокойно можно посредством cron менять файл speed.txt). Не написал пока конфиг для маппинга TCP и UDP.

Статья пока ещё не окончена………..