CVS-GW(8)

NAME
cvs-gw - CVS pserver proxy

SYNOPSIS
cvs-gw [-daemon <port>] [-fastdaemon <port>] [-as <tag>]

DESCRIPTION
The Firewall Toolkit CVS proxy is an application level proxy that provides configurable access control, authentication and logging mechanisms. The CVS proxy, which runs on the firewall, passes CVS requests through the firewall (at the application level), using rules you supply. You can configure the proxies to allow connections based on:

•   source IP address

•   source host name

•   destination IP address

•   destination host name

•   pserver command (say, checkout or commit)

All packets, and therefore all application requests go to the firewall. On the firewall, the CVS proxy software relays information from one side of the firewall to the other. The proxy prevents the applications on outside networks from talking directly with the applications on your inside network, and vice versa. No IP packets pass from one side of the firewall to the other. All data are passed at the application level.

To use the proxy in non-transparent mode, PSERVER 'username' part should be substituted with username$host[$port] where $ is separator symbol which may be configured otherwise.

The CVS proxy (cvs-gw) generally runs as a daemon (invoked from system startup script, p.e. /etc/rc.local) and listens for requests on the specified port (tcp/2401, as indicated in /etc/services ,is reasonable default). Whenever the system receives an CVS request on this port, the CVS proxy checks its configuration information (in the netperm-table) and determines whether the initiating host has permission to use CVS. If the host does not have permission, the proxy logs the connection attempt and displays an error message.

The proxy may also be invoked from tcp/ip "superserver" (inetd or xinetd). -daemon parameter should be omitted in this case.

If the host has permission, the proxy authenticates the user (if required), logs the transaction and passes the request to the destination host.

OPTIONS

  Command Line Options
The CVS proxy recognizes the following command line options (whether started from the command line or from within /etc/rc.local):

-daemon port
    Indicates that the CVS proxy runs as a daemon, and the port (name or number) on which the CVS proxy listens. When -daemon option is used, configuration is being read from netperm-table for every new connection accepted by proxy.

    port Specifies either a numeric id or symbolic name from the /etc/services file.

-fastdaemon port
    Indicates that the CVS proxy runs as a daemon, and the port (name or number) on which the CVS proxy listens. When -fastdaemon option is used, configuration is being read from netperm-table once the daemon starts or if SIGHUP is received.

-as tag
    Changes default application tag for netperm-table from "cvs-gw" to any given string.

  Configuration Options
The CVS proxy reads configuration rules from the /usr/local/etc/netperm-table. It reads all rules using the cvs-gw and * (wildcard) keywords. The CVS proxy reads the netperm-table from top to bottom. If there are multiple rules in the table that could apply for a particular attribute, the CVS proxy uses the first one that it finds. See netperm-table(5) for a more complete explanation of netperm-table syntax and precedence.

The CVS proxy recognizes the following attributes:

user-limit number
    Specifies max permitted username length.

pass-limit number
    Specifies max permitted password length.

hosts host-pattern [host-pattern2...] [options]
    rules specify host and access permissions. Typically, a hosts rule will be in the form of:

    cvs-gw: deny-hosts unknown

    cvs-gw: hosts 192.33.112.* 192.94.214.* -mode rw

    There may be several host patterns following the "hosts" keyword, ending with the first optional parameter beginning with '-'. Optional parameters permit the selective enabling or disabling of logging information, etc. Sub-options are:

    -transparent specifies that the proxy runs in transparent mode; see OS-specific details on how to setup transparent redirection. Proxy destination host is not extracted from username part but taken from connection properties instead. This makes proxy "transparent", so no special client setup is required.

    -plug-to server-address specifies that proxy is "hardwired" to a given server.

    -port server-port overrides default pserver port for plug-to

    -log-request operation
    -log-request { operation1 operation2 ... }
    specifies that a log entry to the system log should be made whenever the listed operations are performed through the proxy. (See pserver protocol description for a list of known CVS requests)

    -log-response operation
    -log-response { operation1 operation2 ... }
    specifies that a log entry to the system log should be made whenever the listed responses are received through the proxy. (See pserver protocol description for a list of known CVS responses)

    -dest pattern
    -dest { pattern1 pattern2 ... }
    specifies a list of valid destinations. If no list is specified, all destinations are considered valid. The -dest list is processed in order as it appears on the options line. -dest entries preceeded with a '!' character are treated as negation entries. Therefore the rule:

    -dest !*.mit.edu -dest *

    will permit hosts that are not in the domain "mit.edu" to be connected to.

    -deny-request operation
    -deny-request { operation1 operation2 ... }
    specifies a list of CVS operations to deny. By default, all operations are permitted, unless `ro' mode is specified.

    -deny-response operation
    -deny-response { operation1 operation2 ... }
    specifies that a log entry to the system log should be made whenever the listed responses are received through the proxy.

    -mode ro
    -mode rw this option overrides some flags specified by '-deny-request' and '-deny-response' options. It disallows to user to make commit ('ro') or gives full access to repository ( 'rw'
     is set by default).

    -user username
    -user { username1 username2 ... } specifies a list of users allowed to authenticate to remote server. By default, all users are permitted.

    -extnd specifies that the proxy should request per-operation permissions from authsrv.

    -separator separator-char specifies separator character used to distinguish user and host name parts in non-transparent mode (instead of default `@').

    -client-dscp dscp-tag-name
    -client-dscp dscp-hex-value specifies diffserv codepoint (QoS/ToS mark) for client to proxy command stream.

    -server-dscp dscp-tag-name
    -server-dscp dscp-hex-value specifies diffserv codepoint (QoS/ToS mark) for proxy to server command stream.

directory directory
    Specifies the directory that the CVS proxy makes its root directory before providing service.

groupid group
    Specifies the name of the group the CVS proxy uses when running.

    group
        Specifies either a name or numeric id from the /etc/group file.

timeout seconds
    Specifies the number of seconds the CVS proxy is idle (with no network activity) before disconnecting

userid user
    Specifies the user ID the proxy uses when running.

    user
        Specifies either a name or numeric id from the /etc/passwd file. This option is equivalent to the -user command in previous versions.

EXAMPLES
Given the proxy is configured like:

    # permit workstations at LAN to access outside cvs servers
    cvs-gw: permit-hosts 10.0.0.* -separator $ -mode rw

, a sample pserver session via proxy may look like:

    paranoid ~$ cvs -d ':pserver:johndoe$cvs.illuminati.int@firewall:/project/openfwtk' login
    Logging in to :pserver:johndoe$cvs.illuminati.int@firewall:/project/openfwtk
    CVS password:
    paranoid ~$

FILES

/etc/rc.local
    Command script that controls automatic reboot, and includes startup information for the CVS proxy.

/usr/local/etc/netperm-table
    The network permissions file contains configuration information for the Firewall Toolkit, including the CVS proxy.

BUGS
The proxy supports version 1.11.1p1 of the protocol specification and doesn't work with 'kserver' and 'server' connection method. At this time it supports only 'pserver'. No compression methods ( '-z' option ) are supported.

Please note that the pserver authentication protocol trivially encodes the passwords. This is only to prevent inadvertent compromise; it provides no protection against even a relatively unsophisticated attacker.

Report bugs to arkenoi@gmail.com or fwtk-users@buoy.com mailing list. Include a complete example, explaining what you expected to happen and what actually happened. Be sure to indicate the type of system (operating system, hardware, etc.) you are using, as well as the version of the CVS proxy.

AUTHOR
Alexander Kosheverov.

SEE ALSO
netperm-table(5), rc(8), authsrv(8), netacl(8)