3APA3A 3proxy tiny proxy server HowTo
В стадии разработки
- Компиляция
- Как скомпилировать 3proxy
Visual C++
Извлеките файлы из архива 3proxy.tgz
(например с помощью WinZip). Используйте
команду nmake /f Makefile.msvc
- Как скомпилировать 3proxy
GCC под Windows
Извлеките файлы из архива 3proxy.tgz (например
с помощью WinZip или, при наличии CygWin
tar -xzf 3proxy.tgz). Используйте команду
make -f Makefile.win. Если по каким-то причинам
вы хотите использовать библиотеку POSIX-эмуляции
Cygwin - Используйте make -f Makefile.unix.
Прииспользовании CygWin функции специфичные
для Windows (такие как запуск в качестве
службы) будут недоступны.
- Как скомпилировать 3proxy
GCC под Unix/Linux
Используйте make -f Makefile.unix. Должен
исопльзоваться GNU make, на некоторых системах
необходимо использовать gmake вместо make.
Компиляция проверена в FreeBSD/i386, OpenBSD/i386,
NetBSD/i386, RH Linux/Alpha, Debian/i386,
Gentoo/i386, Gentoo/PPC но должно собираться
в любых версиях *BSD/linux. В других системах
может потребоваться модификация файла и/или
исходных текстов.
- Как скомпилировать 3proxy
Compaq C Compiler под Unix/Linux
Используйте make -f Makefile.ccc
Компиляция проверена в RH Linux 7.1/Alpha. В
других системах может потребоваться модификация
файла и/или исходных текстов.
Инсталляция прокси-сервера
- Как установить/удалить
3proxy под Windows 95/98/ME/NT/2000/XP/2003
как службу
Извлеките файлы из архива 3proxy.zip в
любой каталог (например c:\Program Files\3proxy).
Если необходимо, создайте каталог для хранения
файлов журналов. Создайте файл конфигурации
прокси 3proxy.cfg в каталоге 3proxy (См.
раздел Конфигурация сервера).
Если используется версия ранее чем 0.6,
добавьте строку
service
в файл 3proxy.cfg. Откройте коммандную строку
(cmd.exe). Перейдите в каталог с 3proxy и
дайте команду 3proxy.exe --install:
D:\>C:
C:\>cd C:\Program Files\3proxy
C:\Program Files\3proxy>3proxy.exe --install
Сервис должен быть установлен и запущен. Если
сервис не запускается, проверьте содержимое
файла журнала, попробуйте удалить строку service
из 3proxy.cfg, запустить 3proxy.exe вручную
и проанализировать сообщения об ошибках.
Для удаления 3proxy необходимо остановить
сервис и дать команду 3proxy --remove:
D:\>C:
C:\>cd C:\Program Files\3proxy
C:\Program Files\3proxy>net stop 3proxy
C:\Program Files\3proxy>3proxy.exe --remove
после чего каталог 3proxy можно удалить.
Установка в качестве системной службы
под Windows 9x поддерживается с версии 0.5
- Как установить/удалить
3proxy под Windows 95/98/ME
Извлеките файлы из архива 3proxy.zip в
любой каталог (например c:\Program Files\3proxy).
Если необходимо, создайте каталог для хранения
файлов журналов. Создайте файл конфигурации
прокси 3proxy.cfg в каталоге 3proxy (См.
раздел Конфигурация сервера).
В файле конфигурации удалите строку
service
и добавьте строку
daemon
Создайте ярлык для 3proxy.exe и поместите
его в атозагрузку, либо с помощью редактора
реестра regedit.exe добавьте в разделе
HKLM\Software\Microsoft\Windows\CurrentVersion\Run
Строковый параметр
3proxy = "c:\Program Files\3proxy.exe" "C:\Program
Files\3proxy.cfg"
Использование апострофов при наличии в пути
пробела обязательно. Перезагрузитесь. Если
сервер не запускается, проверьте содержимое
файла журнала, попробуйте удалить строку daemon
из 3proxy.cfg, запустить 3proxy.exe вручную
и проанализировать сообщения об ошибках.
- Как установить/удалить
3proxy под Unix/Linux
Скомпилируйте 3proxy (см. раздел Компиляция).
Скопируйте исполняемые файлы в подходящий
каталог (например /usr/local/3proxy/sbin
для серверных приложений и /usr/local/3proxy/bin
для клиентских утилит). Создайте файл /usr/local/etc/3proxy.cfg.
(См. раздел Конфигурация
сервера). Изменить расположение файла
конфигурации можно задав параметр при вызове
3proxy или изменив путь в файле 3proxy.c
до компиляции. Добавьте вызов 3proxy в скрипты
начальной инициализации.
Конфигурация сервера
- Как посмотреть пример файла
конфигурации
Пример файла конфигурации 3proxy.cfg.sample
поставляет с любым дистрибутивом программы.
- Как настроить ведение
журнала
3proxy поддерживает ведение журнала на
экран (stdout), в файл, через ODBC и через
службу syslog (только для Unix/Linux/Cygwin).
Можно управлять либо общим файлом журнала,
задаваемым в файле конфигурации 3proxy.cfg
и единым для всех служб либо индивидуальными
файлами для отдельных служб (например команда
socks -l/var/log/socks.log запускает SOCKS
прокси и задает для него индивидуальный
журнал). Для общего файла журнала поддерживается
ротация (т.е. периодическое создание новых
файлов журнала с предопределенными именами
и удаление файлов старше определенного срока)
и архивация файлов журнала. Тип журнала
определяется параметром log в файле конфигурации
либо ключем -l при вызове конкретной службы
(например socks сервера). log или -l без
параметров соответствуют ведению журнала
на экран (stdout).
log filename
и
-lfilename
соответствуют записи журнала в файл filename.
log @ident
и
-l@ident
соответствуют ведению журнала через syslog
с идентификатором ident.
log &connstring
соответствует ведению журнала через ODBC,
connstring задается в формате datasource,username,password
(последние два параметра опциональны, если
datasource не требует или уже содержит сведения
для авторизации). При этом команда logformat
должна задавать SQL запрос, который необходимо
выполнить для добавления записи в журнал,
см Как настроить формат
журнала
Управление ротацией общего файла журнала
происходит с помощью команд файла конфигурации
log, rotate и archiver.
log filename LOGTYPE
задает тип ротации. LOGTYPE может принимать
значения:
- M, ежемесячная ротация
- W, еженедельная ротация
- D, ежедневная ротация
- H, ежечасная ротация
- С, ежеминутная ротация
rotate NUMBER
указывает на число файлов участвующих в ротации
(т.е. сколько последних журналов хранить).
archiver EXT COMMAND PARAMETERS
задает параметры архивации журнала. EXT указывает
на расширение архиватора (например zip, gz,
Z, rar и т.д.) COMMAND указывает на программу
и PARAMETERS - на параметры коммандной строки.
Архиватор должен сам удалить исходный файл.
Архиватору можно передать имя файла с помощью
макроса %F и ожидаемое имя архива с помощью
макроса %A. В качестве архиватора вполне можно
задать пакетный файл, который, например, будет
загружать данные из журнала в базу данных.
Примеры команды archiver для популярных архиваторов
можно найти в 3proxy.cfg.sample
- Как настроить формат
журнала
Начиная с версии 0.3 формат журнала может
бытьнастроен с момощью команды logformat
со строкой формата. Первый символ строки
должен быть L или G, что указывает на формат,
в котором будет указываться время и даты,
L - текущее локальной время, G - абсолютное
время по Гринвичу. Строка формата может
содержать следующие модификаторы:
- %y - Год (последние две цифры)
- %Y - Год (четырехзначный)
- %m - Номер месяца (01-12)
- %o - Трехбуквенная аббревиатура месяца
- %d - День (01-31)
- %H - Час (00-23)
- %M - Минута (00-59)
- %S - Секунда (00-59)
- %t - Временная метка (число секунд
с 00:00:00 по Гринвичу 1 января 1970г)
- %. - Миллисекунды
- %z - Временная зона в почтовом формате
(от Гринвича, '+' восток, '-' запад ЧЧММ),
например Московское зимнее время +0300.
- %U - Имя пользователя ('-' если отсутствует).
- %N - Название прокси сервиса (PROXY,
SOCKS, POP3P, etc)
- %p - Порт прокси сервиса
- %E - Код ошибки (см. Коды
ошибок в журнале)
- %C - IP клиента
- %c - Порт клиента
- %R - IP сервера (исходящего соединения
по запросу клиента)
- %r - Порт сервера (исходящего соединения
по запросу клиента)
- %I - Принято байт от сервера
- %O - Послано байт на сервер
- %n - Имя хоста из запроса
- %h - Число звеньев до конечного сервера
(при использовании перенаправлений или
чейнинга, см. Как составлять
цепочки прокси)
- %T - Текст специфичный для Proxy-Сервиса
(например запрошенный URL). Можно использовать
%TX-Y, где X и Y положительные числа,
тогда отображаются только поля с X по
Y текста. Поля считаются разделенными
пробельным символом.
Пример:
logformat "L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
будет генерировать в журнале записи типа
1042454727.0296 SOCK4.1080
000 3APA3A 127.0.0.1:4739 195.122.226.28:4739
505 18735 1 GET http://www.security.nnov.ru/
HTTP/1.1
(без переноса строк)
При исопльзовании ODBC logformat должен
задавать формат SQL команды, которую необходимо
дать для внесения записи в журнал, например
logformat "GINSERT
INTO proxystat VALUES (%t, '%c', '%U', %I)"
- Как запустить конкретную
службу (HTTP, SOCKS и т.д)
3proxy поставляется в двух вариантах:
как набор отдельных модулей (proxy, socks,
pop3p, tcppm, udppm) и как универсальный
прокси-сервер (3proxy). Универсальный прокси
сервер это законченная программа, которой
не требуются отдельные модули.
Отдельный модуль управляется только из коммандной
строки. Поэтому для отдельного модуля не
поддерживаются многие функции, такие как
управление доступом и ротация журнала. Запуск
модуля осуществляется из коммандной строки.
Например:
$/sbin/socks -l/var/log/socks.log -i127.0.0.1
запускает SOCKS на порту 127.0.0.1:1080 с
ведением журнала /var/log/socks.log Справку
по опциям коммандной строки можно получить
запустив модуль с ключем -?.
Если используется 3proxy то запускаемые
службы указываются в файле 3proxy.cfg. Файл
3proxy.cfg просматривается 3proxy построчно,
каждая строка рассматривается как управляющая
комманда. Синтаксис комманд описан в 3proxy.cfg.sample.
Например
log /var/log/3proxy.log D
rotate 30
internal 127.0.0.1
external 192.168.1.1
proxy
socks
pop3p -l/var/log/pop3proxy
Запускает 3 службы - PROXY, SOCKS и POP3 Proxy.
Каждая слушает на интерфейсе 127.0.0.1 на
порту по-умолчанию (3128 для proxy, 1080 для
socks и 110 для pop3p). Журналы всех служб
кроме pop3p ведутся в файле /var/log/3proxy.log
который ежедневно меняется. Хранится 30 последних
файлов. Для pop3p ведется отдельный журнал
/var/log/pop3proxy (см. Как
настроить ведение журнала).
- Как повесить службу на определенный
интерфейс или порт?
Опция -i позволяет указать внутренний
интерфейс, -p - порт (пробелы в опциях не
допускаются). Например, чтобы служба proxy
висела на порту 8080 интерфейсов 192.168.1.1
и 192.168.2.1 необходимо дать команды
proxy -p8080 -i192.168.1.1
proxy -p8080 -i192.168.2.1
- Как ограничить доступ к службе
Во-первых, для ограничения доступа необходимо
указать внутренний интерфейс, на котором
прокси-сервер будет принимать соединения.
Внутренний интерфейс указывается с помощью
команды internal файла конфигурации или
с помощью ключа -i конкретного модуля. (см.
Как запустить конкретную
службу (HTTP, SOCKS и т.д)). Отсутствие
указания внутренего унтерфейса может привести
к тому, что ваш прокси будет открытым.
Указание внешнего интерфейса (т.е. IP
С которого сервер будет устанавливать внешние
соединения) так же является полезным. Для
этого служит команда external и ключ -e
соответственно. Для универсального прокси
возможна дополнительная авторизация доступа
с помощью имени/пароля, NetBIOS имени пользователя
и по спискам доступа (по IP клиента, IP
и порту назначения, см. Как
ограничить доступ пользователей к ресурсам).
Тип авторизации устанавливается командой
auth в файле конфигурации.
auth none
указывает на отсутствие какой-либо авторизации.
Списки доступа не проверяются.
auth iponly
Будет идти проверка по списку доступа с исопльзованием
IP клиента, IP и номера порта назначения.
auth nbname
Перед проверкой по списком доступа будет произведена
попытка получить NetBIOS имя клиента. Для
этого используется NetBIOS код службы messanger
(0x03). Если имя определить не удалось (служба
messanger для Windows NT/2000/XP или WinPopUP
для 95/98/ME не запущена), то имя будет считаться
пустым. Далее следует проверка по спискам
доступа. Данный тип авторизации не зависит
от платформы сервера (т.е. прокси сервер запущенный
под Unix сможет определять NetBIOS имена).
Его рекомендуется использовать в однородных
сетях, где на всех клиентах установлена Windows
NT/2000/XP и пользователи не имеют доступа
к привилегированным учетным записям. Этот
вид авторизации не является надежным.
auth strong
Проверяется имя и пароль переданные пользователем
при подключении к прокси. Данный вид авторизации
работает только с proxy и socks. Необходимо
задание списка пользователей (см Как
создать список пользователей). Соединения
от неизвестных пользователей не принимаются.
После проверки имени пользвоателя и пароля
происходит проверка списков доступа.
Для разных служб можно установить различные
типы авторизации, например
auth none
pop3p
auth iponly
proxy
auth strong
socks
Не накладвает ограничений на использование
POP3 Proxy, производит проверку по спискам
доступа для пользователей HTTP Proxy и требует
авторизации с именем и паролем для SOCKS.
- Как создать список пользователей
Список пользователей задается с помощью
комманды users.
users USERDESC ...
С помощью одной комманды можно задать несколько
пользователей, можно давать несколько комманд
users. USERDESC - описание пользователя. Описание
пользователя состоит из трех полей разделенных
: (двоеточием) - имени (login) типа пароля
и пароля. Например:
users admin:CL:bigsecret test:CL:password test1:CL:password1
users "test2:CR:$1$lFDGlder$pLRb4cU2D7GAT58YQvY49."
users test3:NT:BD7DFBF29A93F93C63CB84790DA00E63
Обратите внимание на двойные кавычки - они
необходимы для второго пользователя, т.к.
в его пароле встречается знак $, который для
файла 3proxy.cfg означает включение другого
файла. Поддеживается следующие типы паролей:
- тип не указан - использовать системную
авторизацию для данного пользователя (пока
не реализовано).
- CL - пароль в открытом тексте
- CR - пароль в формате crypt() (только
MD5)
- NT - пароль в формате NT в шестнадцатеричной
кодировке
NT и crypt пароли могут быть использованы
для импорта учетных записей из Windows/Samba
и Unix соответственно (для Windows можно использовать
утилиты семейства pwdump). Учетные записи
удобно хранить в отдельном файле (в таком
случае можно хранить их построчноб в формате
типичном для файлов паролей). Включить файл
можно с помощью макроса $:
users $/etc/.3proxypasswd
или
users $"c:\Program Files\3proxy\passwords"
Шифрованные NT и crypt пароли можно создавать
с помощью утилиты mycrypt.
Список пользователей един для всех служб.
Разграничение доступа по службам необходимо
производить с помощью списков доступа.
- Как ограничить доступ пользователей
к ресурсам
Для построения списков доступа используются
команды allow, deny, redirect и flush. Команды
имеют следующую структуру:
allow <userlist>
<sourcelist> <targetlist> <targetportlist>
<commandlist> <weekdays> <timeperiodslist>
deny <userlist> <sourcelist>
<targetlist> <targetportlist>
<commandlist> <weekdays> <timeperiodslist>
redirect redirect_ip redirect_port <userlist>
<sourcelist> <targetlist> <targetportlist>
<commandlist> <weekdays> <timeperiodslist>
flush
Уоманда flush используется для сброса существующего
списка доступа (это необходимо для того, чтоыб
можно было задать различные списки доступа
для различных служб). Команда redirect используется
для перенаправления соединения, allow для
разрешения соединения, deny - для запрета
соединения (о перенаправлении см. Как
управлять перенаправлениями). В момент
установки исходящего соединения просматривается
список доступа и находится первая запись,
соответствующая запрошенному клиентом соединению.
Если запись соттветствует allow - соединение
разрешается, deny - запрещается, redirect
- перенаправляется на указанный redirect_ip:redirect_port.
Если список пуст, то соединение разрешается.
Если список не пуст, но подходящей записи
нет, то соединение запрещается. При этом
- <userlist> - список логинов пользователей
через запятую
- <sourcelist> - список сетей клиентов
через запятую. Сеть задается в формате
xxx.yyy.zzz.mmm/l, где l - длина маски
сети (количество ненулевых байт). Например
192.168.1.0/24 соответствует сети с маской
255.255.255.0.
- <targetlist> - список сетей назначения
через запятую
- <targetportlist> - список портов
назначения через запятую. можно задать
диапазон портов через -, например 80,1024-65535
- <commandlist> - список комманд,
через запятую, для которых применяется
правило:
CONNECT - установить исходящее TCP соединение
(например SOCKSv4/5, POP3 proxy, etc)
BIND - разрешить входящее TCP соединение
(SOCKSv5)
UDPASSOC - создать UDP-ассоциацию (SOCKSv5)
ICMPASSOC - создать ICMP-ассоциацию (не
реализовано)
HTTP_GET - HTTP GET запрос (HTTP proxy)
HTTP_PUT - HTTP PUT запрос (HTTP proxy)
HTTP_POST - HTTP POST запрос (HTTP proxy)
HTTP_HEAD - HTTP HEAD запрос (HTTP proxy)
HTTP_CONNECT - HTTP CONNECT запрос (HTTP
proxy)
HTTP_OTHER - другой HTTP запрос (HTTP
proxy)
HTTP - соответствует любому HTTP запросу
кроме HTTP_CONNECT (HTTP proxy)
HTTPS - тоже, что HTTP_CONNECT (HTTP proxy)
FTP_GET - FTP get запрос
FTP_PUT - FTP put запрос
FTP_LIST - FTP list запрос
FTP - соответствует любому FTP запросу
- <weekdays> задает список дней
недели, 1 соответствует понедельнику,
0 или 7 - воскресенье. 1-5 означает с
понедельника по пятницу (включительно).
1,3,5 задает нечетные дни недели.
- <timeperiodslist> список интервалов
дня в формате ЧЧ:ММ:СС-ЧЧ:ММ:СС, например
00:00:00-08:00:00,17:00:00-24:00:00 задает
нерабочее время.
Примеры использования листов доступа можно
найти в файле 3proxy.cfg.sample. Нулевой адрес
или порт перенаправлени означает, что он не
должен измениться. Если и адрес и порт нулевые
redirect 0.0.0.0 0
то это имеет специальное значение прозрачного
перенаправления в локальный HTTP прокси (обычно
из SOCKS), при этом не устанавливается никаких
дополнительных соединений.
- Как управлять перенаправлениями
Перенаправления имеет смысл использовать,
например, чтобы перенаправить обращения
определенных клиентов или на определнные
сервера на другой сервер (например при попытке
доступа на Web сервер с недозволенным материалом
перенаправить на собственный Web сервер,
или для того, чтобы в зависимости от IP
клиента перенаправлять его соединения на
разные сервера (особенно при отображении
портов через tcppm). Кроме того, перенаправление
может быть использовано, например, для перенаправления
все исходящих HTTP запросов посланных через
SOCKS на HTTP прокси. Поскольку формат запроса
к Web серверу и Proxy различается, не любой
Proxy сервер способен корректно обработать
перенаправленный запрос (HTTP proxy в комплекте
3proxy нормально обрабатывает перенаправленные
запросы, что делает возможным его использования
в качестве "прозрачного" прокси. Кроме того,
HTTP прокси обнаруживает перенаправления
на родительский прокси и генерирует нормальные
заголовки.
- Как составлять цепочки прокси
Для составления цепочек прокси можно использовать
команду parent. parent является расширением
команды allow (т.е. команде parent должна
предшествовать команда allow). С помощью
этой команды можно строить цепочки из HTTPS
(HTTP CONNECT), SOCKS4 и SOCKS5 прокси (т.е.
последовательно подключаться через несколько
прокси), при этом возможна авторизация на
родительском прокси, звено цепочки может
выбираться случайным образом из несольких
значений с вероятностью согласно их весу.
Вес (от 1 до 1000) задается для каждого
прокси. Сумма весов по всем перенаправлениям
должна быть кратна 1000. Прокси с весами
до 1000 группируются, и при построении цепочки
один из них выбирается случайно согласно
весу. Длина цепочки определяется из суммарного
веса. Например, если суммарный вес цепочки
3000, в цепочке будет 3 звена. Синтаксис
команды:
parent <weight> <type> <ip> <port> <username> <password>
weight - вес прокси, type - тип прокси (tcp
- перенаправление соединения, может быть только
последним в цепочке, http - синоним tcp, connect
- HTTP CONNECT/HTTPS прокси, socks4 - SOCKSv4
прокси, socks5 - SOCKSv5 прокси), ip - IP
адрес прокси, port - порт прокси, username
- имя для авторизации на прокси (опционально),
password - пароль для авторизации на прокси
(опционально).
Пример:
allow *
parent 500 socks5 192.168.10.1 1080
parent 500 connect 192.168.10.1 3128
Создает цепочку из одного звена (суммарный
вес 1000), в котором один из двух прокси выбирается
случайно с равной вероятностью (веса равны).
В цепочку перенаправляются все исходящие соединения
(определяется коммандой allow).
allow * * * 80
parent 1000 socks5 192.168.10.1 1080
parent 1000 connect 192.168.20.1 3128
parent 300 socks4 192.168.30.1 1080
parent 700 socks5 192.168.40.1 1080
Создает цепочку из трех звеньев (суммарный
вес 3000). Первое звено - 192.168.10.1, второе
- 192.168.20.1, а третье - либо 192.168.30.1
с вероятностью 0.3 либо 192.168.40.1 с вероятностью
0.7
Пара комманд
allow <arg>
parent 1000 tcp <ip> <port>
является полным аналогом команды
redirect <ip> <port> <arg>
- Как ограничивать скорости
приема
3proxy позволяет устанавливать фильтры
ширины потребляемого канала. Для этого служат
команды bandlimin и nobandlimin (in в команде
означает, что правило применяется к входящему
трафику).
bandlimin <bitrate>
<userlist> <sourcelist> <targetlist>
<targetportlist> <commandlist>
nobandlimin <userlist> <sourcelist>
<targetlist> <targetportlist>
<commandlist>
bitrate указывает ширину потока в битах
в секунду (именно в битах). В остальном
команды аналогичны командам allow/deny,
с тем отличием, что команды bandlim не имеют
привязки к конкретному сервису, такому как
HTTP прокси или SOCKS и действуют на все
сервисы, трафик по всем соединениям, попавшим
под действие правила суммируется, независимо
от того, через какой сервис это соединение
установлено.
bandlimin 57600 * 192.168.10.16
bandlimin 57600 * 192.168.10.17
bandlimin 57600 * 192.168.10.18
bandlimin 57600 * 192.168.10.19
устанавалиет канал 57600 для каждого из четырех
клиентов,
bandlimin 57600 * 192.168.10.16/30
устанавалиает суммарный канал 57600 на 4х
клиентов. Если необходимо, чтобы на какой-то
сервис не было ограничения ширины канала,
следует указать nobandlim для этого сервиса,
например:
nobandlimin * * * 110
bandlimin 57600 * 192.168.10.16/32
разрешает клиентам неограниченный по скорости
доступ по протоколу POP3.
- Как ограничивать объем
принимаемого трафика
counter <filename>
countin <number> <type> <amount>
<userlist> <sourcelist> <targetlist>
<targetportlist> <commandlist>
nocountin <userlist> <sourcelist>
<targetlist> <targetportlist>
<commandlist>
Команды позволяют установить лимит трафика
на день, неделю или месяц. Сведения о трафике
постоянно сохраняются в файле, указываемом
командой counter, что делает подсчет трафика
независимым от перезагрузки прокси. Действие
команд countin/nocountin аналогично действию
bandlimin/nobandlimin, number - задает последовательный
номер счетчика, номер должен быть уникальным
положительным числом. Значение 0 указывает,
что сведения для данного счетчика не надо
сохранять в файле.
type - тип ограничения. D (На день), W (на
неделю) или M (на месяц).
amount - объем трафика на указанный период
в мегабайтах.
- Как строить списки сетей
и пользователей
Очень часто списки сетей и пользователей
бывают достаточно громоздкими. 3proxy не
поддерживает создание групп, но позволяет
включение файлов. Это означает, что для
удобства администрирования выгодно хранить
списки пользователей и списки сетей в отдельных
файлах и, при необходимости дать пользователю
доступ к тому или иному ресурсу, править
файл со списком пользователей или сетей
вместо того, чтобы править сам файл 3proxy.cfg.
В файле 3proxy.cfg файл со списком можно
включить с помощью макроса $. Поскольку
в 3proxy есть ограничения на максимальный
размер элемента конфигурации, большие списки
следует разбивать на несколько файлов и
использовать несколько записей списка контроля
доступом. В комплекте с 3proxy поставляется
утилита dighosts, которая позволяет построить
список сетей по странице Web. Утилита позволяет
поиск адресов на Web-странице в формате
АДРЕС МАСКА или АДРЕС/ДЛИНА. Утилиту dighosts
можно вызвать во время старта 3proxy используя
команду system. Например:
system "dighosts http://provider/network.html local.nets"
allow * * $local.networks
redirect proxy.provider 3128 *
proxy
flush
В данном случае в файле local.networks генерируется
список локальных сетей по странице networklist.html.
Далее используется список контроля доступа
для того, чтобы разрешить локальному прокси-серверу
доступ к локальным сетям на прямую, а все
остальные запросы перенаправить на прокси-сервер
провайдера.
- Как управлять разрешением
имен и кэшированием DNS
Для разрешения имен и кэширования применяются
команды nserver, nscache и nsrecord.
nserver 192.168.1.2
nserver 192.168.1.3
указывает 3proxy какие машины следует использвоать
в качестве сервера DNS. Сервер 192.168.1.3
будет использоваться толкьо при недостижимости
192.168.1.2. Можно указать до 5 серверов.
Если nserver не указан, будут использованы
системные функции разрешения имен.
nscache 65535
указывает размер кэша для разрешения имен
(обычно достаточно большой). Кэш исопльзуется
только при явном указании nserver.
nsrecord server.mycompany.com 192.168.1.1
nsrecord www.porno.com 0.0.0.0
добавляет статическую запись в кэш. Если исползован
адрес 0.0.0.0 имя не будет разрешаться.
- Как устанавливать соединение
по требованию
команда dialer устанавливает программу,
которая будет запускаться при невозможности
разрешить имя компьютера, например:
dialer "rasdial PROVIDER"
(описание rasdial можно найти на сервере поддержки
Microsoft). Есть два аспекта: невозможность
разрешения имени еще не свидетельствует об
отсутствии соединения (это должна учитывать
вызываемая программа), при использовании nscache
имя может разрешиться при отсутствии соединения.
В таких случаях полезно запрашивать заведомо
несуществующий ресурс, например http://dial.right.now/.
Конфигурация клиентов
- Как использовать 3proxy с Internet
Explorer или другим браузером?
Мы будем рассматривать Interenet Explorer,
т.к. у него больше особенностей настройки,
с другими браузерами должно возникать меньше
вопросов.
Есть два основных способа работы с 3proxy
- использовать HTTP прокси (сервис proxy)
или SOCKS прокси (сервис socks). Обычно
используется HTTP прокси. Для SOCKS прокси
можно использовать встроенную поддержку
браузера или программу-соксификатор (см.
Как использовать 3proxy с
программой не поддерживающей работу с прокси-сервером?)
если встроенная поддержка SOCKS чем-то не
устраивает или так удобнее. Не все соксификаторы
поддерживают входящие соединения, чтобы
не было проблем с протоколом FTP лучше использовать
пассивный режим (в Internet Explorer 5.5SP2
и выше "Использовать пассивный FTP-протокол").
Для конфигурации HTTP прокси необходимо
указать внутренний адрес и порт установленый
для службы proxy в конфигурации 3proxy (либо
как "Один прокси-сервер для всех протоколов"
либо для HTTP, Secure, FTP). Поддержка Gopher
в 3proxy в настоящий момент не реализована,
но этот устаревший протокол в Internet практически
не используется. Для нормальной работы FTP
через HTTP прокси необходимо отключить представление
для папок FTP (FTP folder view), он включен
по-умолчанию, т.к. иначе FTP будет работать
без использвания HTTP прокси. HTTP прокси
использует пассивный режим для протокола
FTP. В настройках 3proxy рекомендует разрешть
метод HTTP_CONNECT только для порта назначения
443. Если метод HTTP_CONNECT не разрешен,
то не будет работать протокол HTTPS, если
он разрешен для всех портов, то можно обойти
журналирование запросов для протокола HTTP).
Для работы с HTTP прокси может использоваться
авторизация по паролю (strong).
Для использования SOCKS необходимо настроить
только SOCKS прокси (иначе для тех протоколов,
для которых указан прокси сервер пркоси
сервер будет использоваться как HTTP прокси).
Internet Explorer (включая IE 6.0SP1) поддерживает
только SOCKSv4. В качестве имени пользователя
передается имя пользователя использованное
для входа в систему. Передача пароля в SOCKSv4
не поддержвиается, поэтому авторизация по
паролю (strong) не доступна. Можно исопльзовать
имя пользователя переданное браузером в
ACL для iponly-авторизации, но при этом
необходимо иметь ввиду ненадежность такого
способа. При работе через SOCKS Internet
Explorer (и большая часть других браузеров)
используют пассивный режим работы для FTP.
При использовании SOCKS можно получит в
журнале (логах) URL запрашиваемых страниц,
для этого необходимо создать внутреннее
перенаправление в HTTP прокси для порта
80 (и других портов используемых для HTTP)
в локальный HTTP прокси (proxy), порт 21
(и другие порты используемые FTP) в FTP
прокси. При перенаправлении соединений в
FTP прокси, нужно иметь ввиду, что FTP создает
вторичные соединения для передачи данных.
Для этого, во-первых, необходимо разрешит
доступ к внутреннему интерфейсу прокси сервера
через SOCKS (что не очень безопасно), во-вторых
принять меры, чтобы в SOCKS такие соединения
на внутренний интерфейс не тарифицировались
(т.к. иначе они будут тарифицироваться дважды
- SOCKS и FTP прокси).
Internet Explorer и другие продвинутые
браузеры поддерживают автоматическую конфигурацию
прокси-сервера в полностью автоматическом
или полуавтоматическом режимах. Автоматическая
конфигурация позволяет задать достаточно
сложные правила, позволяющие клиентам использовать
(ил ине использвоать) разные прокси-серверы
для доступа к разным ресурсам. Эта возможность
разбирается в статьях
Microsoft: Q296591 A Description of the
Automatic Discovery Feature
http://support.microsoft.com/default.aspx?scid=kb;EN-US;296591
Netscape: Navigator Proxy Auto-Config File
Format
http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html
- Как настраивать FTP клиента?
Настройка FTP клиента для работы через
SOCKS прокси не отличается от настройки
браузера.
Для работы с FTP клиентом через FTP прокси
(ftppr) есть несколько возможностей. Допустим,
нам необходимо подключиться ко внешнему
FTP Серверу со следующими параметрами:
Адрес: ftp.security.nnov.ru
Username: ftpuser
Password: ********
Работа с клиентом не поддерживающим FTP
прокси. В качестве адреса FTP сервера указывается
адрес прокси (например proxy.security.nnov.ru).
В качестве имени пользователя ftpuser@ftp.security.nnov.ru.
Если для доступа к службе ftppr требуется
авторизация по имени и паролю с именем pruser
и паролем prpass, то в качестве имени пользователя
необходимо указать pruser:prpass:ftpuser@ftp.security.nnov.ru.
Если FTP клиент требует указания полной
URL для подключения к серверу, то она должна
выглядеть как
pruser:prpass:ftpuser@ftp.security.nnov.ru:********@proxy.security.nnov.ru
Не все клиенты обработают это корректно,
но в большинстве случаев этого не требуется.
Работа с клиентом поддерживающим FTP прокси.
А таком случае, если 3proxy не требует авторизации
по паролю, то настройки стандартны для клиента.
Если требуется доступ по паролю, то в качестве
имени пользователя указывается pruser:prpass:ftpuser.
- Как использовать SMTP через
3proxy В большинстве случаев достаточно
установить отображение (tcppm) TCP порта 25
на аналогичный порт SMTP-Сервера провайдера.
В конфигурации клиента указать внутренний
адрес прокси в качестве адреса SMTP-сервера.
- Как использовать POP3 proxy?
Предположим, у вас есть следующие настройки
для получения почты:
POP3 server: pop3.security.nnov.ru
Login: user
Password: ********
В настройках почтовой программы следует указать:
POP3 server: (адрес прокси-сервера)
Login: user@pop3.security.nnov.ru
Password: ********
Имя пользователя может само по себе содержать
знак '@'. Если в примере выше имя пользователя
user@security.nnov.ru, имя пользвоателя для
доступа к прокси-серверу должно быть user@security.nnov.ru@pop3.security.nnov.ru.
Если pop3pr требует авторизации по имени/паролю
(например pruser и prpass), то их необходимо
указать в начале имени пользователя отдели
знаком ':', т.е, для самого тяжелого случая
pruser:prpass:user@security.nnov.ru@pop3.security.nnov.ru
- Как использовать 3proxy с
программой не поддерживающей работу с прокси-сервером?
Можно использовать любую программу-редиректор,
например SocksCAP
или FreeCAP.
3proxy поддерживает исходящие и обратные
TCP и UDP соединения, но редиректоры могут
иметь свои ограничения, кроме того, некоторые
плохо написаные приложения не поддаются
"соксификации". Если программе требуется
обращаться к небольшому набору серверов
(например игровых), то проблему можно решить
с помощью портмаппинга.
- Как использовать 3proxy
с играми? Оптимальный варинт - использовать
соксификатор (Как использовать
3proxy с программой не поддерживающей работу
с прокси-сервером?). FreeCap
3.13 проверен с играми на движке Unreal
(включая Unreal Tournament), Half-Life (включая
Counter Strike) и другими. Если по каким-то
причинам соксификатор не работает или недоступен,
то необходимо использовать отображения портов
(обычно игры, кроме mood-подобных, работают
по протоколу UDP, надо исопльзовать udppr).
Нужно иметь ввиду, что для udppr требуется
отдельный маппинг для каждого серверного порта
и каждого клиента. Например, если есть один
сервер с портами 2115 и 2116 и три клиента,
то нужно создать 6 разных маппингов, например
12115 -> server:2115
22115 -> server:2115
32115 -> server:2115
12116 -> server:2116
22116 -> server:2116
32116 -> server:2116
В игровом клиент адрес и порт с маппингом
следует указывать вместо адреса и порта сервера.
Администрирование и анализ информации
- Где взять свежую версию
Свежую версию всегда можно взять здесь,
обратите внимание, что в новой версии может
измениться порядок лицензирования или комманды
конфигурации, поэтому, прежде чем устанавливать
новую версии программы, обязательно ознакомьтесь
с документацией.
- Как управлять службой
3proxy в Windows
При установке 3proxy в качестве системной
службы, сервером поддерживаются команды
запуска, остановки, временной приостановки
и продолжения. При временной приостановке
сервер перестает принимать новые запросы
от, клиентов но обработка ранее поступивших
запросов продолжается. Сервер не подерживает
динамическое изменение конфигурации, т.е.
после изменения конфигурации 3proxy необходимо
перезапустить. Управлять запуском, остановкой,
приостановкой и продолжением можно либо
через служебную программу "Службы" (Services)
либо через команду net:
net start 3proxy
net stop 3proxy
net pause 3proxy
net continue 3proxy
- Коды ошибок в журнале
- 0 - операция завершена успешно (в случае
установленного соединения - соединение
закрыто корректно одной из сторон).
- 1-9 - ошибки авторизации
- 1 - доступ закрыт ACL (deny)
- 2 - перенаправление (не должно быть
в журнале)
- 3 - нет записи ACL для данного соединения
- 4 - не определено имя пользователя для
auth strong
- 5 - не найдено имя пользователя для
auth strong
- 6 - неверный пароль (открытый текст)
- 7 - неверный пароль (crypt)
- 8 - неверный пароль (NT)
- 9 - недостаточно данных для перенаправления
(не должно быть в журнале)
- 10 - превышен лимит трафика
- 11-19 - ошибки соединения
- 11 - невозможно создать сокет socket()
- 12 - невозможно выбрать интерфейс bind()
- 13 - сбой подключения connect()
- 14 - сбой getpeername()
- 20-29 - общие ошибки
- 21 - ошибка выделения памяти
- 30-39 - ошибки перенаправления CONNECT
- 31 - невозможно послать запрос к CONNECT
прокси
- 32 - превышено ожидание или некорректный
ответ CONNECT прокси
- 33 - CONNECT прокси не может установить
соединение
- 34 - превышено ожидание или обрыв соединения
при согласовании CONNECT соединения
- 40-49 - ошибки перенаправления SOCKS4
- 50-69 - ошибки перенаправления SOCKS5
- 70-79 ошибки установки родительского
соединения, аналогичны 1x
- 90-99 - ошибки разрыва соединения
- 90 - соединение прервано из-за превышения
трафика
- 91 - соединение неожиданно прерванно
сервером
- 92 - ошибка отправки данных
- 93 - соединение неожиданно прервано
клиентом
- 94 - ошибка сокета
- 97 - истекло время ожидания
- 98 - исчерпан лимит данных сервера (не
должно быть в журнале)
- 99 - исчерпан лимит данных клиента (не
должно быть в журнале)
- 100 - не найден IP адрес по запросу
клиента
- 200-299 - ошибки UDP portmapper
- 300-399 - ошибки TCP portmapper
- 400-499 - ошибки SOCKS proxy
- 500-599 - ошибки HTTP proxy
- 600-699 - ошибки POP3 proxy
- 999 - функция не реализована
Как задать вопрос, которого
нет в How To?
Задайте его на форуме.
Только не пытайтесь задавать какие-либо вопросы,
если вы просто не поняли этот How To.
$Id: howtor.html,v 1.12 2006/05/16 09:26:07 vlad Exp $
|