</para>
<screen>
- tar xzvf privoxy-&p-version;<![%p-not-stable;[-beta]]><![%p-stable;[-stable]]>-src.tar.gz
- cd privoxy-&p-version;<![%p-not-stable;[-beta]]><![%p-stable;[-stable]]>
+tar xzvf privoxy-&p-version;<![%p-not-stable;[-beta]]><![%p-stable;[-stable]]>-src.tar.gz
+cd privoxy-&p-version;<![%p-not-stable;[-beta]]><![%p-stable;[-stable]]>
</screen>
<para>
</para>
<screen>
- cd <root-dir>
- git clone https://www.privoxy.org/git/privoxy.git
+cd <root-dir>
+git clone https://www.privoxy.org/git/privoxy.git
</screen>
<para>
<filename>/etc/passwd</filename> might then look like:
</para>
- <screen> privoxy:*:7777:7777:privoxy proxy:/no/home:/no/shell</screen>
+<screen>privoxy:*:7777:7777:privoxy proxy:/no/home:/no/shell</screen>
<para>
And then <filename>/etc/group</filename>, like:
</para>
- <screen> privoxy:*:7777:</screen>
+<screen>privoxy:*:7777:</screen>
<para>
Some binary packages may do this for you.
Then, to build from either unpacked tarball or Git checkout:
</para>
- <screen>
- autoheader
- autoconf
- ./configure # (--help to see options)
- make # (the make from GNU, sometimes called gmake)
- su # Possibly required
- make -n install # (to see where all the files will go)
- make -s install # (to really install, -s to silence output)</screen>
+<screen>
+autoheader
+autoconf
+./configure # (--help to see options)
+make # (the make from GNU, sometimes called gmake)
+su # Possibly required
+make -n install # (to see where all the files will go)
+make -s install # (to really install, -s to silence output)
+</screen>
<para>
Using GNU <command>make</command>, you can have the first four steps
automatically done for you by just typing:
</para>
- <screen>
- make
+<screen>
+make
</screen>
<para>
users cannot easily bypass the proxy (e.g. <quote>Go There Anyway</quote>), or
alter their own configurations, <command>configure</command> like this:
</para>
- <screen>
- ./configure --disable-toggle --disable-editor --disable-force</screen>
+<screen>
+./configure --disable-toggle --disable-editor --disable-force
+</screen>
<para>
Note that all of these options can also be disabled through the configuration file.
</para>
on the <command>make</command> command line, but be sure both already exist:
</para>
- <screen>
- make -s install USER=privoxy GROUP=privoxy</screen>
+<screen>
+make -s install USER=privoxy GROUP=privoxy</screen>
<para>
The default installation path for <command>make install</command> is
2020-12-14 12:17:56: Ooops. Expected removal but: 'Referer: https://p.p/' is still there.
2020-12-14 12:17:56: Failure for test 785 (0/13/5). Header 'Referer: https://p.p/' and tag 'hide-referrer{conditional-block}'
2020-12-14 12:17:56: Executed 1 regression tests. Skipped 1201. 0 successes, 1 failures.
- </programlisting>
+</programlisting>
<para>
Use the if the <command>--privoxy-address</command> option if the
http_proxy environment variable isn't configured and you don't want
Create the change log:
</para>
<programlisting>
- $ git tag
- # to see the tags
- $ git log [last release tag]..master > /tmp/log
- # get the commit log since the last release
- $ utils/makeChangeLog /tmp/log > /tmp/change.log
- # reformat the commit log
+$ git tag
+# to see the tags
+$ git log [last release tag]..master > /tmp/log
+# get the commit log since the last release
+$ utils/makeChangeLog /tmp/log > /tmp/change.log
+# reformat the commit log
</programlisting>
<para>
Edit <filename>/tmp/change.log</filename> to remove trivial
<filename>doc/source/changelog.sgml</filename>:
</para>
<programlisting>
- $ utils/changelog2doc.pl /tmp/change.log >| doc/source/changelog.sgml
+$ utils/changelog2doc.pl /tmp/change.log >| doc/source/changelog.sgml
</programlisting>
</listitem>
<listitem>
<para>
All documentation should be rebuilt:
<programlisting>
- $ make man
- $ make dok
- $ make dok-man
- $ make dok-tidy
- $ make config-file
+$ make man
+$ make dok
+$ make dok-man
+$ make dok-tidy
+$ make config-file
</programlisting>
Finished docs should be then be committed to Git (for those
without the ability to build these). Some docs may require
</para>
<programlisting>
- mkdir dist # delete or choose different name if it already exists
- cd dist
- git clone https://www.privoxy.org/git/privoxy.git
- cd privoxy
- git checkout v_X_Y_Z
+mkdir dist # delete or choose different name if it already exists
+cd dist
+git clone https://www.privoxy.org/git/privoxy.git
+cd privoxy
+git checkout v_X_Y_Z
</programlisting>
<para>
packages" above). Then run from that directory:
</para>
<programlisting>
- autoheader && autoconf && ./configure
+autoheader && autoconf && ./configure
</programlisting>
<para>
Then do:
</para>
<programlisting>
- make tarball-dist
+make tarball-dist
</programlisting>
</sect3>
All you need to do is:
</para>
<programlisting>
- cd windows
- make
+cd windows
+make
</programlisting>
<para>
Now you can manually rename <filename>privoxy_setup.exe</filename> to
GPG sign the installer and zip file,
</para>
<programlisting>
- $ gpg --armor --detach --sign <filename>privoxy_setup_X.Y.Z.exe</filename>
- $ gpg --armor --detach --sign <filename>privoxy_X.Y.Z.zip</filename>
+gpg --armor --detach --sign <filename>privoxy_setup_X.Y.Z.exe</filename>
+gpg --armor --detach --sign <filename>privoxy_X.Y.Z.zip</filename>
</programlisting>
<para>
and upload the files to SourceForge.
Using git-buildpackage we start with a clone of the last Debian version:
</para>
<programlisting>
- gbp clone https://salsa.debian.org/debian/privoxy.git
- cd privoxy
+gbp clone https://salsa.debian.org/debian/privoxy.git
+cd privoxy
</programlisting>
<para>
or if the repository is already there
</para>
<programlisting>
- cd privoxy
- gbp pull
+cd privoxy
+gbp pull
</programlisting>
<para>
Now import the newly released upstream tarball via debian/watch file:
</para>
<programlisting>
- gbp import-orig --uscan
+gbp import-orig --uscan
</programlisting>
<para>
Next update all Debian quilt patches to the new version:
</para>
<programlisting>
- while quilt push; do quilt refresh; done
+while quilt push; do quilt refresh; done
</programlisting>
<para>
If some patch is no longer required (because it is already merged
upstream), it can be removed using
</para>
<programlisting>
- quilt delete XX_patchname.patch
- git rm debian/patches/XX_patchname.patch
+quilt delete XX_patchname.patch
+git rm debian/patches/XX_patchname.patch
</programlisting>
<para>
If the patch needs modification, you can apply, edit and update it with
</para>
<programlisting>
- quilt push -f
- quilt edit some_file
- quilt refresh
+quilt push -f
+quilt edit some_file
+quilt refresh
</programlisting>
<para>
until
</para>
<programlisting>
- while quilt push; do quilt refresh; done
+while quilt push; do quilt refresh; done
</programlisting>
<para>
succeeds. Then you can
</para>
<programlisting>
- quilt pop -a
+quilt pop -a
</programlisting>
<para>
Now add a new entry to the debian/changelog representing the new
version:
</para>
<programlisting>
- dch -v &p-version;-1
+dch -v &p-version;-1
</programlisting>
<para>
and describe what you did before and don't forget to git commit all
Now you can build the package on the local machine using
</para>
<programlisting>
- gbp buildpackage -us -uc
+gbp buildpackage -us -uc
</programlisting>
<para>
You should check for warnings using
</para>
<programlisting>
- lintian -iI ../build-area/privoxy_&p-version;-1_amd64.changes
+lintian -iI ../build-area/privoxy_&p-version;-1_amd64.changes
</programlisting>
<para>
Maybe rebuild the package in different defined cowbuilder environments
like
</para>
<programlisting>
- sudo cowbuilder --build --basepath /var/cache/pbuilder/base.cow ../build-area/privoxy_&p-version;-1.dsc
+sudo cowbuilder --build --basepath /var/cache/pbuilder/base.cow ../build-area/privoxy_&p-version;-1.dsc
</programlisting>
<para>
And try to run autopackage testing suite on the result:
</para>
<programlisting>
- autopkgtest /var/cache/pbuilder/result/privoxy_&p-version;-1_amd64.changes -s -- schroot sid
+autopkgtest /var/cache/pbuilder/result/privoxy_&p-version;-1_amd64.changes -s -- schroot sid
</programlisting>
<para>
Or just push the changes to salsa.debian.org, where a CI pipeline is
Then sign both files:
</para>
<programlisting>
- gpg --detach-sign --armor privoxy_&p-version;-1_i386.deb
- gpg --detach-sign --armor privoxy_&p-version;-1_amd64.deb
+gpg --detach-sign --armor privoxy_&p-version;-1_i386.deb
+gpg --detach-sign --armor privoxy_&p-version;-1_amd64.deb
</programlisting>
<para>
Create a README file containing the recent block from debian/changelog
run the following commands:
</para>
<programlisting>
- sudo apt install build-essential devscripts
- sudo apt-get build-dep privoxy
+sudo apt install build-essential devscripts
+sudo apt-get build-dep privoxy
</programlisting>
<para>
After this enter the checked out privoxy git tree and check that all
(new) build dependencies are met:
</para>
<programlisting>
- dpkg-checkbuilddeps
+dpkg-checkbuilddeps
</programlisting>
<para>
If something is missing, just add it using
</para>
<programlisting>
- sudo apt install foobar
+sudo apt install foobar
</programlisting>
<para>
Now you may update debian/changelog, especially the version number
using
</para>
<programlisting>
- dch
+dch
</programlisting>
<para>
and finally build the package:
</para>
<programlisting>
- debuild -us -uc -b
+debuild -us -uc -b
</programlisting>
<para>
If everything went okay, you may find the resulting Debian package in
You may want to clean up the build tree using
</para>
<programlisting>
- debian/rules clean
+debian/rules clean
</programlisting>
<para>
And maybe repair some artefacts using one or both of the following
commands:
</para>
<programlisting>
- git reset --hard
- git clean -fd
+git reset --hard
+git clean -fd
</programlisting>
</sect4>
</sect3>
follows into a folder parallel to the exported privoxy source:
</para>
<programlisting>
- cvs -z3 -d:pserver:anonymous@ijbswa.cvs.sourceforge.net:/cvsroot/ijbswa co OSXPackageBuilder
+cvs -z3 -d:pserver:anonymous@ijbswa.cvs.sourceforge.net:/cvsroot/ijbswa co OSXPackageBuilder
</programlisting>
<para>
The module contains complete instructions on its usage in the file
exported privoxy source:
</para>
<programlisting>
- cvs -z3 -d:pserver:anonymous@ijbswa.cvs.sourceforge.net:/cvsroot/ijbswa co osxsetup
+cvs -z3 -d:pserver:anonymous@ijbswa.cvs.sourceforge.net:/cvsroot/ijbswa co osxsetup
</programlisting>
<para>
Then run:
</para>
<programlisting>
- cd osxsetup
- build
+cd osxsetup
+build
</programlisting>
<para>
This will run <filename>autoheader</filename>, <filename>autoconf</filename>
name, you can then create the distributable zip file with the command:
</para>
<programlisting>
- zip -r privoxyosx_setup_x.y.z.zip Privoxy.pkg
+zip -r privoxyosx_setup_x.y.z.zip Privoxy.pkg
</programlisting>
<para>
You can then upload this file directly to the Files section of the
exported privoxy source:
</para>
<programlisting>
- cvs -z3 -d:pserver:anonymous@ijbswa.cvs.sourceforge.net:/cvsroot/ijbswa co macsetup
+cvs -z3 -d:pserver:anonymous@ijbswa.cvs.sourceforge.net:/cvsroot/ijbswa co macsetup
</programlisting>
<para>
The module contains complete instructions on its usage in its
SGML files, do:
</para>
<programlisting>
- make dok
+make dok && make dok-tidy
</programlisting>
<para>
That will generate <filename>doc/webserver/user-manual</filename>,
If these are docs in the stable branch, then do:
</para>
<programlisting>
- make webserver
+make webserver
</programlisting>
<para>
This will do the upload to the SourceForge webserver (which is manually
url="../user-manual/actions-file.html#ALIASES">alias</ulink> just for such
sticky situations:
</para>
- <screen># Gmail is a _fragile_ site:
+ <screen>
+# Gmail is a _fragile_ site:
#
{ <literal>fragile</literal> }
- # Gmail is ...
- mail.google.com</screen>
+# Gmail is ...
+mail.google.com
+</screen>
<para>
Be sure to flush your browser's caches whenever making these kinds of
changes, just to make sure the changes <quote>take</quote>.
</para>
<screen>
- listen-address 192.168.1.1:8118</screen>
+listen-address 192.168.1.1:8118</screen>
<para>
Save the file, and restart <application>Privoxy</application>. Configure
</para>
<screen>
- listen-address :8118</screen>
+listen-address :8118</screen>
<para>
And then use <application>Privoxy's</application>
both in and out, for <literal>example.com</literal>:
</para>
<screen>
- { -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only -filter{content-cookies} }
- .example.com</screen>
+{ -crunch-incoming-cookies -crunch-outgoing-cookies -session-cookies-only -filter{content-cookies} }
+.example.com
+</screen>
<para>
Place the above in <filename>user.action</filename>. Note that some of these may
be off by default anyway, so this might be redundant, but there is no harm
Here's one real easy one:
</para>
<screen>
- ############################################################
- # Blacklist
- ############################################################
- { <ulink url="../user-manual/actions-file.html#BLOCK">+block</ulink> }
- / # Block *all* URLs
-
- ############################################################
- # Whitelist
- ############################################################
- { <ulink url="../user-manual/actions-file.html#BLOCK">-block</ulink> }
- kids.example.com
- toys.example.com
- games.example.com</screen>
+############################################################
+# Blacklist
+############################################################
+{ <ulink url="../user-manual/actions-file.html#BLOCK">+block</ulink> }
+/ # Block *all* URLs
+
+############################################################
+# Whitelist
+############################################################
+{ <ulink url="../user-manual/actions-file.html#BLOCK">-block</ulink> }
+kids.example.com
+toys.example.com
+games.example.com
+</screen>
<para>
This allows access to only those three sites by first blocking all URLs, and
then subsequently allowing three specific exceptions.
following very simple rule in your <filename>user.action</filename>:
</para>
<screen>
- # Unblock everybody, everywhere
- { <ulink url="../user-manual/actions-file.html#BLOCK">-block</ulink> }
- / # UN-Block *all* URLs</screen>
+# Unblock everybody, everywhere
+{ <ulink url="../user-manual/actions-file.html#BLOCK">-block</ulink> }
+/ # UN-Block *all* URLs
+</screen>
<para>
Or even a more comprehensive reversing of various ad related actions:
</para>
<screen>
- # Unblock everybody, everywhere, and turn off appropriate filtering, etc
- { <ulink url="../user-manual/actions-file.html#BLOCK">-block</ulink> \
+# Unblock everybody, everywhere, and turn off appropriate filtering, etc
+{ <ulink url="../user-manual/actions-file.html#BLOCK">-block</ulink> \
<ulink url="../user-manual/actions-file.html#FILTER-BANNERS-BY-SIZE">-filter{banners-by-size}</ulink> \
<ulink url="../user-manual/actions-file.html#FILTER-BANNERS-BY-LINK">-filter{banners-by-link}</ulink> \
<literal>allow-popups</literal> \
- }
- / # UN-Block *all* URLs and allow ads</screen>
+}
+/ # UN-Block *all* URLs and allow ads
+</screen>
<para>
This last <quote>action</quote> in this compound statement,
<literal>allow-popups</literal>, is an <ulink
available as compile-time options. You should
<command>configure</command> the sources as follows:
</para>
- <screen>
- ./configure --disable-toggle --disable-editor --disable-force</screen>
+<screen>
+./configure --disable-toggle --disable-editor --disable-force
+</screen>
<para>
This will create an executable with hard-coded security features so that
&my-app; does not allow easy bypassing of blocked sites, or changing the
configuration, consider adding your list to your <filename>user.action</filename> file:
</para>
<screen>
- { +block }
- www.ad.example1.com
- ad.example2.com
- ads.galore.example.com
- etc.example.com</screen>
+{ +block }
+www.ad.example1.com
+ad.example2.com
+ads.galore.example.com
+etc.example.com
+</screen>
</sect2>
<sect2 renderas="sect3" id="seealso">
<para>
Unix, in local filesystem (may not work with all browsers):
</para>
- <screen> user-manual file:///usr/share/doc/privoxy-&p-version;/user-manual/</screen>
+ <screen>user-manual file:///usr/share/doc/privoxy-&p-version;/user-manual/</screen>
<para>
Windows, in local filesystem, <emphasis>must</emphasis> use forward slash notation:
</para>
- <screen> user-manual file:/c:/some-dir/privoxy-&p-version;/user-manual/</screen>
+ <screen>user-manual file:/c:/some-dir/privoxy-&p-version;/user-manual/</screen>
<para>
Windows, UNC notation (with forward slashes):
</para>
- <screen> user-manual file://///some-server/some-path/privoxy-&p-version;/user-manual/</screen>
+ <screen>user-manual file://///some-server/some-path/privoxy-&p-version;/user-manual/</screen>
-->
<para>
The best all purpose solution is simply to put the full local
<literal>PATH</literal> to where the <citetitle>User Manual</citetitle> is
located:
</para>
- <screen> user-manual /usr/share/doc/privoxy/user-manual</screen>
+ <screen>user-manual /usr/share/doc/privoxy/user-manual</screen>
<para>
The User Manual is then available to anyone with access to
<application>Privoxy</application>, by following the built-in URL:
If the documentation is not on the local system, it can be accessed
from a remote server, as:
</para>
- <screen> user-manual http://example.com/privoxy/user-manual/</screen>
+ <screen>user-manual http://example.com/privoxy/user-manual/</screen>
<![%user-man;[
<!-- this gets hammered in conversion to config. Text repeated below. -->
<warning>
The available debug levels are:
</para>
<programlisting>
- debug 1 # Log the destination for each request. See also debug 1024.
- debug 2 # show each connection status
- debug 4 # show tagging-related messages
- debug 8 # show header parsing
- debug 16 # log all data written to the network
- debug 32 # debug force feature
- debug 64 # debug regular expression filters
- debug 128 # debug redirects
- debug 256 # debug GIF de-animation
- debug 512 # Common Log Format
- debug 1024 # Log the destination for requests &my-app; didn't let through, and the reason why.
- debug 2048 # CGI user interface
- debug 4096 # Startup banner and warnings.
- debug 8192 # Non-fatal errors
- debug 32768 # log all data read from the network
- debug 65536 # Log the applying actions
+debug 1 # Log the destination for each request. See also debug 1024.
+debug 2 # show each connection status
+debug 4 # show tagging-related messages
+debug 8 # show header parsing
+debug 16 # log all data written to the network
+debug 32 # debug force feature
+debug 64 # debug regular expression filters
+debug 128 # debug redirects
+debug 256 # debug GIF de-animation
+debug 512 # Common Log Format
+debug 1024 # Log the destination for requests &my-app; didn't let through, and the reason why.
+debug 2048 # CGI user interface
+debug 4096 # Startup banner and warnings.
+debug 8192 # Non-fatal errors
+debug 32768 # log all data read from the network
+debug 65536 # Log the applying actions
</programlisting>
<para>
To select multiple debug levels, you can either add them or use
You want it to serve requests from inside only:
</para>
<programlisting>
- listen-address 192.168.0.1:8118
+listen-address 192.168.0.1:8118
</programlisting>
<para>
Suppose you are running <application>Privoxy</application> on an
of the loopback device:
</para>
<programlisting>
- listen-address [::1]:8118
+listen-address [::1]:8118
</programlisting>
</listitem>
</varlistentry>
<emphasis>all</emphasis> destination addresses are OK:
</para>
<screen>
- permit-access localhost
+permit-access localhost
</screen>
<para>
Allow any host on the same class C subnet as www.privoxy.org access to
nothing but www.example.com (or other domains hosted on the same system):
</para>
<screen>
- permit-access www.privoxy.org/24 www.example.com/32
+permit-access www.privoxy.org/24 www.example.com/32
</screen>
<para>
Allow access from any host on the 26-bit subnet 192.168.45.64 to anywhere,
www.dirty-stuff.example.com:
</para>
<screen>
- permit-access 192.168.45.64/26
- deny-access 192.168.45.73 www.dirty-stuff.example.com
+permit-access 192.168.45.64/26
+deny-access 192.168.45.73 www.dirty-stuff.example.com
</screen>
<para>
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>
<programlisting>
- permit-access 192.0.2.0/24
+permit-access 192.0.2.0/24
</programlisting>
<para>
This is equivalent to the following line even if listening on an
IPv4 address (not supported on all platforms):
</para>
<programlisting>
- permit-access [::ffff:192.0.2.0]/120
+permit-access [::ffff:192.0.2.0]/120
</programlisting>
</listitem>
</varlistentry>
Everything goes to an example parent proxy, except SSL on port 443 (which it doesn't handle):
</para>
<screen>
- forward / parent-proxy.example.org:8080
- forward :443 .
+forward / parent-proxy.example.org:8080
+forward :443 .
</screen>
<para>
Everything goes to our example ISP's caching proxy, except for requests
to that ISP's sites:
</para>
<screen>
- forward / caching-proxy.isp.example.net:8000
- forward .isp.example.net .
+forward / caching-proxy.isp.example.net:8000
+forward .isp.example.net .
</screen>
<para>
Parent proxy specified by an IPv6 address:
</para>
<programlisting>
- forward / [2001:DB8::1]:8000
+forward / [2001:DB8::1]:8000
</programlisting>
<para>
Suppose your parent proxy doesn't support IPv6:
</para>
<programlisting>
- forward / parent-proxy.example.org:8000
- forward ipv6-server.example.org .
- forward <[2-3][0-9a-f][0-9a-f][0-9a-f]:*> .
+forward / parent-proxy.example.org:8000
+forward ipv6-server.example.org .
+forward <[2-3][0-9a-f][0-9a-f][0-9a-f]:*> .
</programlisting>
</listitem>
</varlistentry>
the Internet.
</para>
<screen>
- forward-socks4a / socks-gw.example.com:1080 www-cache.isp.example.net:8080
- forward .example.com .
+forward-socks4a / socks-gw.example.com:1080 www-cache.isp.example.net:8080
+forward .example.com .
</screen>
<para>
A rule that uses a SOCKS 4 gateway for all destinations but no HTTP parent looks like this:
</para>
<screen>
- forward-socks4 / socks-gw.example.com:1080 .
+forward-socks4 / socks-gw.example.com:1080 .
</screen>
<para>
To connect SOCKS5 proxy which requires username/password authentication:
</para>
<screen>
- forward-socks5 / user:pass@socks-gw.example.com:1080 .
+forward-socks5 / user:pass@socks-gw.example.com:1080 .
</screen>
<para>
something like:
</para>
<screen>
- forward-socks5t / 127.0.0.1:9050 .
+forward-socks5t / 127.0.0.1:9050 .
</screen>
<para>
Note that if you got Tor through one of the bundles, you may
therefore might want to make some exceptions:
</para>
<screen>
- forward 192.168.*.*/ .
- forward 10.*.*.*/ .
- forward 127.*.*.*/ .
+forward 192.168.*.*/ .
+forward 10.*.*.*/ .
+forward 127.*.*.*/ .
</screen>
<para>
Unencrypted connections to systems in these address ranges will
this:
</para>
<screen>
- forward localhost/ .
+forward localhost/ .
</screen>
</listitem>
host-a:
</para>
- <screen>
- forward / .
- forward .isp-b.example.net host-b:8118
+<screen>
+forward / .
+forward .isp-b.example.net host-b:8118
</screen>
<para>
host-b:
</para>
- <screen>
- forward / .
- forward .isp-a.example.org host-a:8118
+<screen>
+forward / .
+forward .isp-a.example.org host-a:8118
</screen>
<para>
run on the same box, your <application>squid</application> configuration could then look like this:
</para>
- <screen>
- # Define Privoxy as parent proxy (without ICP)
- cache_peer 127.0.0.1 parent 8118 7 no-query
+<screen>
+# Define Privoxy as parent proxy (without ICP)
+cache_peer 127.0.0.1 parent 8118 7 no-query
- # Define ACL for protocol FTP
- acl ftp proto FTP
+# Define ACL for protocol FTP
+acl ftp proto FTP
- # Do not forward FTP requests to Privoxy
- always_direct allow ftp
+# Do not forward FTP requests to Privoxy
+always_direct allow ftp
- # Forward all the rest to Privoxy
- never_direct allow all</screen>
+# Forward all the rest to Privoxy
+never_direct allow all
+</screen>
<para>
You would then need to change your browser's proxy settings to <application>squid</application>'s address and port.
say, on <literal>antivir.example.com</literal>, port 8010:
</para>
- <screen>
- forward / .
- forward /.*\.(exe|com|dll|zip)$ antivir.example.com:8010</screen>
+<screen>
+forward / .
+forward /.*\.(exe|com|dll|zip)$ antivir.example.com:8010
+</screen>
</sect3>
]]>
<term>Examples:</term>
<listitem>
<screen>
- # Best speed (compared to the other levels)
- compression-level 1
-
- # Best compression
- compression-level 9
-
- # No compression. Only useful for testing as the added header
- # slightly increases the amount of data that has to be sent.
- # If your benchmark shows that using this compression level
- # is superior to using no compression at all, the benchmark
- # is likely to be flawed.
- compression-level 0
+# Best speed (compared to the other levels)
+compression-level 1
+
+# Best compression
+compression-level 9
+
+# No compression. Only useful for testing as the added header
+# slightly increases the amount of data that has to be sent.
+# If your benchmark shows that using this compression level
+# is superior to using no compression at all, the benchmark
+# is likely to be flawed.
+compression-level 0
</screen>
</listitem>
</varlistentry>
<term>Examples:</term>
<listitem>
<screen>
- # Define a couple of tags, the described effect requires action sections
- # that are enabled based on CLIENT-TAG patterns.
- client-specific-tag circumvent-blocks Overrule blocks but do not affect other actions
- client-specific-tag disable-content-filters Disable content-filters but do not affect other actions
- client-specific-tag overrule-redirects Overrule redirect sections
- client-specific-tag allow-cookies Do not crunch cookies in either direction
- client-specific-tag change-tor-socks-port Change forward-socks5 settings to use a different Tor socks port (and circuits)
- client-specific-tag no-https-inspection Disable HTTPS inspection
- client-specific-tag no-tls-verification Don't verify certificates when http-inspection is enabled
+ # Define a couple of tags, the described effect requires action sections
+ # that are enabled based on CLIENT-TAG patterns.
+ client-specific-tag circumvent-blocks Overrule blocks but do not affect other actions
+ client-specific-tag disable-content-filters Disable content-filters but do not affect other actions
+ client-specific-tag overrule-redirects Overrule redirect sections
+ client-specific-tag allow-cookies Do not crunch cookies in either direction
+ client-specific-tag change-tor-socks-port Change forward-socks5 settings to use a different Tor socks port (and circuits)
+ client-specific-tag no-https-inspection Disable HTTPS inspection
+ client-specific-tag no-tls-verification Don't verify certificates when http-inspection is enabled
</screen>
</listitem>
</varlistentry>
<term>Example:</term>
<listitem>
<screen>
- # Increase the time to life for temporarily enabled tags to 3 minutes
- client-tag-lifetime 180
+ # Increase the time to life for temporarily enabled tags to 3 minutes
+ client-tag-lifetime 180
</screen>
</listitem>
</varlistentry>
<term>Example:</term>
<listitem>
<screen>
- # Allow systems that can reach Privoxy to provide the client
- # IP address with a X-Forwarded-For header.
- trust-x-forwarded-for 1
+ # Allow systems that can reach Privoxy to provide the client
+ # IP address with a X-Forwarded-For header.
+ trust-x-forwarded-for 1
</screen>
</listitem>
</varlistentry>
<term>Example:</term>
<listitem>
<screen>
- # Increase the receive buffer size
- receive-buffer-size 32768
+ # Increase the receive buffer size
+ receive-buffer-size 32768
</screen>
</listitem>
</varlistentry>
<term>Examples:</term>
<listitem>
<screen>
- # Explicitly set a couple of ciphers with names used by MbedTLS
- cipher-list cipher-list TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256:\
+ # Explicitly set a couple of ciphers with names used by MbedTLS
+cipher-list cipher-list TLS-ECDHE-RSA-WITH-CHACHA20-POLY1305-SHA256:\
TLS-ECDHE-ECDSA-WITH-CHACHA20-POLY1305-SHA256:\
TLS-DHE-RSA-WITH-CHACHA20-POLY1305-SHA256:\
TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256:\
TLS-ECDH-ECDSA-WITH-AES-256-GCM-SHA384:\
TLS-ECDH-ECDSA-WITH-CAMELLIA-128-GCM-SHA256:\
TLS-ECDH-ECDSA-WITH-CAMELLIA-256-GCM-SHA384
- </screen>
+</screen>
<screen>
- # Explicitly set a couple of ciphers with names used by OpenSSL
+ # Explicitly set a couple of ciphers with names used by OpenSSL
cipher-list ECDHE-RSA-AES256-GCM-SHA384:\
ECDHE-ECDSA-AES256-GCM-SHA384:\
DH-DSS-AES256-GCM-SHA384:\
ECDH-ECDSA-AES128-GCM-SHA256:\
ECDHE-RSA-AES256-GCM-SHA384:\
AES128-SHA
- </screen>
+</screen>
<screen>
- # Use keywords instead of explicitly naming the ciphers (Does not work with MbedTLS)
- cipher-list ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
- </screen>
+ # Use keywords instead of explicitly naming the ciphers (Does not work with MbedTLS)
+cipher-list ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
+</screen>
</listitem>
</varlistentry>
</variablelist>
Run the setup program and from View / Category select:
</para>
<screen>
- Devel
- autoconf 2.5
- automake 1.15
- binutils
- cmake
- gcc-core
- gcc-g++
- git
- make
- mingw64-i686-gcc-core
- mingw64-i686-zlib
- Editors
- vim
- Libs
- libxslt: GNOME XSLT library (runtime)
- Net
- curl
- openssh
- Text
- docbook-dssl
- docbook-sgml31
- docbook-utils
- openjade
- Utils
- gnupg
- Web
- w3m
+Devel
+ autoconf 2.5
+ automake 1.15
+ binutils
+ cmake
+ gcc-core
+ gcc-g++
+ git
+ make
+ mingw64-i686-gcc-core
+ mingw64-i686-zlib
+Editors
+ vim
+Libs
+ libxslt: GNOME XSLT library (runtime)
+Net
+ curl
+ openssh
+Text
+ docbook-dssl
+ docbook-sgml31
+ docbook-utils
+ openjade
+Utils
+ gnupg
+Web
+ w3m
</screen>
<para>
If you haven't already downloaded the Privoxy source code, get it now:
</para>
<screen>
- mkdir <root-dir>
- cd <root-dir>
- git clone https://www.privoxy.org/git/privoxy.git
+mkdir <root-dir>
+cd <root-dir>
+git clone https://www.privoxy.org/git/privoxy.git
</screen>
<para>
unzip into <root-dir> and build the software:
</para>
<screen>
- cd <root-dir>
- cd tidy-html5-x.y.z/build/cmake
- cmake ../.. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIB:BOOL=OFF -DCMAKE_INSTALL_PREFIX=/usr/local
- make && make install
+cd <root-dir>
+cd tidy-html5-x.y.z/build/cmake
+cmake ../.. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIB:BOOL=OFF -DCMAKE_INSTALL_PREFIX=/usr/local
+make && make install
</screen>
<para>
To build just the Privoxy executable and not the whole installation package, do:
</para>
<programlisting>
- cd <root-dir>/privoxy
- ./windows/MYconfigure && make
+cd <root-dir>/privoxy
+./windows/MYconfigure && make
</programlisting>
<para>
for building software, so the process is:
</para>
<programlisting>
- $ autoheader # creates config.h.in
- $ autoconf # uses config.h.in to create the configure shell script
- $ ./configure [options] # creates GNUmakefile
- $ make [options] # builds the program
+autoheader # creates config.h.in
+autoconf # uses config.h.in to create the configure shell script
+./configure [options] # creates GNUmakefile
+make [options] # builds the program
</programlisting>
<para>
</para>
<programlisting>
- $ export CFLAGS="-O2" # set gcc optimization level
- $ export LDFLAGS="-Wl,--nxcompat" # Enable DEP
- $ ./configure --host=i686-w64-mingw32 --enable-mingw32 --enable-zlib \
- > --enable-static-linking --disable-pthread --disable-dynamic-pcre
- $ make # build Privoxy
+$ export CFLAGS="-O2" # set gcc optimization level
+$ export LDFLAGS="-Wl,--nxcompat" # Enable DEP
+$ ./configure --host=i686-w64-mingw32 --enable-mingw32 --enable-zlib \
+> --enable-static-linking --disable-pthread
+$ make # build Privoxy
</programlisting>
<para>
use, filtering, you will need to force compression off. Example:
</para>
<screen>
- { +<link linkend="filter">filter</link>{google} +<link linkend="prevent-compression">prevent-compression</link> }
- .google.</screen>
+{ +<link linkend="filter">filter</link>{google} +<link linkend="prevent-compression">prevent-compression</link> }
+.google.
+</screen>
<para>
Or if you use a number of filters, or filter many sites, you may just want
to turn off compression for all sites in
file.
</para>
<screen>
- # /etc/init.d/privoxy start
+# /etc/init.d/privoxy start
</screen>
</sect2>
To start <application>Privoxy</application> manually, run:
</para>
<screen>
- # service privoxy onestart
+# service privoxy onestart
</screen>
</sect2>
Example Unix startup command:
</para>
<screen>
- # /usr/sbin/privoxy --user privoxy /etc/privoxy/config
+# /usr/sbin/privoxy --user privoxy /etc/privoxy/config
</screen>
<para>
Note that if you installed <application>Privoxy</application> through
might look like:
</para>
- <screen>
- { +<literal>handle-as-image</literal> +<literal>block{Banner ads.}</literal> }
- # Block these as if they were images. Send no block page.
- banners.example.com
- media.example.com/.*banners
- .example.com/images/ads/</screen>
+<screen>
+{ +<literal>handle-as-image</literal> +<literal>block{Banner ads.}</literal> }
+# Block these as if they were images. Send no block page.
+banners.example.com
+media.example.com/.*banners
+.example.com/images/ads/
+</screen>
<para>
You can trace this process for URL patterns and any given URL by visiting <ulink
<quote>disabled</quote>. Syntax:
</para>
<screen>
- +<replaceable class="function">name</replaceable> # enable action <replaceable class="parameter">name</replaceable>
- -<replaceable class="function">name</replaceable> # disable action <replaceable class="parameter">name</replaceable></screen>
++<replaceable class="function">name</replaceable> # enable action <replaceable class="parameter">name</replaceable>
+-<replaceable class="function">name</replaceable> # disable action <replaceable class="parameter">name</replaceable>
+</screen>
<para>
Example: <literal>+handle-as-image</literal>
</para>
Parameterized, where some value is required in order to enable this type of action.
Syntax:
</para>
- <screen>
- +<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>} # enable action and set parameter to <replaceable class="parameter">param</replaceable>,
- # overwriting parameter from previous match if necessary
- -<replaceable class="function">name</replaceable> # disable action. The parameter can be omitted</screen>
+ <screen>
++<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>} # enable action and set parameter to <replaceable class="parameter">param</replaceable>,
+ # overwriting parameter from previous match if necessary
+-<replaceable class="function">name</replaceable> # disable action. The parameter can be omitted
+</screen>
<para>
Note that if the URL matches multiple positive forms of a parameterized action,
the last match wins, i.e. the params from earlier matches are simply ignored.
that can be executed for the same request repeatedly, like adding multiple
headers, or filtering through multiple filters. Syntax:
</para>
- <screen>
- +<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>} # enable action and add <replaceable class="parameter">param</replaceable> to the list of parameters
- -<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>} # remove the parameter <replaceable class="parameter">param</replaceable> from the list of parameters
- # If it was the last one left, disable the action.
- <replaceable class="parameter">-name</replaceable> # disable this action completely and remove all parameters from the list</screen>
+ <screen>
++<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>} # enable action and add <replaceable class="parameter">param</replaceable> to the list of parameters
+-<replaceable class="function">name</replaceable>{<replaceable class="parameter">param</replaceable>} # remove the parameter <replaceable class="parameter">param</replaceable> from the list of parameters
+ # If it was the last one left, disable the action.
+<replaceable class="parameter">-name</replaceable> # disable this action completely and remove all parameters from the list
+</screen>
<para>
Examples: <literal>+add-header{X-Fun-Header: Some text}</literal> and
<literal>+filter{html-annoyances}</literal>
<varlistentry>
<term>Example usage (section):</term>
<listitem>
- <screen>{+block{No nasty stuff for you.}}
+ <screen>
+{+block{No nasty stuff for you.}}
# Block and replace with "blocked" page
- .nasty-stuff.example.com
+.nasty-stuff.example.com
{+block{Doubleclick banners.} +handle-as-image}
# Block and replace with image
- .ad.doubleclick.net
- .ads.r.us/banners/
+.ad.doubleclick.net
+.ads.r.us/banners/
{+block{Layered ads.} +handle-as-empty-document}
# Block and then ignore
- adserver.example.net/.*\.js$</screen>
+adserver.example.net/.*\.js$
+</screen>
</listitem>
</varlistentry>
<term>Example usage:</term>
<listitem>
<screen>
- { +fast-redirects{simple-check} }
- one.example.com
+{ +fast-redirects{simple-check} }
+one.example.com
- { +fast-redirects{check-decoded-url} }
- another.example.com/testing</screen>
+{ +fast-redirects{check-decoded-url} }
+another.example.com/testing
+</screen>
</listitem>
</varlistentry>
<varlistentry>
<term>Example usage:</term>
<listitem>
- <screen># Disarm the download link in Sourceforge's patch tracker
+ <screen>
+# Disarm the download link in Sourceforge's patch tracker
{ -filter \
- +content-type-overwrite{text/plain}\
- +hide-content-disposition{block} }
- .sourceforge.net/tracker/download\.php</screen>
+ +content-type-overwrite{text/plain} \
+ +hide-content-disposition{block} \
+}
+.sourceforge.net/tracker/download\.php
+</screen>
</listitem>
</varlistentry>
</variablelist>
<screen>
{+ignore-certificate-errors}
www.example.org
- </screen>
+</screen>
</listitem>
</varlistentry>
</variablelist>
#
{ +filter{tiny-textforms} +prevent-compression }
# Match only these sites
- .google.
- sourceforge.net
- sf.net
+.google.
+sourceforge.net
+sf.net
# Or instead, we could set a universal default:
#
{ +prevent-compression }
- / # Match all sites
+/ # Match all sites
# Then maybe make exceptions for broken sites:
#
{ -prevent-compression }
-.compusa.com/</screen>
+.compusa.com/
+</screen>
</listitem>
</varlistentry>
<varlistentry>
<term>Example usage:</term>
<listitem>
- <screen># Let the browser revalidate without being tracked across sessions
+ <screen>
+# Let the browser revalidate without being tracked across sessions
{ +hide-if-modified-since{-60} \
- +overwrite-last-modified{randomize} \
- +crunch-if-none-match}
-/</screen>
+ +overwrite-last-modified{randomize} \
+ +crunch-if-none-match \
+}
+/
+</screen>
</listitem>
</varlistentry>
</variablelist>
<varlistentry>
<term>Example usages:</term>
<listitem>
- <screen># Replace example.com's style sheet with another one
+ <screen>
+# Replace example.com's style sheet with another one
{ +redirect{http://localhost/css-replacements/example.com.css} }
- example.com/stylesheet\.css
+example.com/stylesheet\.css
# Create a short, easy to remember nickname for a favorite site
# (relies on the browser to accept and forward invalid URLs to &my-app;)
{ +redirect{https://www.privoxy.org/user-manual/actions-file.html} }
- a
+a
# Always use the expanded view for Undeadly.org articles
# (Note the $ at the end of the URL pattern to make sure
</para>
<screen>
- # Useful custom aliases we can use later.
- #
- # Note the (required!) section header line and that this section
- # must be at the top of the actions file!
- #
- {{alias}}
+# Useful custom aliases we can use later.
+#
+# Note the (required!) section header line and that this section
+# must be at the top of the actions file!
+#
+{{alias}}
- # These aliases just save typing later:
- # (Note that some already use other aliases!)
- #
- +crunch-all-cookies = +<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> +<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
- -crunch-all-cookies = -<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> -<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
- +block-as-image = +block{Blocked image.} +handle-as-image
- allow-all-cookies = -crunch-all-cookies -<link linkend="SESSION-COOKIES-ONLY">session-cookies-only</link> -<link linkend="FILTER-CONTENT-COOKIES">filter{content-cookies}</link>
+# These aliases just save typing later:
+# (Note that some already use other aliases!)
+#
++crunch-all-cookies = +<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> +<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
+-crunch-all-cookies = -<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> -<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
++block-as-image = +block{Blocked image.} +handle-as-image
+allow-all-cookies = -crunch-all-cookies -<link linkend="SESSION-COOKIES-ONLY">session-cookies-only</link> -<link linkend="FILTER-CONTENT-COOKIES">filter{content-cookies}</link>
- # These aliases define combinations of actions
- # that are useful for certain types of sites:
- #
- fragile = -<link linkend="BLOCK">block</link> -<link linkend="FILTER">filter</link> -crunch-all-cookies -<link linkend="FAST-REDIRECTS">fast-redirects</link> -<link linkend="HIDE-REFERER">hide-referrer</link> -<link linkend="PREVENT-COMPRESSION">prevent-compression</link>
+# These aliases define combinations of actions
+# that are useful for certain types of sites:
+#
+fragile = -<link linkend="BLOCK">block</link> -<link linkend="FILTER">filter</link> -crunch-all-cookies -<link linkend="FAST-REDIRECTS">fast-redirects</link> -<link linkend="HIDE-REFERER">hide-referrer</link> -<link linkend="PREVENT-COMPRESSION">prevent-compression</link>
- shop = -crunch-all-cookies -<link linkend="FILTER-ALL-POPUPS">filter{all-popups}</link>
+shop = -crunch-all-cookies -<link linkend="FILTER-ALL-POPUPS">filter{all-popups}</link>
- # Short names for other aliases, for really lazy people ;-)
- #
- c0 = +crunch-all-cookies
- c1 = -crunch-all-cookies</screen>
+# Short names for other aliases, for really lazy people ;-)
+#
+c0 = +crunch-all-cookies
+c1 = -crunch-all-cookies
+</screen>
<para>
...and put them to use. These sections would appear in the lower part of an
</para>
<screen>
- # These sites are either very complex or very keen on
- # user data and require minimal interference to work:
- #
- {fragile}
- .office.microsoft.com
- .windowsupdate.microsoft.com
- # Gmail is really mail.google.com, not gmail.com
- mail.google.com
-
- # Shopping sites:
- # Allow cookies (for setting and retrieving your customer data)
- #
- {shop}
- .quietpc.com
- .worldpay.com # for quietpc.com
- mybank.example.com
+# These sites are either very complex or very keen on
+# user data and require minimal interference to work:
+#
+{fragile}
+.office.microsoft.com
+.windowsupdate.microsoft.com
+# Gmail is really mail.google.com, not gmail.com
+mail.google.com
- # These shops require pop-ups:
- #
- {-filter{all-popups} -filter{unsolicited-popups}}
- .dabs.com
- .overclockers.co.uk</screen>
+# Shopping sites:
+# Allow cookies (for setting and retrieving your customer data)
+#
+{shop}
+.quietpc.com
+.worldpay.com # for quietpc.com
+mybank.example.com
+
+# These shops require pop-ups:
+#
+{-filter{all-popups} -filter{unsolicited-popups}}
+.dabs.com
+.overclockers.co.uk
+</screen>
<para>
Aliases like <quote>shop</quote> and <quote>fragile</quote> are typically used for
#
+crunch-all-cookies = +<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> +<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
-crunch-all-cookies = -<link linkend="CRUNCH-INCOMING-COOKIES">crunch-incoming-cookies</link> -<link linkend="CRUNCH-OUTGOING-COOKIES">crunch-outgoing-cookies</link>
- +block-as-image = +block{Blocked image.} +handle-as-image
+ +block-as-image = +block{Blocked image.} +handle-as-image
mercy-for-cookies = -crunch-all-cookies -<link linkend="SESSION-COOKIES-ONLY">session-cookies-only</link> -<link linkend="FILTER-CONTENT-COOKIES">filter{content-cookies}</link>
# These aliases define combinations of actions
<screen>
{ allow-all-cookies }
- sourceforge.net
- .yahoo.com
- .msdn.microsoft.com
- .redhat.com</screen>
+sourceforge.net
+.yahoo.com
+.msdn.microsoft.com
+.redhat.com
+</screen>
<para>
Your bank is allergic to some filter, but you don't know which, so you disable them all:
<screen>
{ -<link linkend="FILTER">filter</link> }
- .your-home-banking-site.com</screen>
+.your-home-banking-site.com
+</screen>
<para>
Some file types you may not want to filter for various reasons:
<screen>
{ +<link linkend="BLOCK">block</link>{Nasty ads.} }
- www.example.com/nasty-ads/sponsor\.gif
- another.example.net/more/junk/here/</screen>
+www.example.com/nasty-ads/sponsor\.gif
+another.example.net/more/junk/here/
+</screen>
<para>
The URLs of dynamically generated banners, especially from large banner
<screen>
{ +block-as-image }
- .doubleclick.net
- .fastclick.net
- /Realmedia/ads/
- ar.atwola.com/</screen>
+.doubleclick.net
+.fastclick.net
+/Realmedia/ads/
+ar.atwola.com/
+</screen>
<para>
Now you noticed that the default configuration breaks Forbes Magazine,
<screen>
{ fragile }
- .forbes.com
- webmail.example.com
- .mybank.com</screen>
+.forbes.com
+webmail.example.com
+.mybank.com
+</screen>
<para>
You like the <quote>fun</quote> text replacements in <filename>default.filter</filename>,
<screen>
{ +<link linkend="filter-fun">filter{fun}</link> }
- / # For ALL sites!</screen>
+/ # For ALL sites!
+</screen>
<para>
Note that the above is not really a good idea: There are exceptions
<screen>
{ allow-ads }
- .sourceforge.net
- .slashdot.org
- .osdn.net</screen>
+.sourceforge.net
+.slashdot.org
+.osdn.net
+</screen>
<para>
Note that <literal>allow-ads</literal> has been aliased to
<screen>
{ handle-as-text }
- /.*\.sh$</screen>
+/.*\.sh$
+</screen>
<para>
<filename>user.action</filename> is generally the best place to define
</para>
<screen>
- Matches for http://www.google.com:
+Matches for http://www.google.com:
- In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
+In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
- {+change-x-forwarded-for{block}
+{+change-x-forwarded-for{block}
+deanimate-gifs {last}
+fast-redirects {check-decoded-url}
+filter {refresh-tags}
+hide-from-header {block}
+hide-referrer {forge}
+session-cookies-only
- +set-image-blocker {pattern}
+ +set-image-blocker {pattern} }
/
- { -session-cookies-only }
- .google.com
+{ -session-cookies-only }
+.google.com
- { -fast-redirects }
- .google.com
+{ -fast-redirects }
+.google.com
In file: user.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
(no matches in this file)
</para>
<screen>
- Final results:
-
- -add-header
- -block
- +change-x-forwarded-for{block}
- -client-header-filter{hide-tor-exit-notation}
- -content-type-overwrite
- -crunch-client-header
- -crunch-if-none-match
- -crunch-incoming-cookies
- -crunch-outgoing-cookies
- -crunch-server-header
- +deanimate-gifs {last}
- -downgrade-http-version
- -fast-redirects
- -filter {js-events}
- -filter {content-cookies}
- -filter {all-popups}
- -filter {banners-by-link}
- -filter {tiny-textforms}
- -filter {frameset-borders}
- -filter {demoronizer}
- -filter {shockwave-flash}
- -filter {quicktime-kioskmode}
- -filter {fun}
- -filter {crude-parental}
- -filter {site-specifics}
- -filter {js-annoyances}
- -filter {html-annoyances}
- +filter {refresh-tags}
- -filter {unsolicited-popups}
- +filter {img-reorder}
- +filter {banners-by-size}
- +filter {webbugs}
- +filter {jumping-windows}
- +filter {ie-exploits}
- -filter {google}
- -filter {yahoo}
- -filter {msn}
- -filter {blogspot}
- -filter {no-ping}
- -force-text-mode
- -handle-as-empty-document
- -handle-as-image
- -hide-accept-language
- -hide-content-disposition
- +hide-from-header {block}
- -hide-if-modified-since
- +hide-referrer {forge}
- -hide-user-agent
- -limit-connect
- -overwrite-last-modified
- -prevent-compression
- -redirect
- -server-header-filter{xml-to-html}
- -server-header-filter{html-to-xml}
- -session-cookies-only
- +set-image-blocker {pattern}
+Final results:
+
+-add-header
+-block
++change-x-forwarded-for{block}
+-client-header-filter{hide-tor-exit-notation}
+-content-type-overwrite
+-crunch-client-header
+-crunch-if-none-match
+-crunch-incoming-cookies
+-crunch-outgoing-cookies
+-crunch-server-header
++deanimate-gifs {last}
+-downgrade-http-version
+-fast-redirects
+-filter {js-events}
+-filter {content-cookies}
+-filter {all-popups}
+-filter {banners-by-link}
+-filter {tiny-textforms}
+-filter {frameset-borders}
+-filter {demoronizer}
+-filter {shockwave-flash}
+-filter {quicktime-kioskmode}
+-filter {fun}
+-filter {crude-parental}
+-filter {site-specifics}
+-filter {js-annoyances}
+-filter {html-annoyances}
++filter {refresh-tags}
+-filter {unsolicited-popups}
++filter {img-reorder}
++filter {banners-by-size}
++filter {webbugs}
++filter {jumping-windows}
++filter {ie-exploits}
+-filter {google}
+-filter {yahoo}
+-filter {msn}
+-filter {blogspot}
+-filter {no-ping}
+-force-text-mode
+-handle-as-empty-document
+-handle-as-image
+-hide-accept-language
+-hide-content-disposition
++hide-from-header {block}
+-hide-if-modified-since
++hide-referrer {forge}
+-hide-user-agent
+-limit-connect
+-overwrite-last-modified
+-prevent-compression
+-redirect
+-server-header-filter{xml-to-html}
+-server-header-filter{html-to-xml}
+-session-cookies-only
++set-image-blocker {pattern}
</screen>
<para>
</para>
<screen>
- { +block{Domains starts with "ad"} }
- ad*.
+{ +block{Domains starts with "ad"} }
+ad*.
- { +block{Domain contains "ad"} }
- .ad.
+{ +block{Domain contains "ad"} }
+.ad.
- { +block{Doubleclick banner server} +handle-as-image }
- .[a-vx-z]*.doubleclick.net
+{ +block{Doubleclick banner server} +handle-as-image }
+.[a-vx-z]*.doubleclick.net
</screen>
<para>
</para>
<screen>
- Matches for http://www.example.net/adsl/HOWTO/:
-
- In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
-
- {-add-header
- -block
- +change-x-forwarded-for{block}
- -client-header-filter{hide-tor-exit-notation}
- -content-type-overwrite
- -crunch-client-header
- -crunch-if-none-match
- -crunch-incoming-cookies
- -crunch-outgoing-cookies
- -crunch-server-header
- +deanimate-gifs
- -downgrade-http-version
- +fast-redirects {check-decoded-url}
- -filter {js-events}
- -filter {content-cookies}
- -filter {all-popups}
- -filter {banners-by-link}
- -filter {tiny-textforms}
- -filter {frameset-borders}
- -filter {demoronizer}
- -filter {shockwave-flash}
- -filter {quicktime-kioskmode}
- -filter {fun}
- -filter {crude-parental}
- -filter {site-specifics}
- -filter {js-annoyances}
- -filter {html-annoyances}
- +filter {refresh-tags}
- -filter {unsolicited-popups}
- +filter {img-reorder}
- +filter {banners-by-size}
- +filter {webbugs}
- +filter {jumping-windows}
- +filter {ie-exploits}
- -filter {google}
- -filter {yahoo}
- -filter {msn}
- -filter {blogspot}
- -filter {no-ping}
- -force-text-mode
- -handle-as-empty-document
- -handle-as-image
- -hide-accept-language
- -hide-content-disposition
- +hide-from-header{block}
- +hide-referer{forge}
- -hide-user-agent
- -overwrite-last-modified
- +prevent-compression
- -redirect
- -server-header-filter{xml-to-html}
- -server-header-filter{html-to-xml}
- +session-cookies-only
- +set-image-blocker{blank} }
- /
-
- { +block{Path contains "ads".} +handle-as-image }
- /ads
+Matches for http://www.example.net/adsl/HOWTO/:
+
+In file: default.action <guibutton>[ View ]</guibutton> <guibutton>[ Edit ]</guibutton>
+
+{-add-header
+ -block
+ +change-x-forwarded-for{block}
+ -client-header-filter{hide-tor-exit-notation}
+ -content-type-overwrite
+ -crunch-client-header
+ -crunch-if-none-match
+ -crunch-incoming-cookies
+ -crunch-outgoing-cookies
+ -crunch-server-header
+ +deanimate-gifs
+ -downgrade-http-version
+ +fast-redirects {check-decoded-url}
+ -filter {js-events}
+ -filter {content-cookies}
+ -filter {all-popups}
+ -filter {banners-by-link}
+ -filter {tiny-textforms}
+ -filter {frameset-borders}
+ -filter {demoronizer}
+ -filter {shockwave-flash}
+ -filter {quicktime-kioskmode}
+ -filter {fun}
+ -filter {crude-parental}
+ -filter {site-specifics}
+ -filter {js-annoyances}
+ -filter {html-annoyances}
+ +filter {refresh-tags}
+ -filter {unsolicited-popups}
+ +filter {img-reorder}
+ +filter {banners-by-size}
+ +filter {webbugs}
+ +filter {jumping-windows}
+ +filter {ie-exploits}
+ -filter {google}
+ -filter {yahoo}
+ -filter {msn}
+ -filter {blogspot}
+ -filter {no-ping}
+ -force-text-mode
+ -handle-as-empty-document
+ -handle-as-image
+ -hide-accept-language
+ -hide-content-disposition
+ +hide-from-header{block}
+ +hide-referer{forge}
+ -hide-user-agent
+ -overwrite-last-modified
+ +prevent-compression
+ -redirect
+ -server-header-filter{xml-to-html}
+ -server-header-filter{html-to-xml}
+ +session-cookies-only
+ +set-image-blocker{blank} }
+/
+
+{ +block{Path contains "ads".} +handle-as-image }
+/ads
</screen>
<para>
</para>
<screen>
- { -block }
- /adsl
+{ -block }
+/adsl
</screen>
<para>
</para>
<screen>
- { +block{Path starts with "ads".} +handle-as-image }
- /ads
+{ +block{Path starts with "ads".} +handle-as-image }
+/ads
</screen>
<para>
</para>
<screen>
- { shop }
- .quietpc.com
- .worldpay.com # for quietpc.com
- .jungle.com
- .scan.co.uk
- .forbes.com
+{ shop }
+.quietpc.com
+.worldpay.com # for quietpc.com
+.jungle.com
+.scan.co.uk
+.forbes.com
</screen>
<para>
</para>
<screen>
- { -filter }
- # Disable ALL filter actions for sites in this section
- .forbes.com
- developer.ibm.com
- localhost
+{ -filter }
+# Disable ALL filter actions for sites in this section
+.forbes.com
+developer.ibm.com
+localhost
</screen>
<para>
</para>
<screen>
- { fragile }
- # Handle with care: easy to break
- mail.google.
- mybank.example.com</screen>
+{ fragile }
+# Handle with care: easy to break
+mail.google.
+mybank.example.com
+</screen>
<para>