From e590ffcb6dd158a6908ffae6e5a6f7592701415d Mon Sep 17 00:00:00 2001
From: Matt Traudt <sirmatt@ksu.edu>
Date: Fri, 6 Apr 2018 07:00:39 -0400
Subject: [PATCH] Write first run docs, with notes for futher investigation

---
 README.md | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 167 insertions(+)

diff --git a/README.md b/README.md
index 10be29b1..78dbfc0f 100644
--- a/README.md
+++ b/README.md
@@ -129,6 +129,173 @@ In this directory you will find
   them into this directory. Other sbws commands (such as generate and stats)
   read results from the files in this directory.
 
+## Running sbws for the first time
+
+So you want to run sbws for yourself. You will need
+
+- A machine to measure from, hereafter referred to as *mach-client*.
+- One or more machines to measure to, hereafter referred to as *mach-server*.
+
+Both mach-server and mach-client should be on fast, well connected machines.
+(**XXX can they be on the same machine?**) The *mach-server* should be on a
+machine that is also running a Tor relay, and that Tor relay should be okay
+with modifying its exit policy to allow exiting to one local IP on one port
+(note that the relay will *not* get the Exit flag). Together, the sbws server
+and the Tor relay it is running next to (ideally on the same machine) are
+referred to as a *helper*.
+
+First install sbws as described elsewhere. Make sure you can run `sbws client
+-h` and `sbws server -h` without error before moving on.
+
+**On mach-client** ...
+
+For each helper you intend to use, generate a 64 character password. Set these
+aside for now in a temporary file. Be ready to copy/paste them. Here we
+generate two passwords and store them in a temporary file, annotating which
+helper they are for.
+
+    $ export pwfile=/tmp/sbws-passwords.txt
+    $ echo "#Helper Mine" > $pwfile
+    $ sbws pwgen | tee -a $pwfile
+    $ echo "#Helper John" >> $pwfile
+    $ sbws pwgen | tee -a $pwfile
+
+Now that you have those, open your sbws config file. By default it is located
+in `~/.sbws/config.ini`. *If it does not exist, something went wrong, most
+likley while calling `sbws init`*.
+
+In the `[client]` section, give your client a better nickname.
+
+Create a `[helpers]` section. For every helper you intend to use, add a line to
+the section. For example, if I plan on using a helper I'm running and one that
+John is running, I would add the following:
+
+    [helpers]
+    mine = on
+    john = on
+
+(Note that you can disable helpers without removing them from the config by
+switching "on" to "off")
+
+For every enabled helper, you now need a section for them. In it we give the
+details for the helper relay and its sbws server. This is where you'll need
+those passwords you generated earlier.
+
+    [helpers.mine]
+    relay = 6B4ABE3FA1D4D0D4AEF2FD6C535891333591D06E
+    server_host = freebird.system33.pw
+    server_port = 31648
+    password = G5YqRhj6J28UFIZzg2TI9ENL6kWZCt7qMsFnpLDVAQMZsgUnrbZIoJtkd4WpjzEf
+    
+    [helpers.john]
+    relay = 09FA8B4F665AD65D2C2A49870F1AA3BA8811E449
+    server_host = stanmarsh.system33.pw
+    server_port = 31648
+    password = 6me6bTM7I4yDdzJ6cjZR0PUx5APFvpOLovA2NzNvyWigI3y42bQXDnB3JrG5kprq
+
+(Note that `server_host` can be an IP address. IPv4 will work, IPv6 is
+untested)
+
+(**XXX Can it be 127.0.0.1 ???**)
+
+At this point you are done on mach-client for now. You should verify that the
+configuration is most likely valid by running a simple sbws command and seeing
+if it complains. The following indicates there is no problem.
+
+    $ sbws
+    usage: sbws [-h] [-v] [-q] [-d DIRECTORY]
+                {client,generate,init,pwgen,server,stats} ...
+    [ ... more help output ... ]
+
+While the following indicates there is an issue in your config.
+
+    $ sbws
+    [2018-04-06 08:38:29.122616] [error] [MainThread] client/nickname (Bad_NickName): Letter _ at position 3 is not in allowed characters "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
+    [2018-04-06 08:38:29.122678] [error] [MainThread] helpers.mine is an enabled helper but is not a section in the config
+
+**On mach-server** ...
+
+Recall that mach-server is the machine running a Tor relay and the one were we
+are about to set up an sbws server.
+
+Minor modifications need to be made to the relay's torrc. Assuming this is a
+non-exit relay and you do not want that to change, we need to allow exiting to
+a single IP and port, and that IP is on the local machine. This requires a few
+torrc options.
+
+    # Modifications needed for a non-exit sbws helper relay
+    ExitRelay 1
+    ExitPolicyRejectPrivate 0
+    ExitPolicy accept 33.33.33.33:31648
+    ExitPolicy reject *:*
+    # End modifications needed for a non-exit sbws helper relay
+
+Replace `33.33.33.33` with the IP address of this machine. (**XXX can
+localhost be used?**)
+
+If this is an exit relay, you will still need to set
+`ExitPolicyRejectPrivate 0` and allow exiting to a local IP address on a single
+port; however, *you should take care to block exiting to the rest of local
+address space*. By default Tor would do that for you, but you must now do it
+manually. The exit part of your torrc should look something like this.
+
+    # Exit relay config with modifications needed to run an sbws helper relay
+    ExitRelay 1
+    ExitPolicyRejectPrivate 0
+    ExitPolicy reject 0.0.0.0/8:*
+    ExitPolicy reject 169.254.0.0/16:*
+    ExitPolicy reject 127.0.0.0/8:*
+    ExitPolicy reject 192.168.0.0/16:*
+    ExitPolicy reject 10.0.0.0/8:*
+    ExitPolicy reject 172.16.0.0/12:*
+    [ ... Your usual ExitPolicy options should be here, then ... ]
+    ExitPolicy accept 33.33.33.33:31648
+    ExitPolicy reject *:*
+    # End exit relay config and modifications needed for an exit sbws helper relay
+
+Again, replacing `33.33.33.33` with the IP address of this machine.
+(**XXX can localhost be used?**)
+
+Once you are done editing your torrc, reload Tor. Make sure Tor is still
+running.
+
+It's finally time to get to configuring sbws. Open its config file, located at
+`~/.sbws/config.ini` by default. *If this directory or file does not exist,
+you probably haven't initialized sbws or something went wrong when you did. The
+file should not be empty.* 
+
+Add a `[server]` section to the config and tell sbws to bind to the IP address
+for this machine.
+
+    [server]
+    bind_ip = 33.33.33.33
+
+**XXX Again, can this be localhost?**
+
+Now it's time to tell the sbws which clients we want to allow to use our
+server. Gather the 64 character passwords from all the clients you want to
+allow and add them to a new `[server.passwords]` section.
+
+    [server.passwords]
+    alice = joyrsUxkpvrlt6ZNxXyP4stdMGohZ5OwyqawvMhevzKq2gDFYjWUSsxMQeG5iIRY
+    bob = Ll22MSLm1DOGYXw74c2vyCbnLtRidgaAb7pAOLua62pYoAx8PsTsaC3BN7QUdD4N
+    mine = G5YqRhj6J28UFIZzg2TI9ENL6kWZCt7qMsFnpLDVAQMZsgUnrbZIoJtkd4WpjzEf
+
+(Note if you would like to disallow a client from using your server without
+removing their password completely, comment out their line in this section and
+restart the sbws server)
+
+To check if the config is valid, run `sbws` and check that you get normal usage
+output as described earlier while setting up the sbws client.
+
+Once the config is valid, you should be ready to to run `sbws server` in
+screen, tmux, or something like that.
+
+**On the mach-client** ...
+
+Once all the sbws servers that you want to use are running, you can run
+`sbws client` in screen, tmux, or something like that.
+
 ## Build HTML documentation
 
     pip install -e .[doc]
-- 
GitLab