ftp.proxy man page on DragonFly

Man page or keyword search:  
man Server   44335 pages
apropos Keyword Search (all sections)
Output format
DragonFly logo
[printable version]

FTP.PROXY(1)							  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
       described 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
       standalone (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 supported.

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

       The option -y enables ftp.proxy to accept data connections from differ‐
       ent  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 connect 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
       contacted.  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
	      contact.

       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
       something's wrong and that ftp.proxy should terminate.

   Connection Translation
       Beginning with version 1.1.6 ftp.proxy supports connection  translation
       programs	 (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 matter 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
       messages and given to a ccp in the PROXY_FTPPATH variable.  Furthermore
       the variable PROXY_FTPHOME contains the user's initial directory	 which
       is assumed to be his home directory.

       The  `LIST'  and `NLIST' command may have a parameter or not.  If it is
       absent 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
       configuration 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
	      connection,  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
       unknown 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
       interface.   ftp.proxy  checks  for such sections immidiately after the
       client connection is accepted.  If it  finds  at	 least	one  interface
       specific	 section  in  the  configuration file but none for the current
       interface it considers 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  interfaces.	  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 configuration option'.  Instead
       you must supply a single dash `-' to clear an option.

   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  options 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
	      configfile.  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 below 1024 require root permissions.

       -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
	      allows the use of usernames with a '@' in it.  Be	 careful  with
	      this option, 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
	      login 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 troughput.

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)
[top]

List of man pages available for DragonFly

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net