3proxy коды ошибок

×

Few antiviral products inadequately detect 3proxy as Trojan.Daemonize,
Backdoor.Daemonize, etc and many detect 3proxy as a PUA (potentially unwanted program).
It may cause browser warning on download page.
3proxy is not trojan or backdoor and contains
no functionality except described in documentation. Clear explanation of this
fact is given, for example, in
Microsoft’s
article.

3APA3A 3proxy tiny proxy server HowTo

В стадии разработки

  • Компиляция
    • Как скомпилировать 3proxy Visual C++
    • Как скомпилировать 3proxy Intel C Compiler под Windows
    • Как скомпилировать 3proxy GCC под Windows
    • Как скомпилировать 3proxy GCC под Unix/Linux
    • Как скомпилировать 3proxy Compaq C Compiler под Unix/Linux
  • Установка и удаление 3proxy
    • Как установить/удалить 3proxy под Windows 95/98/ME/NT/2000/XP как службу
    • Как установить/удалить 3proxy под Windows 95/98/ME
    • Как установить/удалить 3proxy под Unix/Linux
  • Конфигурация сервера
    • Как заставить 3proxy запускаться
    • Как заставить ограничения (по ширине канала, трафику, ACL и. т.п.) работать
    • Как заставить 3proxy запускаться как службу
    • Как разобраться с internal и external
    • Как починить ведение журналов в ODBC?
    • Как заставить IPv6 работать
    • Как сделать чтобы 3proxy не крешился
    • Как посмотреть пример файла конфигурации
    • Как настроить ведение журнала
    • Как настроить формат журнала
    • Как использовать лог-анализаторы с 3proxy
    • Как запустить конкретную службу (HTTP, SOCKS и т.д)
    • Как повесить службу на определенный интерфейс или порт
    • Как разрешать имена на родительском прокси?
    • Как настроить FTP прокси?
    • Как ограничить доступ к службе
    • Как создать список пользователей
    • Как ограничить доступ пользователей к ресурсам
    • Как управлять перенаправлениями
    • Как управлять локальными перенаправлениями
    • Как организовать балансировку между несколькими каналами
    • Как составлять цепочки прокси
    • Как ограничивать скорости приема
    • Как ограничивать объем принимаемого трафика
    • Как пофиксить некорректный подсчет трафика
    • Как управлять разрешением имен и кэшированием DNS
    • Как использовать IPv6
    • Как использовать connect back
  • Конфигурация и настройка клиентов
    • Как использовать 3proxy с Internet Explorer или другим браузером
    • Как настраивать FTP клиент
    • Как использовать SMTP через 3proxy
    • Как использовать службу POP3 Proxy
    • Как использовать 3proxy с программой, не поддерживающей работу с прокси-сервером
    • Как использовать 3proxy с играми
  • Администрирование и анализ информации
    • Где взять свежую версию
    • Как управлять службой 3proxy в Windows NT/2000/XP
    • Коды ошибок в журнале
  • Как задать вопрос, которого нет в HowTo


  • Компиляция
    • Как скомпилировать 3proxy Visual C++

      Извлеките файлы из архива 3proxy.tgz (например, с помощью WinZip).
      Используйте команду nmake /f Makefile.msvc.

    • Как скомпилировать 3proxy Intel C Compiler под Windows

      См. Как скомпилировать 3proxy Visual C++.
      Используйте Makefile.intl вместо 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. Под Linux
      необходимо использовать Makefile.Linux, под Solaris — Makefile.Solaris-* (в
      зависимости от используемого компилятора). Компиляция проверена в FreeBSD/i386,
      OpenBSD/i386, NetBSD/i386, RH Linux/Alpha, Debian/i386, Gentoo/i386, Gentoo/PPC,
      Solaris 10, но должно собираться в любых версиях *BSD/Linux/Solaris.
      В других системах может потребоваться модификация make-файла и/или исходных текстов.
      Для компиляции с поддержкой ODBC необходимо убрать -DNOODBC из флагов
      компиляции и добавить -lodbc (или другую ODBC-библиотеку) к флагам линковщика.

    • Как скомпилировать 3proxy Compaq C Compiler под Unix/Linux
    • Используйте make -f Makefile.ccc. Компиляция проверена в RH Linux 7.1/Alpha.
      В других системах может потребоваться модификация файла и/или исходных текстов.


  • Установка и удаление 3proxy
    • Как установить/удалить 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.exe —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 в скрипты начальной инициализации.


  • Конфигурация сервера
    • Как заставить прокси работать
    • Для работы требуется корректный файл конфигурации. Если прокси не запускается, значит в конфигурации есть ошибка.

    • Как заставить работать ограничения (контроль доступа, ограничения ширины канала, счетчики и т.п.)
    • A: Обычные ошибки — использование auth none (для работы любых
      функций, основанных на ACL, требуется auth iponly, nbname или strong),
      нарушение порядка ввода команд (команды выполняются последовательно,
      запуск сервиса proxy, socks, tcppm и т.д. должен осуществляться после
      того, как указана его конфигурация), неправильный порядок записей в ACL
      (записи просматриваются последовательно до первой, удовлетворяющей
      критериям). Если в ACL имеется хотя бы одна запись, то считается, что
      последняя запись в ACL — это неявная deny *.

    • Как починить запуск 3proxy службой
    • Чаще всего 3proxy не запускается службой (но запускается вручную) по одной из следующих причин:

      • Использование относительных (неполных) путей файлов в файле конфигурации
        При использовании файлов журналов, файлов вставок ($filename) используйте
        полные пути, например, $»c:\3proxy\include files\networks.local». Тоже самое
        относится к файлам журналов и любым другим.
        Для отладки лучше запускать 3proxy с ведением журнала на стандартный вывод.
        Не забудьте в таком случае отключить daemon и service в файле конфигурации.
        Для чистоты эксперимента запускать 3proxy из коммандной строки в таком случае
        следует, находясь в другой папке.
      • Отсутствие у системной записи прав на доступ к исполняемому файлу, каким-либо файлам конфигурации, журнала и т.п.
      • Отсутствие файла конфигурации по стандартному расположению —
        3proxy.cfg в одном каталоге с исполняемым файлом. Если файл расположен по
        другому пути, необходимо использовать команду

            3proxy --install path_to_configuration_file
      • Отсутствие у пользователя прав на установку или запуск службы
      • Служба уже установлена или запущена
    • Как разобраться с internal и external
    • Убедитесь, что выправильно понимаете что такое internal и external адреса.
      Оба адреса — это адреса, принадлежищие хосту, на котором установлен 3proxy.
      Эта опция конфигурации необходима в классической ситуации, когда 3proxy
      установлен на граничном компьютере с двумя (или более) подключениями:

             LAN connection +-------------+ Internet connection
        LAN <-------------->| 3proxy host |<-------------------> INTERNET
                           ^+-------------+^
                           |               |
                     Internal IP      External IP

      Если 3proxy работает на хосте с одним интерфейсом, то его адрес будет и
      internal и external.

      Интерфейс с адресом internal должен существовать и быть рабочим на момент
      запуска 3proxy, и не должен отключаться. Если internal интерфейс
      периодически отключается, то не следует его указывать, или можно указать адрес
      0.0.0.0. При этом прокси будет принимать запросы на всех интерфейсах, поэтому
      при наличии нескольких интерфейсов для ограничения доступа следует использовать
      фаервол или хотя бы ACL.

      Интерфейс с адресом external, если он указан, должен быть рабочим на момент
      получения запроса клиента. При отсутствии external или адресе 0.0.0.0 внешний
      адрес будет выбираться системой при установке соединения. При этом, может быть
      возможность доступа через прокси к ресурсам локальной сети, поэтому для
      предотвращения несанкционированного доступа следует использовать ACL. Кроме
      того, могут быть проблемы с приемом входящих соединений через SOCKSv5
      (SOCKSv5 используется в клиентах исключительно редко).
      В случае, если адрес динамический, можно либо не
      указывать external, либо использовать адрес 0.0.0.0, либо, если необходима
      поддержка входящих соединений в SOCKSv5, использовать скрипт,
      который будет получать текущий адрес и сохранять его в файл, который будет
      отслуживаться через команду monitor.

    • Как починить ведение журналов в ODBC
    • Убедитесь, что используется системный, а не
      пользовательский DSN. Убедитесь, что выполняется правильный SQL запрос. Наиболее
      распространенная проблема связана с отсутствием кавычек или неправильным
      форматом данных. Самый простой способ — сделать ведение журнала в файл или
      на стандартный вывод, просмотреть выдаваемые SQL запросы и попробовать
      дать такой запрос вручную.

    • Как починить IPv6
    • Прокси не может обращаться напрямую к IPv6 сети если в запросе от клиента
      указан IPv4. В запросе от клиента должен быть IPv6 адрес или имя хоста, чаще
      всего это решается включением опции разрешения имен через прокси-сервер на стороне
      клиента.

    • Как починить падения 3proxy
    • Возможно, недостаточен размер стека потока по-умолчанию, это может
      быть при использовани каких-либо сторонних плагинов (PAM, ODBC) или на
      некоторых платформах (некоторые версии FreeBSD на amd64). Можно решить
      проблему с помощью опции ‘stacksize’ или ‘-S’, поддерживаемых в 0.8.4 и выше.

    • Как посмотреть пример файла конфигурации

      Пример файла конфигурации 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 в нем содержится символ %, то имя рассматривается как форматный
      спецификатор (см. logformat). Например,
      log c:\3proxy\logs\%y%m%d.log D создаст файл типа c:\3proxy\logs\060725.log,
      для образования даты будет использовано местное время.

        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, ежечасная ротация
      • C, ежеминутная ротация
        rotate NUMBER

      указывает на число файлов, участвующих в ротации (т.е. сколько последних
      журналов хранить).

        archiver EXT COMMAND PARAMETERS

      задает параметры архивации журнала. EXT указывает на расширение
      архива (например, zip, gz, Z, rar и т.д.) COMMAND указывает на
      программу и PARAMETERS — на параметры командной строки. Архиватор
      должен сам удалять исходный файл, также ему можно передать имя файла
      с помощью макроса %F и ожидаемое имя архива с помощью макроса %A.
      В качестве архиватора вполне можно задать пакетный файл, который,
      например, будет загружать данные из журнала в базу данных.
      Примеры команды archiver для популярных архиваторов можно найти в
      3proxy.cfg.sample

        logdump OFFSET_BYTES_FROM_SERVER OFFSET_BYTES_FROM_CLIENT

      Задает смещение в байтах на входящий и исходящий трафик, при достижении
      которого необходимо создавать запись в журнале даже в том случае, если
      соединение еще не завершено. Если logdump не указан или значения
      OFFSET_BYTES_FROM_SERVER OFFSET_BYTES_FROM_CLIENT нулевые — в журнале
      будет создана единственная запись по окончании обработки запроса клиента
      (при разрыве соединения). Пример:

        logdump 1048576 1048576

      создает в журнале запись на каждый мегабайт входящего или исходящего
      трафика.

    • Как настроить формат журнала

      Начиная с версии 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, и т.д.)
      • %p — Порт прокси сервиса
      • %E — Код ошибки (см. Коды ошибок в журнале)
      • %C — IP клиента
      • %c — Порт клиента
      • %R — IP сервера (исходящего соединения по запросу клиента)
      • %r — Порт сервера (исходящего соединения по запросу клиента)
      • %Q – IP, запрошенный клиентом
      • %q – Порт, запрошенный клиентом
      • %I — Принято байт от сервера
      • %O — Отправлено байт на сервер
      • %n — Имя хоста из запроса
      • %h — Число звеньев до конечного сервера (при использовании перенаправлений или чейнинга
        см. Как составлять цепочки прокси)
      • %T – Текст, специфичный для прокси сервиса (например, запрошенный URL).
        Можно использовать %X-YT, где 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://3proxy.ru/ HTTP/1.1

      (без переноса строк)
      При использовании ODBC, logformat должен задавать формат SQL команды,
      которую необходимо дать для внесения записи в журнал, например:

        logformat "-\'+_GINSERT INTO proxystat VALUES (%t, '%c', '%U', %I)"

      префикс -\’+_ указывает, что символы \ и ‘ следует заменить на _ .

    • Как использовать лог-анализаторы с 3proxy

      Просто сделайте формат ведения журнала совместимым с одним из форматов,
      поддерживаемых анализатором. Это позволяет использовать практически любые
      анализаторы. Примеры совместимых форматов:

      Формат Squid access.log:

        "- +_G%t.%. %D %C TCP_MISS/200 %I %1-1T %2-2T %U DIRECT/%R application/unknown"

      Более совместимый формат, но без %D

        "- +_G%t.%. 1 %C TCP_MISS/200 %I %1-1T %2-2T %U
        DIRECT/%R application/unknown"

      Формат ISA 2000 proxy WEBEXTD.LOG (поля разделены табуляцией):

        "-	+ L%C	%U	Unknown	Y	%Y-%m-%d	%H:%M:%S
        w3proxy	3PROXY	-	%n	%R	%r	%D
        %O	%I	http	TCP	%1-1T	%2-2T	-	-
        %E	-	-	-"

      Формат ISA 2004 proxy WEB.w3c (поля разделены табуляцией):

        "-	+ L%C	%U	Unknown	%Y-%m-%d	%H:%M:%S
        3PROXY	-	%n	%R	%r	%D	%O
        %I	http	%1-1T	%2-2T	-	%E	-
        -	Internal	External	0x0	Allowed"

      Формат ISA 2000/2004 firewall FWSEXTD.log (поля разделены табуляцией):

        "-	+ L%C	%U	unnknown:0:0.0	N	%Y-%m-%d
        %H:%M:%S	fwsrv	3PROXY	-	%n	%R	%r
        %D	%O	%I	%r	TCP	Connect	-	-
        -	%E	-	-	-	-	-"

      Стандартный лог HTTPD (Apache и другие):

        "-""+_L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I"

      Более совместимый, но без кода ошибки:

        "-""+_L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" 200 %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
    • Как разрешать имена на родительском прокси?
    • A: Для этого надо использовать тип родительского прокси http,
      connect+, socks4+ и socks5+. Однако, при это надо помнить, что самому 3proxy
      требуется разрешение имени для управления ACL. Поэтому, если с прокси-хоста
      не работают разрешения имени, необходимо в конфигурации дать команду

        fakeresolve

      которая разрешает любое имя в адрес 127.0.0.2.

    • Как настроить FTP прокси?
    • Есть поддержка как FTP через HTTP (то, что называется FTP прокси в браузерах) так и настоящего FTP прокси (то, что называется
      FTP proxy в командных оболочках и FTP клиентах). В браузерах в качестве FTP прокси следует прописывать порт службы proxy,
      т.е. FTP организован
      через http прокси, дополнительного прокси поднимать не надо. Для FTP-клиентов необходимо поднять ftppr. FTP прокси всегда работает
      с FTP сервером в пассивном режиме.

    • Как ограничить доступ к службе

      Во-первых, для ограничения доступа необходимо указать внутренний интерфейс,
      на котором прокси-сервер будет принимать соединения. Внутренний интерфейс
      указывается с помощью команды internal в файле конфигурации или с помощью
      ключа -i конкретного модуля.
      (см. Как запустить конкретную службу (HTTP, SOCKS и т.д)).
      Отсутствие указания внутреннего интерфейса может привести к тому, что ваш
      прокси будет открытым.

      Указание внешнего интерфейса (т.е. IP, с которого сервер будет устанавливать
      внешние соединения) так же является полезным. Для этого служит команда external
      и ключ -e соответственно.
      Для универсального прокси возможна дополнительная авторизация доступа с помощью
      имени/пароля, NetBIOS имени пользователя и по спискам доступа (по IP клиента,
      IP и порту назначения, см. Как ограничить доступ пользователей к ресурсам).
      Тип авторизации устанавливается командой auth в файле конфигурации.

        auth none

      Отсутствие какой-либо авторизации. Списки доступа не проверяются.

        auth iponly

      Будет идти проверка по списку доступа с использованием IP клиента, IP и номера
      порта назначения.

        auth nbname

      Перед проверкой по списком доступа будет произведена попытка получить NetBIOS
      имя клиента. Для этого используется NetBIOS код службы messager (0x03). Если
      имя определить не удалось (служба messager для 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.

      С версии 0.6 возможно использвоать двойную авторизацию, например,

        auth iponly strong
        allow * * 192.168.0.0/16
        allow user1,user2
        proxy

      будет использовать авторизацию только в том случае, если не удалось пропустить
      пользователя с авторизаций iponly, т.е. для доступа к ресурсам 192.168.0.0/16
      авторизация не требуется.

      С версии 0.6 так же можно использвоать кэширование авторизации (имени
      пользователя) с целью повышения производительности. Использовать кэширование
      для strong практически не имеет смысла, она полезно для nbname и авторизации
      через внешние плагины, типа WindowsAuthentication. Кэширование настраивается
      командой authcache с двумя параметрами — типом кэширования и временем, на
      которое кэшируется пароль. Возможные типы: ip — после успешной авторизации в
      течение времени кэширования все запросы пришедшие с того же адреса считаются
      запросами от того же пользователя, name — после успешной авторизации от
      пользователя с тем же именем требуют указания имени, но реально аутентификации
      не производится, ip,name — запрос должен придти от того же IP и с тем же
      именем. user,password — имя и пароль пользователя сверяются с кэшированными.
      Возможны и другие сочетания. Для авторизации должен использоваться специальный
      метод авторизации — cache. Пример:

        authcache ip 60
        auth cache strong windows
        proxy -n

      Кэширование влияет на безопасность доступа. Ни в коем случае не следует
      использовать кэширование для доступа к критичным ресурсам, в частности к
      интерфейсу администрирования.

      authcache так же может использоваться для привязки сессий пользователя к ip с
      с помощью опции limit

        autchcache ip,user,pass,limit 120
        auth cache strong

      запретит пользователю использовать более одного адреса в течении времени кеширования.

    • Как создать список пользователей

      Список пользователей задается с помощью команды 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 и
      flush. Команды имеют следующую структуру:

        allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
        deny <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
        flush

      Команда flush используется для сброса существующего списка доступа (это
      необходимо для того, чтобы можно было задать различные списки доступа для
      различных служб). allow служит для разрешения соединения, deny — для запрета
      соединения. Команда parent используется в качестве расширения команды
      allow для управления перенаправлениями соединений (о перенаправлении см. Как управлять перенаправлениями).
      В момент установки исходящего соединения просматривается список доступа и
      находится первая запись, соответствующая запрошенному клиентом соединению.
      Если запись соттветствует allow — соединение разрешается, deny — запрещается.
      Если список пуст, то соединение разрешается. Если список не пуст, но подходящей
      записи нет, то соединение запрещается. При этом:

      • <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, и т.д.)

        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 запросу

        ADMIN — доступ к интерфейсу администрирования
      • <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.

    • Как управлять перенаправлениями

      Перенаправления имеет смысл использовать, например, чтобы перенаправить
      обращения определенных клиентов или на определнные сервера на другой сервер
      (например, при попытке доступа на Web сервер с недозволенным материалом
      перенаправить на собственный Web сервер, или для того, чтобы в зависимости
      от IP клиента перенаправлять его соединения на разные сервера (особенно при
      отображении портов через tcppm). Кроме того, перенаправление может быть
      использовано, например, для перенаправления все исходящих HTTP запросов,
      посланных через SOCKS, на HTTP прокси. Поскольку формат запроса к Web серверу
      и Proxy различается, не любой Proxy сервер способен корректно обработать
      перенаправленный запрос (HTTP proxy в комплекте 3proxy нормально обрабатывает
      перенаправленные запросы, что делает возможным его использования в качестве
      «прозрачного» прокси. Кроме того, HTTP прокси обнаруживает перенаправления
      на родительский прокси и генерирует нормальные заголовки. Пример простейшего
      перенаправления:

        auth iponly
        allow *
        parent 1000 http 192.168.1.1 3128
        proxy

      перенаправляет весь трафик службы proxy на родительский HTTP-прокси сервер
      192.168.1.1 порт 3128.

      Если в качестве номера порта указан порт 0, то указанный IP адрес используется
      в качестве внешнего адреса для установки соединения (аналог -eIP, но только
      для запросов попадающих под allow).

      Специальным случаем перенаправлений являются локальные перенаправления,
      которые, как правило, используются совместно со службой socks. В локальных
      перенаправлениях IP адрес 0.0.0.0 порт 0. Например,

        auth iponly
        allow * * * 80
        parent 1000 http 0.0.0.0 0
        allow * * * 21
        parent 1000 ftp 0.0.0.0 0
        allow * * * 110
        parent 1000 pop3 0.0.0.0 0
        socks

      перенаправляет все содеинения, проходящие через SOCKS-сервер по 80 порту, в
      локальный HTTP прокси, 21-му — в FTP, и 110 — в POP3 прокси. При этом службы
      proxy, ftppr или pop3pr запускать не требуется. Это может быть полезно для
      того, чтобы видеть в логах записи о посещаемых пользвоателем ресурсах и
      загружаемых файлах даже в том случае, если он подключается через SOCKS.

    • Как управлять локальными перенаправлениями
      • Q: Для чего это надо?
      • A: Чтобы иметь в логах URL запросов, если пользователь SOCKS пользуется
        Web, FTP или POP3.

      • Q: Какие недостатки?
      • A: Перенапраление невозможно для web-серверов или FTP, висящих на
        нестандартных портах, для SOCKSv4 не поддрживается авторизация с
        паролем (IE поддерживает только SOCKSv4), но при этом IE передает
        имя пользователя по SOCKSv4 (имя, с которым пользователь вошел в систему).
        Для SOCKSv5 не поддерживается NTLM авторизация, пароли передаются в открытом
        тексте.

      • Q: Какие преимущества?
      • A: Достаточно в настройках IE только указать адрес SOCKS прокси. В
        больших сетях можно для этого использовать WPAD (автоматическое
        обнаружение прокси). В 3proxy достаточно запускать только одну службу
        (socks). Если используется только Internet Explorer, то можно
        автоматически получать имя пользователя в логах, не запрашивая
        логин/пароль.

      • Q: Как настраивается?
      • A: Указывается parent http proxy со специальным адресом 0.0.0.0 и портом
        0. Пример:

          allow * * * 80,8080-8088
          parent 1000 http 0.0.0.0 0
          allow * * * 80,8080-8088
          #перенаправить соединения по портам 80 и 8080-8088 в локальный
          #http прокси. Вторая команда allow необходима, т.к. контроль доступа
          #осуществляется 2 раза - на уровне socks и на уровне HTTP прокси
          allow * * * 21,2121
          parent 1000 ftp 0.0.0.0 0
          allow * * * 21,2121
          #перенаправить соединения по портам 21 и 2121 в локальный
          #ftp прокси
          allow *
          #пустить все соединения напрямую
          socks
      • Q: Как взаимодействует с другими правилами в ACL?
      • A: После внутреннего перенаправления правила рассматриваются еще раз за
        исключением самого правила с перенаправлением (т.е. обработка правил не
        прекращается). Это позволяет сделать дальнейшие перенаправления на
        внешний прокси. По этой же причине локальное перенаправление не должно
        быть последним правилом (т.е. должно быть еще хотя бы правило allow,
        чтобы разрешить внешние соединения через HTTP прокси).
        Например,

          allow * * * 80,8080-8088
          parent 1000 http 0.0.0.0 0
          #перенаправить во внутренний прокси
          allow * * $c:\3proxy\local.nets 80,8080-8088
          #разрешить прямой web-доступ к сетям из local.nets
          allow * * * 80,8080-8088
          parent 1000 http proxy.3proxy.ru 3128
          #все остальные веб-запросы перенаправить на внешний прокси-сервер
          allow *
          #разрешить socks-запросы по другим портам
    • Как организовать балансировку между несоклькими каналами

      Сам по себе прокси не может управлять маршрутизацией пакетов сетевого уровня.
      Единственная возможность для управления внешними соединениями — это выбор
      внешнего интерфейса. Сделать выбор внешнего интерфейса случайным начиная
      с версии 0.6 можно с использованием локальных перенаправлений (с номером
      порта равным нулю):

        auth iponly
        allow *
        parent 500 http 10.1.1.101 0
        parent 500 http 10.2.1.102 0

      будет использовать внешний интерфейс 10.1.1.1 или 10.2.1.1 с вероятностью 0.5.
      Внешний интерфейс это то же, что задается командой external или опцией -e.
      Чтобы это работало как ожидается, необходимо, чтобы локальным интерфейсам
      10.1.1.1 и 10.2.1.1 соответствовали разные маршруты по-умолчанию.

      Если оба адреса принадлежат одной сети, например, 10.1.1.101 и 10.1.1.102 и
      нужно случайным образом выбирать один из шлюзов 10.1.1.1 и 10.1.1.2, то нужно
      управлять роутингом примерно так (при условии что маршрут по-умолчанию не
      задан):

        route add -p 10.1.1.1 10.1.1.101
        route add -p 10.1.1.2 10.1.1.102
        route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.1
        route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.2

      Если второго адреса на прокси сервере нет — его надо добавить. Под Linux/Unix
      лучше использовать source routing.

    • Как составлять цепочки прокси

      Для составления цепочек прокси так же можно использовать команду 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.1.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

    • Как ограничивать скорости приема

      3proxy позволяет устанавливать фильтры ширины потребляемого канала. Для этого
      служат команды bandlimin/bandlimout и nobandlimin/nobandlimout
      (in в команде означает, что правило применяется к входящему трафику,
      out — к исходящему).

        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> <type> <reportpath> 
        countin <number> <type> <amount> <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>
        nocountin <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>

      countout <number> <type> <amount> <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>
      nocountout <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>

      Команды позволяют установить лимит трафика на день, неделю или месяц.
      Сведения о трафике постоянно сохраняются в двоичном файле, указываемом
      командой counter, что делает подсчет трафика независимым от
      перезагрузки прокси. Можно управлять двоичным файлом, используя утилиту
      countersutil.
      Действие команд countin/nocountin аналогично действию bandlimin/nobandlimin,
      number — задает последовательный номер счетчика, номер должен быть
      уникальным положительным числом. Значение 0 указывает, что сведения
      для данного счетчика не надо сохранять в файле.

      reportpath — путь, по которому будут создаваться текстовые отчеты по
      потребленному трафику.

      type — тип ограничения или частота создания файлов отчета.
      D (На день), W (на неделю) или M (на месяц).

      amount — объем трафика на указанный период в мегабайтах.

    • Как пофиксить некорректный подсчет трафика

      Следует учитывать, что 3proxy считает трафик только на прикладном уровне и
      только проходящий через прокси-сервер. Провайдеры и другие средства учета
      трафика считают трафик на сетевом уровне, что уже дает расхождение порядка 10%
      за счет информации из заголовков пакетов. Кроме того, часть трафика, как
      минимум DNS-разрешения, различный флудовый трафик и т.д. идут мимо прокси.
      Уровень «шумового» трафика в Internet сейчас составляет порядка 50KB/день на
      каждый реальный IP адрес, но может сильно варьироваться в зависимости от сети,
      наличия открытых портов, реакции на ping-запросы и текущего уровня вирусной
      активности. По этим причинам, если 3proxy используется чтобы не «выжрать»
      трафик, выделенный провайдером, всегда следует делать некий запас порядка
      15%.

      Если на одной с 3proxy машине имеются какие-либо сервисы или
      работает пользователь, то их трафик не проходит через proxy-сервер и так же
      не будет учтен. Если где-то есть NAT, то клиенты, выходящие через NAT мимо
      прокси, так же останутся неучтенными. Если расхождение с провайдером превышает
      10% — нужно искать причину именно в этом.

    • Как управлять разрешением имен и кэшированием DNS

      Для разрешения имен и кэширования применяются команды nserver,
      nscache и nsrecord.

        nserver 192.168.1.2
        nserver 192.168.1.3:5353/tcp

      указывает 3proxy какие машины следует использвоать в качестве серверов
      DNS. Сервер 192.168.1.3 будет использоваться по порту TCP/5353 (вместо дефолтного UDP/53) только при недостижимости
      192.168.1.2. Можно указать до 5 серверов. Если nserver не указан, будут
      использованы системные функции разрешения имен.

        nscache 65535
        nscache6 65535

      указывает размер кэша для разрешения имен (обычно достаточно большой) для IPv4 и IPv6 соответственно.
      Кэш исопльзуется только при явном указании nserver.

        nsrecord server.mycompany.example.com 192.168.1.1
        nsrecord www.porno.com 127.0.0.2
        ...
        deny * * 127.0.0.2

      добавляет статическую запись в кэш. Статические записи так же влияют на разрешение через dnspr если не указана опция -s. Начиная с версии 0.8 для dnspr могут быть сконфигурированы родительские прокси.

    • Как использовать IPv6

      IPv6 поддерживается с версии 0.8. Обратите внимание, что в некоторых видах прокси (например SOCKSv4)
      IPv6 не поддерживает на уровне протокола. В SOCKSv5 есть поддержка IPv6 с помощью отдельного вида
      запроса, который должен быть реализован в клиентском приложении или соксификаторе.

      Возможно проксирование из сетей IPv4 и IPv6 в сети IPv4,
      IPv6 и смешанные. Адреса IPv6 могут использоваться в командах
      internal, external, parent, ACL, опциях -i, -e и т.д. Команду external и опцию
      -e для каждого сервиса можно давать два раза — один раз с IPv4 и один раз с IPv6
      адресом. internal и -i может быть указан только один, для биндинга ко всем адресам IPv4 и IPv6
      можно использовать адрес [0:0:0:0:0:0:0:0] or [::].

      Кроме того, для каждого сервиса могут быть даны опции -4, -46, -64, -6 которые
      задают приоритет разрешения имен в адреса IPv4 и IPv6 (только IPv4, приоритет IPv4, приоритет IPv6, только IPv6).

    • Как использовать connect back

      Например, пользователю нужен доступ к прокси-серверу, который расположен
      на хосте 192.168.1.2 недоступном из внешней сети, но имеющем доступ во внешнюю
      сеть с внешним адрес 1.1.1.1. Так же у него есть машина с именем host.dyndns.example.org
      с внешним адресом 2.2.2.2. Пользователь запускает 2 экземпляра 3proxy, один на
      хосте 192.168.1.2 с конфигурацией

        users user:CL:password
        auth strong
        allow user
        proxy -rhost.dyndns.example.org:1234

      второй на хосте host.dyndns.example.org (2.2.2.2) с конфигурацией

        auth iponly
        allow * * 1.1.1.1
        tcppm -R0.0.0.0:1234 3128 1.1.1.1 3128

      В настройках браузера указывается host.dyndns.example.org:3128.


  • Конфигурация клиентов
    • Как использовать 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), в качестве
      имени пользователя [email protected]. Если для доступа к службе
      ftppr требуется авторизация по имени и паролю с именем pruser и паролем prpass,
      то в качестве имени пользователя необходимо указать
      pruser:prpass:[email protected]. Если FTP клиент требует указания
      полной URL для подключения к серверу, то она должна выглядеть как

      pruser:prpass:[email protected]:********@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:		[email protected]
        Password:	********

      Имя пользователя может само по себе содержать знак ‘@’. Если в примере выше
      имя пользователя [email protected], то имя пользвоателя для доступа к
      прокси-серверу должно быть [email protected]@pop3.security.nnov.ru. Если
      pop3pr требует авторизации по имени/паролю (например, pruser и prpass), то их
      необходимо указать в начале имени пользователя, отделив знаком ‘:’, т.е для
      самого тяжелого случая pruser:prpass:[email protected]@pop3.security.nnov.ru

    • Как использовать 3proxy с программой, не поддерживающей работу с прокси-сервером

      Можно использовать любую программу-редиректор, например,
      SocksCAP или
      FreeCAP. 3proxy поддерживает исходящие
      и обратные TCP и UDP соединения, но редиректоры могут иметь свои ограничения,
      кроме того, некоторые плохо написаные приложения не поддаются «соксификации».
      Если программе требуется обращаться к небольшому набору серверов
      (например, игровых), то проблему можно решить с помощью портмаппинга.

    • Как использовать 3proxy с играми

      Оптимальный варинт — использовать соксификатор (Как использовать
      3proxy с программой, не поддерживающей работу с прокси-сервером).
      FreeCap 3.13 проверен с играми на движке
      Unreal (включая Unreal Tournament), Half-Life (включая Counter-Strike) и
      другими. Если по каким-то причинам соксификатор не работает или недоступен,
      то необходимо использовать отображения портов (обычно игры,
      кроме mood-подобных, работают по протоколу UDP, надо использовать udppm).
      Нужно иметь ввиду, что для udppm требуется отдельный маппинг для каждого
      серверного порта и каждого клиента. Например, если есть один сервер с портами
      2115 и 2116 и три клиента, то нужно создать 6 разных маппингов, например

      	udppm 12115 server 2115
      	udppm 12115 server 2115
      	udppm 22115 server 2115
      	udppm 32115 server 2115
      	udppm 12116 server 2116
      	udppm 22116 server 2116
      	udppm 32116 server 2116

      В игровом клиенте адрес и порт с маппингом следует указывать вместо адреса
      и порта сервера.


  • Администрирование и анализ информации
    • Где взять свежую версию

      Свежую версию всегда можно взять
      здесь. Обратите внимание,
      что в новой версии может измениться порядок лицензирования или команды
      конфигурации, поэтому прежде чем устанавливать новую версии программы
      обязательно ознакомьтесь с документацией.

    • Как управлять службой 3proxy в Windows NT/2000/XP

      При установке 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 — ошибки разрыва соединения
      • с версии 0.9
      • 90 — неожиданная системная ошибка (не должно происходить)
      • 91 — ошибка poll (не должно происходить)
      • 92 — соединение прервано по таймауту на сетевую операцию (см. timeouts)
      • 93 — соединение прервано по таймауту связанному с рейтлимитом или из-за превышения числа ошибок
      • 94 — клиент или сервер закрыли соединение или произошла сетевая ошибка, остались неотправленные данные
      • 95 — клиент «грязно» закрыл соединение или сетевая ошибка
      • 96 — сервер «грязно» закрыл соединение или сетевая ошибка
      • 97 — клиент и сервер «грязно» закрыли соединение или сетевая ошибка
      • 98 — исчерпан лимит данных сервера (не должно быть в журнале)
      • 99 — исчерпан лимит данных клиента (не должно быть в журнале)
      • до версии 0.9
      • 90 — ошибка сокета или соединение неожиданно прервано
      • 91 — общий сбой стека TCP/IP
      • 92 — соединение прервано по таймауту
      • 93 — ошибка получения данных от сервера
      • 94 — ошибка получения данных от клиента
      • 95 — таймаут из-за ограничения bandlimin/bandlimout
      • 96 — ошибка отправки данных клиенту
      • 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 — функция не реализована

  • Как задать вопрос, которого нет в HowTo

    Задайте его на Github.
    Только не пытайтесь задавать какие-либо вопросы, если вы просто не поняли этот
    HowTo.

  • 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 — ошибки разрыва соединения

    с версии 0.9

    90 — неожиданная системная ошибка (не должно происходить)

    91 — ошибка poll (не должно происходить)

    92 — соединение прервано по таймауту на сетевую операцию (см. timeouts)

    93 — соединение прервано по таймауту связанному с рейтлимитом или из-за превышения числа ошибок

    94 — клиент или сервер закрыли соединение или произошла сетевая ошибка, остались неотправленные данные

    95 — клиент «грязно» закрыл соединение или сетевая ошибка

    96 — сервер «грязно» закрыл соединение или сетевая ошибка

    97 — клиент и сервер «грязно» закрыли соединение или сетевая ошибка

    98 — исчерпан лимит данных сервера (не должно быть в журнале)

    99 — исчерпан лимит данных клиента (не должно быть в журнале)

    до версии 0.9

    90 — ошибка сокета или соединение неожиданно прервано

    91 — общий сбой стека TCP/IP

    92 — соединение прервано по таймауту

    93 — ошибка получения данных от сервера

    94 — ошибка получения данных от клиента

    95 — таймаут из-за ограничения bandlimin/bandlimout

    96 — ошибка отправки данных клиенту

    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 — функция не реализована

    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 — ошибки разрыва соединения

    с версии 0.9

    90 — неожиданная системная ошибка (не должно происходить)

    91 — ошибка poll (не должно происходить)

    92 — соединение прервано по таймауту на сетевую операцию (см. timeouts)

    93 — соединение прервано по таймауту связанному с рейтлимитом или из-за превышения числа ошибок

    94 — клиент или сервер закрыли соединение или произошла сетевая ошибка, остались неотправленные данные

    95 — клиент «грязно» закрыл соединение или сетевая ошибка

    96 — сервер «грязно» закрыл соединение или сетевая ошибка

    97 — клиент и сервер «грязно» закрыли соединение или сетевая ошибка

    98 — исчерпан лимит данных сервера (не должно быть в журнале)

    99 — исчерпан лимит данных клиента (не должно быть в журнале)

    до версии 0.9

    90 — ошибка сокета или соединение неожиданно прервано

    91 — общий сбой стека TCP/IP

    92 — соединение прервано по таймауту

    93 — ошибка получения данных от сервера

    94 — ошибка получения данных от клиента

    95 — таймаут из-за ограничения bandlimin/bandlimout

    96 — ошибка отправки данных клиенту

    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 — функция не реализована

    ×

    Few antiviral products inadequately detect 3proxy as Trojan.Daemonize,
    Backdoor.Daemonize, etc and many detect 3proxy as a PUA (potentially unwanted program).
    It may cause browser warning on download page.
    3proxy is not trojan or backdoor and contains
    no functionality except described in documentation. Clear explanation of this
    fact is given, for example, in
    Microsoft’s
    article.

    3APA3A 3proxy tiny proxy server HowTo

    В стадии разработки

    • Компиляция
      • Как скомпилировать 3proxy Visual C++
      • Как скомпилировать 3proxy Intel C Compiler под Windows
      • Как скомпилировать 3proxy GCC под Windows
      • Как скомпилировать 3proxy GCC под Unix/Linux
      • Как скомпилировать 3proxy Compaq C Compiler под Unix/Linux
    • Установка и удаление 3proxy
      • Как установить/удалить 3proxy под Windows 95/98/ME/NT/2000/XP как службу
      • Как установить/удалить 3proxy под Windows 95/98/ME
      • Как установить/удалить 3proxy под Unix/Linux
    • Конфигурация сервера
      • Как заставить 3proxy запускаться
      • Как заставить ограничения (по ширине канала, трафику, ACL и. т.п.) работать
      • Как заставить 3proxy запускаться как службу
      • Как разобраться с internal и external
      • Как починить ведение журналов в ODBC?
      • Как заставить IPv6 работать
      • Как сделать чтобы 3proxy не крешился
      • Как посмотреть пример файла конфигурации
      • Как настроить ведение журнала
      • Как настроить формат журнала
      • Как использовать лог-анализаторы с 3proxy
      • Как запустить конкретную службу (HTTP, SOCKS и т.д)
      • Как повесить службу на определенный интерфейс или порт
      • Как разрешать имена на родительском прокси?
      • Как настроить FTP прокси?
      • Как ограничить доступ к службе
      • Как создать список пользователей
      • Как ограничить доступ пользователей к ресурсам
      • Как управлять перенаправлениями
      • Как управлять локальными перенаправлениями
      • Как организовать балансировку между несколькими каналами
      • Как составлять цепочки прокси
      • Как ограничивать скорости приема
      • Как ограничивать объем принимаемого трафика
      • Как пофиксить некорректный подсчет трафика
      • Как управлять разрешением имен и кэшированием DNS
      • Как использовать IPv6
      • Как использовать connect back
    • Конфигурация и настройка клиентов
      • Как использовать 3proxy с Internet Explorer или другим браузером
      • Как настраивать FTP клиент
      • Как использовать SMTP через 3proxy
      • Как использовать службу POP3 Proxy
      • Как использовать 3proxy с программой, не поддерживающей работу с прокси-сервером
      • Как использовать 3proxy с играми
    • Администрирование и анализ информации
      • Где взять свежую версию
      • Как управлять службой 3proxy в Windows NT/2000/XP
      • Коды ошибок в журнале
    • Как задать вопрос, которого нет в HowTo

  • Компиляция
    • Как скомпилировать 3proxy Visual C++

      Извлеките файлы из архива 3proxy.tgz (например, с помощью WinZip).
      Используйте команду nmake /f Makefile.msvc.

    • Как скомпилировать 3proxy Intel C Compiler под Windows

      См. Как скомпилировать 3proxy Visual C++.
      Используйте Makefile.intl вместо 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. Под Linux
      необходимо использовать Makefile.Linux, под Solaris — Makefile.Solaris-* (в
      зависимости от используемого компилятора). Компиляция проверена в FreeBSD/i386,
      OpenBSD/i386, NetBSD/i386, RH Linux/Alpha, Debian/i386, Gentoo/i386, Gentoo/PPC,
      Solaris 10, но должно собираться в любых версиях *BSD/Linux/Solaris.
      В других системах может потребоваться модификация make-файла и/или исходных текстов.
      Для компиляции с поддержкой ODBC необходимо убрать -DNOODBC из флагов
      компиляции и добавить -lodbc (или другую ODBC-библиотеку) к флагам линковщика.

    • Как скомпилировать 3proxy Compaq C Compiler под Unix/Linux
    • Используйте make -f Makefile.ccc. Компиляция проверена в RH Linux 7.1/Alpha.
      В других системах может потребоваться модификация файла и/или исходных текстов.


  • Установка и удаление 3proxy
    • Как установить/удалить 3proxy под Windows 95/98/ME/NT/2000/XP/2003 как службу

      Извлеките файлы из архива 3proxy.zip в любой каталог
      (например, c:Program Files3proxy). Если необходимо, создайте каталог для
      хранения файлов журналов. Создайте файл конфигурации 3proxy.cfg в
      каталоге 3proxy (см. раздел Конфигурация сервера).
      Если используется версия более ранняя, чем 0.6, добавьте строку

        service

      в файл 3proxy.cfg. Откройте командную строку (cmd.exe).
      Перейдите в каталог с 3proxy и дайте команду 3proxy.exe —install:

        D:>C:
        C:>cd C:Program Files3proxy
        C:Program Files3proxy>3proxy.exe --install

      Сервис должен быть установлен и запущен. Если сервис не запускается,
      проверьте содержимое файла журнала,
      попробуйте удалить строку service из 3proxy.cfg, запустить 3proxy.exe вручную
      и проанализировать сообщения об ошибках.

      Для удаления 3proxy необходимо остановить сервис и дать
      команду 3proxy.exe —remove:

        D:>C:
        C:>cd C:Program Files3proxy
        C:Program Files3proxy>net stop 3proxy
        C:Program Files3proxy>3proxy.exe --remove

      после чего каталог 3proxy можно удалить.

      Установка в качестве системной службы под Windows 9x поддерживается с версии 0.5

    • Как установить/удалить 3proxy под Windows 95/98/ME

      Извлеките файлы из архива 3proxy.zip в любой каталог
      (например, c:Program Files3proxy). Если необходимо, создайте каталог для
      хранения файлов журналов. Создайте файл конфигурации 3proxy.cfg в
      каталоге 3proxy (См. раздел Конфигурация сервера).
      В файле конфигурации удалите строку

        service

      и добавьте строку

        daemon

      Создайте ярлык для 3proxy.exe и поместите его в автозагрузку либо с помощью
      редактора реестра regedit.exe добавьте в разделе

      HKLMSoftwareMicrosoftWindowsCurrentVersionRun
      строковый параметр

      3proxy = «c:Program Files3proxy.exe» «C:Program Files3proxy.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 в скрипты начальной инициализации.


  • Конфигурация сервера
    • Как заставить прокси работать
    • Для работы требуется корректный файл конфигурации. Если прокси не запускается, значит в конфигурации есть ошибка.

    • Как заставить работать ограничения (контроль доступа, ограничения ширины канала, счетчики и т.п.)
    • A: Обычные ошибки — использование auth none (для работы любых
      функций, основанных на ACL, требуется auth iponly, nbname или strong),
      нарушение порядка ввода команд (команды выполняются последовательно,
      запуск сервиса proxy, socks, tcppm и т.д. должен осуществляться после
      того, как указана его конфигурация), неправильный порядок записей в ACL
      (записи просматриваются последовательно до первой, удовлетворяющей
      критериям). Если в ACL имеется хотя бы одна запись, то считается, что
      последняя запись в ACL — это неявная deny *.

    • Как починить запуск 3proxy службой
    • Чаще всего 3proxy не запускается службой (но запускается вручную) по одной из следующих причин:

      • Использование относительных (неполных) путей файлов в файле конфигурации
        При использовании файлов журналов, файлов вставок ($filename) используйте
        полные пути, например, $»c:3proxyinclude filesnetworks.local». Тоже самое
        относится к файлам журналов и любым другим.
        Для отладки лучше запускать 3proxy с ведением журнала на стандартный вывод.
        Не забудьте в таком случае отключить daemon и service в файле конфигурации.
        Для чистоты эксперимента запускать 3proxy из коммандной строки в таком случае
        следует, находясь в другой папке.
      • Отсутствие у системной записи прав на доступ к исполняемому файлу, каким-либо файлам конфигурации, журнала и т.п.
      • Отсутствие файла конфигурации по стандартному расположению —
        3proxy.cfg в одном каталоге с исполняемым файлом. Если файл расположен по
        другому пути, необходимо использовать команду

            3proxy --install path_to_configuration_file
      • Отсутствие у пользователя прав на установку или запуск службы
      • Служба уже установлена или запущена
    • Как разобраться с internal и external
    • Убедитесь, что выправильно понимаете что такое internal и external адреса.
      Оба адреса — это адреса, принадлежищие хосту, на котором установлен 3proxy.
      Эта опция конфигурации необходима в классической ситуации, когда 3proxy
      установлен на граничном компьютере с двумя (или более) подключениями:

             LAN connection +-------------+ Internet connection
        LAN <-------------->| 3proxy host |<-------------------> INTERNET
                           ^+-------------+^
                           |               |
                     Internal IP      External IP

      Если 3proxy работает на хосте с одним интерфейсом, то его адрес будет и
      internal и external.

      Интерфейс с адресом internal должен существовать и быть рабочим на момент
      запуска 3proxy, и не должен отключаться. Если internal интерфейс
      периодически отключается, то не следует его указывать, или можно указать адрес
      0.0.0.0. При этом прокси будет принимать запросы на всех интерфейсах, поэтому
      при наличии нескольких интерфейсов для ограничения доступа следует использовать
      фаервол или хотя бы ACL.

      Интерфейс с адресом external, если он указан, должен быть рабочим на момент
      получения запроса клиента. При отсутствии external или адресе 0.0.0.0 внешний
      адрес будет выбираться системой при установке соединения. При этом, может быть
      возможность доступа через прокси к ресурсам локальной сети, поэтому для
      предотвращения несанкционированного доступа следует использовать ACL. Кроме
      того, могут быть проблемы с приемом входящих соединений через SOCKSv5
      (SOCKSv5 используется в клиентах исключительно редко).
      В случае, если адрес динамический, можно либо не
      указывать external, либо использовать адрес 0.0.0.0, либо, если необходима
      поддержка входящих соединений в SOCKSv5, использовать скрипт,
      который будет получать текущий адрес и сохранять его в файл, который будет
      отслуживаться через команду monitor.

    • Как починить ведение журналов в ODBC
    • Убедитесь, что используется системный, а не
      пользовательский DSN. Убедитесь, что выполняется правильный SQL запрос. Наиболее
      распространенная проблема связана с отсутствием кавычек или неправильным
      форматом данных. Самый простой способ — сделать ведение журнала в файл или
      на стандартный вывод, просмотреть выдаваемые SQL запросы и попробовать
      дать такой запрос вручную.

    • Как починить IPv6
    • Прокси не может обращаться напрямую к IPv6 сети если в запросе от клиента
      указан IPv4. В запросе от клиента должен быть IPv6 адрес или имя хоста, чаще
      всего это решается включением опции разрешения имен через прокси-сервер на стороне
      клиента.

    • Как починить падения 3proxy
    • Возможно, недостаточен размер стека потока по-умолчанию, это может
      быть при использовани каких-либо сторонних плагинов (PAM, ODBC) или на
      некоторых платформах (некоторые версии FreeBSD на amd64). Можно решить
      проблему с помощью опции ‘stacksize’ или ‘-S’, поддерживаемых в 0.8.4 и выше.

    • Как посмотреть пример файла конфигурации

      Пример файла конфигурации 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 в нем содержится символ %, то имя рассматривается как форматный
      спецификатор (см. logformat). Например,
      log c:3proxylogs%y%m%d.log D создаст файл типа c:3proxylogs60725.log,
      для образования даты будет использовано местное время.

        log @ident

      и

        [email protected]

      соответствуют ведению журнала через syslog с идентификатором ident.

        log &connstring

      соответствует ведению журнала через ODBC, connstring задается в формате
      datasource,username,password (последние два параметра опциональны, если
      datasource не требует или уже содержит сведения для авторизации). При этом
      команда logformat должна задавать SQL запрос, который необходимо выполнить
      для добавления записи в журнал, см Как настроить формат журнала.

      Управление ротацией общего файла журнала происходит с помощью команд файла
      конфигурации log, rotate и archiver.

        log filename LOGTYPE

      задает тип ротации. LOGTYPE может принимать значения:

      • M, ежемесячная ротация
      • W, еженедельная ротация
      • D, ежедневная ротация
      • H, ежечасная ротация
      • C, ежеминутная ротация
        rotate NUMBER

      указывает на число файлов, участвующих в ротации (т.е. сколько последних
      журналов хранить).

        archiver EXT COMMAND PARAMETERS

      задает параметры архивации журнала. EXT указывает на расширение
      архива (например, zip, gz, Z, rar и т.д.) COMMAND указывает на
      программу и PARAMETERS — на параметры командной строки. Архиватор
      должен сам удалять исходный файл, также ему можно передать имя файла
      с помощью макроса %F и ожидаемое имя архива с помощью макроса %A.
      В качестве архиватора вполне можно задать пакетный файл, который,
      например, будет загружать данные из журнала в базу данных.
      Примеры команды archiver для популярных архиваторов можно найти в
      3proxy.cfg.sample

        logdump OFFSET_BYTES_FROM_SERVER OFFSET_BYTES_FROM_CLIENT

      Задает смещение в байтах на входящий и исходящий трафик, при достижении
      которого необходимо создавать запись в журнале даже в том случае, если
      соединение еще не завершено. Если logdump не указан или значения
      OFFSET_BYTES_FROM_SERVER OFFSET_BYTES_FROM_CLIENT нулевые — в журнале
      будет создана единственная запись по окончании обработки запроса клиента
      (при разрыве соединения). Пример:

        logdump 1048576 1048576

      создает в журнале запись на каждый мегабайт входящего или исходящего
      трафика.

    • Как настроить формат журнала

      Начиная с версии 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, и т.д.)
      • %p — Порт прокси сервиса
      • %E — Код ошибки (см. Коды ошибок в журнале)
      • %C — IP клиента
      • %c — Порт клиента
      • %R — IP сервера (исходящего соединения по запросу клиента)
      • %r — Порт сервера (исходящего соединения по запросу клиента)
      • %Q – IP, запрошенный клиентом
      • %q – Порт, запрошенный клиентом
      • %I — Принято байт от сервера
      • %O — Отправлено байт на сервер
      • %n — Имя хоста из запроса
      • %h — Число звеньев до конечного сервера (при использовании перенаправлений или чейнинга
        см. Как составлять цепочки прокси)
      • %T – Текст, специфичный для прокси сервиса (например, запрошенный URL).
        Можно использовать %X-YT, где 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://3proxy.ru/ HTTP/1.1

      (без переноса строк)
      При использовании ODBC, logformat должен задавать формат SQL команды,
      которую необходимо дать для внесения записи в журнал, например:

        logformat "-'+_GINSERT INTO proxystat VALUES (%t, '%c', '%U', %I)"

      префикс -‘+_ указывает, что символы и ‘ следует заменить на _ .

    • Как использовать лог-анализаторы с 3proxy

      Просто сделайте формат ведения журнала совместимым с одним из форматов,
      поддерживаемых анализатором. Это позволяет использовать практически любые
      анализаторы. Примеры совместимых форматов:

      Формат Squid access.log:

        "- +_G%t.%. %D %C TCP_MISS/200 %I %1-1T %2-2T %U DIRECT/%R application/unknown"

      Более совместимый формат, но без %D

        "- +_G%t.%. 1 %C TCP_MISS/200 %I %1-1T %2-2T %U
        DIRECT/%R application/unknown"

      Формат ISA 2000 proxy WEBEXTD.LOG (поля разделены табуляцией):

        "-	+ L%C	%U	Unknown	Y	%Y-%m-%d	%H:%M:%S
        w3proxy	3PROXY	-	%n	%R	%r	%D
        %O	%I	http	TCP	%1-1T	%2-2T	-	-
        %E	-	-	-"

      Формат ISA 2004 proxy WEB.w3c (поля разделены табуляцией):

        "-	+ L%C	%U	Unknown	%Y-%m-%d	%H:%M:%S
        3PROXY	-	%n	%R	%r	%D	%O
        %I	http	%1-1T	%2-2T	-	%E	-
        -	Internal	External	0x0	Allowed"

      Формат ISA 2000/2004 firewall FWSEXTD.log (поля разделены табуляцией):

        "-	+ L%C	%U	unnknown:0:0.0	N	%Y-%m-%d
        %H:%M:%S	fwsrv	3PROXY	-	%n	%R	%r
        %D	%O	%I	%r	TCP	Connect	-	-
        -	%E	-	-	-	-	-"

      Стандартный лог HTTPD (Apache и другие):

        "-""+_L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I"

      Более совместимый, но без кода ошибки:

        "-""+_L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" 200 %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
    • Как разрешать имена на родительском прокси?
    • A: Для этого надо использовать тип родительского прокси http,
      connect+, socks4+ и socks5+. Однако, при это надо помнить, что самому 3proxy
      требуется разрешение имени для управления ACL. Поэтому, если с прокси-хоста
      не работают разрешения имени, необходимо в конфигурации дать команду

        fakeresolve

      которая разрешает любое имя в адрес 127.0.0.2.

    • Как настроить FTP прокси?
    • Есть поддержка как FTP через HTTP (то, что называется FTP прокси в браузерах) так и настоящего FTP прокси (то, что называется
      FTP proxy в командных оболочках и FTP клиентах). В браузерах в качестве FTP прокси следует прописывать порт службы proxy,
      т.е. FTP организован
      через http прокси, дополнительного прокси поднимать не надо. Для FTP-клиентов необходимо поднять ftppr. FTP прокси всегда работает
      с FTP сервером в пассивном режиме.

    • Как ограничить доступ к службе

      Во-первых, для ограничения доступа необходимо указать внутренний интерфейс,
      на котором прокси-сервер будет принимать соединения. Внутренний интерфейс
      указывается с помощью команды internal в файле конфигурации или с помощью
      ключа -i конкретного модуля.
      (см. Как запустить конкретную службу (HTTP, SOCKS и т.д)).
      Отсутствие указания внутреннего интерфейса может привести к тому, что ваш
      прокси будет открытым.

      Указание внешнего интерфейса (т.е. IP, с которого сервер будет устанавливать
      внешние соединения) так же является полезным. Для этого служит команда external
      и ключ -e соответственно.
      Для универсального прокси возможна дополнительная авторизация доступа с помощью
      имени/пароля, NetBIOS имени пользователя и по спискам доступа (по IP клиента,
      IP и порту назначения, см. Как ограничить доступ пользователей к ресурсам).
      Тип авторизации устанавливается командой auth в файле конфигурации.

        auth none

      Отсутствие какой-либо авторизации. Списки доступа не проверяются.

        auth iponly

      Будет идти проверка по списку доступа с использованием IP клиента, IP и номера
      порта назначения.

        auth nbname

      Перед проверкой по списком доступа будет произведена попытка получить NetBIOS
      имя клиента. Для этого используется NetBIOS код службы messager (0x03). Если
      имя определить не удалось (служба messager для 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.

      С версии 0.6 возможно использвоать двойную авторизацию, например,

        auth iponly strong
        allow * * 192.168.0.0/16
        allow user1,user2
        proxy

      будет использовать авторизацию только в том случае, если не удалось пропустить
      пользователя с авторизаций iponly, т.е. для доступа к ресурсам 192.168.0.0/16
      авторизация не требуется.

      С версии 0.6 так же можно использвоать кэширование авторизации (имени
      пользователя) с целью повышения производительности. Использовать кэширование
      для strong практически не имеет смысла, она полезно для nbname и авторизации
      через внешние плагины, типа WindowsAuthentication. Кэширование настраивается
      командой authcache с двумя параметрами — типом кэширования и временем, на
      которое кэшируется пароль. Возможные типы: ip — после успешной авторизации в
      течение времени кэширования все запросы пришедшие с того же адреса считаются
      запросами от того же пользователя, name — после успешной авторизации от
      пользователя с тем же именем требуют указания имени, но реально аутентификации
      не производится, ip,name — запрос должен придти от того же IP и с тем же
      именем. user,password — имя и пароль пользователя сверяются с кэшированными.
      Возможны и другие сочетания. Для авторизации должен использоваться специальный
      метод авторизации — cache. Пример:

        authcache ip 60
        auth cache strong windows
        proxy -n

      Кэширование влияет на безопасность доступа. Ни в коем случае не следует
      использовать кэширование для доступа к критичным ресурсам, в частности к
      интерфейсу администрирования.

      authcache так же может использоваться для привязки сессий пользователя к ip с
      с помощью опции limit

        autchcache ip,user,pass,limit 120
        auth cache strong

      запретит пользователю использовать более одного адреса в течении времени кеширования.

    • Как создать список пользователей

      Список пользователей задается с помощью команды 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 Files3proxypasswords"

      Шифрованные NT и crypt пароли можно создавать с помощью утилиты mycrypt.

      Список пользователей един для всех служб. Разграничение доступа по службам
      необходимо производить с помощью списков доступа.

    • Как ограничить доступ пользователей к ресурсам

      Для построения списков доступа используются команды allow, deny и
      flush. Команды имеют следующую структуру:

        allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
        deny <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
        flush

      Команда flush используется для сброса существующего списка доступа (это
      необходимо для того, чтобы можно было задать различные списки доступа для
      различных служб). allow служит для разрешения соединения, deny — для запрета
      соединения. Команда parent используется в качестве расширения команды
      allow для управления перенаправлениями соединений (о перенаправлении см. Как управлять перенаправлениями).
      В момент установки исходящего соединения просматривается список доступа и
      находится первая запись, соответствующая запрошенному клиентом соединению.
      Если запись соттветствует allow — соединение разрешается, deny — запрещается.
      Если список пуст, то соединение разрешается. Если список не пуст, но подходящей
      записи нет, то соединение запрещается. При этом:

      • <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, и т.д.)

        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 запросу

        ADMIN — доступ к интерфейсу администрирования

      • <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.

    • Как управлять перенаправлениями

      Перенаправления имеет смысл использовать, например, чтобы перенаправить
      обращения определенных клиентов или на определнные сервера на другой сервер
      (например, при попытке доступа на Web сервер с недозволенным материалом
      перенаправить на собственный Web сервер, или для того, чтобы в зависимости
      от IP клиента перенаправлять его соединения на разные сервера (особенно при
      отображении портов через tcppm). Кроме того, перенаправление может быть
      использовано, например, для перенаправления все исходящих HTTP запросов,
      посланных через SOCKS, на HTTP прокси. Поскольку формат запроса к Web серверу
      и Proxy различается, не любой Proxy сервер способен корректно обработать
      перенаправленный запрос (HTTP proxy в комплекте 3proxy нормально обрабатывает
      перенаправленные запросы, что делает возможным его использования в качестве
      «прозрачного» прокси. Кроме того, HTTP прокси обнаруживает перенаправления
      на родительский прокси и генерирует нормальные заголовки. Пример простейшего
      перенаправления:

        auth iponly
        allow *
        parent 1000 http 192.168.1.1 3128
        proxy

      перенаправляет весь трафик службы proxy на родительский HTTP-прокси сервер
      192.168.1.1 порт 3128.

      Если в качестве номера порта указан порт 0, то указанный IP адрес используется
      в качестве внешнего адреса для установки соединения (аналог -eIP, но только
      для запросов попадающих под allow).

      Специальным случаем перенаправлений являются локальные перенаправления,
      которые, как правило, используются совместно со службой socks. В локальных
      перенаправлениях IP адрес 0.0.0.0 порт 0. Например,

        auth iponly
        allow * * * 80
        parent 1000 http 0.0.0.0 0
        allow * * * 21
        parent 1000 ftp 0.0.0.0 0
        allow * * * 110
        parent 1000 pop3 0.0.0.0 0
        socks

      перенаправляет все содеинения, проходящие через SOCKS-сервер по 80 порту, в
      локальный HTTP прокси, 21-му — в FTP, и 110 — в POP3 прокси. При этом службы
      proxy, ftppr или pop3pr запускать не требуется. Это может быть полезно для
      того, чтобы видеть в логах записи о посещаемых пользвоателем ресурсах и
      загружаемых файлах даже в том случае, если он подключается через SOCKS.

    • Как управлять локальными перенаправлениями
      • Q: Для чего это надо?
      • A: Чтобы иметь в логах URL запросов, если пользователь SOCKS пользуется
        Web, FTP или POP3.

      • Q: Какие недостатки?
      • A: Перенапраление невозможно для web-серверов или FTP, висящих на
        нестандартных портах, для SOCKSv4 не поддрживается авторизация с
        паролем (IE поддерживает только SOCKSv4), но при этом IE передает
        имя пользователя по SOCKSv4 (имя, с которым пользователь вошел в систему).
        Для SOCKSv5 не поддерживается NTLM авторизация, пароли передаются в открытом
        тексте.

      • Q: Какие преимущества?
      • A: Достаточно в настройках IE только указать адрес SOCKS прокси. В
        больших сетях можно для этого использовать WPAD (автоматическое
        обнаружение прокси). В 3proxy достаточно запускать только одну службу
        (socks). Если используется только Internet Explorer, то можно
        автоматически получать имя пользователя в логах, не запрашивая
        логин/пароль.

      • Q: Как настраивается?
      • A: Указывается parent http proxy со специальным адресом 0.0.0.0 и портом
        0. Пример:

          allow * * * 80,8080-8088
          parent 1000 http 0.0.0.0 0
          allow * * * 80,8080-8088
          #перенаправить соединения по портам 80 и 8080-8088 в локальный
          #http прокси. Вторая команда allow необходима, т.к. контроль доступа
          #осуществляется 2 раза - на уровне socks и на уровне HTTP прокси
          allow * * * 21,2121
          parent 1000 ftp 0.0.0.0 0
          allow * * * 21,2121
          #перенаправить соединения по портам 21 и 2121 в локальный
          #ftp прокси
          allow *
          #пустить все соединения напрямую
          socks
      • Q: Как взаимодействует с другими правилами в ACL?
      • A: После внутреннего перенаправления правила рассматриваются еще раз за
        исключением самого правила с перенаправлением (т.е. обработка правил не
        прекращается). Это позволяет сделать дальнейшие перенаправления на
        внешний прокси. По этой же причине локальное перенаправление не должно
        быть последним правилом (т.е. должно быть еще хотя бы правило allow,
        чтобы разрешить внешние соединения через HTTP прокси).
        Например,

          allow * * * 80,8080-8088
          parent 1000 http 0.0.0.0 0
          #перенаправить во внутренний прокси
          allow * * $c:3proxylocal.nets 80,8080-8088
          #разрешить прямой web-доступ к сетям из local.nets
          allow * * * 80,8080-8088
          parent 1000 http proxy.3proxy.ru 3128
          #все остальные веб-запросы перенаправить на внешний прокси-сервер
          allow *
          #разрешить socks-запросы по другим портам
    • Как организовать балансировку между несоклькими каналами

      Сам по себе прокси не может управлять маршрутизацией пакетов сетевого уровня.
      Единственная возможность для управления внешними соединениями — это выбор
      внешнего интерфейса. Сделать выбор внешнего интерфейса случайным начиная
      с версии 0.6 можно с использованием локальных перенаправлений (с номером
      порта равным нулю):

        auth iponly
        allow *
        parent 500 http 10.1.1.101 0
        parent 500 http 10.2.1.102 0

      будет использовать внешний интерфейс 10.1.1.1 или 10.2.1.1 с вероятностью 0.5.
      Внешний интерфейс это то же, что задается командой external или опцией -e.
      Чтобы это работало как ожидается, необходимо, чтобы локальным интерфейсам
      10.1.1.1 и 10.2.1.1 соответствовали разные маршруты по-умолчанию.

      Если оба адреса принадлежат одной сети, например, 10.1.1.101 и 10.1.1.102 и
      нужно случайным образом выбирать один из шлюзов 10.1.1.1 и 10.1.1.2, то нужно
      управлять роутингом примерно так (при условии что маршрут по-умолчанию не
      задан):

        route add -p 10.1.1.1 10.1.1.101
        route add -p 10.1.1.2 10.1.1.102
        route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.1
        route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.2

      Если второго адреса на прокси сервере нет — его надо добавить. Под Linux/Unix
      лучше использовать source routing.

    • Как составлять цепочки прокси

      Для составления цепочек прокси так же можно использовать команду 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.1.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

    • Как ограничивать скорости приема

      3proxy позволяет устанавливать фильтры ширины потребляемого канала. Для этого
      служат команды bandlimin/bandlimout и nobandlimin/nobandlimout
      (in в команде означает, что правило применяется к входящему трафику,
      out — к исходящему).

        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> <type> <reportpath> 
        countin <number> <type> <amount> <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>
        nocountin <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>

      countout <number> <type> <amount> <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>
      nocountout <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>

      Команды позволяют установить лимит трафика на день, неделю или месяц.
      Сведения о трафике постоянно сохраняются в двоичном файле, указываемом
      командой counter, что делает подсчет трафика независимым от
      перезагрузки прокси. Можно управлять двоичным файлом, используя утилиту
      countersutil.
      Действие команд countin/nocountin аналогично действию bandlimin/nobandlimin,
      number — задает последовательный номер счетчика, номер должен быть
      уникальным положительным числом. Значение 0 указывает, что сведения
      для данного счетчика не надо сохранять в файле.

      reportpath — путь, по которому будут создаваться текстовые отчеты по
      потребленному трафику.

      type — тип ограничения или частота создания файлов отчета.
      D (На день), W (на неделю) или M (на месяц).

      amount — объем трафика на указанный период в мегабайтах.

    • Как пофиксить некорректный подсчет трафика

      Следует учитывать, что 3proxy считает трафик только на прикладном уровне и
      только проходящий через прокси-сервер. Провайдеры и другие средства учета
      трафика считают трафик на сетевом уровне, что уже дает расхождение порядка 10%
      за счет информации из заголовков пакетов. Кроме того, часть трафика, как
      минимум DNS-разрешения, различный флудовый трафик и т.д. идут мимо прокси.
      Уровень «шумового» трафика в Internet сейчас составляет порядка 50KB/день на
      каждый реальный IP адрес, но может сильно варьироваться в зависимости от сети,
      наличия открытых портов, реакции на ping-запросы и текущего уровня вирусной
      активности. По этим причинам, если 3proxy используется чтобы не «выжрать»
      трафик, выделенный провайдером, всегда следует делать некий запас порядка
      15%.

      Если на одной с 3proxy машине имеются какие-либо сервисы или
      работает пользователь, то их трафик не проходит через proxy-сервер и так же
      не будет учтен. Если где-то есть NAT, то клиенты, выходящие через NAT мимо
      прокси, так же останутся неучтенными. Если расхождение с провайдером превышает
      10% — нужно искать причину именно в этом.

    • Как управлять разрешением имен и кэшированием DNS

      Для разрешения имен и кэширования применяются команды nserver,
      nscache и nsrecord.

        nserver 192.168.1.2
        nserver 192.168.1.3:5353/tcp

      указывает 3proxy какие машины следует использвоать в качестве серверов
      DNS. Сервер 192.168.1.3 будет использоваться по порту TCP/5353 (вместо дефолтного UDP/53) только при недостижимости
      192.168.1.2. Можно указать до 5 серверов. Если nserver не указан, будут
      использованы системные функции разрешения имен.

        nscache 65535
        nscache6 65535

      указывает размер кэша для разрешения имен (обычно достаточно большой) для IPv4 и IPv6 соответственно.
      Кэш исопльзуется только при явном указании nserver.

        nsrecord server.mycompany.example.com 192.168.1.1
        nsrecord www.porno.com 127.0.0.2
        ...
        deny * * 127.0.0.2

      добавляет статическую запись в кэш. Статические записи так же влияют на разрешение через dnspr если не указана опция -s. Начиная с версии 0.8 для dnspr могут быть сконфигурированы родительские прокси.

    • Как использовать IPv6

      IPv6 поддерживается с версии 0.8. Обратите внимание, что в некоторых видах прокси (например SOCKSv4)
      IPv6 не поддерживает на уровне протокола. В SOCKSv5 есть поддержка IPv6 с помощью отдельного вида
      запроса, который должен быть реализован в клиентском приложении или соксификаторе.

      Возможно проксирование из сетей IPv4 и IPv6 в сети IPv4,
      IPv6 и смешанные. Адреса IPv6 могут использоваться в командах
      internal, external, parent, ACL, опциях -i, -e и т.д. Команду external и опцию
      -e для каждого сервиса можно давать два раза — один раз с IPv4 и один раз с IPv6
      адресом. internal и -i может быть указан только один, для биндинга ко всем адресам IPv4 и IPv6
      можно использовать адрес [0:0:0:0:0:0:0:0] or [::].

      Кроме того, для каждого сервиса могут быть даны опции -4, -46, -64, -6 которые
      задают приоритет разрешения имен в адреса IPv4 и IPv6 (только IPv4, приоритет IPv4, приоритет IPv6, только IPv6).

    • Как использовать connect back

      Например, пользователю нужен доступ к прокси-серверу, который расположен
      на хосте 192.168.1.2 недоступном из внешней сети, но имеющем доступ во внешнюю
      сеть с внешним адрес 1.1.1.1. Так же у него есть машина с именем host.dyndns.example.org
      с внешним адресом 2.2.2.2. Пользователь запускает 2 экземпляра 3proxy, один на
      хосте 192.168.1.2 с конфигурацией

        users user:CL:password
        auth strong
        allow user
        proxy -rhost.dyndns.example.org:1234

      второй на хосте host.dyndns.example.org (2.2.2.2) с конфигурацией

        auth iponly
        allow * * 1.1.1.1
        tcppm -R0.0.0.0:1234 3128 1.1.1.1 3128

      В настройках браузера указывается host.dyndns.example.org:3128.


  • Конфигурация клиентов
    • Как использовать 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), в качестве
      имени пользователя [email protected] Если для доступа к службе
      ftppr требуется авторизация по имени и паролю с именем pruser и паролем prpass,
      то в качестве имени пользователя необходимо указать
      pruser:prpass:[email protected] Если FTP клиент требует указания
      полной URL для подключения к серверу, то она должна выглядеть как

      pruser:prpass:[email protected]:********@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:		[email protected]
        Password:	********

      Имя пользователя может само по себе содержать знак ‘@’. Если в примере выше
      имя пользователя [email protected], то имя пользвоателя для доступа к
      прокси-серверу должно быть [email protected]@pop3.security.nnov.ru. Если
      pop3pr требует авторизации по имени/паролю (например, pruser и prpass), то их
      необходимо указать в начале имени пользователя, отделив знаком ‘:’, т.е для
      самого тяжелого случая pruser:prpass:[email protected]@pop3.security.nnov.ru

    • Как использовать 3proxy с программой, не поддерживающей работу с прокси-сервером

      Можно использовать любую программу-редиректор, например,
      SocksCAP или
      FreeCAP. 3proxy поддерживает исходящие
      и обратные TCP и UDP соединения, но редиректоры могут иметь свои ограничения,
      кроме того, некоторые плохо написаные приложения не поддаются «соксификации».
      Если программе требуется обращаться к небольшому набору серверов
      (например, игровых), то проблему можно решить с помощью портмаппинга.

    • Как использовать 3proxy с играми

      Оптимальный варинт — использовать соксификатор (Как использовать
      3proxy с программой, не поддерживающей работу с прокси-сервером).
      FreeCap 3.13 проверен с играми на движке
      Unreal (включая Unreal Tournament), Half-Life (включая Counter-Strike) и
      другими. Если по каким-то причинам соксификатор не работает или недоступен,
      то необходимо использовать отображения портов (обычно игры,
      кроме mood-подобных, работают по протоколу UDP, надо использовать udppm).
      Нужно иметь ввиду, что для udppm требуется отдельный маппинг для каждого
      серверного порта и каждого клиента. Например, если есть один сервер с портами
      2115 и 2116 и три клиента, то нужно создать 6 разных маппингов, например

      	udppm 12115 server 2115
      	udppm 12115 server 2115
      	udppm 22115 server 2115
      	udppm 32115 server 2115
      	udppm 12116 server 2116
      	udppm 22116 server 2116
      	udppm 32116 server 2116

      В игровом клиенте адрес и порт с маппингом следует указывать вместо адреса
      и порта сервера.


  • Администрирование и анализ информации
    • Где взять свежую версию

      Свежую версию всегда можно взять
      здесь. Обратите внимание,
      что в новой версии может измениться порядок лицензирования или команды
      конфигурации, поэтому прежде чем устанавливать новую версии программы
      обязательно ознакомьтесь с документацией.

    • Как управлять службой 3proxy в Windows NT/2000/XP

      При установке 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 — ошибки разрыва соединения
      • с версии 0.9
      • 90 — неожиданная системная ошибка (не должно происходить)
      • 91 — ошибка poll (не должно происходить)
      • 92 — соединение прервано по таймауту на сетевую операцию (см. timeouts)
      • 93 — соединение прервано по таймауту связанному с рейтлимитом или из-за превышения числа ошибок
      • 94 — клиент или сервер закрыли соединение или произошла сетевая ошибка, остались неотправленные данные
      • 95 — клиент «грязно» закрыл соединение или сетевая ошибка
      • 96 — сервер «грязно» закрыл соединение или сетевая ошибка
      • 97 — клиент и сервер «грязно» закрыли соединение или сетевая ошибка
      • 98 — исчерпан лимит данных сервера (не должно быть в журнале)
      • 99 — исчерпан лимит данных клиента (не должно быть в журнале)
      • до версии 0.9
      • 90 — ошибка сокета или соединение неожиданно прервано
      • 91 — общий сбой стека TCP/IP
      • 92 — соединение прервано по таймауту
      • 93 — ошибка получения данных от сервера
      • 94 — ошибка получения данных от клиента
      • 95 — таймаут из-за ограничения bandlimin/bandlimout
      • 96 — ошибка отправки данных клиенту
      • 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 — функция не реализована

  • Как задать вопрос, которого нет в HowTo

    Задайте его на Github.
    Только не пытайтесь задавать какие-либо вопросы, если вы просто не поняли этот
    HowTo.

  • I am also seeing this for a HTTP proxy, after some time we get nothing but error 95 and 3proxy does not accept any new connections. Using netstat -ntu | grep <proxy_port> I can see that there are no connections to the proxy. Setting parentretry 1 also didn’t help us in this case, perhaps that is a socks only workaround?

    I am using version 0.9.4 and my config looks like this:

    nscache 65536
    nserver 8.8.8.8
    nserver 8.8.4.4
    
    logformat "-""+_G{""time_unix"":%t, ""proxy"":{""type:"":""%N"", ""port"":%p}, ""error"":{""code"":""%E""}, ""auth"":{""user"":""%U""}, ""client"":{""ip"":""%C"", ""port"":%c}, ""server"":{""ip"":""%R"", ""port"":%r}, ""bytes"":{""sent"":%O, ""received"":%I}, ""request"":{""hostname"":""%n""}, ""message"":""%T""}"
    
    log
    config /tmp/10110.cfg
    maxconn 400
    connlim 200 0 * *
    
    users "<user>:CL:<pass>"
    
    auth strong
    allow user *
    proxy -n -a -p10110 -e192.168.8.145 -osTCP_NODELAY -ocTCP_NODELAY
    flush
    

    3proxy configuration file

    Description

    Common structure:
    Configuration file is a text file 3proxy reads configuration from. Each line of the file is a command executed immediately, as it was given from console. Sequence of commands is important. Configuration file as actually a script for 3proxy executable. Each line of the file is treated as a blank (space or tab) separated command line. Additional space characters are ignored.  Think about 3proxy as «application level router» with console interface.

    Comments:
    Any string beginning with space character or ´#´ character is comment. It´s ignored. <LF>s are ignored. <CR> is end of command.

    Quotation:
    Quotation character is » (double quote). Quotation must be used to quote spaces or another special characters. To use quotation character inside quotation character must be dubbed (BASIC convention). For example to use HELLO «WORLD» as an argument you should use it as «HELLO «»WORLD»»». Good practice is to quote any argument you use.

    File inclusion:
    You can include file by using $FILENAME macro (replace FILENAME with a path to file, for example $/usr/local/etc/3proxy/conf.incl or
    $»c:Program Files3proxyinclude.cfg» Quotation is required in last example because path contains space character.  For included file <CR> (end of line characters) is treated as space character (arguments delimiter instead of end of command delimiter).  Thus, include files are only useful to store long signle-line commands (like userlist, network lists, etc). To use dollar sign somewhere in argument it must be quoted.  Recursion is not allowed.

    Next commands start gateway services:

    proxy [options]
    socks [options]
    pop3p [options]
    ftppr [options]
    admin [options]
    dnspr [options]
    tcppm [options] <SRCPORT> <DSTADDR> <DSTPORT>
    udppm [options] <SRCPORT> <DSTADDR> <DSTPORT>
    Descriptions:
    proxy — HTTP/HTTPS proxy (default port 3128)
    socks — SOCKS 4/4.5/5 proxy (default port 1080)
    pop3p — POP3 proxy (default port 110)
    ftppr — FTP proxy (default port 21)
    admin — Web interface (default port 80)
    dnspr — caching DNS proxy (default port 53)
    tcppm — TCP portmapper
    udppm — UDP portmapper

    Options:
    -pNUMBER change default server port to NUMBER
    -n disable NTLM authentication (required if passwords are stored in Unix crypt format.
    -n1 enable NTLMv1 authentication.
    -s (for admin) — secure, allow only secure operations (currently only traffic counters view without ability to reset).
    (for dnspr) — simple, do not use ‘resolver’ and 3proxy cache, always use external DNS server.
    (for udppm) — singlepacket, expect only one packet from both client and server
    -u Never ask for username/password
    -u2 (socks) require username/password in authentication methods
    -a (for proxy) — anonymous proxy (no information about client reported)
    -a1 (for proxy) — anonymous proxy (random client information reported)
    -a2 (for proxy) — generate Via: and X-Forwared-For: instead of Forwarded:
    -6 Only resolve IPv6 addresses. IPv4 addresses are packed in IPv6 in IPV6_V6ONLY compatible way.
    -4 Only resolve IPv4 addresses
    -46 Resolve IPv6 addresses if IPv4 address is not resolvable
    -64 Resolve IPv4 addresses if IPv6 address is not resolvable
    -RHOST:port listen on given local HOST:port for incoming connections instead of making remote outgoing connection. Can be used with another 3proxy service running -r option for connect back functionality. Most commonly used with tcppm. HOST can be given as IP or hostname, useful in case of dynamic DNS.
    -rHOST:port connect to given remote HOST:port instead of listening local connection on -p or default port. Can be used with another 3proxy service running -R option for connect back functionality. Most commonly used with proxy or socks. HOST can be given as IP or hostname, useful in case of dynamic DNS.
    Also, all options mentioned for proxy(8) socks(8) pop3p(8) tcppm(8) udppm(8) ftppr(8)
    are also supported.
    Portmapping services listen at SRCPORT and connect to DSTADDR:DSTPORT HTTP and SOCKS proxies are standard.
    POP3 proxy must be configured as POP3 server and requires username in the form of: pop3username@pop3server. If POP3 proxy access must be authenticated, you can specify username as proxy_username:proxy_password:POP3_username@pop3server
    DNS proxy resolves any types of records but only hostnames are cached. It requires nserver/nscache to be configured. If nserver is configured as TCP, redirections are applied on connection, so parent proxy may be used to resolve names to IP.
    FTP proxy can be used as FTP server in any FTP client or configured as FTP proxy on a client with FTP proxy support. Username format is one of
    FTPuser@FTPServer
    FTPuser:FTPpassword@FTPserver
    proxyuser:proxypassword:FTPuser:FTPpassword@FTPserver
    Please note, if you use FTP client interface for FTP proxy do not add FTPpassword and FTPServer to username, because FTP client does it for you. That is, if you use 3proxy with authentication use proxyuser:proxypassword:FTPuser as FTP username, otherwise do not change original FTP user name

    include <path>
    Include config file

    config <path>
    Path to configuration file to use on 3proxy restart or to save configuration.

    writable
    ReOpens configuration file for write access via Web interface, and re-reads it. Usually should be first command on config file but in combination with «config» it can be used anywhere to open alternate config file. Think twice before using it.

    end
    End of configuration

    log [[@|&]logfile] [<LOGTYPE>]
    sets logfile for all gateways
    @ — (for Unix) use syslog, filename is used as ident name
    & — use ODBC, filename consists of comma-delimited datasource,username,password (username and password are optional)
    LOGTYPE is one of:
     M — Monthly
     W — Weekly (starting from Sunday)
     D — Daily
     H — Hourly
    if logfile is not specified logging goes to stdout. You can specify individual logging options for gateway by using -l option in gateway configuration.
    «log» command supports same format specifications for filename template as «logformat» (if filename contains ‘%’ sign it’s believed to be template). As with «logformat» filename must begin with ‘L’ or ‘G’ to specify Local or Grinwitch time zone for all time-based format specificators.

    rotate <n>
    how many archived log files to keep

    logformat <format>
    Format for log record. First symbol in format must be L (local time) or G (absolute Grinwitch time).  It can be preceeded with -XXX+Y where XXX is list of characters to be filtered in user input (any non-printable characters are filtered too in this case) and Y is replacement character. For example, «-,%+ L» in the beginning of logformat means comma and percent are replaced with space and all time based elemnts are in local time zone.
    You can use:

     %y — Year in 2 digit format
     %Y — Year in 4 digit format
     %m — Month number
     %o — Month abbriviature
     %d — Day
     %H — Hour
     %M — Minute
     %S — Second
     %t — Timstamp (in seconds since 01-Jan-1970)
     %. — milliseconds
     %z — timeZone (from Grinvitch)
     %D — request duration (in milliseconds)
     %b — average send rate per request (in Bytes per second) this speed is typically below connection speed shown by download manager.
     %B — average receive rate per request (in Bytes per second) this speed is typically below connection speed shown by download manager.
     %U — Username
     %N — service Name
     %p — service Port
     %E — Error code
     %C — Client IP
     %c — Client port
     %R — Remote IP
     %r — Remote port
     %i — Internal IP used to accept client connection
     %e — External IP used to establish connection
     %Q — Requested IP
     %q — Requested port
     %n — requested hostname
     %I — bytes In
     %O — bytes Out
     %h — Hops (redirections) count
     %T — service specific Text
     %N1-N2T — (N1 and N2 are positive numbers) — log only fields from N1 thorugh N2 of service specific text
    in case of ODBC logging logformat specifies SQL statement, for exmample:
      logformat «-‘+_Linsert into log (l_date, l_user, l_service, l_in, l_out, l_descr) values (‘%d-%m-%Y %H:%M:%S’, ‘%U’, ‘%N’, %I, %O, ‘%T’)»

    logdump <in_traffic_limit> <out_traffic_limit>
    Immediately creates additional log records if given amount of incoming/outgoing traffic is achieved for connection, without waiting for connection to finish. It may be useful to prevent information about long-lasting downloads on server shutdown.

    archiver <ext> <commandline>
    Archiver to use for log files. <ext> is file extension produced by archiver. Filename will be last argument to archiver, optionally you can use %A as produced archive name and %F as filename.

    timeouts <BYTE_SHORT> <BYTE_LONG> <STRING_SHORT> <STRING_LONG> <CONNECTION_SHORT> <CONNECTION_LONG> <DNS> <CHAIN>
    Sets timeout values
     BYTE_SHORT — short timeout for single byte, is usually used for receiving single byte from stream.
     BYTE_LONG — long timeout for single byte, is usually used for receiving first byte in frame (for example first byte in socks request).
     STRING_SHORT — short timeout, for character string within stream (for example to wait between 2 HTTP headers)
     STRING_LONG — long timeout, for first string in stream (for example to wait for HTTP request).
     CONNECTION_SHORT — inactivity timeout for short connections (HTTP, POP3, etc).
     CONNECTION_LONG — inactivity timeout for long connection (SOCKS, portmappers, etc).
     DNS — timeout for DNS request before requesting next server
     CHAIN — timeout for reading data from chained connection

    nserver <ipaddr>[:port][/tcp]
    Nameserver to use for name resolutions. If none specified  or name server fails system routines for name resolution will be used. It’s better to specify nserver because gethostbyname() may be thread unsafe. Optional port number may be specified. If optional /tcp is added to IP address, name resolution will be performed over TCP.

    nscache <cachesize> nscache6 <cachesize>
    Cache <cachesize> records for name resolution (nscache for IPv4, nscache6 for IPv6). Cachesize usually should be large enougth (for example 65536).

    nsrecord <hostname> <hostaddr>
    Adds static record to nscache. nscache must be enabled. If 0.0.0.0 is used as a hostaddr host will never resolve, it can be used to blacklist something or together with dialer command to set up UDL for dialing.

    fakeresolve
    All names are resolved to 127.0.0.2 address. Usefull if all requests are redirected to parent proxy with http, socks4+, connect+ or socks5+.

    dialer <progname>
    Execute progname if external name can’t be resolved. Hint: if you use nscache, dialer may not work, because names will be resolved through cache. In this case you can use something like http://dial.right.now/ from browser to set up connection.

    internal <ipaddr>
    sets ip address of internal interface. This IP address will be used to bind gateways. Alternatively you can use -i option for individual gateways. Since 0.8 version, IPv6 address may be used.

    external <ipaddr>
    sets ip address of external interface. This IP address will be source address for all connections made by proxy. Alternatively you can use -e option to specify individual address for gateway. Since 0.8 version External or -e can be given twice: once with IPv4 and once with IPv6 address.

     maxconn <number>
    sets maximum number of simulationeous connections to each services started after this command. Default is 100.

    service
    (depricated). Indicates 3proxy to behave as Windows 95/98/NT/2000/XP service, no effect for Unix. Not required for 3proxy 0.6 and above. If you upgraded from previous version of 3proxy use —remove and —install to reinstall service.

    daemon
    Should be specified to close console. Do not use ‘daemon’ with ‘service’. At least under FreeBSD ‘daemon’ should preceed any proxy service and log commands to avoid sockets problem. Always place it in the beginning of the configuration file.

    auth <authtype> […]
    Type of user authorization. Currently supported:
     none — no authentication or authorization required.
    Note: is auth is none any ip based limitation, redirection, etc will not work.  This is default authentication type
     iponly — authentication by access control list with username ignored.
    Appropriate for most cases
     useronly — authentication by username without checking for any password with authorization by ACLs. Useful for e.g. SOCKSv4 proxy and icqpr (icqpr set UIN / AOL screen name as a username)
     dnsname — authentication by DNS hostnname with authorization by ACLs. DNS hostname is resolved via PTR (reverse) record and validated (resolved name must resolve to same IP address). It’s recommended to use authcache by ip for this authentication. NB: there is no any password check, name may be spoofed.
     strong — username/password authentication required. It will work with SOCKSv5, FTP, POP3 and HTTP proxy.
     cache — cached authentication, may be used with ‘authcache’.
    Plugins may add additional authentication types.

    It’s possible to use few authentication types in the same commands. E.g.
    auth iponly strong
    In this case ‘strong’ authentication will be used only in case resource access can not be performed with ‘iponly’ authentication, that is username is required in ACL. It’s usefull to protect access to some resources with password allowing passwordless access to another resources, or to use IP-based authentication for dedicated laptops and request username/password for shared ones.

    authcache <cachtype> <cachtime>
    Cache authentication information to given amount of time (cachetime) in seconds. Cahtype is one of:
     ip — after successful authentication all connections during caching time from same IP are assigned to the same user, username is not requested.
     ip,user username is requested and all connections from the same IP are assigned to the same user without actual authentication.
     user — same as above, but IP is not checked.
     user,password — both username and password are checked against cached ones.
    Use auth type ‘cache’ for cached authentication

    allow <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist> <weekdayslist> <timeperiodslist>
    deny <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist> <weekdayslist> <timeperiodslist>
    Access control entries. All lists are comma-separated, no spaces are allowed. Usernames are case sensitive (if used with authtype nbname username must be in uppercase). Source and target lists may contain IP addresses (W.X.Y.Z), ranges A.B.C.D — W.X.Y.Z (since 0.8) or CIDRs (W.X.Y.Z/L). Since 0.6, targetlist may also contain host names, instead of addresses. It’s possible to use wildmask in the begginning and in the the end of hostname, e.g. *badsite.com or *badcontent*. Hostname is only checked if hostname presents in request. Targetportlist may contain ports (X) or port ranges lists (X-Y). For any field * sign means «ANY» If access list is empty it’s assumed to be
    allow *
    If access list is not empty last item in access list is assumed to be
    deny *
    You may want explicitly add «deny *» to the end of access list to prevent HTTP proxy from requesting user’s password. Access lists are checked after user have requested any resource. If you want 3proxy to reject connections from specific addresses immediately without any conditions you should either bind proxy to appropriate interface only or to use ip filters.

    Operation is one of:
     CONNECT — establish outgoing TCP connection
     BIND — bind TCP port for listening
     UDPASSOC — make UDP association
     ICMPASSOC — make ICMP association (for future use)
     HTTP_GET — HTTP GET request
     HTTP_PUT — HTTP PUT request
     HTTP_POST — HTTP POST request
     HTTP_HEAD — HTTP HEAD request
     HTTP_CONNECT — HTTP CONNECT request
     HTTP_OTHER — over HTTP request
     HTTP — matches any HTTP request except HTTP_CONNECT
     HTTPS — same as HTTP_CONNECT
     FTP_GET — FTP get request
     FTP_PUT — FTP put request
     FTP_LIST — FTP list request
     FTP_DATA — FTP data connection. Note: FTP_DATA requires access to dynamic non-ptivileged (1024-65535) ports on remote side.
     FTP — matches any FTP/FTP Data request
     ADMIN — access to administration interface
    Weeksdays are week days numbers or periods, 0 or 7 means Sunday, 1 is Monday, 1-5 means Monday through Friday. Timeperiodlists is a list of time periods in HH:MM:SS-HH:MM:SS format. For example, 00:00:00-08:00:00,17:00:00-24:00:00 lists non-working hours.
    parent <weight> <type> <ip> <port> <username> <password>
    this command must follow «allow» rule. It extends last allow rule to build proxy chain. Proxies may be grouped. Proxy inside the group is selected randomly. If few groups are specified one proxy is randomly picked from each group and chain of proxies is created (that is second proxy connected through first one and so on). Weight is used to group proxies. Weigt is a number between 1 and 1000. Weights are summed and proxies are grouped together untill weight of group is 1000. That is:
    allow *
    parent 500 socks5 192.168.10.1 1080
    parent 500 connect 192.168.10.1 3128
    makes 3proxy to randomly choose between 2 proxies for all outgoing connections. These 2 proxies form 1 group (summarized weight is 1000).
    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
    creates chain of 3 proxies: 192.168.10.1, 192.168.20.1 and third is (192.168.30.1 with probability of 0.3 or 192.168.40.1 with probability of 0.7) for outgoing web connections.

    type is one of:
     tcp — simply redirect connection. TCP is always last in chain.
     http — redirect to HTTP proxy. HTTP is always last chain.
     pop3 — redirect to POP3 proxy (only local redirection is supported, can not be used for chaining)
     ftp — redirect to FTP proxy (only local redirection is supported, can not be used for chaining)
     connect — parent is HTTP CONNECT method proxy
     connect+ — parent is HTTP CONNECT proxy with name resolution
     socks4 — parent is SOCKSv4 proxy
     socks4+ — parent is SOCKSv4 proxy with name resolution (SOCKSv4a)
     socks5 — parent is SOCKSv5 proxy
     socks5+ — parent is SOCKSv5 proxy with name resolution
     socks4b — parent is SOCKS4b (broken SOCKSv4 implementation with shortened server reply. I never saw this kind ofservers byt they say there are). Normally you should not use this option. Do not mess this option with SOCKSv4a (socks4+).
     socks5b — parent is SOCKS5b (broken SOCKSv5 implementation with shortened server reply. I think you will never find it useful). Never use this option unless you know exactly you need it.
     admin — redirect request to local ‘admin’ service (with -s parameter).
    Use «+» proxy only with «fakeresolve» option

    IP and port are ip addres and port of parent proxy server. If IP is zero, ip is taken from original request, only port is changed. If port is zero, it’s taken from original request, only IP is changed. If both IP and port are zero — it’s a special case of local redirection, it works only with socks proxy. In case of local redirection request is redirected to different service, ftp locally redirects to ftppr pop3 locally redirects to pop3p http locally redurects to proxy admin locally redirects to admin -s service.

    Main purpose of local redirections is to have requested resource (URL or POP3 username) logged and protocol-specific filters to be applied. In case of local redirection ACLs are revied twice: first, by SOCKS proxy up to redirected (HTTP, FTP or POP3) after ‘parent’ command. It means, additional ‘allow’ command is required for redirected requests, for example:
    allow * * * 80
    parent 1000 http 0.0.0.0 0
    allow * * * 80 HTTP_GET,HTTP_POST
    socks
    redirects all SOCKS requests with target port 80 to local HTTP proxy, local HTTP proxy parses requests and allows only GET and POST requests.
    parent 1000 http 1.2.3.4 0
    Changes external address for given connection to 1.2.3.4 (an equivalent to -e1.2.3.4)
    Optional username and password are used to authenticate on parent proxy. Username of ‘*’ means username must be supplied by user.

    nolog <n>
    extends last allow or deny command to prevent logging, e.g.
    allow * * 192.168.1.1
    nolog

    weight <n>
    extends last allow or deny command to set weight for this request
    allow * * 192.168.1.1
    weight 100
    Weight may be used for different purposes.

    force
    noforce
    If force is specified for service, configuration reload will require all current sessions of this service to be re-authenticated. If ACL is changed or user account is removed, old connections which do not match current are closed.
    noforce allows to keep previously authenticated connections.

    bandlimin <rate> <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist>
    nobandlimin <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist>
    bandlimout <rate> <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist>
    nobandlimout <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist>
    bandlim sets bandwith limitation filter to <rate> bps (bits per second) (if you want to specife bytes per second — multiply your value to 8). bandlim rules act in a same manner as allow/deny rules except one thing: bandwidth limiting is applied to all services, not to some specific service.  bandlimin and nobandlimin applies to incoming traffic bandlimout and nobandlimout applies to outgoing traffic If tou want to ratelimit your clients with ip’s 192.168.10.16/30 (4 addresses) to 57600 bps you have to specify 4 rules like
    bandlimin 57600 * 192.168.10.16
    bandlimin 57600 * 192.168.10.17
    bandlimin 57600 * 192.168.10.18
    bandlimin 57600 * 192.168.10.19
    and every of you clients will have 56K channel. If you specify
    bandlimin 57600 * 192.168.10.16/30
    you will have 56K channel shared between all clients. if you want, for example, to limit all speed ecept access to POP3 you can use
    nobandlimin * * * 110
    before the rest of bandlim rules.

    counter <filename> <reporttype> <repotname>
    countin <number> <type> <limit> <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist>
    nocountin <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist>
    countout <number> <type> <limit> <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist>
    nocountout <userlist> <sourcelist> <targetlist> <targetportlist> <operationlist>

    counter, countin, nocountin, countout, noucountout  commands are  used to set traffic limit in MB for period of time (day, week or month). Filename is a path to a special file where traffic information is permanently stored. number is sequential number of record in this file. If number is 0 no traffic information  on this counter is saved in file (that is if proxy restarted all information is loosed) overwise it should be unique sequential number. Type specifies a type of counter. Type is one of:
    H — counter is resetted hourly
    D — counter is resetted daily
    W — counter is resetted weekly
    M — counter is resetted monthely
    reporttype/repotname may be used to generate traffic reports. Reporttype is one of D,W,M,H(hourly) and repotname specifies filename template for reports. Report is text file with counter values in format:
    <COUNTERNUMBER> <TRAF>
    The rest of parameters is identical to bandlim/nobandlim.

    users username[:pwtype:password] …
    pwtype is one of:
     none (empty) — use system authentication
     CL — password is cleartext
     CR — password is crypt-style password
     NT — password is NT password (in hex)
    example:
    users test1:CL:password1 «test2:CR:$1$lFDGlder$pLRb4cU2D7GAT58YQvY49.»
    users test3:NT:BD7DFBF29A93F93C63CB84790DA00E63
    Note: double quotes are requiered because password contains $ sign.

    flush
    empty active access list. Access list must be flushed avery time you creating new access list for new service. For example:
    allow *
    pop3p
    flush
    allow * 192.168.1.0/24
    socks
    sets different ACLs for pop3p and socks

    system <command>
    execute system command

    pidfile <filename>
    write pid of current process to file. It can be used to manipulate 3proxy with signals under Unix. Currently next signals are available:

    monitor <filename>
    If file monitored changes in modification time or size, 3proxy reloads configuration within one minute. Any number of files may be monitored.

    setuid <uid>
    calls setuid(uid), uid must be numeric. Unix only. Warning: under some Linux kernels setuid() works onle for current thread. It makes it impossible to suid for all threads.

    setgid <gid>
    calls setgid(gid), gid must be numeric. Unix only.

    chroot <path>
    calls chroot(path). Unix only.

    stacksize <value_to_add_to_default_stack_size>
    Change default size for threads stack. May be required in some situation,
    e.g. with non-default plugins, on on some platforms (some FreeBSD version
    may require adjusting stack size due to invalid defined value in system
    header files, this value is also oftent reqruied to be changed for ODBC and
    PAM support on Linux. If you experience 3proxy
    crash on request processing, try to set some positive value. You may start with
    stacksize 65536
    and then find the minimal value for service to work. If you experience
    memory shortage, you can try to experiment with negative values.

    Plugins

    plugin <path_to_shared_library> <function_to_call> [<arg1> …]
    Loads specified library and calls given export function with given arguments, as
    int functions_to_call(struct pluginlink * pl, int argc, char * argv[]);
    function_to_call must return 0 in case of success, value > 0 to indicate error.

    filtermaxsize <max_size_of_data_to_filter>
    If Content-length (or another data length) is greater than given value, no data filtering will be performed thorugh filtering plugins to avoid data corruption and/or Content-Length chaging. Default is 1MB (1048576).

    Bugs

    Report all bugs to 3proxy@3proxy.ru

    See Also

    3proxy(8), proxy(8), ftppr(8), socks(8), pop3p(8), tcppm(8), udppm(8), syslogd(8),
    http://3proxy.ru/

    Trivia

    3APA3A is pronounced as «zaraza´´.

    Referenced By

    3proxy(8).

    January 2016 3proxy 0.8 Universal proxy server

    Установка и настройка 3proxy tiny free proxy

    3proxy это маленький многоплатформный набор прокси-серверов (под Linux/Unix и Windows, включая 64-битные версии).

    Он включает в себя HTTP прокси с поддержкой HTTPS и FTP (proxy/proxy.exe), SOCKSv4/SOCKSv4.5/SOCKSv5 прокси (socks/socks.exe), POP3 прокси (pop3p/pop3p.exe), SMTP прокси (smtpp/smtpp.exe), AIM/ICQ прокси (icqpr/icqpr.exe), MSN messenger / Live messenger proxy (msnpr/msnpr.exe), FTP proxy, кэширующий DNS прокси, TCP и UDP портмапперы (tcppm, udppm) а так же комбинированный прокси-сервер с поддержкой дополнительных возможностей, таких как управление доступом, ограничение ширины потребляемого канала, ограничение трафика на день, неделю и месяц, перенаправление соединений, построение цепочек соединений (proxy chaining), ротацию лог-файлов, ведение журналов через ODBC и syslog и т.д. (3proxy).

    Качаем

    отсюда: http://3proxy.ru/download/ На момент написания версия программы была — 0.6.1

    wget http://3proxy.ru/0.6.1/3proxy-0.6.1.tgz

    Перемещаем в папку /usr/local/etc/ и распаковываем

    tar -xvzf 3proxy-0.6.1.tgz

    Переименовываем распакованную директорию в 3proxy

    Теперь немного подправим исходные файлы

    Редактируем файлы в папке /usr/local/etc/3proxy/src/

    proxy.h

    вместо:

    #define COPYRIGHT «(c)2000-2007 3APA3A, Vladimir Dubrovin & 3proxy.run»

    «Documentation and sources: http://3proxy.ru/n»

    «Please read license agreement in ‘copying’ file.n»

    «You may not use this program without accepting license agreement»

    пишем:

    #define COPYRIGHT «»

    stringtable.c

    Строка 17 должна выглядить так:

    /* 03 */ (unsigned char *)»»,

    Перед «<table align=»center» width=»75%»><tr><td>n» (строка 58) добавить:

    «<meta http-equiv=’refresh’ content=’0; url=/C’>»

    webadmin.c

    Cтрока 165 должна выглядить так:

    «Content-type: text/html; charset=utf-8rn»

    Cтрока 174 должна выглядить так:

    «Content-type: text/html; charset=utf-8rn»

    Cтрока 191 должна выглядить так:

    «Content-type: text/xml; charset=utf-8rn»

    Cтрока 204 должна выглядить так:

    «Content-type: text/css; charset=utf-8rn»

    proxy.c с 15 строки по 129 заменяем этим:

    char * proxy_stringtable[] = {

    /* 0 */ «HTTP/1.0 400 Bad Requestrn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>400 Bad Request</title></head>rn»

    «<body><h2>400 Bad Requiest</h2> <br><hr><h3>Ошибка: Неправильный запрос</h3></body></html>rn»,

    /* 1 */ «HTTP/1.0 502 Bad Gatewayrn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>502 Bad Gateway</title></head>rn»

    «<body><h2>502 Bad Gateway</h2><h3>Host Not Found or connection failed <br><hr>Ошибка: Удалённый сервер не найден или не удалось связаться с ним</h3></body></html>rn»,

    /* 2 */ «HTTP/1.0 503 Service Unavailablern»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>503 Service Unavailable</title></head>rn»

    «<body><h2>503 Service Unavailable</h2><h3>You have exceeded your traffic limit <br><hr>Вы превысили свой лимит трафика</h3></body></html>rn»,

    /* 3 */ «HTTP/1.0 503 Service Unavailablern»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>503 Service Unavailable</title></head>rn»

    «<body><h2>503 Service Unavailable</h2><h3>Recursion detected <br><hr>Ошибка: Сервис не доступен, обнаружена рекурсия</h3></body></html>rn»,

    /* 4 */ «HTTP/1.0 501 Not Implementedrn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>501 Not Implemented</title></head>rn»

    «<body><h2>501 Not Implemented</h2><h3>Required action is not supported by proxy server <br><hr>Ошибка: Действие не поддерживается в данном proxy сервере</h3></body></html>rn»,

    /* 5 */ «HTTP/1.0 502 Bad Gatewayrn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>502 Bad Gateway</title></head>rn»

    «<body><h2>502 Bad Gateway</h2><h3>Failed to connect parent proxy <br><hr>Ошибка: Невозможно соединиться c вышестоящим сервером</h3></body></html>rn»,

    /* 6 */ «HTTP/1.0 500 Internal Errorrn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>500 Internal Error</title></head>rn»

    «<body><h2>500 Internal Error</h2><h3>Internal proxy error during processing your request <br><hr>Ошибка: Возникла внутренняя ошибка proxy сервера при обработке вашего запроса</h3></body></html>rn»,

    /* 7 */ «HTTP/1.0 407 Proxy Authentication Requiredrn»

    «Proxy-Authenticate: Basic realm=»proxy»rn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>407 Proxy Authentication Required</title></head>rn»

    «<body><h2>407 Proxy Authentication Required</h2><h3>Access to requested resource disallowed by administrator or you need valid username/password to use this resource <br><hr>Доступ запрещен администратором или Вы ввели неправильное имя/пароль</h3></body></html>rn»,

    /* 8 */ «HTTP/1.0 200 Connection establishedrnrn»,

    /* 9 */ «HTTP/1.0 200 Connection establishedrn»

    «Content-Type: text/htmlrnrn»,

    /* 10*/ «HTTP/1.0 404 Not Foundrn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>404 Not Found</title></head>rn»

    «<body><h2>404 Not Found</h2><h3>File not found <br><hr>Файл не найден</h3></body></html>rn»,

    /* 11*/ «HTTP/1.0 403 Forbiddenrn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>403 Access Denied</title></head>rn»

    «<body><h2>403 Access Denied</h2><h3>Access control list denies you to access this resource <br><hr>Доступ к данному ресурсу запрещен списком доступа на сервере.<br>Если Вы считаете, что это ошибка обратитесь к администратору</h3></body></html>rn»,

    /* 12*/ «HTTP/1.0 407 Proxy Authentication Requiredrn»

    «Proxy-Authenticate: NTLMrn»

    «Proxy-Authenticate: basic realm=»proxy»rn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>407 Proxy Authentication Required</title></head>rn»

    «<body><h2>407 Proxy Authentication Required</h2><h3>Access to requested resource disallowed by administrator or you need valid username/password to use this resource <br><hr>Доступ запрещен администратором или Вы ввели неправильное имя/пароль</h3></body></html>rn»,

    /* 13*/ «HTTP/1.0 407 Proxy Authentication Requiredrn»

    «Proxy-Connection: keep-alivern»

    «Content-Length: 0rn»

    «Proxy-Authenticate: NTLM «,

    /* 14*/ «HTTP/1.0 403 Forbiddenrn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<pre>»,

    /* 15*/ «HTTP/1.0 503 Service Unavailablern»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>503 Service Unavailable</title></head>rn»

    «<body><h2>503 Service Unavailable</h2><h3>Your request violates configured policy <br><hr>Запрос не соответствует сконфигурированной политике</h3></body></html>rn»,

    /* 16*/ «HTTP/1.0 401 Authentication Requiredrn»

    «Proxy-Authenticate: basic realm=»FTP Server»rn»

    «Proxy-Connection: closern»

    «Content-type: text/html; charset=utf-8rn»

    «rn»

    «<html><head><title>401 FTP Server requires authentication</title></head>rn»

    «<body><h2>401 FTP Server requires authentication</h2><h3>This FTP server rejects anonymous access <br><hr>Этот FTP сервер отвергает анонимный доступ</h3></body></html>rn»,

    NULL

    };

    Тут есть один нюанс при вставке у меня терялись отступы слева так, что после вставки надо добавить отступы, как должно быть можно посмотреть в оригинальном файле.

    Отредактировав эти файлы мы немного изменим внешний вид страницы статистики и в страницы ошибок добавим русский текст, более понятный для пользователей, которые видя не русский текст сразу начинают паниковать и кричать, что у них всё не работает, а на самом деле заночился лимит трафика.

    Отредактированные файлы есть внизу страницы в архиве src.tar.gz, можно скачать, распаковать и заменить.

    Компилируем

    Заходим в 3proxy и компилируем:

    make -f Makefile.Linux

    Для компиляции нужен пакет gcc

    Редактируем файл /usr/local/etc/3proxy/scripts/install-unix.sh:

    #!/bin/sh

    cd ..

    cp Makefile.Linux Makefile

    make

    if [ ! -d /usr/local/etc/3proxy/bin ]; then mkdir -p /usr/local/etc/3proxy/bin/;

    fi

    install src/3proxy /usr/local/etc/3proxy/bin/3proxy

    install src/mycrypt /usr/local/etc/3proxy/bin/mycrypt

    install scripts/rc.d/proxy.sh /usr/local/etc/3proxy/proxy.sh

    install scripts/add3proxyuser.sh /usr/local/etc/3proxy/bin/

    install scripts/rc.d/proxy.sh /etc/init.d/proxy

    chmod +x /etc/init.d/proxy

    update-rc.d proxy defaults

    if [ -s /usr/local/etc/3proxy/3proxy.cfg ]; then

    echo /usr/local/etc/3proxy/3proxy.cfg already exists

    else

    install scripts/3proxy.cfg /usr/local/etc/3proxy/

    if [ ! -d /var/log/3proxy/ ]; then

    mkdir /var/log/3proxy/

    fi

    mkdir /usr/local/etc/3proxy/log/

    mkdir /usr/local/etc/3proxy/traf/

    touch /usr/local/etc/3proxy/deny.list

    echo *banner*,*adult* >> /usr/local/etc/3proxy/deny.list

    touch /usr/local/etc/3proxy/user_ip.list

    echo 127.0.0.1,192.168.1.1 >> /usr/local/etc/3proxy/user_ip.list

    touch /usr/local/etc/3proxy/user_pwd.list

    echo admin:CL:password >> /usr/local/etc/3proxy/user_pwd.list

    touch /usr/local/etc/3proxy/counters.list

    touch /usr/local/etc/3proxy/bandlimiters

    cd /etc/init.d/

    chmod +x /etc/init.d/proxy

    update-rc.d proxy defaults

    echo Run /usr/local/etc/3proxy/bin/add3proxyuser.sh to add ‘admin’ user

    fi

    Нужен для установки, создания файлов и директорий.

    Редактируем файл /usr/local/etc/3proxy/scripts/add3proxyuser.sh:

    Нужен для автоматизации добавления пользователей

    Рабочий (много лет) конфиг:
    ###############################################################
    # BEGIN
    ###############################################################
    daemon

    pidfile /var/run/3proxy.pid
    config /opt/etc/3proxy/3proxy.cfg

    internal 192.168.1.1
    external 192.168.0.2

    nserver 127.0.0.1
    nscache 65536

    logformat » %H:%M:%S [%N|%E] %C %T (%O/%I)»
    log /opt/var/log/proxy/%d-%m-%Y.log D
    rotate 7

    ###############################################################
    # PLUGINS
    ###############################################################
    plugin /opt/lib/3proxy/PCREPlugin.ld.so pcre_plugin

    ###############################################################
    # USERS, LIMITS, COUNTERS
    ###############################################################
    #users $/opt/etc/3proxy/passwd
    #counter /opt/etc/3proxy/counters M
    #countin «mary» M * * 192.168.1.4

    ###############################################################
    # FILTERS
    ###############################################################
    flush
    #allow/deny <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
    #
    #deny * * $/opt/etc/3proxy/iplist.lst
    #deny * * $/opt/etc/3proxy/banner.lst
    #deny * * $/opt/etc/3proxy/no-spy.lst
    #
    #deny * * $/opt/etc/3proxy/nopost.lst * HTTP_POST
    #deny * * $/opt/etc/3proxy/noconn.lst * HTTPS
    #
    pcre request deny «/(top(.(list|mail)|100).ru)»
    pcre request deny «(sls|genuine|activate)+.(micro|adobe)»
    pcre request deny «sensuality|xxx»

    ###############################################################
    # HTTP
    ###############################################################
    auth iponly
    allow * 192.168.1.0/29 * *
    deny *
    proxy -t -u -n

    ###############################################################
    # ADMIN
    ###############################################################
    #flush
    #auth strong
    #allow admin
    #admin -p828

    ###############################################################
    end
    ###############################################################

    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 – ошибки разрыва соединения

    с версии 0.9
    90 – неожиданная системная ошибка (не должно происходить)
    91 – ошибка poll (не должно происходить)
    92 – соединение прервано по таймауту на сетевую операцию (см. timeouts)
    93 – соединение прервано по таймауту связанному с рейтлимитом или из-за превышения числа ошибок
    94 – клиент или сервер закрыли соединение или произошла сетевая ошибка, остались неотправленные данные
    95 – клиент “грязно” закрыл соединение или сетевая ошибка
    96 – сервер “грязно” закрыл соединение или сетевая ошибка
    97 – клиент и сервер “грязно” закрыли соединение или сетевая ошибка
    98 – исчерпан лимит данных сервера (не должно быть в журнале)
    99 – исчерпан лимит данных клиента (не должно быть в журнале)

    до версии 0.9
    90 – ошибка сокета или соединение неожиданно прервано
    91 – общий сбой стека TCP/IP
    92 – соединение прервано по таймауту
    93 – ошибка получения данных от сервера
    94 – ошибка получения данных от клиента
    95 – таймаут из-за ограничения bandlimin/bandlimout
    96 – ошибка отправки данных клиенту
    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 – функция не реализована

  • Как заставить прокси работать
  • Для работы требуется корректный файл конфигурации. Если прокси не запускается, значит в конфигурации есть ошибка.

  • Как заставить работать ограничения (контроль доступа, ограничения ширины канала, счетчики и т.п.)
  • A: Обычные ошибки — использование auth none (для работы любых
    функций, основанных на ACL, требуется auth iponly, nbname или strong),
    нарушение порядка ввода команд (команды выполняются последовательно,
    запуск сервиса proxy, socks, tcppm и т.д. должен осуществляться после
    того, как указана его конфигурация), неправильный порядок записей в ACL
    (записи просматриваются последовательно до первой, удовлетворяющей
    критериям). Если в ACL имеется хотя бы одна запись, то считается, что
    последняя запись в ACL — это неявная deny *.

  • Как починить запуск 3proxy службой
  • Чаще всего 3proxy не запускается службой (но запускается вручную) по одной из следующих причин:

    • Использование относительных (неполных) путей файлов в файле конфигурации
      При использовании файлов журналов, файлов вставок ($filename) используйте
      полные пути, например, $»c:3proxyinclude filesnetworks.local». Тоже самое
      относится к файлам журналов и любым другим.
      Для отладки лучше запускать 3proxy с ведением журнала на стандартный вывод.
      Не забудьте в таком случае отключить daemon и service в файле конфигурации.
      Для чистоты эксперимента запускать 3proxy из коммандной строки в таком случае
      следует, находясь в другой папке.
    • Отсутствие у системной записи прав на доступ к исполняемому файлу, каким-либо файлам конфигурации, журнала и т.п.
    • Отсутствие файла конфигурации по стандартному расположению —
      3proxy.cfg в одном каталоге с исполняемым файлом. Если файл расположен по
      другому пути, необходимо использовать команду

          3proxy --install path_to_configuration_file
    • Отсутствие у пользователя прав на установку или запуск службы
    • Служба уже установлена или запущена
  • Как разобраться с internal и external
  • Убедитесь, что выправильно понимаете что такое internal и external адреса.
    Оба адреса — это адреса, принадлежищие хосту, на котором установлен 3proxy.
    Эта опция конфигурации необходима в классической ситуации, когда 3proxy
    установлен на граничном компьютере с двумя (или более) подключениями:

           LAN connection +-------------+ Internet connection
      LAN <-------------->| 3proxy host |<-------------------> INTERNET
                         ^+-------------+^
                         |               |
                   Internal IP      External IP

    Если 3proxy работает на хосте с одним интерфейсом, то его адрес будет и
    internal и external.

    Интерфейс с адресом internal должен существовать и быть рабочим на момент
    запуска 3proxy, и не должен отключаться. Если internal интерфейс
    периодически отключается, то не следует его указывать, или можно указать адрес
    0.0.0.0. При этом прокси будет принимать запросы на всех интерфейсах, поэтому
    при наличии нескольких интерфейсов для ограничения доступа следует использовать
    фаервол или хотя бы ACL.

    Интерфейс с адресом external, если он указан, должен быть рабочим на момент
    получения запроса клиента. При отсутствии external или адресе 0.0.0.0 внешний
    адрес будет выбираться системой при установке соединения. При этом, может быть
    возможность доступа через прокси к ресурсам локальной сети, поэтому для
    предотвращения несанкционированного доступа следует использовать ACL. Кроме
    того, могут быть проблемы с приемом входящих соединений через SOCKSv5
    (SOCKSv5 используется в клиентах исключительно редко).
    В случае, если адрес динамический, можно либо не
    указывать external, либо использовать адрес 0.0.0.0, либо, если необходима
    поддержка входящих соединений в SOCKSv5, использовать скрипт,
    который будет получать текущий адрес и сохранять его в файл, который будет
    отслуживаться через команду monitor.

  • Как починить ведение журналов в ODBC
  • Убедитесь, что используется системный, а не
    пользовательский DSN. Убедитесь, что выполняется правильный SQL запрос. Наиболее
    распространенная проблема связана с отсутствием кавычек или неправильным
    форматом данных. Самый простой способ — сделать ведение журнала в файл или
    на стандартный вывод, просмотреть выдаваемые SQL запросы и попробовать
    дать такой запрос вручную.

  • Как починить IPv6
  • Прокси не может обращаться напрямую к IPv6 сети если в запросе от клиента
    указан IPv4. В запросе от клиента должен быть IPv6 адрес или имя хоста, чаще
    всего это решается включением опции разрешения имен через прокси-сервер на стороне
    клиента.

  • Как починить падения 3proxy
  • Возможно, недостаточен размер стека потока по-умолчанию, это может
    быть при использовани каких-либо сторонних плагинов (PAM, ODBC) или на
    некоторых платформах (некоторые версии FreeBSD на amd64). Можно решить
    проблему с помощью опции ‘stacksize’ или ‘-S’, поддерживаемых в 0.8.4 и выше.

  • Как посмотреть пример файла конфигурации

    Пример файла конфигурации 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 в нем содержится символ %, то имя рассматривается как форматный
    спецификатор (см. logformat). Например,
    log c:3proxylogs%y%m%d.log D создаст файл типа c:3proxylogs60725.log,
    для образования даты будет использовано местное время.

      log @ident

    и

      [email protected]

    соответствуют ведению журнала через syslog с идентификатором ident.

      log &connstring

    соответствует ведению журнала через ODBC, connstring задается в формате
    datasource,username,password (последние два параметра опциональны, если
    datasource не требует или уже содержит сведения для авторизации). При этом
    команда logformat должна задавать SQL запрос, который необходимо выполнить
    для добавления записи в журнал, см Как настроить формат журнала.

    Управление ротацией общего файла журнала происходит с помощью команд файла
    конфигурации log, rotate и archiver.

      log filename LOGTYPE

    задает тип ротации. LOGTYPE может принимать значения:

    • M, ежемесячная ротация
    • W, еженедельная ротация
    • D, ежедневная ротация
    • H, ежечасная ротация
    • C, ежеминутная ротация
      rotate NUMBER

    указывает на число файлов, участвующих в ротации (т.е. сколько последних
    журналов хранить).

      archiver EXT COMMAND PARAMETERS

    задает параметры архивации журнала. EXT указывает на расширение
    архива (например, zip, gz, Z, rar и т.д.) COMMAND указывает на
    программу и PARAMETERS — на параметры командной строки. Архиватор
    должен сам удалять исходный файл, также ему можно передать имя файла
    с помощью макроса %F и ожидаемое имя архива с помощью макроса %A.
    В качестве архиватора вполне можно задать пакетный файл, который,
    например, будет загружать данные из журнала в базу данных.
    Примеры команды archiver для популярных архиваторов можно найти в
    3proxy.cfg.sample

      logdump OFFSET_BYTES_FROM_SERVER OFFSET_BYTES_FROM_CLIENT

    Задает смещение в байтах на входящий и исходящий трафик, при достижении
    которого необходимо создавать запись в журнале даже в том случае, если
    соединение еще не завершено. Если logdump не указан или значения
    OFFSET_BYTES_FROM_SERVER OFFSET_BYTES_FROM_CLIENT нулевые — в журнале
    будет создана единственная запись по окончании обработки запроса клиента
    (при разрыве соединения). Пример:

      logdump 1048576 1048576

    создает в журнале запись на каждый мегабайт входящего или исходящего
    трафика.

  • Как настроить формат журнала

    Начиная с версии 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, и т.д.)
    • %p — Порт прокси сервиса
    • %E — Код ошибки (см. Коды ошибок в журнале)
    • %C — IP клиента
    • %c — Порт клиента
    • %R — IP сервера (исходящего соединения по запросу клиента)
    • %r — Порт сервера (исходящего соединения по запросу клиента)
    • %Q – IP, запрошенный клиентом
    • %q – Порт, запрошенный клиентом
    • %I — Принято байт от сервера
    • %O — Отправлено байт на сервер
    • %n — Имя хоста из запроса
    • %h — Число звеньев до конечного сервера (при использовании перенаправлений или чейнинга
      см. Как составлять цепочки прокси)
    • %T – Текст, специфичный для прокси сервиса (например, запрошенный URL).
      Можно использовать %X-YT, где 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://3proxy.ru/ HTTP/1.1

    (без переноса строк)
    При использовании ODBC, logformat должен задавать формат SQL команды,
    которую необходимо дать для внесения записи в журнал, например:

      logformat "-'+_GINSERT INTO proxystat VALUES (%t, '%c', '%U', %I)"

    префикс -‘+_ указывает, что символы и ‘ следует заменить на _ .

  • Как использовать лог-анализаторы с 3proxy

    Просто сделайте формат ведения журнала совместимым с одним из форматов,
    поддерживаемых анализатором. Это позволяет использовать практически любые
    анализаторы. Примеры совместимых форматов:

    Формат Squid access.log:

      "- +_G%t.%. %D %C TCP_MISS/200 %I %1-1T %2-2T %U DIRECT/%R application/unknown"

    Более совместимый формат, но без %D

      "- +_G%t.%. 1 %C TCP_MISS/200 %I %1-1T %2-2T %U
      DIRECT/%R application/unknown"

    Формат ISA 2000 proxy WEBEXTD.LOG (поля разделены табуляцией):

      "-	+ L%C	%U	Unknown	Y	%Y-%m-%d	%H:%M:%S
      w3proxy	3PROXY	-	%n	%R	%r	%D
      %O	%I	http	TCP	%1-1T	%2-2T	-	-
      %E	-	-	-"

    Формат ISA 2004 proxy WEB.w3c (поля разделены табуляцией):

      "-	+ L%C	%U	Unknown	%Y-%m-%d	%H:%M:%S
      3PROXY	-	%n	%R	%r	%D	%O
      %I	http	%1-1T	%2-2T	-	%E	-
      -	Internal	External	0x0	Allowed"

    Формат ISA 2000/2004 firewall FWSEXTD.log (поля разделены табуляцией):

      "-	+ L%C	%U	unnknown:0:0.0	N	%Y-%m-%d
      %H:%M:%S	fwsrv	3PROXY	-	%n	%R	%r
      %D	%O	%I	%r	TCP	Connect	-	-
      -	%E	-	-	-	-	-"

    Стандартный лог HTTPD (Apache и другие):

      "-""+_L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" %E %I"

    Более совместимый, но без кода ошибки:

      "-""+_L%C - %U [%d/%o/%Y:%H:%M:%S %z] ""%T"" 200 %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
  • Как разрешать имена на родительском прокси?
  • A: Для этого надо использовать тип родительского прокси http,
    connect+, socks4+ и socks5+. Однако, при это надо помнить, что самому 3proxy
    требуется разрешение имени для управления ACL. Поэтому, если с прокси-хоста
    не работают разрешения имени, необходимо в конфигурации дать команду

      fakeresolve

    которая разрешает любое имя в адрес 127.0.0.2.

  • Как настроить FTP прокси?
  • Есть поддержка как FTP через HTTP (то, что называется FTP прокси в браузерах) так и настоящего FTP прокси (то, что называется
    FTP proxy в командных оболочках и FTP клиентах). В браузерах в качестве FTP прокси следует прописывать порт службы proxy,
    т.е. FTP организован
    через http прокси, дополнительного прокси поднимать не надо. Для FTP-клиентов необходимо поднять ftppr. FTP прокси всегда работает
    с FTP сервером в пассивном режиме.

  • Как ограничить доступ к службе

    Во-первых, для ограничения доступа необходимо указать внутренний интерфейс,
    на котором прокси-сервер будет принимать соединения. Внутренний интерфейс
    указывается с помощью команды internal в файле конфигурации или с помощью
    ключа -i конкретного модуля.
    (см. Как запустить конкретную службу (HTTP, SOCKS и т.д)).
    Отсутствие указания внутреннего интерфейса может привести к тому, что ваш
    прокси будет открытым.

    Указание внешнего интерфейса (т.е. IP, с которого сервер будет устанавливать
    внешние соединения) так же является полезным. Для этого служит команда external
    и ключ -e соответственно.
    Для универсального прокси возможна дополнительная авторизация доступа с помощью
    имени/пароля, NetBIOS имени пользователя и по спискам доступа (по IP клиента,
    IP и порту назначения, см. Как ограничить доступ пользователей к ресурсам).
    Тип авторизации устанавливается командой auth в файле конфигурации.

      auth none

    Отсутствие какой-либо авторизации. Списки доступа не проверяются.

      auth iponly

    Будет идти проверка по списку доступа с использованием IP клиента, IP и номера
    порта назначения.

      auth nbname

    Перед проверкой по списком доступа будет произведена попытка получить NetBIOS
    имя клиента. Для этого используется NetBIOS код службы messager (0x03). Если
    имя определить не удалось (служба messager для 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.

    С версии 0.6 возможно использвоать двойную авторизацию, например,

      auth iponly strong
      allow * * 192.168.0.0/16
      allow user1,user2
      proxy

    будет использовать авторизацию только в том случае, если не удалось пропустить
    пользователя с авторизаций iponly, т.е. для доступа к ресурсам 192.168.0.0/16
    авторизация не требуется.

    С версии 0.6 так же можно использвоать кэширование авторизации (имени
    пользователя) с целью повышения производительности. Использовать кэширование
    для strong практически не имеет смысла, она полезно для nbname и авторизации
    через внешние плагины, типа WindowsAuthentication. Кэширование настраивается
    командой authcache с двумя параметрами — типом кэширования и временем, на
    которое кэшируется пароль. Возможные типы: ip — после успешной авторизации в
    течение времени кэширования все запросы пришедшие с того же адреса считаются
    запросами от того же пользователя, name — после успешной авторизации от
    пользователя с тем же именем требуют указания имени, но реально аутентификации
    не производится, ip,name — запрос должен придти от того же IP и с тем же
    именем. user,password — имя и пароль пользователя сверяются с кэшированными.
    Возможны и другие сочетания. Для авторизации должен использоваться специальный
    метод авторизации — cache. Пример:

      authcache ip 60
      auth cache strong windows
      proxy -n

    Кэширование влияет на безопасность доступа. Ни в коем случае не следует
    использовать кэширование для доступа к критичным ресурсам, в частности к
    интерфейсу администрирования.

    authcache так же может использоваться для привязки сессий пользователя к ip с
    с помощью опции limit

      autchcache ip,user,pass,limit 120
      auth cache strong

    запретит пользователю использовать более одного адреса в течении времени кеширования.

  • Как создать список пользователей

    Список пользователей задается с помощью команды 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 Files3proxypasswords"

    Шифрованные NT и crypt пароли можно создавать с помощью утилиты mycrypt.

    Список пользователей един для всех служб. Разграничение доступа по службам
    необходимо производить с помощью списков доступа.

  • Как ограничить доступ пользователей к ресурсам

    Для построения списков доступа используются команды allow, deny и
    flush. Команды имеют следующую структуру:

      allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
      deny <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdays> <timeperiodslist>
      flush

    Команда flush используется для сброса существующего списка доступа (это
    необходимо для того, чтобы можно было задать различные списки доступа для
    различных служб). allow служит для разрешения соединения, deny — для запрета
    соединения. Команда parent используется в качестве расширения команды
    allow для управления перенаправлениями соединений (о перенаправлении см. Как управлять перенаправлениями).
    В момент установки исходящего соединения просматривается список доступа и
    находится первая запись, соответствующая запрошенному клиентом соединению.
    Если запись соттветствует allow — соединение разрешается, deny — запрещается.
    Если список пуст, то соединение разрешается. Если список не пуст, но подходящей
    записи нет, то соединение запрещается. При этом:

    • <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, и т.д.)

      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 запросу

      ADMIN — доступ к интерфейсу администрирования

    • <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.

  • Как управлять перенаправлениями

    Перенаправления имеет смысл использовать, например, чтобы перенаправить
    обращения определенных клиентов или на определнные сервера на другой сервер
    (например, при попытке доступа на Web сервер с недозволенным материалом
    перенаправить на собственный Web сервер, или для того, чтобы в зависимости
    от IP клиента перенаправлять его соединения на разные сервера (особенно при
    отображении портов через tcppm). Кроме того, перенаправление может быть
    использовано, например, для перенаправления все исходящих HTTP запросов,
    посланных через SOCKS, на HTTP прокси. Поскольку формат запроса к Web серверу
    и Proxy различается, не любой Proxy сервер способен корректно обработать
    перенаправленный запрос (HTTP proxy в комплекте 3proxy нормально обрабатывает
    перенаправленные запросы, что делает возможным его использования в качестве
    «прозрачного» прокси. Кроме того, HTTP прокси обнаруживает перенаправления
    на родительский прокси и генерирует нормальные заголовки. Пример простейшего
    перенаправления:

      auth iponly
      allow *
      parent 1000 http 192.168.1.1 3128
      proxy

    перенаправляет весь трафик службы proxy на родительский HTTP-прокси сервер
    192.168.1.1 порт 3128.

    Если в качестве номера порта указан порт 0, то указанный IP адрес используется
    в качестве внешнего адреса для установки соединения (аналог -eIP, но только
    для запросов попадающих под allow).

    Специальным случаем перенаправлений являются локальные перенаправления,
    которые, как правило, используются совместно со службой socks. В локальных
    перенаправлениях IP адрес 0.0.0.0 порт 0. Например,

      auth iponly
      allow * * * 80
      parent 1000 http 0.0.0.0 0
      allow * * * 21
      parent 1000 ftp 0.0.0.0 0
      allow * * * 110
      parent 1000 pop3 0.0.0.0 0
      socks

    перенаправляет все содеинения, проходящие через SOCKS-сервер по 80 порту, в
    локальный HTTP прокси, 21-му — в FTP, и 110 — в POP3 прокси. При этом службы
    proxy, ftppr или pop3pr запускать не требуется. Это может быть полезно для
    того, чтобы видеть в логах записи о посещаемых пользвоателем ресурсах и
    загружаемых файлах даже в том случае, если он подключается через SOCKS.

  • Как управлять локальными перенаправлениями
    • Q: Для чего это надо?
    • A: Чтобы иметь в логах URL запросов, если пользователь SOCKS пользуется
      Web, FTP или POP3.

    • Q: Какие недостатки?
    • A: Перенапраление невозможно для web-серверов или FTP, висящих на
      нестандартных портах, для SOCKSv4 не поддрживается авторизация с
      паролем (IE поддерживает только SOCKSv4), но при этом IE передает
      имя пользователя по SOCKSv4 (имя, с которым пользователь вошел в систему).
      Для SOCKSv5 не поддерживается NTLM авторизация, пароли передаются в открытом
      тексте.

    • Q: Какие преимущества?
    • A: Достаточно в настройках IE только указать адрес SOCKS прокси. В
      больших сетях можно для этого использовать WPAD (автоматическое
      обнаружение прокси). В 3proxy достаточно запускать только одну службу
      (socks). Если используется только Internet Explorer, то можно
      автоматически получать имя пользователя в логах, не запрашивая
      логин/пароль.

    • Q: Как настраивается?
    • A: Указывается parent http proxy со специальным адресом 0.0.0.0 и портом
      0. Пример:

        allow * * * 80,8080-8088
        parent 1000 http 0.0.0.0 0
        allow * * * 80,8080-8088
        #перенаправить соединения по портам 80 и 8080-8088 в локальный
        #http прокси. Вторая команда allow необходима, т.к. контроль доступа
        #осуществляется 2 раза - на уровне socks и на уровне HTTP прокси
        allow * * * 21,2121
        parent 1000 ftp 0.0.0.0 0
        allow * * * 21,2121
        #перенаправить соединения по портам 21 и 2121 в локальный
        #ftp прокси
        allow *
        #пустить все соединения напрямую
        socks
    • Q: Как взаимодействует с другими правилами в ACL?
    • A: После внутреннего перенаправления правила рассматриваются еще раз за
      исключением самого правила с перенаправлением (т.е. обработка правил не
      прекращается). Это позволяет сделать дальнейшие перенаправления на
      внешний прокси. По этой же причине локальное перенаправление не должно
      быть последним правилом (т.е. должно быть еще хотя бы правило allow,
      чтобы разрешить внешние соединения через HTTP прокси).
      Например,

        allow * * * 80,8080-8088
        parent 1000 http 0.0.0.0 0
        #перенаправить во внутренний прокси
        allow * * $c:3proxylocal.nets 80,8080-8088
        #разрешить прямой web-доступ к сетям из local.nets
        allow * * * 80,8080-8088
        parent 1000 http proxy.3proxy.ru 3128
        #все остальные веб-запросы перенаправить на внешний прокси-сервер
        allow *
        #разрешить socks-запросы по другим портам
  • Как организовать балансировку между несоклькими каналами

    Сам по себе прокси не может управлять маршрутизацией пакетов сетевого уровня.
    Единственная возможность для управления внешними соединениями — это выбор
    внешнего интерфейса. Сделать выбор внешнего интерфейса случайным начиная
    с версии 0.6 можно с использованием локальных перенаправлений (с номером
    порта равным нулю):

      auth iponly
      allow *
      parent 500 http 10.1.1.101 0
      parent 500 http 10.2.1.102 0

    будет использовать внешний интерфейс 10.1.1.1 или 10.2.1.1 с вероятностью 0.5.
    Внешний интерфейс это то же, что задается командой external или опцией -e.
    Чтобы это работало как ожидается, необходимо, чтобы локальным интерфейсам
    10.1.1.1 и 10.2.1.1 соответствовали разные маршруты по-умолчанию.

    Если оба адреса принадлежат одной сети, например, 10.1.1.101 и 10.1.1.102 и
    нужно случайным образом выбирать один из шлюзов 10.1.1.1 и 10.1.1.2, то нужно
    управлять роутингом примерно так (при условии что маршрут по-умолчанию не
    задан):

      route add -p 10.1.1.1 10.1.1.101
      route add -p 10.1.1.2 10.1.1.102
      route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.1
      route add -p 0.0.0.0 mask 0.0.0.0 192.168.1.2

    Если второго адреса на прокси сервере нет — его надо добавить. Под Linux/Unix
    лучше использовать source routing.

  • Как составлять цепочки прокси

    Для составления цепочек прокси так же можно использовать команду 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.1.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

  • Как ограничивать скорости приема

    3proxy позволяет устанавливать фильтры ширины потребляемого канала. Для этого
    служат команды bandlimin/bandlimout и nobandlimin/nobandlimout
    (in в команде означает, что правило применяется к входящему трафику,
    out — к исходящему).

      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> <type> <reportpath> 
      countin <number> <type> <amount> <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>
      nocountin <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>

    countout <number> <type> <amount> <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>
    nocountout <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>

    Команды позволяют установить лимит трафика на день, неделю или месяц.
    Сведения о трафике постоянно сохраняются в двоичном файле, указываемом
    командой counter, что делает подсчет трафика независимым от
    перезагрузки прокси. Можно управлять двоичным файлом, используя утилиту
    countersutil.
    Действие команд countin/nocountin аналогично действию bandlimin/nobandlimin,
    number — задает последовательный номер счетчика, номер должен быть
    уникальным положительным числом. Значение 0 указывает, что сведения
    для данного счетчика не надо сохранять в файле.

    reportpath — путь, по которому будут создаваться текстовые отчеты по
    потребленному трафику.

    type — тип ограничения или частота создания файлов отчета.
    D (На день), W (на неделю) или M (на месяц).

    amount — объем трафика на указанный период в мегабайтах.

  • Как пофиксить некорректный подсчет трафика

    Следует учитывать, что 3proxy считает трафик только на прикладном уровне и
    только проходящий через прокси-сервер. Провайдеры и другие средства учета
    трафика считают трафик на сетевом уровне, что уже дает расхождение порядка 10%
    за счет информации из заголовков пакетов. Кроме того, часть трафика, как
    минимум DNS-разрешения, различный флудовый трафик и т.д. идут мимо прокси.
    Уровень «шумового» трафика в Internet сейчас составляет порядка 50KB/день на
    каждый реальный IP адрес, но может сильно варьироваться в зависимости от сети,
    наличия открытых портов, реакции на ping-запросы и текущего уровня вирусной
    активности. По этим причинам, если 3proxy используется чтобы не «выжрать»
    трафик, выделенный провайдером, всегда следует делать некий запас порядка
    15%.

    Если на одной с 3proxy машине имеются какие-либо сервисы или
    работает пользователь, то их трафик не проходит через proxy-сервер и так же
    не будет учтен. Если где-то есть NAT, то клиенты, выходящие через NAT мимо
    прокси, так же останутся неучтенными. Если расхождение с провайдером превышает
    10% — нужно искать причину именно в этом.

  • Как управлять разрешением имен и кэшированием DNS

    Для разрешения имен и кэширования применяются команды nserver,
    nscache и nsrecord.

      nserver 192.168.1.2
      nserver 192.168.1.3:5353/tcp

    указывает 3proxy какие машины следует использвоать в качестве серверов
    DNS. Сервер 192.168.1.3 будет использоваться по порту TCP/5353 (вместо дефолтного UDP/53) только при недостижимости
    192.168.1.2. Можно указать до 5 серверов. Если nserver не указан, будут
    использованы системные функции разрешения имен.

      nscache 65535
      nscache6 65535

    указывает размер кэша для разрешения имен (обычно достаточно большой) для IPv4 и IPv6 соответственно.
    Кэш исопльзуется только при явном указании nserver.

      nsrecord server.mycompany.example.com 192.168.1.1
      nsrecord www.porno.com 127.0.0.2
      ...
      deny * * 127.0.0.2

    добавляет статическую запись в кэш. Статические записи так же влияют на разрешение через dnspr если не указана опция -s. Начиная с версии 0.8 для dnspr могут быть сконфигурированы родительские прокси.

  • Как использовать IPv6

    IPv6 поддерживается с версии 0.8. Обратите внимание, что в некоторых видах прокси (например SOCKSv4)
    IPv6 не поддерживает на уровне протокола. В SOCKSv5 есть поддержка IPv6 с помощью отдельного вида
    запроса, который должен быть реализован в клиентском приложении или соксификаторе.

    Возможно проксирование из сетей IPv4 и IPv6 в сети IPv4,
    IPv6 и смешанные. Адреса IPv6 могут использоваться в командах
    internal, external, parent, ACL, опциях -i, -e и т.д. Команду external и опцию
    -e для каждого сервиса можно давать два раза — один раз с IPv4 и один раз с IPv6
    адресом. internal и -i может быть указан только один, для биндинга ко всем адресам IPv4 и IPv6
    можно использовать адрес [0:0:0:0:0:0:0:0] or [::].

    Кроме того, для каждого сервиса могут быть даны опции -4, -46, -64, -6 которые
    задают приоритет разрешения имен в адреса IPv4 и IPv6 (только IPv4, приоритет IPv4, приоритет IPv6, только IPv6).

  • Как использовать connect back

    Например, пользователю нужен доступ к прокси-серверу, который расположен
    на хосте 192.168.1.2 недоступном из внешней сети, но имеющем доступ во внешнюю
    сеть с внешним адрес 1.1.1.1. Так же у него есть машина с именем host.dyndns.example.org
    с внешним адресом 2.2.2.2. Пользователь запускает 2 экземпляра 3proxy, один на
    хосте 192.168.1.2 с конфигурацией

      users user:CL:password
      auth strong
      allow user
      proxy -rhost.dyndns.example.org:1234

    второй на хосте host.dyndns.example.org (2.2.2.2) с конфигурацией

      auth iponly
      allow * * 1.1.1.1
      tcppm -R0.0.0.0:1234 3128 1.1.1.1 3128

    В настройках браузера указывается host.dyndns.example.org:3128.

  • Понравилась статья? Поделить с друзьями:
  • 3897 ошибка атол
  • 3895 неверная длина атол ошибка
  • 3g модем билайн ошибка 720
  • 3ff0 ошибка бмв е53 дизель
  • 371e ошибка bmw