Поднимаем приватный socks/proxy-сервер на базе 3Proxy для работы Telegram – Geek Notes – Roman Bogachev

3proxy : documentation : howtoe

  • Valid configuration file is required.

  • Most probable reasons for non-working limitations: ‘auth none’ or no auth is used. For any ACL based feature one of ‘iponly’, ‘nbname’ or ‘strong’ auths required. Sequence of commands may be invalid. Commands are executed one-by-one and ‘proxy’, ‘tcppm’, ‘socks’ or another service commands must follow valid configuration. Invalid sequence of ACLs. First matching ACL is used (except of internal redirections, see below). If ACL contains at least one records last record is assumed to be ‘deny *’.

  • Possible reasons for 3proxy starts manually but fails to start as a service:

    Both internal and external IPs are IPs of the host running 3proxy itself.
    This configuration option is usefull in situation 3proxy is running on the
    border host with 2 (or more) connections: e.g. LAN and WAN with different IPs

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

    If 3proxy is used on the host with single connection, both internal and
    external are usually same IP.

    Internal should exist and be UP on the moment 3proxy is started and
    should never be disconnected/DOWN. If this interface is periodically
    disconnected (e.g. direct link between 2 hosts), do not specify internal
    address or use 0.0.0.0 instead. In this case, if you have 2 or more
    interfaces you must use firewall (preferably) or 3proxy ACLs to avoid open
    proxy situation.

    External IP (if specified) must exist in the momet 3proxy
    serves client request. If external interface is no specified (or 0.0.0.0),
    system select external IP. It may be possible to access resources of internal
    network, to prevent this use ACLs. In addition, SOCKSv5 will not support BIND
    operation, required for incoming connections (this operation is quite rarely
    implemented in SOCKSv5 clients and usually is not required). In case of
    dynamic address, do not specify external or use external 0.0.0.0 or, if
    external address is required, create a script to determine current external
    IP and save it to file, and use external “$path_to_file” with “monitor” command
    to automatically reload configuration on address change.

    Похожее:  ТТК-Волга - Телефон
  • Check you use system DSN.
    Check SQL request is valid.
    The best way to check is to make file or stdout logging, get SQL request from log file or console and execute this request manually.
    Under Unix, you may also want to adjust ‘stacksize’ parameter.

  • Proxy can not access destination directly over IPv6 if client requests IPv4 address.
    To access IPv6 destination, either IPv6 address or hostname must be used in request.
    Best solution is to enable option to resolve hostnames via proxy on client side.

  • default stacksize may be insufficient, if some non-default plugins
    are used (e.g. PAM and ODBC on Linux) or if compiled on some platforms with
    invalid system defined values (few versionds of FreeBSD on amd64).
    Problem can be resolved with ‘stacksize’ command or ‘-S’ option starting 3proxy 0.8.4.

  • Server configuration example 3proxy.cfg.sample is in any 3proxy distribution.

  • 3proxy can log to stdout, file, ODBC datasource and
    syslog (Unix/Linux/Cygwin only). For using ODBC under Unix/Linux you must
    compile 3proxy with Unix ODBC libraries, see Compilation.
    You can control logging from 3proxy.cfg for all services or you can control
    logging of individual service, for example
    /usr/local/sbin/socks -l/var/log/socks.log starts SOCKS proxy with logging to file.
    For universal proxy (3proxy) log file rotation and archiving is supported.
    Log type is defined with “log” configuration file command or with
    -l switch on individual service invokation. log or -l is stdout logging.

    	log filename
    

    and

    	-lfilename
    

    specify filename for logging

    	log @ident
    

    and

    [email protected]

    specify ident for syslog logging. If filename within “log” command contains
    ‘%’ characters, it’s processes as format specificator (see “logformat”). E.g.
    log c:3proxylogs%y%m%d.log D creates file like c:3proxylogs60729.log,
    date is generated based on local time.

    	log &connstring
    

    specifies ODBC connection string, connstring is in format
    datasource,username,password (2 last are optional of
    datasource does not require or already has authentication information).
    Also, you must specify logformat to build SQL query, to insert recod into
    log, see How to setup logging format

    Rotation and archiving may be set up with log, rotate � archiver commands

    	log filename LOGTYPE
    

    sets rotation type. LOGTYPE may be:

    • M, monthely
    • W, weekly
    • D, daily
    • H, hourly
    • C, minutely
    	rotate NUMBER
    

    specifies number of files in rotation (that is how many files to keep).

    	archiver EXT COMMAND PARAMETERS
    

    Sets external archiver. EXT is extention of archived files
    (for example zip, gz, Z, rar etc) COMMAND and PARAMETERS are command
    to execute and command line PARAMETERS. Originale file is not deleted by
    3proxy, this work is left for archiver.
    You can pass original filename to archiver with %F macro and archive filename with %A.
    Examples are located in
    3proxy.cfg.sample

  • Since 0.3 version log format may be set with “logformat” command.
    First symbol of log format specifies format of date and time and
    should be L (LOCAL) or G (GMT – Grinwitch Meridian Time). Format
    string may contains some macro substitutions:

    Example:

    logformat "L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T"
    

    generates something like


    1042454727.0296 SOCK4.1080 000 3APA3A 127.0.0.1:4739 195.122.226.28:4739 505 18735 1 GET http://vhod-v-lichnyj-kabinet.ru/ HTTP/1.1

    (no line breaks)

    If ODBC used, logformat should specify SQL command,
    to insert record into log, for example

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

    (no line breaks)

    -‘ _ instructs to replace characters and ‘ with _

  • Just make format of 3proxy logs compatible with format supported by your
    favourite log analizer. Examples of compatible logformats are:

    For Squid access.log:


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

    or, more compatible format without %D

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

    ISA 2000 proxy WEBEXTD.LOG (fields are TAB-delimited):

    "-	  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 (fields are TAB-delimited):

    "-	  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 (fields are TAB-delimited):

    "-	  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 standard log (Apache and others):


    “-“” _L%C – %U [%d/%o/%Y:%H:%M:%S %z] “”%T”” %E %I”

    or more compatible without error code


    “-“” _L%C – %U [%d/%o/%Y:%H:%M:%S %z] “”%T”” 200 %I”

  • 3proxy is distributed in 2 variants: as a set of standalone modules (proxy,
    socks, pop3p, tcppm, udppm) and as universal proxy server. These services are
    absolutely independant, and if you use 3proxy you needn’t any of standalone
    modules.

    Standalone modules are only configurable via command line interface while
    3proxy uses configuration file. Many functions, such as ODBC logging, log
    rotation, access control, etc are only available in 3proxy, not in standalone
    proxies.
    Standalone module may be started from command line, for example:

    $/sbin/socks -l/var/log/socks.log -i127.0.0.1
    

    Starts SOCKS server binded to localhost ip, port 1080 with logging to
    /var/log/socks.log.
    You can get help for any standalone service with -? command line option.

    If 3proxy is used you should start all services in 3proxy.cfg file. 3proxy.cfg
    is executed by 3proxy as a batch file. Example of 3proxy.cfg and command syntaxys
    can be found in
    3proxy.cfg.sample.

    log /var/log/3proxy.log D
    rotate 30
    internal 127.0.0.1
    external 192.168.1.1
    proxy
    socks -p3129
    pop3p 
    

    Starts 3 services: HTTP PROXY, SOCKS and POP3 PROXY. Each listens localhost
    interface with default port (3128 for HTTP, 1080 for SOCKS and 110 for POP3P)
    except socks started with port 3129.
    All logs are in file /var/log/3proxy.log (with daily date modification and
    rotation). 30 last files are stored.

  • -i options specifies internal interface, -p – listening port. No space are
    allowed. To bind ‘proxy’ service to port 8080 on interfaces 192.168.1.1
    and 192.168.2.1 use

    proxy -p8080 -i192.168.1.1
    proxy -p8080 -i192.168.2.1
    
  • A: Use one of http, connect , socks4 or socks5 as a parent type. 3proxy
    itself still performs a name resolution, it’s required e.g. to ACLs matching.
    So, if no name resolution must be performed by 3proxy itself add a command

      fakeresolve

    this command resolves any name to 127.0.0.2 address.

  • There is FTP over HTTP (what is called FTP proxy in browsers) and FTP over FTP �ப�
    (what is called FTP proxy in file managers and FTP clients). For browsers, there is no need to start additional
    proxy service, ‘proxy’ supports FTP over HTTP, configure ‘proxy’ port as an FTP proxy. For ftp clients and file
    managers use ftppr. FTP proxy supports both active and passive mode with client, but always use passive mode with FTP servers.

  • First, always specify internal interface to accept incoming connection with
    ‘internal’ configuration command or ‘-i’ service command. (See
    How to start any of proxy services (HTTP, SOCKS etc)). If
    no internal interface is specified your proxy will act as open one.

    It’s also important to specify external interface to prevent access to
    internal network with ‘external’ or -e.

    3proxy with configuration files allows to use authentication and
    authorization for user’s access. Authentication is possible by
    username/password or user’s NetBIOS name. Authentication type is specified by
    ‘auth’ command.

    auth none
    

    Disables both authentication and authorization. You can not use ACLs.

    auth iponly
    

    Specifies no authentication, ACLs authorization is used.

    auth nbname
    

    Authentication by NetBIOS name ACLs. NetBIOS name of ‘messenger’ service
    is obrained before ACL validation. If no name is obtained it’s assumed to be
    empty. Messenger is started by default in Windows NT/2000/XP. For Win9x
    WinPopUP need to be launched. This type of authentication may be spoofed
    by privileged local user.

    auth strong
    

    Authentication by username/password. If user is not registered his
    access is denied regardless of ACLs.

    Different services can have different authentication levels.

    auth none
    pop3p
    auth iponly
    proxy
    auth strong
    socks
    

    It’s possible to authorize access by client IP address, IP address or requested resource,
    target port, time, etc after authentication.
    (See How to limit resource access).

    Since 0.6 version double authentication is possible, e.g.

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

    strong authentication will only be used if ACL requires username to deside if
    access must be granted. That is, in example, strong username authentication
    is not required to access 192.168.0.0/16

    0.6 version introduces authentication (username) caching to increase
    productivity. It’s recommended to use authentication caching with resource
    or time consuming authentication types, such as nbname or external plugins
    (WindowsAuthentication).
    Caching can be set with ‘authcache’ command with 2 parameters: caching type
    and caching time (in seconds). Caching type defines the type of cached access:
    ‘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” – username and password are checked
    against cached ones. For authentication special authentication type ‘cache’
    must be used.
    Example:

    authcache ip 60
    auth cache strong windows
    proxy -n
    

    Please note, that caching affects security. Never use caching for access to
    critical resources, such as web administration.

    authcache can be used to bind user’s sessions to ip with ‘limit’ option, with

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

    user will not be able to use more than a single IP during cache time (120 sec).

  • Userslist is created with ‘users’ command.

    users USERDESC ...
    

    With a single command it’s possible to define few users, or you
    can use few ‘users’ commands. USERDESC is user description. Description
    consists of three semicolon delimited parts – login, password type and

    users admin:CL:bigsecret test:CL:password test1:CL:password1
    users "test2:CR:$1$lFDGlder$pLRb4cU2D7GAT58YQvY49."
    users test3:NT:BD7DFBF29A93F93C63CB84790DA00E63
    

    Please note the usage of quotation sign: it’s required to comment out $ sign
    overwise used as a file inclusion macro.
    Next password types are available:

    • No password type: use system authentication.
    • CL – cleartext password
    • CR – crypt password, only MD5 crypt passwords are supported
    • NT – NT-hashed (MD4) passwords in hex, as used in pwdump or SAMBA

    NT and crypt passwords can be used to import accounts from Windows/SAMBA or
    Unix. For Windows you can use pwdump family of utilities.
    It’s convenient to store accounts apart and include account file with $ macro.
    Because for included files newlines are treated as a space, it’s possible to
    use atandard passwd file format:

    users $/etc/.3proxypasswd
    

    or

    users $"c:Program Files3proxypasswords"
    

    It’s possible to create NT and crypt passwords with mycrypt utility included
    in distribution.

    Userlist is system-wide. To manage user access to specific service use ACLs.

  • Commands allow, deny and flush are used to manage ACLs:


    allow <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist> <weekdaylist> <timeperiodlist>

    deny <userlist> <sourcelist> <targetlist> <weekdaylist> <timeperiodlist>

    flush

    ‘flush’ command is used to finish with existing ACL and to start new one.
    It’s required to have different ACLs for different services.
    ‘allow’ is used to allow connection and ‘deny’ to deny connection. ‘allow’
    command can be extended by ‘parent’ command to manage redirections (see How to manage redirections)). If ACL
    is empty it allow everything. If ACL is not empty, first matching ACL entry
    is searched for user request and ACL action (allow or deny) performed. If
    no matching record found, connection is denied and user will be asked to
    re-authenticate (requested for username/password). To prevent this request
    add ‘deny *’ to the end of list.

    • <userlist> – comma delimited list of users
    • <sourcelist> – comma delimited list of source (client) networks.
      Networks can be defined as single IP address or in CIDR form
      xxx.yyy.zzz.mmm/l, where l – is the length of network mask
      (a number of non-zero bits). 192.168.1.0/24
      means network with 255.255.255.0 mask.
    • <targetlist> – comma delimited list of target (server) networks.
      In 3proxy 0.6 and above it’s allowed to use hostnames with wildmasks
      in targetlist. Wildmask may only present in the begginning or at the
      end of the hostname, e.g.
      192.168.0.0/16,www.example.com,*wrongsite.com,*wrongcontent*.
    • <targetportlist> – comma delimited list of ports. I
      It’s possible to define port ranges with -, e.g. 80,1024-65535
      means port 80 and all unprivileged ports.
    • <commandlist> – the list of allowed actions

      CONNECT – establish outgoing TCP connection. e.g. POP3 or SOCKSv5

      BIND – allow incoming TCP connection (SOCKSv5)

      UDPASSOC – create UDP association (SOCKSv5)

      ICMPASSOC – create ICMP association (not implemented)

      HTTP_GET – HTTP GET request (HTTP proxy)

      HTTP_PUT – HTTP PUT request (HTTP proxy)

      HTTP_POST – HTTP POST request (HTTP proxy)

      HTTP_HEAD – HTTP HEAD request (HTTP proxy)

      HTTP_CONNECT – HTTP CONNECT, aka HTTPS request (HTTP proxy)

      HTTP_OTHER – another HTTP request (HTTP proxy)

      HTTP – any HTTP request except HTTP_CONNECT (HTTP proxy)

      HTTPS – alias to HTTP_CONNECT (HTTP proxy)

      FTP_GET – FTP get request (http, ftp proxy)

      FTP_PUT – FTP put request (ftp proxy)

      FTP_LIST – FTP list request (http, ftp proxy)

      FTP – any FTP request

      ADMIN – administration interface access
    • <weeksdays> – week days numbers or periods (0 or 7 means Sunday, 1 is Monday, 1-5 means Monday through Friday).
    • <timeperiodlists> – 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.

    * in ACL means “any”.
    Usage examples could be found in 3proxy.cfg.sample.

  • Redirections are usefull to e.g. forward requests from specific clients
    to different servers or proxy server. Additionally, redirections are usefull
    to convert proxy interface from ont format to another, e.g. requests from
    SOCKS proxy can be redirected to parent HTTP proxy, or SOCKSv5 client can be
    redirected to SOCKSv4 proxy.

    Because 3proxy understand “transparent” web request, it can be used as an
    intermediate software between HTTP proxy and NAT server for transparent HTTP
    forwarding, because it can convert “Web server” request issued by client to
    “proxy request” required by proxy server. A simplest redirection is:

    auth iponly
    allow *
    parent 1000 http 192.168.1.1 3128
    proxy
    

    All trafiic of HTTP proxy is redirected to parent proxy 192.168.1.1 port 3128.

    If port number is ‘0’, IP address from ‘parent’ is used as external address
    for this connection (that is like -eIP, but only for connections matching
    ‘allow’).

    Special case of redirection are local redirections. In this case both IP is
    0.0.0.0 and port is 0. It’s only usseful with SOCKS service. In this case no
    new connection is established, but request is parsed by corresponding local
    service. E.g.:

    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
    

    In this case all SOCKS traffic with destination port 80 is forwarded to local
    ‘proxy’ service, destination port 21 to ‘ftppr’ and 110 to ‘pop3pr’. There is
    no need to run these services expicitly. Local redirections are usefull if
    you want to see and control via ACLs protocol specific parameters, e.g.
    filenames requests thorugh FTP while clients are using SOCKS.

  • Q: What is it for?

    A: To have control based on request and to have URLs and another protocol specific parameters to be logged.

    Q: What are restrictions?

    A: It’s hard to redirect services for non-default ports; Internet Explorer supports only SOCKSv4 with no password authentication (Internet Explorer sends username, but not password), for SOCKSv5 only cleartext password authentication is supported.

    Q: What are advantages?

    A: You need only to setup SOCKS proxy in browser settings. You can use socksifier, i.e. FreeCAP or SocksCAP with application which is not proxy aware.

    Q: How to setup?

    A: You should specify parent proxy with IP of 0.0.0.0 and port 0. Examples:

    auth iponly
    allow * * * 80,8080-8088
    parent 1000 http 0.0.0.0 0
    allow * * * 80,8080-8088
    #redirect ports 80 and 8080-8088 to local HTTP proxy
    #Second allow is required, because ACLs are checked
    #twice: first time by socks and second by http proxy.
    
    allow * * * 21,2121
    parent 1000 ftp 0.0.0.0 0
    allow * * * 21,2121
    #redirect ports 21 and 2121 to local 
    #ftp proxy
    
    
    allow *
    #allow rest of connections directly
    
    socks
    #now let socks server to start
    

    Q: How it affects different ACL rules

    A: After local redirections rules are applied again to protocol-level request. Redirection rule itself is skipped. It makes it possible to redirect request again on the external proxy depending on request itself.

    allow * * * 80,8080-8088
    parent 1000 http 0.0.0.0 0
    #redirect http traffic to internal proxy
    
    allow * * $c:3proxylocal.nets 80,8080-8088
    #allow direct access to local.nets networks
    allow * * * 80,8080-8088
    parent 1000 http proxy.3proxy.org 3128
    #use parent caching proxy for rest of the networks
    
    allow *
    #allow direct connections for rest of socks
    #requests
    
  • Proxy itself doesn’t manage network level routing. The only way to control
    outgoing channel is to select external interface. It’s possible to make
    external interface (what is usually selected with ‘external’ command or
    ‘-e’ option) random by using local redirection with external port 0.

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

    Now external interface is randomly selected with 0.5 probability between
    10.1.1.101 and 10.2.1.102. To work as expected, different default routes
    must between 2 interfaces.
    used

    If both interface addresses are in same network, e.g. 10.1.1.101 and 10.1.1.102
    and you want to select random gateway between 10.1.1.1 and 10.1.1.2, you must
    control it by using routing table, in case there is no default gateway route
    for Windows:

     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
    

    If you have no second address yet, just add it. Under Linux/Unix it’s better
    to use source routing.

  • parent command may also be used to build a proxy chains. In this case
    few ‘parent’ commands are used for single ‘allow’ rule with different
    weights (first argument of parent command). Chain may contain any number
    of proxy servers, but it should be noted that every hope significantly
    reduces productivity. It’s possible to mix different types of proxy within
    single chain: HTTPS (HTTP connect), SOCKS4, SOCKS5. Weight different from
    1000 is used to build random chains. if weight W is below 1000, this proxy
    will be used as a next chain hop with probability of W/1000. That is, if
    the weight is 250 probability this proxy will be used for the next hope is
    25%. ‘parent’ records with common weight of 1000 establish a group, one of
    these record will be used for the hop with probability according to weight.
    Warning: each group must have a weight even of 1000. As follows, common
    weight of all ‘parent’ records must also be even of 1000. If common weight
    of ‘parent’ records in te chain is 3000, chain has 3 hops and must be formed
    of 3 groups. Example:

    allow *
    parent 500 socks5 192.168.1.1 1080
    parent 500 connect 192.168.10.1 3128
    

    In this case we have 1 parent proxy (1 hop) which is randomely choosen between
    2 hosts: 192.168.1.1 and 192.168.10.1. 2 records form a single group.

    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
    

    In this case we have 3 groups (3 hops in the chain). First hop is 192.168.10.1,
    second hop is 192.168.20.1 and 3rd one is either 192.168.30.1 with probability
    of 30% or 192.168.40.1 with probability of 70%.

  • 3proxy supports bandwidth filters. To manage filters bandlimin/bandlimout and
    nobandlimin/nobandlimout. ‘in’ means incoming and ‘out’ – outgoing traffic.


    bandlimin <bitrate> <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>

    nobandlimin <userlist> <sourcelist> <targetlist> <targetportlist> <commandlist>

    Commands are applied to all services. Imagine bandwidth filters as a series of
    pipes. Bitrate is a pipe’s width and ACLs controls the flow thorugh this pipe.

      bandlimin 57600 * 192.168.10.16
      bandlimin 57600 * 192.168.10.17
      bandlimin 57600 * 192.168.10.18
      bandlimin 57600 * 192.168.10.19
    

    Create 4 separete pipes for 4 client with emulation of modem connection.

      bandlimin 57600 * 192.168.10.16/30
    

    Create single pipe for all 4 clients. That is 4 clients share modem connection.
    In this example:

      nobandlimin * * * 110
      bandlimin 57600 * 192.168.10.16/32
    

    mail traffic from POP3 servers bypasses the pipe and has no bandwidth
    limitation.


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

    You can set traffic limit per day (D), week (W), month (M), year (Y) or
    absolute (‘N’), as specified by ‘type’ argument of counterin command.
    Traffic information is stored in binary file specified by ‘filename’ argument.
    countersutil utility can be used to manage this file.
    reportpath specifies location of text reports, type parameter of ‘counter’
    command controls how often text reports are created. amount is amount of
    allowed traffic in Megabytes (MB). nocountin allows you to set exclusions.

  • 3proxy accounts protocol level traffic. Provider counts channel or IP-level traffic with network and transport headers. In additions, 3proxy doesn’t counts DNS resolutions, pings, floods, scans, etc. It makes approx. 10% of difference. That’s why you should have 15% reserve if you use 3proxy to limit your traffic. If difference with your provider is significantly above 10% you should look for traffic avoiding proxy server, for example connections through NAT, traffic originated from the host with proxy installed, traffic from server applications, etc.

  • For name resolution and caching use commands nserver, nscache / nscache6 and nsrecord.

      nserver 192.168.1.2
      nserver 192.168.1.3:5353/tcp

    sets DNS resolvers. 192.168.1.3 will be used via TCP/5353 (instead of default UDP/53)
    only if 192.168.1.2 fails. Up to 5 nservers may be specified.
    If no nserver is configured, default system name resolution functions are used.

      nscache 65535
      nscache6 65535

    sets name cache size for IPv4 and IPv6. Name cache must be large enouth, if presents.
    name cache is only used if nserver is configured.

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

    adds static nsrecords. Also, static nsrecords are used for dnspr, unless -s option is specified.
    Since 0.8 version, parent proxy may be configured for dnspr.

  • IPv6 is supported since 0.8. Please note, some proxy protolos, e.g. SOCKSv4,
    do not support IPv6. SOCKSv5 supports IPv6 with special request type (must be
    implemented by client).

    3proxy supports proxying from IPv4 and IPv6 networks to IPv4,
    IPv6 and mixed networks. IPv6 address may be used in
    internal, external, parent commands, ACLs, -i and -e options,etc.
    external command and -e options may be given twice for each service – once with IPv4
    and once with IPv6 address. internal can be given only once, to bind to all IPv4 and
    IPv6 addresses use [0:0:0:0:0:0:0:0] or [::].

    Any service may be configured with -4, -46, -64, -6 options to specify decied
    priority for name to IPv4/IPv6 address resolution (IPv4 only, IPv4 priority,
    IPv6 priority, IPv6 only).

  • In example, users needs access from external network to proxy server located
    on the host 192.168.1.2. This host can not be accessed from external network,
    but it has access to external network with with external address 1.1.1.1.
    Also, user has access to the host 2.2.2.2 (IP address may be dynamic) with
    hostname host.dyndns.example.org via external network. User needs 2 instances
    of 3proxy, first one on the host 192.168.1.2 with config

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

    second one on the host.dyndns.example.org (2.2.2.2) with config

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

    For browser settings proxy is host.dyndns.example.org:3128.

  • Soft:3proxy:howto

    3APA3A 3proxy tiny proxy server HowTo

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


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

    • См. Как скомпилировать 3proxy Visual C .
      Используйте Makefile.intl вместо Makefile.msvc

    • Извлеките файлы из архива 3proxy.tgz (например, с помощью WinZip или, при наличии
      Cygwin, tar -xzf 3proxy.tgz).
      Используйте команду make -f Makefile.win. Если по каким-то причинам вы хотите использовать
      библиотеку POSIX-эмуляции CygWin – используйте make -f Makefile.unix.
      При использовании CygWin, функции, специфичные для Windows (такие, как запуск в
      качестве службы) будут недоступны.

    • Используйте 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-библиотеку) к флагам линковщика.

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


    • Извлеките файлы из архива 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.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 (см. раздел Компиляция). Скопируйте
      исполняемые файлы в подходящий каталог (например, /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 не запускается службой (но запускается вручную) по одной из следующих причин:

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

            3proxy --install path_to_configuration_file
      • Отсутствие у пользователя прав на установку или запуск службы
      • Служба уже установлена или запущена
  • Убедитесь, что выправильно понимаете что такое 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.

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

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

  • Возможно, недостаточен размер стека потока по-умолчанию, это может
    быть при использовани каких-либо сторонних плагинов (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)"

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

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

    Формат 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"
  • 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 через 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.

    • A: Чтобы иметь в логах URL запросов, если пользователь SOCKS пользуется
      Web, FTP или POP3.

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

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

    • 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
    • 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% – нужно искать причину именно в этом.

  • Для разрешения имен и кэширования применяются команды 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 поддерживается с версии 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).

  • Например, пользователю нужен доступ к прокси-серверу, который расположен
    на хосте 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.


    • Мы будем рассматривать 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 клиента для работы через 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.

    • В большинстве случаев достаточно установить отображение (tcppm) TCP порта 25 на
      аналогичный порт SMTP сервера провайдера. В конфигурации клиента указать
      внутренний адрес прокси в качестве адреса SMTP-сервера.

    • Предположим, у вас есть следующие настройки для получения почты:

        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

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

    • Оптимальный варинт – использовать соксификатор (Как использовать
      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 в качестве системной службы сервером поддерживаются
      команды запуска, остановки, временной приостановки и продолжения.
      При временной приостановке сервер перестает принимать новые запросы от
      клиентов, но обработка ранее поступивших запросов продолжается. Сервер не
      подерживает динамическое изменение конфигурации, т.е. после изменения
      конфигурации 3proxy необходимо перезапустить.
      Управлять запуском, остановкой, приостановкой и продолжением можно либо
      через служебную программу “Службы” (Services) либо через команду net:

        net start 3proxy
        net stop 3proxy
        net pause 3proxy
        net continue 3proxy

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

    Поднимаем приватный socks/proxy-сервер на базе 3Proxy для работы Telegram - Geek Notes - Roman Bogachev

  • Раздаем интернет в офисе или 3proxy часть первая "инсталляция"

    Задача:

    В офис заходит витая пара с 2мбит’ным инетом. Необходимо его раздать на 10 машин. Так же хочется иметь возможность считать трафик по пользователям, устанавливать им лимиты, ограничивать скорость, трафик, запрещать некоторые сайты. Все компьютеры объединены в локальную сеть. Есть сервер с двумя сетевыми картами.

    Все это можно сделать разрешив использовать подключение к интернету для всех (расшарить подключение по локальной сети которое идет к провайдеру). Делается это следующим образом в WinXP выбираем Пуск-Сетевое окружение. В правой части окна нажимаем Отобразить сетевые подключения. Выбираем подключение, которое идет к провайдеру и нажимаем на нем правую клавишу мыши – Свойства. Переходим на закладку Дополнительно и отмечаем галочкой пункт Разрешить другим пользователям сети использовать подключение к Интернету данного компьютера. Все.

    Из минусов – интернет мы конечно всем дали, но вот о никаком контроле и ограничении пользователей речи быть не может.

    Чтобы получить все плюшки, необходим прокси-сервер. Их существует великое множество (Squid, UserGate, CCProxy, 3Proxy). Все без проблем находятся поисковиком. Рассмотрим их немножко поподробнее:

    Squid

    – проект с открытыми исходниками, и бесплатный. Имеет версии под Windows и Linux. Позволяет очень гибко контролировать и управлять каналом в интернет. Из минусов – сложен в настройке,  как и большинство программ портированных с Linux. Все делается через конфигурационные файлы и об интерфейсе вам придется тут забыть. Все ручками.

    UserGate – уже платное решение, но с удобным интерфейсом и не менее богатыми настройками чем вышеописанный прокси. Я не стал его даже устанавливать по той лишь причине что планируется перевод сервера на Linux и нет желания разбираться потом в другой программе и платить за него, зная что потом снесу тоже не хочется.

    CCProxy – идеальное решение, если вы не имеете опыта администрирования и настройки прокси. Все удобно и понятно, но возможностей мало, бесплатен только если им пользуется менее 10 клиентов и работает только под Windows

    3proxy – это то что нужно!!! Маленький (несколько килобайт), кросплатформенный, позволяет гибко управлять каналом, бесплатный, открыты исходники. Из минусов нет графического интерфейса для настройки, но это компенсируется тем, что все настройки делаются в одном файле, причем очень логично и не запутанно как в том же SQUID.  Автор из России и с удовольствием помогает в официальном форуме программы.
    Выбор очевиден.

    Под сервер взят старенький комп в Windows XP. Решение не самое лучшее, но пока пойдет.
    Итак:

    1. Идем на сайт http://www.3proxy.ru и скачиваем последнюю версию. Так же советую прочитать How-To(На русском) на сайте программы и многие вопросы отпадут сами собой.
    2. Распаковываем скачанный архив в каталог например c:3proxy
    3. Создаем в каталоге файл c:3proxy3proxy.cfg. Это файл конфигурации прокси. Теперь настроить наш прокси-сервер. 

    Открываем файл в блокноте и пишем следующие строчки:

    monitor “с:3proxybin3proxy.cfg”

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



    internal 192.168.0.1
    external 82.209.xx.xx

    где после internal идет ip сервера в локальной сети, а после external ip выданный провайдером.

     Теперь укажем DNS сервера. Я использую сервера, которые бесплатно предоставляет Google. Вы можете использовать их же или указать сервера своего провайдера, тогда придется заменить 8.8.8.8 на первичный DNS сервер провайдера, а 8.8.4.4 на вторичный соответственно

    nserver 8.8.8.8
    nserver 8.8.4.4


    укажем размер DNS кэша

    nscache 1152000

    и разрешим кэширование DNS

    dnspr

    Чтобы иметь статистику по пользователям скажем серверу чтобы вел логи по дням и хранил только последние 30 шт. Чтобы было проще потом их анализировать укажем формат записи логов такой же как использует прокси-сервер SQUID. Это даст нам возможность использовать любой лог-анализатор, который работает с squid
    logformat “L%C – %U [%d/%o/%Y:%H:%M:%S %z] “”%T”” %E %I %O %N/%R:%r”
    log С:3proxylogs3proxy.log D
    rotate 30

    Теперь об авторизации на прокси. 3Proxy позволяет авторизовать клиентов по ip, логину/паролю или через Домен Windows (только для сервера на Windows). Мы будем использовать первый вариант.
    allow * 192.168.0.1
    allow * 192.168.0.10
    allow * 192.168.0.11
    allow * 192.168.0.12

    deny *

    Вместо ip указываем ip своих машин которым нужен интернет и последней строчкой запрещаем интерет всем, кто не прошел авторизацию.

    Если вы хотите ограничить объем потребляемого трафика и иметь on-line статистику по количеству потребляемого трафика клиентами, то добавим следующие строчки:
    counter “С:3proxy3proxy.3cf” D “С:3proxytraftraf”
    здесь мы создаем счетчики
    countin “1/Server” M 50000 * 192.168.0.1 * * *
    countin “2/User” M 900000 * 192.168.0.10 * * *
    countin “3/User2” M 900000 * 192.168.0.11 * * *
    countin “4/User3” M 900000 * 192.168.0.12 * * *

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

    Указываем что мы используем авторизацию по ip

    auth iponly
    и запускаем прокси на порту 3128
    proxy -p3128 -n -t
    Почти все. Еще немного и будем проверять, но прежде еще укажем настройки админки
    admin -p8080
    Запускаем админку на порту 8080. Я сознательно пропускаю авторизацию для админки, сейчас в нее может попасть любой. После того как настройка будет закончена и все заработает позаботьтесь об авторизации сами или удалите вообще эти строки.
    Сохраняемся и закрываем файл.
    4. Открываем командную строку. Пуск-Выполнить пишем cmd и Ок.
    5. С трепетом в душе запускаем наш прокси командой.
    c:3proxy3proxy.exe c:3proxy3proxy.cfg
    Если вы сделали что-то неправильно в конфигурационном файле, то программа вам сообщит ошибку и номер строки.
    6. Запускаем браузер и в его настройках устанавливаем галочку использовать прокси-сервер и указываем ip и порт. По моим конфигам это 192.168.0.1 и 3128 соответственно. Если вы что-то меняли, то подставьте свое.
    7. Проверяем работу сервера пробуя перейти на любой сайт. сли сайт открылся все ок.
    8. Идем в папку c:3proxylog  и смотрим лог файл. Там должны появится записи о посещении нами веб сайта.
    Перейдя по адресу http://192.168.0.1:8080 мы попадаем в админку, в которой можно посмотреть счетчики трафика, содержимое конфига и запущенные службы.

           9. Если все работает устанавливаем 3proxy как сервис Windows и забываем про него. Для этого в командной строке пишем:
    C:3proxy3proxy.exe –install
    10. Перезагружаем компьютер и идем настраивать браузеры клиентов.

    В следующих частях я научу вас ограничивать скорость пользователям, мы запустим SOKS5 сервер, научимся пользоваться портмапингом, почтой за проксей, поднием ftp прокси и установим анализатор логов.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *