9.3. Proxy Server Terminology
This section describes a number of specific types of proxy servers.
9.3.1. Application-Level Versus Circuit-Level Proxies
An
application-level
proxy is one that knows about the particular application
it is providing proxy services for; it understands and interprets the
commands in the application protocol. A
circuit-level
proxy is one that creates a circuit between the client and
the server without interpreting the application protocol. The most
extreme version of an application-level proxy is an application like
Sendmail, which implements a store-and-forward protocol. The most
extreme version of a circuit-level proxy is an application
like
plug-gw, which accepts all data that it
receives and forwards it to another destination.
The advantage of a circuit-level proxy is that it provides service
for a wide variety of different protocols. Most circuit-level proxy
servers are also generic proxy servers; they can
be adapted to serve almost any protocol. Not every protocol can
easily be handled by a circuit-level proxy, however. Protocols like
FTP, which communicate port data from the client to the server,
require some protocol-level intervention, and thus some
application-level knowledge. The disadvantage of a circuit-level
proxy server is that it provides very little control over what
happens through the proxy. Like a packet filter, it controls
connections on the basis of their source and destination and
can't easily determine whether the commands going through it
are safe or even in the expected protocol. Circuit-level proxies are
easily fooled by servers set up at the port numbers assigned to other
services.
In general, circuit-level proxies are functionally equivalent to
packet filters. They do provide extra protection against problems
with packet headers (as opposed to the data within the packets). In
addition, some kinds of protections (protection against packet
fragmentation problems, for instance) are automatically provided by
even the most trivial circuit-level proxies but are available only
from high-end packet filters.
9.3.2. Generic Versus Dedicated Proxies
Although "application-level"
and "circuit-level" are frequently used terms in other
documents, we more often distinguish between "dedicated"
and "generic" proxy servers. A
dedicated proxy
server is one that serves a single protocol; a
generic proxy server is one that serves multiple
protocols. In practice, dedicated proxy servers are
application-level, and generic proxy servers are circuit-level.
Depending on how you argue about shades of meaning, it might be
possible to produce a generic application-level proxy server (one
that understands a wide range of protocols) or a dedicated
circuit-level proxy server (one that provides only one service but
doesn't understand the protocol for it). Neither of these ever
occur, however, so we use "dedicated" and
"generic" merely because we find them somewhat more
intuitive terms than "application-level" and
"circuit-level".
9.3.3. Intelligent Proxy Servers
A proxy server can do a great deal
more than simply relay requests; one that does is an
intelligent proxy server. For example, almost
all HTTP proxy servers cache data, so that multiple requests for the
same data don't go out across the Internet. Proxy servers
(particularly application-level servers) can provide better logging
and access controls than those achieved through other methods,
although few existing proxy servers take full advantage of the
opportunities. As proxy servers mature, their abilities are
increasing rapidly. Now that there are multiple proxy suites that
provide basic functionality, they're beginning to compete by
adding features. It's easier for a dedicated, application-level
proxy server to be intelligent; a circuit-level proxy has limited
abilities.
| | |
9.2. How Proxying Works | | 9.4. Proxying Without a Proxy Server |