Purpose : Used with other docs and files only.
- $Id: p-config.sgml,v 2.43 2009/03/28 15:33:41 fabiankeil Exp $
+ $Id: p-config.sgml,v 2.52 2009/06/03 18:30:18 fabiankeil Exp $
Copyright (C) 2001-2009 Privoxy Developers http://www.privoxy.org/
See LICENSE.
<para>
The main config file controls all aspects of <application>Privoxy</application>'s
operation that are not location dependent (i.e. they apply universally, no matter
- where you may be surfing).
+ where you may be surfing). Like the filter and action files, the config file is
+ a plain text file and can be modified with a text editor like emacs, vim or
+ notepad.exe.
</para>
]]>
Sample Configuration File for Privoxy v&p-version;
</title>
<para>
- $Id: p-config.sgml,v 2.43 2009/03/28 15:33:41 fabiankeil Exp $
+ $Id: p-config.sgml,v 2.52 2009/06/03 18:30:18 fabiankeil Exp $
</para>
<para>
Copyright (C) 2001-2009 Privoxy Developers http://www.privoxy.org/
will need to override the default.
</para>
<para>
- IPv6 address containing colons has to be quoted by brackets.
+ IPv6 addresses containing colons have to be quoted by brackets.
</para>
<para>
If you leave out the IP address, <application>Privoxy</application> will
- bind to all interfaces (addresses) on your machine and may become reachable
+ bind to all IPv4 interfaces (addresses) on your machine and may become reachable
from the Internet. In that case, consider using <link
linkend="acls">access control lists</link> (ACL's, see below), and/or
- a firewall.
+ a firewall. If the hostname is localhost, <application>Privoxy</application>
+ will explicitly try to bind to an IPv4 address. For other hostnames it depends
+ on the operating system which IP version will be used.
</para>
<para>
If you open <application>Privoxy</application> to untrusted users, you will
</programlisting>
</para>
<para>
- Suppose you are running <application>Privoxy</application> on IPv6 capable
- machine and you want to listen on IPv6 loopback device:
+ Suppose you are running <application>Privoxy</application> on an
+ IPv6-capable machine and you want it to listen on the IPv6 address
+ of the loopback device:
</para>
<para>
<programlisting>
<para>
Where <replaceable class="parameter">src_addr</replaceable> and
<replaceable class="parameter">dst_addr</replaceable> are IPv4 addresses in dotted decimal notation or valid
- DNS names, <replaceable class="parameter">port</replaceable> is port
+ DNS names, <replaceable class="parameter">port</replaceable> is a port
number, and <replaceable class="parameter">src_masklen</replaceable> and
<replaceable class="parameter">dst_masklen</replaceable> are subnet masks in CIDR notation, i.e. integer
values from 2 to 30 representing the length (in bits) of the network address. The masks and the whole
<ulink url="http://tools.ietf.org/html/rfc3493">RFC 3493</ulink>, then
<replaceable class="parameter">src_addr</replaceable> and <replaceable
class="parameter">dst_addr</replaceable> can be IPv6 addresses delimeted by
- brackets, <replaceable class="parameter">port</replaceable> can be number
- or service name, and
+ brackets, <replaceable class="parameter">port</replaceable> can be a number
+ or a service name, and
<replaceable class="parameter">src_masklen</replaceable> and
- <replaceable class="parameter">dst_masklen</replaceable> can be number
+ <replaceable class="parameter">dst_masklen</replaceable> can be a number
from 0 to 128.
</para>
</listitem>
<listitem>
<para><emphasis>Unset</emphasis></para>
<para>
- No <replaceable class="parameter">port</replaceable> means match any port
- and no <replaceable class="parameter">src_masklen</replaceable> or
- no <replaceable class="parameter">src_masklen</replaceable> means exactly
- given IP address (i.e. 32 for IPv4 and 128 for IPv6).
+ If no <replaceable class="parameter">port</replaceable> is specified,
+ any port will match. If no <replaceable class="parameter">src_masklen</replaceable> or
+ <replaceable class="parameter">src_masklen</replaceable> is given, the complete IP
+ address has to match (i.e. 32 bits for IPv4 and 128 bits for IPv6).
</para>
</listitem>
</varlistentry>
<para>
Some systems allows IPv4 client to connect to IPv6 server socket.
Then the client's IPv4 address will be translated by system into
- IPv6 address space with special prefix ::ffff/96 (so called IPv4
+ IPv6 address space with special prefix ::ffff:0:0/96 (so called IPv4
mapped IPv6 address). <application>Privoxy</application> can handle it
and maps such ACL addresses automatically.
</para>
</screen>
</para>
<para>
- Allow access from IPv4 network 192.0.2.0/24 even if listening on
- IPv6 wild card address (where supported by operating system):
+ Allow access from the IPv4 network 192.0.2.0/24 even if listening on
+ an IPv6 wild card address (not supported on all platforms):
</para>
<para>
<programlisting>
</programlisting>
</para>
<para>
- This is equivalent to the following line even if listening on IPv4
- address (where supported by operating system):
+ This is equivalent to the following line even if listening on an
+ IPv4 address (not supported on all platforms):
</para>
<para>
<programlisting>
forwarded to another HTTP proxy but are made directly to the web servers.
</para>
<para>
- <replaceable class="parameter">http_parent</replaceable> can be IPv6
- numerical address (if
+ <replaceable class="parameter">http_parent</replaceable> can be a
+ numerical IPv6 address (if
<ulink url="http://tools.ietf.org/html/rfc3493">RFC 3493</ulink> is
- implemented). However not to clash with port delimiter, quote
- whole IP address with brackets. On the other hand <replaceable
- class="parameter">target_pattern</replaceable> containing IPv6 address
- must be delimited by angle brackets (normal brackets are reserved for
- regular expression already).
+ implemented). To prevent clashes with the port delimiter, the whole IP
+ address has to be put into brackets. On the other hand a <replaceable
+ class="parameter">target_pattern</replaceable> containing an IPv6 address
+ has to be put into angle brackets (normal brackets are reserved for
+ regular expressions already).
</para>
<para>
Multiple lines are OK, they are checked in sequence, and the last match wins.
</screen>
</para>
<para>
- Parent proxy specified by IPv6 address:
+ Parent proxy specified by an IPv6 address:
</para>
<para>
<programlisting>
</para>
<para>
<programlisting>
- forward / parent-proxy.example.org:8000
+ forward / parent-proxy.example.org:8000
forward ipv6-server.example.org .
forward <[2-3][0-9a-f][0-9a-f][0-9a-f]:*> .
</programlisting>
</para>
<para>
<replaceable class="parameter">socks_proxy</replaceable> and
- <replaceable clss="parameter">http_parent</replaceable> can be IPv6
- numerical address (if
+ <replaceable class="parameter">http_parent</replaceable> can be a
+ numerical IPv6 address (if
<ulink url="http://tools.ietf.org/html/rfc3493">RFC 3493</ulink> is
- implemented). However not to clash with port
- delimiter, quote whole IP address with brackets. On the other
- hand <replaceable class="parameter">target_pattern</replaceable> containing
- IPv6 address must be delimited by angle brackets (normal brackets are
- reserved for regular expression already). The only exception is SOCKS 4
- version where only IPv4 is suppored.
+ implemented). To prevent clashes with the port delimiter, the whole IP
+ address has to be put into brackets. On the other hand a <replaceable
+ class="parameter">target_pattern</replaceable> containing an IPv6 address
+ has to be put into angle brackets (normal brackets are reserved for
+ regular expressions already).
</para>
<para>
If <replaceable class="parameter">http_parent</replaceable> is <quote>.</quote>, then requests are not
<![%config-file;[<literallayout>@@forwarded-connect-retries 0</literallayout>]]>
</sect3>
+</sect2>
+
+<sect2 id="misc">
+<title>Miscellaneous</title>
+
<sect3 renderas="sect4" id="accept-intercepted-requests"><title>accept-intercepted-requests</title>
<variablelist>
<varlistentry>
<term>Effect if unset:</term>
<listitem>
<para>
- Connections are not reused.
+ Connections are not kept alive.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Notes:</term>
<listitem>
+ <para>
+ This option allows clients to keep the connection to &my-app;
+ alive. If the server supports it, &my-app; will keep
+ the connection to the server alive as well. Under certain
+ circumstances this may result in speed-ups.
+ </para>
+ <para>
+ By default, &my-app; will close the connection to the server if
+ the client connection gets closed, or if the specified timeout
+ has been reached without a new request coming in. This behaviour
+ can be changed with the <ulink
+ url="#CONNECTION-SHARING">connection-sharing</ulink> option.
+ </para>
<para>
This option has no effect if <application>Privoxy</application>
has been compiled without keep-alive support.
</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term>Examples:</term>
+ <listitem>
+ <para>
+ keep-alive-timeout 300
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+<![%config-file;[<literallayout>@@keep-alive-timeout 300</literallayout>]]>
+</sect3>
+
+
+<sect3 renderas="sect4" id="connection-sharing"><title>connection-sharing</title>
+<variablelist>
+ <varlistentry>
+ <term>Specifies:</term>
+ <listitem>
+ <para>
+ Whether or not outgoing connections that have been kept alive
+ should be shared between different incoming connections.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Type of value:</term>
+ <listitem>
+ <para>
+ <replaceable>0 or 1</replaceable>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Default value:</term>
+ <listitem>
+ <para>None</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Effect if unset:</term>
+ <listitem>
+ <para>
+ Connections are not shared.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Notes:</term>
+ <listitem>
+ <para>
+ This option has no effect if <application>Privoxy</application>
+ has been compiled without keep-alive support, or if it's disabled.
+ </para>
+ </listitem>
+ </varlistentry>
<varlistentry>
<term>Notes:</term>
<listitem>
There are also a few privacy implications you should be aware of.
</para>
<para>
- Outgoing connections are shared between clients (if there are more
- than one) and closing the client that initiated the outgoing connection
- does not affect the connection between &my-app; and the server unless
- the client's request hasn't been completed yet. If the outgoing connection
- is idle, it will not be closed until either <application>Privoxy's</application>
- or the server's timeout is reached. While it's open, the server knows
- that the system running &my-app; is still there.
+ If this option is effective, outgoing connections are shared between
+ clients (if there are more than one) and closing the browser that initiated
+ the outgoing connection does no longer affect the connection between &my-app;
+ and the server unless the client's request hasn't been completed yet.
+ </para>
+ <para>
+ If the outgoing connection is idle, it will not be closed until either
+ <application>Privoxy's</application> or the server's timeout is reached.
+ While it's open, the server knows that the system running &my-app; is still
+ there.
+ </para>
+ <para>
+ If there are more than one client (maybe even belonging to multiple users),
+ they will be able to reuse each others connections. This is potentially
+ dangerous in case of authentication schemes like NTLM where only the
+ connection is authenticated, instead of requiring authentication for
+ each request.
+ </para>
+ <para>
+ If there is only a single client, and if said client can keep connections
+ alive on its own, enabling this option has next to no effect. If the client
+ doesn't support connection keep-alive, enabling this option may make sense
+ as it allows &my-app; to keep outgoing connections alive even if the client
+ itself doesn't support it.
+ </para>
+ <para>
+ You should also be aware that enabling this option increases the likelihood
+ of getting the "No server or forwarder data" error message, especially if you
+ are using a slow connection to the Internet.
+ </para>
+ <para>
+ This option should only be used by experienced users who
+ understand the risks and can weight them against the benefits.
</para>
</listitem>
</varlistentry>
<term>Examples:</term>
<listitem>
<para>
- keep-alive-timeout 300
+ connection-sharing 1
</para>
</listitem>
</varlistentry>
</variablelist>
-<![%config-file;[<literallayout>@@keep-alive-timeout 300</literallayout>]]>
+<![%config-file;[<literallayout>@@#connection-sharing 1</literallayout>]]>
</sect3>
</sect3>
+<sect3 renderas="sect4" id="max-client-connections"><title>max-client-connections</title>
+<variablelist>
+ <varlistentry>
+ <term>Specifies:</term>
+ <listitem>
+ <para>
+ Maximum number of client connections that will be served.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Type of value:</term>
+ <listitem>
+ <para>
+ <replaceable>Positive number.</replaceable>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Default value:</term>
+ <listitem>
+ <para>None</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Effect if unset:</term>
+ <listitem>
+ <para>
+ Connections are served until a resource limit is reached.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Notes:</term>
+ <listitem>
+ <para>
+ &my-app; creates one thread (or process) for every incoming client
+ connection that isn't rejected based on the access control settings.
+ </para>
+ <para>
+ If the system is powerful enough, &my-app; can theoretically deal with
+ several hundred (or thousand) connections at the same time, but some
+ operating systems enforce resource limits by shutting down offending
+ processes and their default limits may be below the ones &my-app; would
+ require under heavy load.
+ </para>
+ <para>
+ Configuring &my-app; to enforce a connection limit below the thread
+ or process limit used by the operating system makes sure this doesn't
+ happen. Simply increasing the operating system's limit would work too,
+ but if &my-app; isn't the only application running on the system,
+ you may actually want to limit the resources used by &my-app;.
+ </para>
+ <para>
+ If &my-app; is only used by a single trusted user, limiting the
+ number of client connections is probably unnecessary. If there
+ are multiple possibly untrusted users you probably still want to
+ additionally use a packet filter to limit the maximal number of
+ incoming connections per client. Otherwise a malicious user could
+ intentionally create a high number of connections to prevent other
+ users from using &my-app;.
+ </para>
+ <para>
+ Obviously using this option only makes sense if you choose a limit
+ below the one enforced by the operating system.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>Examples:</term>
+ <listitem>
+ <para>
+ max-client-connections 256
+ </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+<![%config-file;[<literallayout>@@#max-client-connections 256</literallayout>]]>
+</sect3>
+
+
</sect2>
<!-- ~ End section ~ -->