DeleGate Usage Examples
©2006, Yutaka Sato, AIST, Japan
[ Last-Modified: 2008-September-2 ]
DeleGate is a multi-purpose proxy
server for multiple application protocols running on multiple platforms.
The aim of this document is to provide an introduction to how to use DeleGate
by a collection of usage examples with a short tutorial for beginners.
Details of configuration parameters should be referred to the
Reference Manual.
This document is written based on the specification of the latest version
of DeleGate version 9.
Index
- A Short Tutorial
- DeleGate as an Application Level Proxy
- DeleGate as a Circuit Level Proxy
(SOCKS, TCP, UDP)
- DeleGate as a Gateway Between TLS/non-TLS clients/servers
- DeleGate as a Gateway Between IPv6 and IPv4
- DeleGate as an Application Level Router
- DeleGate as an Application Level VPN Router
- DeleGate as an Origin Server
(HTTP, FTP, DNS, NNTP)
- DeleGate as an Server-Integration Gateway
- DeleGate as a Protocol Translation Gateway
- DeleGate as a Caching Proxy
- DeleGate as a Filtering Proxy
- DeleGate as an Authenication Proxy
- Access Control
- Installation
- Privileged operations without being super-user
A Short Tutorial
|
% -- implies a command prompt for a non-privileged user
(subin)
delegated
-- the name of an executable file of DeleGate
(download)
-Pport
-- the port on which DeleGate accepts requests from clients (install)
SERVER=proto
-- the protocol in which DeleGate communicate with clients
-v
-- the option to run DeleGate in foreground putting the log to console
ADMIN=you@your.domain
-- the E-mail address of the administrator of the DeleGate
+=filename
-- loading command line arguments from a file
|
|
DeleGate as an Application Level Proxy
- how to use DeleGate as a HTTP proxy (possibly as a "transparent proxy")
(*1)
% delegated -P8080 SERVER=http
- how to use DeleGate as a HTTP gateway (or "reverse proxy")
% delegated -P80 SERVER=http://server/
- how to use DeleGate as a HTTP caching proxy
% delegated -P8080 SERVER=http CACHE=do
- how to use DeleGate as a FTP proxy (for FTP client)
(*2)
% delegated -P8021 SERVER=ftp
- how to use DeleGate as a POP3 proxy
% delegated -P8110 SERVER=pop
- how to use DeleGate as a IMAP proxy
% delegated -P8143 SERVER=imap
- how to use DeleGate as a LDAP proxy
% delegated -P389 SERVER=ldap
- how to use DeleGate as a Telnet proxy
% delegated -P8023 SERVER=telnet
- how to use DeleGate as a SMTP server
% delegated -P25 SERVER=smtp
- how to use DeleGate as a DNS (proxy) server
% delegated -P53 SERVER=dns
(*1)
So called "transparent proxy" can be realized by two phases; (a) detecting
and forwarding a TCP/IP packet in HTTP protocol to a HTTP proxy server and
(b) a HTTP proxy server which forwards a message to the server indicated
by the "Host:" field in its.
DeleGate as a HTTP proxy allows (b) by default for the client hosts in
its local-network. This behavior can be controlled by
RELAY=vhost parameter.
(*2)
Proxies for application protocols except HTTP do not have an inherent
sub-protocol to realize a proxy server which supports to connect to
an arbitrary server specified by a client.
Therefore to access arbitray server in FTP, POP and IMAP is realized by
accepting user@host:port instread of
username as a login name.
DeleGate as a Circuit Level Proxy
- how to use DeleGate as a SOCKS proxy
% delegated -P1080 SERVER=socks
- how to use DeleGate to relay UDP packets
% delegated -Pport SERVER=udprelay://svhost:svport
- how to use DeleGate to relay UDP packets via a SOCKS proxy
% delegated -Pport SERVER=udprelay://svhost:svport SOCKS=socksHost:socksPort
- how to use DeleGate to relay TCP connections
% delegated -Pport SERVER=tcprelay://svhost:svport
- how to use DeleGate as a tunnel for TCP connections via a SOCKS proxy
% delegated -Pport SERVER=tcprelay://svhost:svport SOCKS=socksHost:socksPort
- how to use DeleGate as a tunnel for TCP connections via a HTTP proxy (SSL-tunnel)
% delegated -Pport SERVER=tcprelay://svhost:svport SSLTUNNEL=proxyHost:proxyPort
DeleGate as a Gateway Between TLS clients (servers) and non-TLS servers (clients)
- how to use DeleGate as a SSL or TLS wrapper
for an arbitrary protocol on TCP
% delegated -Pport SERVER=tcprelay://svhost:svport STLS=fcl
- how to use DeleGate as a gateway for HTTPS clients to a HTTP server
(*1)
% delegated -P443 SERVER=https MOUNT="/* http://server/*" STLS=fcl
- how to use DeleGate as a gateway for HTTP clients to a HTTPS server
% delegated -P80 SERVER=http MOUNT="/* https://server/*" STLS=fsv:https
- how to use DeleGate as a POP over HTTPS gateway
% delegated -P443 SERVER=https MOUNT="/mail/* pop://server/*" STLS=fcl
- how to use DeleGate as a gateway for FTP clients to a FTPS server
(*2)
% delegated -P21 SERVER=ftp MOUNT="/* ftps://server/*" STLS=fsv
- how to use DeleGate as a gateway for FTPS clients to a FTP server
% delegated -P990 SERVER=ftps MOUNT="/* ftp://server/*" STLS=fsv
(*1)
You need to use SERVER=https instead of SERVER=tcprelay
to relay between HTTP and HTTPS. This is necessary to map URLs,
transferred in HTTP messages,
appropriately following to the mapping of protocol and host-name
from "http://server/" to "https://dghost/".
It is also necessary to enable caching
of response messages.
(*2)
You need to use SERVER=ftp instead of SERVER=tcprelay
because the FTP protocol uses data-connections to be created dynamically
of which usage is negotiated in the protocol, which needs to be interpreted
by DeleGate of SERVER=ftp.
DeleGate as a Gateway Between IPv6 and IPv4
- how to use DeleGate as a SOCKS proxy from IPv4 clients to IPv6 servers
% delegated -P1080 SERVER=socks
- how to use DeleGate as a HTTP proxy from IPv4 clients to IPv6 servers
% delegated -P8080 SERVER=http
- how to use DeleGate to accept connections on IPv6 port
% delegated -P__:80 SERVER=http
- how to use DeleGate as a gateway from IPv6 clients to a IPv4 server
% delegated -P__:80 SERVER=http://192.168.1.1/
- how to use DeleGate as a gateway from IPv4 clients to a IPv6 server
% delegated -P192.168.1.1:80 SERVER=http://fe80__12_34%en0/
DeleGate as an Application Level Router
- how to use DeleGate as a proxy to switch upstream proxy by destination site
- how to use DeleGate as a proxy to switch upstream proxy based on URL path
% delegated -P8080 SERVER=http
MOUNT="http://host/path1/* = PROXY=proxy:8080"
- how to use DeleGate as a proxy to switch upstream proxies based on protocol
% delegated -P8080 SERVER=http
PROXY="proxy:8080"
SOCKS="socks:1080"
CONNECT="proxy:http,socks:ftp,direct"
- how to use DeleGate as a proxy to switch upstream proxies by destination
% delegated -P8080 SERVER=http
PROXY="proxy:8080"
SOCKS="socks:1080"
CONNECT="proxy:*:*.dom1,socks:*:*.dom2,direct"
- how to use DeleGate as a proxy to switch upstream DNS server based on query
% delegated -P53 SERVER=dns
RESOLV="dns:192.168.1.123:*.localdomain,dns:192.168.1.1"
DeleGate as an Application Level VPN Router
- how to chain DeleGate to relay SOCKS over SSL
- how to chain DeleGate to relay SOCKS over SSL (two hops)
hostA% delegated -P1080 SERVER=socks SOCKS=hostB:2080 STLS=fsv
hostB% delegated -P2080 SERVER=socks SOCKS=hostC:2080 STLS=fcl,fsv
hostC% delegated -P2080 SERVER=socks STLS=fcl
DeleGate as an Origin Server
- how to use DeleGate as an origin HTTP server
% delegated -P80 SERVER=http MOUNT="/* file:/path/of/www/*"
- how to use DeleGate as an origin FTP server
% delegated -P21 SERVER=ftp MOUNT="/* file:/path/of/ftp/*"
- how to use DeleGate as an origin DNS server
% delegated -P53 SERVER=dns RESOLV=file:/etc/hosts
- how to use DeleGate as an origin NNTP server
% delegated -P119 SERVER=nntp://-.-
DeleGate as an Server-Integration Gateway
- how to use DeleGate as a HTTP gateway (or "reverse proxy")(*1)
- how to use DeleGate as a HTTP virtual hosting server (*1)
% delegated -P80 SERVER=http MOUNT="/* http://sv1/* vhost=-www1" MOUNT="/* http://sv2/* vhost=-www2"
- how to use DeleGate as a FTP gateway (for FTP client)
% delegated -P21 SERVER=ftp MOUNT="/sv1/* ftp://sv1/*" MOUNT="/sv2/* ftp://sv2/*"
- how to use DeleGate as a NNTP proxy to merge multiple servers
% delegated -P119 SERVER=nntp MOUNT="* nntp://sv1/*" MOUNT="* nntp://sv2/*"
(*1) The features of DeleGate for "reverse proxy", "virtual hosting" and
"transparent proxy" are totally revised in DeleGate/9.8.2 as described in
http://www.delegate.org/delegate/nvproxy/
DeleGate as a Protocol Translation Gateway
- how to use DeleGate as a gateway for HTTP clients to other protocols
- how to use DeleGate as a gateway for FTP client to sftp/SSH server
% delegated -P21 SERVER=ftp MOUNT="/* sftp://server/*"
- how to use DeleGate as a gateway for FTP or FTPS client to sftp/SSH server
% delegated -P21 SERVER=ftp MOUNT="/* sftp://server/*" STLS=-fcl
- how to use DeleGate as a gateway for DNS client to NIS server
% delegated -P53 SERVER=dns RESOLV=nis
- how to use DeleGate as a PASV/EPSV/PORT/EPRT translation gateway
% delegated -P8021 SERVER=ftp
- how to use DeleGate as a PASS / APOP translation gateway
% delegated -P8110 SERVER=pop
- how to use DeleGate as a gateway for TCP clients to a UDP server
% delegated -Pport SERVER=tcprelay://svhost:svport CONNECT=udp
- how to use DeleGate as a gateway for UDP clients to a TCP server
% delegated -Pport SERVER=udprelay://svhost:svport CONNECT=tcp
DeleGate as a Caching Proxy
DeleGate as a Filtering Proxy
- How to use DeleGate for filtering response data to the client
- How to use DeleGate for filtering request data to the server
% delegated -Pport SERVER=protocol FTOSV=filterCommand
- How to use DeleGate for filtering HTTP request header fields
- How to use DeleGate for filtering HTTP response header fields
% delegated -P8080 SERVER=http HTTPCONF=kill-rhead:Server,Set-Cookie
- How to use DeleGate for filtering HTML tags in a HTTP response
% delegated -P8080 SERVER=http HTTPCONF=kill-tag:SCRIPT,APPLET
DeleGate as an Authenication Proxy
- How to use DeleGate as a HTTP proxy which asks authentication
- How to use DeleGate as a HTTP proxy which asks authentication for POST
% delegated -P8080 SERVER=http MOUNT="http://server/* = AUTHORIZER=-pam://POST"
- How to use DeleGate as a SMTP proxy which asks authentication
% delegated -P25 SERVER=smtp://server AUTHORIZER=-pam
- How to use DeleGate as a SMTP proxy which sends authentication by proxy
% delegated -P25 SERVER=smtp://server MYAUTH=username:password
Access Control
When using DeleGate as a proxy on a multi-homed host, with different network
interface for an external (xx.xx.xx.xx) and an internal
(ii.ii.ii.ii) network respectively,
the simplest configuration to allow access only from the inside is
specifying the interface of port to accept clients as this:
By default, DeleGate allows access from a client-host only if the host is on
"local network".
What the "local network" is is pre-defined as the special host-list
named ".localnet".
It can be redefined with a HOSTLIST parameter as this for example:
HOSTLIST=.localnet:127.0.0.1,192.168.1.0/24
When it is difficult or insufficient to control access based on the IP
address or host-name of clients, you can use password based authentications,
or certificate based authentication when using SSL.
For example, PAM based password authentication can be done as this:
To enable the certificate based authentication, specify "-Vrfy" option
of the SSLway filter.
STLS="fcl,sslway -Vrfy -CAfile file"
When using DeleGate as a "reverse proxy", it should be configured
not to be utilized to access arbitrary ports and/or hosts not amied by the
administrator. The REACHABLE parameter can be used combined
with any application protocols to restrict reachable host (and port).
A HTTP proxy server is designed to allow very wide range of protocols
over it. So it should be configured not to be utilized in the way
which you don't aimed.
Therefore, by default, DeleGate restricts the protocols to be carried
over it when it acts as a HTTP proxy.
It can be configured to allow only access strictly to HTTP and HTTPS
servers on each statndard port as this:
See the reference manual for more details
about access control.
Installation
The minimum installation of DeleGate is just getting the executable file
of DeleGate and putting it to somewhere on your host.
When you created it from the
source distribution,
you will get an executable file named delegated
(or delegated.exe on Windows)
under the src/ directory.
Or you can get it from
binary distributions
for several platforms (MacOSX, Linux, FreeBSD, Windows, Zaurus, and OS/2).
Each executable file for each platform is named as
macosx-dg, dg9_2_0.exe or so.
You can rename it to any name like delegated or dg.exe.
On the first invocation of DeleGate, it creates directories to hold
files for log, cache, administration data, and so on under a directory.
The root directory of DeleGate is called
DGROOT.
DGROOT can be specified as a command line option as
DGROOT=path.
Otherwise it is selected automatically depending on the platform and
user of DeleGate. See the start-up message from
DeleGate to see which directory is selected as DGROOT.
% delegated -P8080 SERVER=http
[12345] -P8080 READY
DGROOT=/home/dgowner/delegate
...
Optionally, you should install DGROOT/subin/
when you use DeleGate on Unix, in a usage requiring super-user's privilege.
To use SSL with DeleGate, using the latest version of shared libraries for SSL
might be desirable.
If the host's standard libraries is not installed, or not the latest,
install the library files under DGROOT/lib/.
The
binary distribution
of DeleGate contains the binary of shared libraries of OpenSSL
under directories named "sslway/".
See the note about TLS
for more details if necessary.
It is desirable to execute DeleGate in an isolated file space to be safer
from possible attacks. For example,
CHROOT="/" lets the
DGROOT as the root of file system on Unix.
You need to copy some library files and devices to the new root from
the original root. Files need to be copied and created depend on each
platform. An example for MacOSX and Linux is in
"subin/install.sh" in the source distribution.
Privileged operations without being super-user --
Installing subin
On Unix, DeleGate needs the privilege of super-user when it use privileged
port number as -P80,
PAM based authentication with
AUTHORIZER=-pam, or
changing the root directory with
CHROOT=path.
The straight forward way to do so is running DeleGate with the privilege
of the super-user
(with OWNER=root).
But running DeleGate under the super-user's privilege is not recommended
in the consideration of security.
You can escape the problem by installing files under
DGROOT/subin/.
For example, the command subin/dgbind is invoked from DeleGate
when a privileged port is required as -P80, or to bind
the source port of a FTP data-connection.
A file descriptor of an unbound socket is created by DeleGate and inherited
to dgbind with the argument indicating the port number to be bound.
On the invocation of dgbind, the effective user-ID of the process is set
to the one of the super-user (root) so that it can execute the bind()
system call for privileged ports.
Those executable files in subin is created automatically when you created
DeleGate from the source distribution.
They are available in the
binary distribution
for several platforms too.
To let the executable files in subin, dgbind for example,
be executed with the privilege of the super-user,
let the files be owned by root, and set
the "set-user-ID-on-execution" bit and the "set-group-ID-on-execution" bit.
% su
# chown root dgbind
# chmod 6550 dgbind
The group ownership of the executable files in subin must be
the same with the run-time group-ID of your DeleGate (delegated) process.
©2006, Yutaka Sato, AIST, Japan