TCPPROXY

Section: User Commands (1)
Updated: 20 March 2000
Index Return to Main Contents
 

NAME

tcpproxy - generic TCP proxy server  

SYNOPSIS

tcpproxy [options] [server]  

DESCRIPTION

tcpproxy is a generic TCP proxy server. It connects a client and a server and forwards any data from the client to the server and vice versa. tcpproxy doesn't care about the data being transported.

If server begins with a `/' or `.' it's taken as a pathname to a program that acts as a request handler for incoming connections. Otherwise server is interpreted as host[:port] and the client request is forwarded to the given host and port. If in this case port is omitted tcpproxy uses it's own server port as destination port on host.

If tcpproxy has to start a local program it set the environment variables PROXY_PORT, PROXY_INTERFACE, PROXY_CLIENT and PROXY_CLIENTNAME with the data of the current connection. The `PROXY_' prefix might be changed with the command line option -v or the setenv configuration directive.

tcpproxy can be either started from inetd(1) or act as a standalone server listening an several ports. If the server argument is missing tcpproxy reads it's configuration file /etc/tcpproxy.conf and either forwards the current connection or binds to the specified ports waiting for client requests.  

CONFIGURATION FILE

The following directives define the global configuration.
standalone [yes|no]
if set to `yes' the server binds to the defined ports waiting for requests. This is the default if a configuration file is used.

The uid and gid settings are only used if the user starting tcpproxy is root, otherwise they are ignored. If however the calling user is root and no settngs are found tcpproxy uses it's internal default of -1 and -2 for the user and group id. tcpproxy won't run as root.

The following directives control the available services and how they are served.

port port-number
defines a new port where tcpproxy should accept client requests.
interface ip-number
defines an interface on which connections on the service port from the last port directive are handled.
server server[:port]
defines the server and port where tcpproxy will forward an incoming connection to. If port is ommited the listening tcpproxy port is used.
uid numeric-uid
defines the numeric user id to which tcpproxy changes after accepting a requests.
gid numeric-gid
same as uid but for the group id.
exec command
defines a local command which is executed to handle a request.
acp program
sets the access control program that is used to grant or deny incoming connections.
logname name
sets a different syslog name.
setenv varprefix
defines the variable prefix.
timeout timeout
defines a different timeout in seconds than the default of 60.
writefile filename
defines the basename for files where the server/client communication is written.

For a service configuration either server or exec must be specified. The timeout value is only used in conjunction with a server configuration and varprefix only if requests are handled by a local program. timeout, setenv amd acp define configuration defaults if they appear before the first port directive.  

USER IDS

In version 1.1.5 the way user and group id's are handled changed. From version 1.1.5 these ids are changed after accepting a request and not after binding to all ports before accepting anything. This is however only done if tcpproxy's user id is 0, otherwise tcpproxy keeps it's current ids. The ids which are used for a service request are written to syslog. The default values for uid/gid are 65535/65534 which is equal to -1/-2.  

ACCESS CONTROL

If for a port configuration an access control program is set this program is executed before forwarding the request. The acp can then decide if it grants (exit status 0) or denies (exit status not 0) the access. The acp can additionaly print a diagnostic message to the requesting client through it's standard output and to the tcpproxy through it's standard error.

The PROXY_ variables are set for the current connection when the acp is called.  

OPTIONS

The following options are available:
-a program
sets program as access control program.
-b [interface:]port
tells tcpproxy that it should bind to port on the given interface. If interface is omitted tcpproxy will bind to all available interfaces. -b implies -s.
-f config
sets a different configuration file than /etc/tcpproxy.conf.
-l logname
sets the name under which tcpproxy writes to syslog.
-p
creates the pidfile /var/run/tcpproxy.pid. This default name can be changed by giving the -p option twice followed by the name of the pidfile.
-s
sets standalone (bind to ports and listen) mode.
-t timeout
defines a different timeout in seconds than the default of 60 seconds for each connection.
-v varprefix
specifies a different variable prefix than `PROXY_' for the request handler variables.
-w writefile
specifies that the client/server communication is written to the file writefile.pid.log.
-y
clears the whole environment before starting the request handler.
-z
lists the configured server ports and exits. This is useful if you want to shutdown the tcpproxy services with either fuser(1) or netuser(1). Giving -z twice lists the basic configuration data.

In case that the -b option is found on the command line the server argument is expected.  

EXAMPLES

The following examples assume that tcpproxy is installed on a machine with two network interface cards. One is the external interface with the IP number 192.44.100.7 and the other is the internal one with IP numbers 192.168.1.1 and 192.168.1.2 (virtual interfaces).


 #
 # /etc/tcpproxy.conf - sample configuration
 #
 
 #
 # Define SMTP proxys ...
 #
 port 25


   # ... for outgoing ...
   #
   interface 192.168.1.1
     server mailrelay.provider.com


   # ... and incoming email.
   #
   interface 192.44.100.7
     server mail.domain.com


 #
 # There are also NNTP-Servers on the outside
 #
 port 119


    interface 192.168.1.1
      server nntp.provider.com
     
    interface 192.168.2.1
      server nntp.other-provider.com


 #
 # Users from the outside can access our internal
 # POP3 server ...
 #
 port 110


   interface 192.44.100.7


   # ... but only trough a real application gateway.
   #
   exec /usr/local/sbin/pop3.proxy mail.domain.com

With this configuration file tcpproxy might be started with

tcpproxy -s

to make tcpproxy bind itself to all the listed interfaces. Another way of serving requests is to configure the ports in /etc/inetd.conf and start tcpproxy without the -s option from there. The proxy will then inspect it's configuration file to see how the connection made by inetd should be handled.

tcpproxy -b 192.44.100.7:79 /bin/date opens a date server on the external interface. This service won't be available on the interfaces numbered 192.168.1.1 and .2 but the service is still accessable from the internal network:


 user@192.168.1.10/~ > telnet 192.44.100.7 79
 <current date goes here>

If in inetd mode you want to provide a service only on one network card you'll have to implement further access control with packet filters.  

NOTES

tcpproxy doesn't forward the FTP protocol; use ftp.proxy for this. It doesn't work with UDP protocols too, TCP uses connection and UDP not - this is an imortant difference. And furthermore tcpproxy doesn't protect you against network attacks like buffer overflows against the addressed server. You'll have to use application gateway level proxys for that.  

SEE ALSO

inetd(1).


 

Index

NAME
SYNOPSIS
DESCRIPTION
CONFIGURATION FILE
USER IDS
ACCESS CONTROL
OPTIONS
EXAMPLES
NOTES
SEE ALSO

This document was created by man2html, using the manual pages.
Time: 01:51:11 GMT, July 11, 2022