Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
FTP.PROXY(1)		     General Commands Manual		    FTP.PROXY(1)

NAME
     ftp.proxy - FTP proxy server

SYNOPSIS
     ftp.proxy [options] [server]

DESCRIPTION
     ftp.proxy	is  a proxy server for a subset of the file tranfer protocol de-
     scribed in RFC 959.  It forwards traffic between  a  client  and  a  server
     without  looking too much if both hosts do real FTP.  The FTP server can be
     either given on the command line or supplied by the client.

     ftp.proxy can be started from a  TCP  superserver	like  inetd(1)	or  tcp-
     proxy(1).	but can also bind to a TCP/IP port on it's own and run in stand-
     alone (or daemon) mode.

   Protocol Support
     ftp.proxy supports the following FTP commands:

	    ABOR, ACCT, APPE, CDUP, CWD, DELE, FEAT, LIST,
	    MDTM, MKD, MODE, NLIST, NOOP, PASS, PASV, PORT,
	    PWD, QUIT, RETR, REST, RNFR, RNTO, RMD, SITE,
	    SIZE, SMNT, STAT, STOR, SYST, TYPE, USER, XCUP,
	    XCWD, XMKD, XPWD, XRMD

     Transfer of structured data is not supported.

   Command Parameters
     By default ftp.proxy does not accept blanks in command parameters.  This is
     to protect your UNIX server against users who work on computers where these
     things are usual.

     To  allow	blanks	the option -b must be given on the command line.  Notice
     that blanks at the beginning or end of the parameter  are	still  not  sup-
     ported.

     The  `SITE'  is  in neither case affected by this limitation, ftp.proxy ac-
     cepts always blanks in `SITE' parameters.

     The option -y enables ftp.proxy to accept data connections  from  different
     remote  interfaces.   Try	to avoid using this option, because it can cause
     security problems (see HISTORY for details).

   Server Selection
     If client-side server selection it turned on with the -e  option  the  user
     must  select the FTP server he wants to use with the `@' notation.  Instead
     of specifying the real ftp server on the command line the user has to  con-
     nect  to  the  gateway  machine where ftp.proxy is running and to enter the
     username in the form
     The password that is send to the proxy server is the password required
     for logging into remote-ftp-server with the account remote-user.

     In situations where the FTP client doesn't support usernames containing
     an `@' the percent sign `%' might be used for that.

   Access Control
     If an access control program is given with the -a	option	on  the  command
     line  the	connection  data  is passed to the acp before the server is con-
     tacted.  The acp should return 0 as exit code to grant access  and  another
     value to deny.

     The access controller receives the following variables:

     PROXY_INTERFACE, PROXY_PORT
	    interface and port where the client is connected to the proxy.

     PROXY_CLIENT, PROXY_CLIENTNAME
	    IP number an name of the connected client.

     PROXY_SERVER, PROXY_SERVERPORT, PROXY_SERVERNAME
	    IP	number, port and name of the FTP server the client wants to con-
	    tact.

     PROXY_SERVERLOGIN
	    the supplied username for the FTP server.

     PROXY_USERNAME, PROXY_PASSWD
	    supplied username and password for usage of the proxy server.

     The values for PROXY_USERNAME and PROXY_PASSWD are taken from the	supplied
     remote username and password if they contain a colon `:'.	In this case the
     local  authentication data is taken from the left side of the colon and the
     remaining right side is passed on to the server.

     Furthermore the acp's stdout is connected to the FTP client and it's stderr
     is read by ftp.proxy which writes the acp's stderr output to syslog.

     Notice also that a non-zero acp exit  code  signals  ftp.proxy  that  some-
     thing's wrong and that ftp.proxy should terminate.

   Connection Translation
     Beginning with version 1.1.6 ftp.proxy supports connection translation pro-
     grams  (ctp's).   A ctp can completly overwrite the user's server selection
     and login.  If configured the ctp is called before the  acp.   It	receives
     the  same	environment  variables like the acp and returns server and login
     information that should ftp.proxy for the server connection on it's stdout.
     The format of the ctp output lines is
     where variable is one of

	    SERVERNAME, SERVERLOGIN, SERVERPASSWD, SERVERPORT

     and value the corresponding value.  Alternativly to  these  four  variables
     you can use the shorter forms

	    SERVER, LOGIN, PASSWD, PORT

     as variable names.  Furthermore the case of the variable names doesn't mat-
     ter and any whitespace around value is ignored.

     The  ctp  can deny the proxy request by exiting with an non-zero exit code,
     In which case ftp.proxy drops the connection immediately.	Alternativly the
     ctp can also print a line starting with -ERR, which is  written  to  syslog
     before the connection is closed.

   Command Control
     If a command control program (ccp) is given with the -c option this program
     is called for the FTP commands

	    APPE, CDUP, CWD, DELE, LIST, MDTM, MKD,
	    NLST, RETR, RNFR, RNTO, RMD, SIZE, STAT,
	    STOR, STOU, XCUP, XCWD, XMKD, XRMD

     The  ccp  returns	an  exit code of 0 to grant and any other to deny access
     (the exit code to the `QUIT' command is ignored).	For  the  ccp  the  same
     variables as for acp's are set with the addition of

     PROXY_COMMAND, PROXY_PARAMETER
	    FTP command and parameter (if set).

     PROXY_SESSION
	    a unique identifier for the proxy session.

     PROXY_CCPCOLL,
	    the  client's  number  of collisions with the ccp's permission rules
	    (number of `permission denied' responses).

     The ccp's stdout and stderr are connected to ftp.proxy.  A one line message
     written to stdout by the ccp goes to syslog, while a message one stderr  is
     sent  to  the  client.  If this message does not contain a status ftp.proxy
     substitutes a `553' code.	If the message is empty the client gets a  simle
     `553  permission  denied'.   Notice that the stderr message is only used if
     the ccp returns an exit code other the zero.

     On normal program termination (`QUIT' command or timeout) the ccp is called
     with the command `+EXIT' to do some final clean up.   It  is  not	reliable
     that  the	ccp  receives the `+EXIT' event.  There are lots of possiblities
     that the proxy terminates	without  generating  it,  e.g.	client	timeout,
     server error or signal reciption by the proxy.

   Monitor Mode
     The  -m  option  puts ftp.proxy into the monitor mode.  ftp.proxy will then
     try to keep track of the client's current directory  on  the  server  side.
     With this information the file parameter for the commands

	    APPE, CDUP, CWD, DELE, LIST, MDTM, MKD
	    NLST, RETR, RNFR, RNTO, RMD, SIZE, STOR,
	    XCUP, XCWD, XMKD, XRMD

     is converted into an absolute path.  This value is then used in syslog mes-
     sages  and  given	to a ccp in the PROXY_FTPPATH variable.  Furthermore the
     variable PROXY_FTPHOME contains the user's initial directory which  is  as-
     sumed to be his home directory.

     The  `LIST'  and `NLIST' command may have a parameter or not.  If it is ab-
     sent ftp.proxy sets  the  parameter  to  `*'  but	this  affects  only  the
     PROXY_FTPPATH variable, not the command that is sent to the server.

     For  the  `CDUP' command PROXY_FTPPATH contains the full path of the target
     directory.

     Monitoring may not work with all server systems since  the  output  of  the
     `PWD'  command  which  is used by ftp.proxy to get the current directory in
     not completely defined.  If the directory can  not  be  clearly  determined
     ftp.proxy will terminate.

CONFIGURATION FILE
     ftp.proxy	can take most of its command line options also from a configura-
     tion file which can be set with the -f option.

     The following options can be set:

     acp /path/to/acp
	    sets the path to the access control program (-a option).

     allow-anyremote yes|no
	    if enabled ftp.proxy does not check the remote's end in data connec-
	    tion, required for some bad multi-homed servers and FXP (-y option).

     allow-blanks yes|no
	    allows blanks in FTP command parameters (-b option).

     allow-passwdblanks yes|no
	    allows blanks in the FTP login password (-B option).

     bind portnum
	    sets the port number to which ftp.proxy should  bind  to,  activates
	    daemon mode (-D option).

     ccp /path/to/ccp
	    sets the path to the command control command (-c option).

     ctp /path/to/ctp
	    sets the path to the connection translation program (-x option).

     debug yes|no
	    turns debugging mode on or off (-d option).

     monitormode yes|no
	    enables monitor mode (-m option).

     proxy-routing yes|no
	    if	enabled ftp.proxy uses the last `@' in the username to determine
	    to which server it should connect.	 This  make  proxy  hopping  (or
	    routing) possible (-u option).

     selectserver yes|no
	    enables client side server selection, disables the server option (-e
	    option).

     server ftpserver
	    sets the connection's FTP server, disables selectserver.

     serverlist list-of-allowed-server
	    specifies  a  command separated list of servers to which the clients
	    are allowed to connect (-s option).

     sourceip ip-number
	    defines the IP address for the outgoing control  connection  to  the
	    remote  server,  which also determines the local IP address for data
	    transmissions.

     timeout timeout
	    set the timeout in seconds.

     xferlog filename
	    sets the location of the xferlog file and enables xferlog logging.

     Notice that the file can contain comments	and  blank  lines  (usual  UN*X-
     style)  but  ftp.proxy  terminates immediately with an error code if an un-
     known or invalid configuration option is found.

   Interface specific configurations
     ftp.proxy's configuration file supports  interface  specific  configuration
     sections.	Such section begin with a line that starts with

     [interface-ip]

     followed  by the configuration options for connections on this specific in-
     terface.  ftp.proxy checks for such sections immidiately after  the  client
     connection  is  accepted.	If it finds at least one interface specific sec-
     tion in the configuration file but none for the current interface	it  con-
     siders  itself to be not configured for it and drops the connection sending
     a `421 not available' message to the client.

     ftp.proxy accepts all global configuration options  from  above  (allthough
     not  all  make  sense,  e.g. bind) in interface specific section.	That is,
     ftp.proxy can have completely different configurations on different  inter-
     faces.  But to deactivate a non-boolean option, e.g. ctp you can not simply
     give  the option without a value, this would be considered as `bad configu-
     ration option'.  Instead you must supply a single dash `-' to clear an  op-
     tion.

   Configuration checking
     ftp.proxy prints an error message and terminates immediately if it finds an
     unknown  or bad configuration option.  More worse, these error messages are
     printed to ftp.proxy's stderr and not to syslog which makes it a little bit
     difficult to observe.  ftp.proxy addresses this issue by supporting the  -F
     option.

     The -F option sets the configuration file and the `check-and-print' option,
     that  is  ftp.proxy  will only read, check and print it's configuration op-
     tions as they are set after reading the configuration.   An  interface  IP-
     number  may  be  given as optional command line parameter to make ftp.proxy
     print the configuration for this particular interface.

OPTIONS
     The following options are available:

     -a acp
	    specify an access control program that grants or denies  access  via
	    ftp.proxy.

     -b     allows blanks in filenames.

     -B     allows blanks and other special charackters in passwords.

     -c ccp
	    sets  a  command  control program that grants or denies the usage of
	    FTP commands through ftp.proxy.

     -d     enter debug mode, the communication between  server  and  client  is
	    written to stderr.

     -f configfile
	    sets ftp.proxy's configuration file.

     -F configfile [interface]
	    read  and  print  the proxy configuration for interface from config-
	    file.  If interface is missing the global configuration is	printed.
	    This  is  a  check-only  option,  after  the  configuration has been
	    printed ftp.proxy terminates, no connection handling is done.

     -e     enable client-side server selection.  With this  option  the  server
	    argument isn't accepted.

     -l     sets logging of most of the FTP commands.

     -m     sets the monitor mode.

     -p port
	    tell  ftp.proxy to use port as source port for data transfers (using
	    port number 20 is FTP standard).  Keep in mind that port numbers be-
	    low 1024 require root permissions.

     -P filename
	    tell ftp.proxy to write the PID of the master process into the file-
	    name specified.

     -q sourceip
	    sets the IP number for the outgoing control connection.

     -s list
	    the FTP server selected by the client must match one of the  pattern
	    from  the  comma  separated  list.	The wildcards `*' and `?' can be
	    used.

     -t timeout
	    specify a different FTP timeout in seconds than the default  of  900
	    (15 minutes).

     -u     search  for  the last appearance of an '@' in the username. This al-
	    lows the use of usernames with a '@' in it. Be careful with this op-
	    tion, this can be abused to do 'proxy hopping'!

     -v prefix
	    set prefix as variable prefix for the variable passwd to the  access
	    and command control program.

     -x ctp
	    set a connection translation program to overwrite the server and lo-
	    gin information supplied by the user.

     -X file
	    write xferlog loggin to file.

     -V     show version number

     -y     allow any data ports on any remote interfaces (dangerous!).

     -z size
	    sets  the  amount  of data in bytes ftp.proxy tries to read with one
	    system call from either the client or the server.	The  default  is
	    1024  bytes, valid values range from 1 to 4096.  Playing around with
	    larger values than the default may increase the proxy's data trough-
	    put.

SYSLOG
     ftp.proxy reports to FTP log facility on linux and BSD systems  and  Daemon
     log facility on other.

AUTHOR
     Andreas Schoenberg <asg@ftpproxy.org>

SEE ALSO
     inetd(1), tcpproxy(1), syslogd(8), syslog.conf(5).

				 23 JANUARY 2003		    FTP.PROXY(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ftp.proxy&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help