mirror of
https://github.com/3proxy/3proxy.git
synced 2025-02-24 02:55:40 +08:00
281 lines
22 KiB
HTML
281 lines
22 KiB
HTML
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||
3APA3A 3proxy tiny proxy server Frequently Asked Questions (FAQ)
|
||
<ul>
|
||
<li><a href="#TROUBLE">Почему не работает...</a></li>
|
||
<ul>
|
||
<li><a href="#NOTHING">Q: Почему ничего не работает?</a></li>
|
||
<li><a href="#LIMITS">Q: Почему не работают ограничения доступа (перенаправления, ограничения по скорости, трафику и т.д.)?</a></li>
|
||
<li><a href="#SERVICE">Q: Почему 3proxy не запускается как служба?</a></li>
|
||
<li><a href="#INTEXT">Q: Почему не получается указать internal и external?</a></li>
|
||
<li><a href="#ODBC">Q: Почему не работает ведение журналов в ODBC?</a></li>
|
||
<li><a href="#CHAP">Q: Почему не поддерживаются APOP и CRAM-MD5 в POP3 прокси?</a></li>
|
||
</ul>
|
||
<li><a href="#SOCKSREDIR">Перенаправление socks соединений в локальный прокси</a></li>
|
||
<ul>
|
||
<li><a href="#REDIR">Q: Для чего это надо?</a></li>
|
||
<li><a href="#REDIRLIMIT">Q: Какие недостатки?</a></li>
|
||
<li><a href="#REDIRADV">Q: Какие преимущества?</a></li>
|
||
<li><a href="#REDIRHOW">Q: Как настраивается?</a></li>
|
||
<li><a href="#REDIINTER">Q: Как взаимодействует с другими правилами в ACL?</a></li>
|
||
</ul>
|
||
<li><a href="#ISIT">А есть ли...</a></li>
|
||
<ul>
|
||
<li><a href="#NAMES">Можно ли разрешать имена на родительском прокси?</a></li>
|
||
<li><a href="#ISFTP">Существует ли сейчас поддержка FTP прокси в продукте?</a></li>
|
||
<li><a href="#PORT">Каким образом можно прибиндить сервисы на свой порт, к примеру, HTTP прокси к 8080, а не 3128 как по-умолчанию?</a></li>
|
||
<li><a href="#BANDLIM">Как ограничить ширину канала?</a></li>
|
||
</ul>
|
||
<li><a href="#BRRR">Почему так криво...</a></li>
|
||
<ul>
|
||
<li><a href="#TRAF">Почему так криво считается трафик? Не совпадает с ...</a></li>
|
||
<li><a href="#CONFIG">Почему такая кривая конфигурация и ничерта не понятно?</a></li>
|
||
<li><a href="#CODE">Почему так криво написан код?</a>
|
||
<li><a href="#UNSAFE">Почему так много strcpy, sprintf и т.д., это ж дыры!</a>
|
||
</ul>
|
||
</ul>
|
||
<hr>
|
||
<li><b><a name="TROUBLE">Почему не работает...<a></b></li>
|
||
<ul>
|
||
<li><a name="NOTHING"><i>Q: Почему ничего не работает?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Потому что для работы нужен правильный файл конфигурации.
|
||
</p>
|
||
<li><a name="LIMITS"><i>Q: Почему не работают ограничения доступа (перенаправления, ограничения по скорости,
|
||
трафику и т.д.)?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Обычные ошибки - использование auth none (для работы любых
|
||
функций, основанных на ACL, требуется auth iponly, nbname или strong),
|
||
нарушение порядка ввода команд (команды выполняются последовательно,
|
||
запуск сервиса proxy, socks, tcppm и т.д. должен осуществляться после
|
||
того, как указана его конфигурация), неправильный порядок записей в ACL
|
||
(записи просматриваются последовательно до первой, удовлетворяющей
|
||
критериям). Если в ACL имеется хотя бы одна запись, то считается, что
|
||
последняя запись в ACL - это неявная deny *.
|
||
</p>
|
||
<li><a name="SERVICE"><i>Q: Почему 3proxy не запускается как служба?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Наиболее вероятные причины:
|
||
<ul>
|
||
<li>Отсутствие команды service в файле конфигурации - команда необходима в 3proxy 0.5.2 и более ранних, чтобы 3proxy вел себя как системная служба Windows
|
||
<li>Использование относительных (неполных) путей файлов в файле конфигурации
|
||
При использовании файлов журналов, файлов вставок ($filename) используйте
|
||
полные пути, например, $"c:\3proxy\include files\networks.local". Тоже самое
|
||
относится к файлам журналов и любым другим.
|
||
Для отладки лучше запускать 3proxy с ведением журнала на стандартный вывод.
|
||
Не забудьте в таком случае отключить daemon и service в файле конфигурации.
|
||
Для чистоты эксперимента запускать 3proxy из коммандной строки в таком случае
|
||
следует, находясь в другой папке.
|
||
<li>Отсутствие у системной записи прав на доступ к исполняемому файлу, каким-либо файлам конфигурации, журнала и т.п.
|
||
<li>Отсутствие файла конфигурации по стандартному расположению -
|
||
3proxy.cfg в одном каталоге с исполняемым файлом. Если файл расположен по
|
||
другому пути, необходимо использовать команду
|
||
<pre>
|
||
3proxy --install path_to_configuration_file</pre>
|
||
<li>Отсутствие у пользователя прав на установку или запуск службы
|
||
<li>Служба уже установлена или запущена
|
||
</ul>
|
||
</p>
|
||
<li><a name="INTEXT"><i>Q: Почему не получается указать internal и external?</i></a></li></li>
|
||
<p>
|
||
<i>A:</i> Убедитесь, что выправильно понимаете что такое internal и external адреса.
|
||
Оба адреса - это адреса, принадлежищие хосту, на котором установлен 3proxy.
|
||
Эта опция конфигурации необходима в классической ситуации, когда 3proxy
|
||
установлен на граничном компьютере с двумя (или более) подключениями:
|
||
<pre>
|
||
LAN connection +-------------+ Internet connection
|
||
LAN <-------------->| 3proxy host |<-------------------> INTERNET
|
||
^+-------------+^
|
||
| |
|
||
Internal IP External IP</pre>
|
||
Если 3proxy работает на хосте с одним интерфейсом, то его адрес будет и
|
||
internal и external.
|
||
<br>Интерфейс с адресом internal должен существовать и быть рабочим на момент
|
||
запуска 3proxy, и не должен отключаться. Если internal интерфейс
|
||
периодически отключается, то не следует его указывать, или можно указать адрес
|
||
0.0.0.0. При этом прокси будет принимать запросы на всех интерфейсах, поэтому
|
||
при наличии нескольких интерфейсов для ограничения доступа следует использовать
|
||
фаервол или хотя бы ACL.
|
||
</p>
|
||
<p>
|
||
Интерфейс с адресом external, если он указан, должен быть рабочим на момент
|
||
получения запроса клиента. При отсутствии external или адресе 0.0.0.0 внешний
|
||
адрес будет выбираться системой при установке соединения. При этом, может быть
|
||
возможность доступа через прокси к ресурсам локальной сети, поэтому для
|
||
предотвращения несанкционированного доступа следует использовать ACL. Кроме
|
||
того, могут быть проблемы с приемом входящих соединений через SOCKSv5
|
||
(SOCKSv5 используется в клиентах исключительно редко).
|
||
В случае, если адрес динамический, можно либо не
|
||
указывать external, либо использовать адрес 0.0.0.0, либо, если необходима
|
||
поддержка входящих соединений в SOCKSv5, использовать скрипт,
|
||
который будет получать текущий адрес и сохранять его в файл, который будет
|
||
отслуживаться через команду monitor.
|
||
</p>
|
||
<li><a name="ODBC"><i>Q: Почему не работает ведение журналов в ODBC?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Убедитесь, что используется системный, а не
|
||
пользовательский DSN. Убедитесь, что выполняется правильный SQL запрос. Наиболее
|
||
распространенная проблема связана с отсутствием кавычек или неправильным
|
||
форматом данных. Самый простой способ - сделать ведение журнала в файл или
|
||
на стандартный вывод, просмотреть выдаваемые SQL запросы и попробовать
|
||
дать такой запрос вручную.
|
||
</p>
|
||
<li><a name="CHAP"><i>Q: Почему не поддерживаются APOP и CRAM-MD5 в POP3 прокси?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Любая challenge-response аутентификация, к которым относятся APOP
|
||
и CRAM-MD5, требует, чтобы со стороны сервера был передан уникальный challenge.
|
||
До начала аутентификации POP3 прокси не знает, к какому серверу следует
|
||
подключаться для получения Challenge, поэтому challenge-response в принципе
|
||
невозможен. Защитить соединение можно с помощью TLS (например, stunnel) или
|
||
IPSec.
|
||
</p>
|
||
</ul>
|
||
<hr>
|
||
<li><b><a name="SOCKSREDIR">Перенаправление socks соединений в локальный прокси</a></b></li>
|
||
<ul>
|
||
<li><a name="REDIR"><i>Q: Для чего это надо?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Чтобы иметь в логах URL запросов, если пользователь SOCKS пользуется
|
||
Web, FTP или POP3.
|
||
</p>
|
||
<li><a name="REDIRLIMIT"><i>Q: Какие недостатки?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Перенапраление невозможно для web-серверов или FTP, висящих на
|
||
нестандартных портах, для SOCKSv4 не поддрживается авторизация с
|
||
паролем (IE поддерживает только SOCKSv4), но при этом IE передает
|
||
имя пользователя по SOCKSv4 (имя, с которым пользователь вошел в систему).
|
||
Для SOCKSv5 не поддерживается NTLM авторизация, пароли передаются в открытом
|
||
тексте.
|
||
</p>
|
||
<li><a name="REDIRADV"><i>Q: Какие преимущества?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Достаточно в настройках IE только указать адрес SOCKS прокси. В
|
||
больших сетях можно для этого использовать WPAD (автоматическое
|
||
обнаружение прокси). В 3proxy достаточно запускать только одну службу
|
||
(socks). Если используется только Internet Explorer, то можно
|
||
автоматически получать имя пользователя в логах, не запрашивая
|
||
логин/пароль.
|
||
</p>
|
||
<li><a name="REDIRHOW"><i>Q: Как настраивается?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Указывается parent http proxy со специальным адресом 0.0.0.0 и портом
|
||
0. Пример:
|
||
<pre>
|
||
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</pre>
|
||
</p>
|
||
<li><a name="REDIINTER"><i>Q: Как взаимодействует с другими правилами в ACL?</i></a></li>
|
||
<p>
|
||
<i>A:</i> После внутреннего перенаправления правила рассматриваются еще раз за
|
||
исключением самого правила с перенаправлением (т.е. обработка правил не
|
||
прекращается). Это позволяет сделать дальнейшие перенаправления на
|
||
внешний прокси. По этой же причине локальное перенаправление не должно
|
||
быть последним правилом (т.е. должно быть еще хотя бы правило allow,
|
||
чтобы разрешить внешние соединения через HTTP прокси).
|
||
Например,
|
||
<pre>
|
||
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.sandy.ru 3128
|
||
#все остальные веб-запросы перенаправить на внешний прокси-сервер
|
||
allow *
|
||
#разрешить socks-запросы по другим портам</pre>
|
||
</p>
|
||
</ul>
|
||
<hr>
|
||
<li><b><a name="ISIT">А есть ли...</a></b></li>
|
||
<ul>
|
||
<li><a name="NAMES"><i>Q: Можно ли разрешать имена на родительском прокси?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Можно. Для этого надо использовать тип родительского прокси http,
|
||
connect+, socks4+ и socks5+. Однако, при это надо помнить, что самому 3proxy
|
||
требуется разрешение имени для управления ACL. Поэтому, если с прокси-хоста
|
||
не работают разрешения имени, необходимо в конфигурации дать команду
|
||
<pre>
|
||
fakeresolve</pre>
|
||
которая разрешает любое имя в адрес 127.0.0.2.
|
||
</p>
|
||
<li><a name="ISFTP"><i>Q: Существует ли сейчас поддержка FTP прокси в продукте?</i></a></li>
|
||
<p>
|
||
Есть поддержка как FTP через HTTP (то, что называется FTP прокси в Internet
|
||
Explorer, Netscape, Opera) так и настоящего FTP прокси (то, что называется
|
||
FTP proxy в FAR и FTP клиентах).
|
||
</p>
|
||
<li><a name="PORT"><i>Q: Каким образом можно прибиндить сервисы на свой порт, к примеру, HTTP прокси к 8080, а не 3128 как по-умолчанию?</i></a></li>
|
||
<p>
|
||
А:
|
||
<pre>
|
||
proxy -p8080</pre>
|
||
</p>
|
||
<li><a name="BANDLIM"><i>Q: Как ограничить ширину канала?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Читайте HowTo <a href="http://3proxy.ru/howtor.asp#BANDLIM">http://3proxy.ru/howtor.asp#BANDLIM</a>
|
||
</p>
|
||
</ul>
|
||
<hr>
|
||
<li><b><a name="BRRR">Почему так криво...</a></b></li>
|
||
<ul>
|
||
<li><a name="TRAF"><i>Q: Почему так криво считается трафик? Не совпадает с ...</i></a></li>
|
||
<p>
|
||
<i>A:</i> Следует учитывать, что 3proxy считает трафик только на прикладном уровне и
|
||
только проходящий через прокси-сервер. Провайдеры и другие средства учета
|
||
трафика считают трафик на сетевом уровне, что уже дает расхождение порядка 10%
|
||
за счет информации из заголовков пакетов. Кроме того, часть трафика, как
|
||
минимум DNS-разрешения, различный флудовый трафик и т.д. идут мимо прокси.
|
||
Уровень "шумового" трафика в Internet сейчас составляет порядка 50KB/день на
|
||
каждый реальный IP адрес, но может сильно варьироваться в зависимости от сети,
|
||
наличия открытых портов, реакции на ping-запросы и текущего уровня вирусной
|
||
активности. По этим причинам, если 3proxy используется чтобы не "выжрать"
|
||
трафик, выделенный провайдером, всегда следует делать некий запас порядка
|
||
15%.
|
||
</p>
|
||
<p>
|
||
Если на одной с 3proxy машине имеются какие-либо сервисы или
|
||
работает пользователь, то их трафик не проходит через proxy-сервер и так же
|
||
не будет учтен. Если где-то есть NAT, то клиенты, выходящие через NAT мимо
|
||
прокси, так же останутся неучтенными. Если расхождение с провайдером превышает
|
||
10% - нужно искать причину именно в этом.
|
||
</p>
|
||
<li><a name="CONFIG"><i>Q: Почему такая кривая конфигурация и ничерта не понятно?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Есть несколько причин. Во-первых, до выхода релиза (т.е. версии 1.0) я буду изо
|
||
всех сил добиваться совместимости конфигурации между версиями. Во-вторых,
|
||
конфигурация сделана так, чтобы ее можно было легко разбирать программно.
|
||
В-третьих, все там понятно. При желании. Если знать как все работает.
|
||
</p>
|
||
<li><a name="CODE"><i>Q: Почему так криво написан код?</i></a></li>
|
||
<p>
|
||
<i>A:</i> Есть несколько причин. Во-первых, я не программист. Во-вторых, 3proxy изначально
|
||
писался на коленке (в отет на "слабо" в одной из конференций). Никто
|
||
не мог предположить, что им кто-то реально будет пользоваться. В-третьих, у многих
|
||
возникает желание разобраться в коде 3proxy чтобы внедрить его в какой-нибудь
|
||
троян. Очень не хочется облегчать эту задачу. В-четвертых, мне надо добиться
|
||
компиляции кода в как можно большем числе систем. Замечено, что чем кривее код в
|
||
C, тем он лучше переносится.
|
||
</p>
|
||
<li><a name="UNSAFE"><i>Q: Почему так много strcpy, sprintf и т.д., это ж дыры!</i></a><li>
|
||
<p>
|
||
<i>A:</i> Есть несколько причин. Во-первых, несмотря на дурной тон использования этих
|
||
функций, они наиболее совместимы между разными системами и компиляторами.
|
||
Во-вторых, само по себе их использование не означает присутствие дыры, если их
|
||
параметры должным образом контролируются. Найдете дыру - обязательно сообщите.
|
||
В третьих, может быть я уберу их перед конечным релизом, чтобы никого не
|
||
пугать.
|
||
</p>
|
||
</ul>
|