hbock / torbel

Tor exit list exporter and dns blocklist

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

About TorBEL
============

TorBEL is a server that attempts to answer one thing and one thing
only for its clients:

  Does this traffic originate from the Tor network?

TorBEL continuously maintains a database of currently running exit
nodes and their exit policies.  It allows clients to query for any
valid IP address and port combination and will return whether or not
this combination represents a recently active Tor exit node.

TorBEL also continuously connects to these exit nodes to ensure that
traffic is able to exit from the node and that traffic indeed exits
from the IP address advertised by the node.

Software Requirements
=====================

The following are required to run TorBEL on your system:

 - Tor 0.2.2.30-rc or higher recommended, with an open
   control port.
 - Python (>= 2.5 is required, >= 2.6 is recommended and
           required for JSON support)
 - Twisted (>= 8.1.0 tested, >= 10.0.0 recommended)
 - Recent Git version of TorCtl
 - flup (if using checkweb.py)
 - ipaddr-py (for query and dnsel)

Network Requirements
====================

TorBEL's controller tests a number of ports by connecting back to
itself over the Tor network.  It is recommended to run the TorBEL
controller on a DMZ interface where any and all traffic can reach
it, otherwise active testing will not work properly.

It is not recommended to use the Tor instance controlled by TorBEL for
other purposes, to maximize performance and reliability.  Using a
normal Tor client won't work at all while TorBEL is running, as it
sets __LeaveStreamsUnattached to manage its own SOCKS connections and
circuits.  If you wish to run a relay on the same machine as TorBEL,
it is imperative that you run two separate instances of Tor.

TorBEL sets the following Tor configuration options independent of what
is available in your torrc:
   - __LeaveStreamsUnattached 1
   - FetchUselessDescriptors 1
   - FetchDirInfoEarly 1
   - FetchDirInfoExtraEarly 1   (Tor >= 0.2.2.13-alpha)
   - LearnCircuitBuiltTimeout 0 (Tor >= 0.2.2.14-alpha)
   - WarnUnsafeSocks 0          (Tor >= 0.2.2.14-alpha)
   - FetchV2Networkstatus 1     (Tor >= 0.2.2.26-beta)
These options significantly affect Tor's operation and thus you should
not run other applications that depend on Tor's normal operation with
the same instance used by TorBEL.

The TorBEL controller must be able to bind to privileged ports (<
1024) if test_port_list contains privileged ports in config.py.  On
Linux, a process must be given the capability CAP_NET_BIND_SERVICE to
bind privileged ports.  This is difficult to set for Python scripts,
therefore it is recommended to run TorBEL as root.  TorBEL will drop
privileges to the user specified in config.py immediately after
binding to privileged ports.

Running TorBEL
==============

Resource Limit Considerations
-----------------------------

When running TorBEL as an active testing suite (why aren't you? :)),
TorBEL's performance is limited directly by the maximum number of file
descriptors it can open (queried via getrlimit(2)) and the maximum
number of circuits you configure it to use. You should set the hard
limit of the 'nofile' resource to a large number, perhaps related to
the maximum number of files open system-wide.  On Linux, this
information is available in the /proc filesystem:

 $ cat /proc/sys/fs/file-max

You can increase the hard limit of file descriptors by editing
/etc/security/limits.conf; you should do this for the root user if you
need to start TorBEL as root as your 'nofile' resource limits retain
their root-specific values even after calling set(e)gid/set(e)uid.  If
you run TorBEL as an unprivileged user entirely, you should set the
limits for that user.  An example /etc/security/limits.conf
configuration:

root             hard    nofile          65535

Please note that TorBEL doesn't care about your soft limits.  It will
always increase the 'nofile' soft limit to its hard limit, even if you
don't want it to.  But you really do want it to.

The default value of max_running_circuits is 200; if you have a fast
machine and a fast ISP, setting this even higher is recommended for
faster throughput.  500 is a good number for a fast connection.

System/Library Path Considerations
----------------------------------

TorBEL must be able to find the TorCtl and torbel modules.  It does
not (at the moment) require any other part of the torflow suite.  Make
sure your PYTHONPATH environment includes the path of the TorCtl and
torbel source trees.  It is recommended to put them in the same root
directory and set your PYTHONPATH accordingly:

PYTHONPATH=/path/to/torbel_and_torctl

TorBEL Configuration
--------------------

After cloning the TorBEL source tree, copy the example configuration
file to config.py:

  $ cp config.py.example config.py

And edit it.  At present, the TorBEL controller does not support
authentication methods other than HashedControlPassword.  This will
be fixed in a later revision.

The TorBEL controller can be executed directly from the source tree
as follows:

  $ ./torbel

If torbel is invoked via sudo, it may not inherit your PYTHONPATH
environment variable.  In this case, you should set it explicitly
at runtime:

  $ sudo PYTHONPATH=/path/to/tor/modules ./torbel

Logging
-------

If the output of TorBEL is too noisy, feel free to increase the
minimum logging severity in config.py.  The default is NOTICE, which
is appropriate for operating in a production environment.  Set to INFO
if you'd like to see more test results, and DEBUG if you'd like
something that's usable for development and testing.  VERBOSE[12]
should only be used if you have a lot of disk space and something is
really broken :)

The default behavior in config.py.example has TorBEL log to syslog
only (using the daemon facility) if it is running as a daemon
(daemonize = True) and to standard output only if it is not.

You can configure TorBEL to log to any combination of stdout, syslog,
and a (non-rotated) log file.  Logging to file is extremely useful for
debugging.  Be warned that if your log_level is set to DEBUG or lower,
your daemon.log (or wherever your syslog ends up) will get utterly
spammed.  You have been warned!

About

Tor exit list exporter and dns blocklist

License:Other


Languages

Language:Python 100.0%