From 7e55f51738e28c3e3350022fb5a62d97a69ef69f Mon Sep 17 00:00:00 2001 From: Alex Fornuto Date: Mon, 12 Jul 2021 10:51:08 -0500 Subject: [PATCH] Docs backporting (#2351) * fix Transmission sorting in sidebar * rename VSCode Server for alphabetizing and clarity * Transmission BitTorrent Client Guide (#2281) * init transmission guide * Update docs/guides/transmission.md Co-authored-by: bobby <1544881+desimone@users.noreply.github.com> * Update docs/guides/transmission.md Co-authored-by: bobby <1544881+desimone@users.noreply.github.com> * Update docs/guides/transmission.md Co-authored-by: bobby <1544881+desimone@users.noreply.github.com> Co-authored-by: bobby <1544881+desimone@users.noreply.github.com> * update installation source for mkcert (#2340) * Docs sorting (#2346) * fix Transmission sorting in sidebar * rename VSCode Server for alphabetizing and clarity * capitalize Pomerium * Update docs/guides/code-server.md Co-authored-by: Joe Previte * fix naming and sorting for coder-server, add description Co-authored-by: Joe Previte * Docs sorting (#2346) * fix Transmission sorting in sidebar * rename VSCode Server for alphabetizing and clarity * capitalize Pomerium * Update docs/guides/code-server.md Co-authored-by: Joe Previte * fix naming and sorting for coder-server, add description Co-authored-by: Joe Previte * fix code-server title Co-authored-by: bobby <1544881+desimone@users.noreply.github.com> Co-authored-by: Joe Previte --- docs/.vuepress/config.js | 3 +- docs/docs/topics/certificates.md | 2 +- docs/guides/img/transmission-demo.png | Bin 0 -> 46483 bytes docs/guides/readme.md | 17 ++-- docs/guides/transmission.md | 112 ++++++++++++++++++++++++++ 5 files changed, 124 insertions(+), 10 deletions(-) create mode 100644 docs/guides/img/transmission-demo.png create mode 100644 docs/guides/transmission.md diff --git a/docs/.vuepress/config.js b/docs/.vuepress/config.js index d18c6ce3a..0a9e39b91 100644 --- a/docs/.vuepress/config.js +++ b/docs/.vuepress/config.js @@ -157,6 +157,7 @@ module.exports = { "ad-guard", "argo", "cloud-run", + "code-server", "istio", "jwt-verification", "kubernetes", @@ -167,7 +168,7 @@ module.exports = { "tcp", "tiddlywiki", "traefik-ingress", - "code-server", + "transmission", ], }, ], diff --git a/docs/docs/topics/certificates.md b/docs/docs/topics/certificates.md index 6395c1d12..d670bded0 100644 --- a/docs/docs/topics/certificates.md +++ b/docs/docs/topics/certificates.md @@ -52,7 +52,7 @@ In production, we'd use a public certificate authority such as LetsEncrypt. But ```bash # Install mkcert. -go get -u github.com/FiloSottile/mkcert +go get -u filippo.io/mkcert # Bootstrap mkcert's root certificate into your operating system's trust store. mkcert -install # Create your wildcard domain. diff --git a/docs/guides/img/transmission-demo.png b/docs/guides/img/transmission-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..1f45b2733040437c016e76ec33b372ac242ea3c3 GIT binary patch literal 46483 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 + pomerium bittorrent torrent pomerium identity-access-proxy transmission-daemon transmission authentication authorization +description: >- + Learn how to use Pomerium as an authentication and authorization proxy for a Transmission torrent daemon. +--- + +# Securing Transmission's RPC interface. + +This guide demonstrates how Pomerium can secure a [Transmission] daemon. Pomerium is an identity-aware access proxy that can add single-sign-on / access control to any service. + +## Transmission + +[Transmission] is a powerful BitTorrent client that's highly customizable. It's often run remotely as a system daemon, and interacted with through a remote client using a [Remote Procedure Call](https://en.wikipedia.org/wiki/Remote_procedure_call) (**RPC**) interface. + +The BitTorrent protocol is widely used in the distribution of large open-source softwares, like Linux distribution images and source code. Using Transmission as a system daemon, you can monitor and automatically download the latest versions to a local distribution server. + +While there are software clients available to interact with the daemon over RPC, the easiest option is often to use the web interface built into the Transmission daemon package. Unfortunately, the service is only built to communicate over unencrypted HTTP, using basic [HTTP authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication). Using Pomerium, we can encrypt traffic from anywhere in the world to the local network hosting the Transmission service, and restrict access to authenticated users. + +::: warning +Because RPC traffic to and from a Transmission daemon is unencrypted, we strongly suggest you only communicate from Pomerium to Transmission on a trusted private network. Note that some cloud hosting providers differentiate "private networking" (which is visible to all hosts in a data center) from "VLANS" which are only visible to your hosts. While you can configure a local proxy on your Transmission host to provide TLS encryption, that configuration is outside of the scope of this guide. + +Running Pomerium and Transmission on the same host, using [docker](../docs/quick-start) for example, negates this concern. +::: + +## Before You Begin + +This guide assumes you've completed one of the [quick start] guides, and have a running instance of Pomerium configured. This guide also assumes that Pomerium and Transmission will both run on separate hosts (physical or virtual machines) on the same private network (LAN or VLAN), but the configuration could be easily adjusted to fit your setup. + +In addition to a working instance of Pomerium, have ready the [private IP addresses](https://en.wikipedia.org/wiki/Private_network#Private_IPv4_addresses) for the Pomerium and Transmission hosts. If you're running both on the same host, you can substitute `localhost` for both. + +## Configuration + +### Pomerium Config + +Edit your `config.yaml` file to add the following policy. Note that `<>` denotes placeholder values that must be replaced if copying this config directly: + +```yml +policy: + - from: https:// # Replace with the domain you want to use to access Transmission + to: http://:9091 # Replace with the private network address of the Transmission host, or `localhost` if running on the same host. + allowed_users: + - myUser@mydomain.com # Replace with authorized user(s), or remove if using group permissions only. + allowed_groups: + - # Replace with authorized user group(s), or remove if using user permissions only. +``` +Remember to restart the Pomerium instance after saving your changes. + +### Transmission Config + +:::tip +Don't forget to switch your terminal prompt to the Transmission host before continuing. +::: + +1. If you don't already have the Transmission daemon installed, install it through your distro's package manager. The commands to install and configure Transmission below assume a Debian-based Linux distribution, but can be adapted for any Linux distro: + + ```bash + sudo apt update && sudo apt install transmission-daemon + ``` + +1. Because Transmission writes over its configuration file when running, stop the service before continuing: + + ```bash + sudo systemctl stop transmission-daemon.service + ``` + +1. In your preferred text editor, open `/etc/transmission-daemon/settings.json` with `sudo` or as the root user. Look for the following key/value pairs, and edit appropriately. + + - Because we are using Pomerium to authenticate, disable HTTP auth: + + ```json + "rpc-authentication-required": false, + ``` + + - Confirm that RPC is enabled: + + ```json + "rpc-enabled": true, + ``` + + - Enable and configure the RPC Host whitelist. This ensures that the service will only work when accessed from the domain defined in Pomerium's `config.yaml` file (the `policy.from` key). This helps to mitigate DNS hijacking attack vectors: + + ```json + "rpc-host-whitelist": "", + "rpc-host-whitelist-enabled": true, + ``` + + - Enable and configure the RPC whitelist to only allow access from the Pomerium gateway. The value should be the private IP address of the Pomerium host, or `localhost` if running on the same host: + + ```json + "rpc-whitelist": "", + "rpc-whitelist-enabled": true, + ``` + +1. After saving and closing `settings.json`, restart the service: + + ```bash + sudo systemctl start transmission-daemon.service + ``` + +You should now be able to authenticate and access your Transmission daemon remotely in the web browser, with TLS encryption! + +![The Transmission web interface, secured with Pomerium](./img/transmission-demo.png) + +In addition to the lock symbol in your browser's address bar, you can go to `/.pomerium` to view and confirm your session details. + +[Transmission]: https://transmissionbt.com/ +[quick start]: ../docs/quick-start