Giter Club home page Giter Club logo

algo's Introduction

Algo VPN

Twitter

Algo VPN is a set of Ansible scripts that simplify the setup of a personal WireGuard and IPsec VPN. It uses the most secure defaults available and works with common cloud providers. See our release announcement for more information.

Features

  • Supports only IKEv2 with strong crypto (AES-GCM, SHA2, and P-256) for iOS, macOS, and Linux
  • Supports WireGuard for all of the above, in addition to Android and Windows 10
  • Generates .conf files and QR codes for iOS, macOS, Android, and Windows WireGuard clients
  • Generates Apple profiles to auto-configure iOS and macOS devices for IPsec - no client software required
  • Includes a helper script to add and remove users
  • Blocks ads with a local DNS resolver (optional)
  • Sets up limited SSH users for tunneling traffic (optional)
  • Based on current versions of Ubuntu and strongSwan
  • Installs to DigitalOcean, Amazon Lightsail, Amazon EC2, Vultr, Microsoft Azure, Google Compute Engine, Scaleway, OpenStack, CloudStack, Hetzner Cloud, Linode, or your own Ubuntu server (for more advanced users)

Anti-features

  • Does not support legacy cipher suites or protocols like L2TP, IKEv1, or RSA
  • Does not install Tor, OpenVPN, or other risky servers
  • Does not depend on the security of TLS
  • Does not claim to provide anonymity or censorship avoidance
  • Does not claim to protect you from the FSB, MSS, DGSE, or FSM

Deploy the Algo Server

The easiest way to get an Algo server running is to run it on your local system or from Google Cloud Shell and let it set up a new virtual machine in the cloud for you.

  1. Setup an account on a cloud hosting provider. Algo supports DigitalOcean (most user friendly), Amazon Lightsail, Amazon EC2, Vultr, Microsoft Azure, Google Compute Engine, Scaleway, DreamCompute, Linode, or other OpenStack-based cloud hosting, Exoscale or other CloudStack-based cloud hosting, or Hetzner Cloud.

  2. Get a copy of Algo. The Algo scripts will be installed on your local system. There are two ways to get a copy:

    • Download the ZIP file. Unzip the file to create a directory named algo-master containing the Algo scripts.

    • Use git clone to create a directory named algo containing the Algo scripts:

      git clone https://github.com/trailofbits/algo.git
  3. Install Algo's core dependencies. Algo requires that Python 3.10 or later and at least one supporting package are installed on your system.

    • macOS: Catalina (10.15) and higher includes Python 3 as part of the optional Command Line Developer Tools package. From Terminal run:

      python3 -m pip install --user --upgrade virtualenv

      If prompted, install the Command Line Developer Tools and re-run the above command.

      For macOS versions prior to Catalina, see Deploy from macOS for information on installing Python 3 .

    • Linux: Recent releases of Ubuntu, Debian, and Fedora come with Python 3 already installed. If your Python version is not 3.10, then you will need to use pyenv to install Python 3.10. Make sure your system is up-to-date and install the supporting package(s):

      • Ubuntu and Debian:

        sudo apt install -y --no-install-recommends python3-virtualenv file lookup

        On a Raspberry Pi running Ubuntu also install libffi-dev and libssl-dev.

      • Fedora:

        sudo dnf install -y python3-virtualenv
    • Windows: Use the Windows Subsystem for Linux (WSL) to create your own copy of Ubuntu running under Windows from which to install and run Algo. See the Windows documentation for more information.

  4. Install Algo's remaining dependencies. You'll need to run these commands from the Algo directory each time you download a new copy of Algo. In a Terminal window cd into the algo-master (ZIP file) or algo (git clone) directory and run:

    python3 -m virtualenv --python="$(command -v python3)" .env &&
      source .env/bin/activate &&
      python3 -m pip install -U pip virtualenv &&
      python3 -m pip install -r requirements.txt

    On Fedora first run export TMPDIR=/var/tmp, then add the option --system-site-packages to the first command above (after python3 -m virtualenv). On macOS install the C compiler if prompted.

  5. Set your configuration options. Open the file config.cfg in your favorite text editor. Specify the users you wish to create in the users list. Create a unique user for each device you plan to connect to your VPN.

Note: [IKEv2 Only] If you want to add or delete users later, you must select yes at the Do you want to retain the keys (PKI)? prompt during the server deployment. You should also review the other options before deployment, as changing your mind about them later may require you to deploy a brand new server.

  1. Start the deployment. Return to your terminal. In the Algo directory, run ./algo and follow the instructions. There are several optional features available, none of which are required for a fully functional VPN server. These optional features are described in greater detail in here.

That's it! You will get the message below when the server deployment process completes. Take note of the p12 (user certificate) password and the CA key in case you need them later, they will only be displayed this time.

You can now set up clients to connect to your VPN. Proceed to Configure the VPN Clients below.

    "#                          Congratulations!                            #"
    "#                     Your Algo server is running.                     #"
    "#    Config files and certificates are in the ./configs/ directory.    #"
    "#              Go to https://whoer.net/ after connecting               #"
    "#        and ensure that all your traffic passes through the VPN.      #"
    "#                     Local DNS resolver 172.16.0.1                    #"
    "#        The p12 and SSH keys password for new users is XXXXXXXX       #"
    "#        The CA key password is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX       #"
    "#      Shell access: ssh -F configs/<server_ip>/ssh_config <hostname>  #"

Configure the VPN Clients

Certificates and configuration files that users will need are placed in the configs directory. Make sure to secure these files since many contain private keys. All files are saved under a subdirectory named with the IP address of your new Algo VPN server.

Apple Devices

WireGuard is used to provide VPN services on Apple devices. Algo generates a WireGuard configuration file, wireguard/<username>.conf, and a QR code, wireguard/<username>.png, for each user defined in config.cfg.

On iOS, install the WireGuard app from the iOS App Store. Then, use the WireGuard app to scan the QR code or AirDrop the configuration file to the device.

On macOS Mojave or later, install the WireGuard app from the Mac App Store. WireGuard will appear in the menu bar once you run the app. Click on the WireGuard icon, choose Import tunnel(s) from file..., then select the appropriate WireGuard configuration file.

On either iOS or macOS, you can enable "Connect on Demand" and/or exclude certain trusted Wi-Fi networks (such as your home or work) by editing the tunnel configuration in the WireGuard app. (Algo can't do this automatically for you.)

Installing WireGuard is a little more complicated on older version of macOS. See Using macOS as a Client with WireGuard.

If you prefer to use the built-in IPSEC VPN on Apple devices, or need "Connect on Demand" or excluded Wi-Fi networks automatically configured, then see Using Apple Devices as a Client with IPSEC.

Android Devices

WireGuard is used to provide VPN services on Android. Install the WireGuard VPN Client. Import the corresponding wireguard/<name>.conf file to your device, then setup a new connection with it. See the Android setup instructions for more detailed walkthrough.

Windows

WireGuard is used to provide VPN services on Windows. Algo generates a WireGuard configuration file, wireguard/<username>.conf, for each user defined in config.cfg.

Install the WireGuard VPN Client. Import the generated wireguard/<username>.conf file to your device, then setup a new connection with it.

Linux WireGuard Clients

WireGuard works great with Linux clients. See this page for an example of how to configure WireGuard on Ubuntu.

Linux strongSwan IPsec Clients (e.g., OpenWRT, Ubuntu Server, etc.)

Please see this page.

OpenWrt Wireguard Clients

Please see this page.

Other Devices

Depending on the platform, you may need one or multiple of the following files.

  • ipsec/manual/cacert.pem: CA Certificate
  • ipsec/manual/.p12: User Certificate and Private Key (in PKCS#12 format)
  • ipsec/manual/.conf: strongSwan client configuration
  • ipsec/manual/.secrets: strongSwan client configuration
  • ipsec/apple/.mobileconfig: Apple Profile
  • wireguard/.conf: WireGuard configuration profile
  • wireguard/.png: WireGuard configuration QR code

Setup an SSH Tunnel

If you turned on the optional SSH tunneling role, then local user accounts will be created for each user in config.cfg and SSH authorized_key files for them will be in the configs directory (user.ssh.pem). SSH user accounts do not have shell access, cannot authenticate with a password, and only have limited tunneling options (e.g., ssh -N is required). This ensures that SSH users have the least access required to setup a tunnel and can perform no other actions on the Algo server.

Use the example command below to start an SSH tunnel by replacing <user> and <ip> with your own. Once the tunnel is setup, you can configure a browser or other application to use 127.0.0.1:1080 as a SOCKS proxy to route traffic through the Algo server:

ssh -D 127.0.0.1:1080 -f -q -C -N <user>@algo -i configs/<ip>/ssh-tunnel/<user>.pem -F configs/<ip>/ssh_config

SSH into Algo Server

Your Algo server is configured for key-only SSH access for administrative purposes. Open the Terminal app, cd into the algo-master directory where you originally downloaded Algo, and then use the command listed on the success message:

ssh -F configs/<ip>/ssh_config <hostname>

where <ip> is the IP address of your Algo server. If you find yourself regularly logging into the server then it will be useful to load your Algo ssh key automatically. Add the following snippet to the bottom of ~/.bash_profile to add it to your shell environment permanently:

ssh-add ~/.ssh/algo > /dev/null 2>&1

Alternatively, you can choose to include the generated configuration for any Algo servers created into your SSH config. Edit the file ~/.ssh/config to include this directive at the top:

Include <algodirectory>/configs/*/ssh_config

where <algodirectory> is the directory where you cloned Algo.

Adding or Removing Users

If you chose to save the CA key during the deploy process, then Algo's own scripts can easily add and remove users from the VPN server.

  1. Update the users list in your config.cfg
  2. Open a terminal, cd to the algo directory, and activate the virtual environment with source .env/bin/activate
  3. Run the command: ./algo update-users

After this process completes, the Algo VPN server will contain only the users listed in the config.cfg file.

Additional Documentation

Setup Instructions for Specific Cloud Providers

Install and Deploy from Common Platforms

Setup VPN Clients to Connect to the Server

  • Setup Android clients
  • Setup Linux clients with Ansible
  • Setup Ubuntu clients to use WireGuard
  • Setup Linux clients to use IPsec
  • Setup Apple devices to use IPsec
  • Setup Macs running macOS 10.13 or older to use WireGuard

Advanced Deployment

If you've read all the documentation and have further questions, create a new discussion.

Endorsements

I've been ranting about the sorry state of VPN svcs for so long, probably about time to give a proper talk on the subject. TL;DR: use Algo.

-- Kenn White

Before picking a VPN provider/app, make sure you do some research https://research.csiro.au/ng/wp-content/uploads/sites/106/2016/08/paper-1.pdf ... – or consider Algo

-- The Register

Algo is really easy and secure.

-- the grugq

I played around with Algo VPN, a set of scripts that let you set up a VPN in the cloud in very little time, even if you don’t know much about development. I’ve got to say that I was quite impressed with Trail of Bits’ approach.

-- Romain Dillet for TechCrunch

If you’re uncomfortable shelling out the cash to an anonymous, random VPN provider, this is the best solution.

-- Thorin Klosowski for Lifehacker

Support Algo VPN

Flattr PayPal Patreon Bountysource

All donations support continued development. Thanks!

  • We accept donations via PayPal, Patreon, and Flattr.
  • Use our referral code when you sign up to Digital Ocean for a $10 credit.
  • We also accept and appreciate contributions of new code and bugfixes via Github Pull Requests.

Algo is licensed and distributed under the AGPLv3. If you want to distribute a closed-source modification or service based on Algo, then please consider purchasing an exception . As with the methods above, this will help support continued development.

algo's People

Contributors

aboutte avatar adamluk avatar csirac2 avatar davidemyers avatar defunctio avatar dependabot[bot] avatar dguido avatar djds avatar elreydetoda avatar faf0 avatar gitter-badger avatar glennschler avatar gunph1ld avatar jackivanov avatar jauderho avatar jxn avatar kennwhite avatar martey avatar mathew19 avatar michael-myers avatar miwcryptanalytics avatar mrled avatar nihil-admirari avatar pguizeline avatar quentinmoss avatar robnee avatar rvben avatar rvkasper avatar tc1977 avatar tetov avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

algo's Issues

Figure out best options for a custom build of strongSwan

After we get everything working, we should try to trim down the StrongSwan binaries as much as possible by compiling from source and disabling everything we don't use. As a side benefit, this makes it a more unique target for exploitation and ensures that we're using the latest version.

Here my initial review of Autoconf options:

Enable new good features:
--enable-chapoly
--enable-gcm
--enable-openssl
--enable-rdrand

Enable testing support
--enable-conftest
--enable-integrity-test
--enable-test-vectors

Disable legacy ciphers
--disable-cmac
--disable-des
--disable-ikev1
--disable-md5
--disable-rc2
--disable-sha1
--disable-xcbc

Disable unused features
--disable-attr
--disable-dnskey
--disable-pgp
--disable-pkcs1
--disable-pkcs7
--disable-pkcs8
--disable-resolve
--disable-scepclient
--disable-sshkey
--disable-xauth-generic

We'll also need to figure out package signing and write a script to automate this somehow:

We may be able to limit the privileges of the strongSwan daemon even further by running StrongSwan as a non-root user and then limiting it to cap_net_admin. cap_new_raw may be required if we use connmark since it's required by the iptables library that plugin uses.

Generate a .mobileconfig file for Apple users

Apple devices (OS X and iOS) can be automatically configured with mobileconfig files. We should generate one of these files for the user to auto-configure the VPN for their system. There is some more info about this in the StrongSwan documentation.

I have a working mobileconfig file I can share. We can probably add some Jinja2 templates to it and replace the values no problem.

Switch from using PSK to Certificates with easy-rsa-ipsec

https://github.com/ValdikSS/easy-rsa-ipsec

Cheatsheet:

  • ./easyrsa init-pki
  • ./easyrsa build-ca nopass
  • ./easyrsa gen-req dan nopass
  • ./easyrsa sign-req client dan

OR

  • ./easyrsa build-client-full ryan nopass
  • ./easyrsa gen-crl
  • ./easyrsa gen-dh

Alternatives:

Either way, it should be as easy as possible for the administrator to enroll new users to their VPN. We should help the administrator create and sign a certificate, then generate a new mobileconfig file to provide to the user.

EC2: ENI validation and creation

There is currently no ENI check for the EC2 playbook.
If you have not deployed an EC2 instance in a zone previously, then a default network interface will not exist in the zone and EC2 deployment will currently fail.

Dynamic inventory for user management

The EC2 playbook is using the default users-management inventory.

While this is fine for now, in the future support for dynamic inventories with the user management playbook should be integrated. Not just for EC2 but for all providers.

Split the 'features' role in two

The features role really has 2 separate, self-contained services: dns_adblocking and proxies. We should take all of dnsmasq and put it in a role called 'dns_adblocking' and put apache and privoxy into a 'proxy' role by themselves.

Add lightweight ad-blocking to the proxy

Nothing too crazy, let's try to block some of the worst types of advertising with a configuration for the proxy. It should auto-update on a regular basis with a cron job.

Support local installation

We support "remote" installation where we provide the IP and a username to access a device. However, "local" installation is where the user has downloaded algo directly to the server they want to install to. In this mode of installation, there is no need to use SSH.

There are a few issues to overcome to support running the playbooks directly on the target server:

  1. The UI for initial installation and user management. We want to keep both of them as simple as possible. That means avoid creating new options where possible.
  2. The documentation. We need to add something to the readme that is easy to understand. In order to install algo on Ubuntu locally, you need to install ansible first. Installing ansible via pip requires pulling in a lot of dependencies, including a full compiler suite. It is easier to use apt, however, Ubuntu 16.04 only comes with ansible 2.0.0.2. Therefore, to use apt you must use the ansible PPA and using a PPA requires installing software-properties-common.
  3. The bash script does not run in Ubuntu 16.04. /bin/sh on Ubuntu is the dash shell, not bash, and the -s option is not valid. We need to edit the run script to deploy from Ubuntu. The one place in particular where we run into this issue is prompting for the certificate password, which we could remove from the shell script and add to the ansible script.

Here are the dependencies we need for local installation on Ubuntu 16.04:

sudo apt-get install software-properties-common && sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update && sudo apt-get install ansible

@computerality opened a pull request (#47) where some of these issues were discussed.

Sidenote: we may want to use the shellcheck linter to polish up the initial script and find and fix any other compatibility issues.

Rewrite auditd role to use go-audit

auditd is the best security feature that no one uses. As an optional feature, we should have Algo configured to log security-critical information and email it out of the VM on a regular basis. The role should use go-audit to get its job done.

There's a lot of sample auditd configuration from CI Security that we copied over to this repo. We should verify that these rules are appropriate:

https://github.com/trailofbits/algo/blob/master/templates/audit.rules.j2
https://github.com/trailofbits/algo/blob/master/templates/auditd.conf.j2
https://github.com/trailofbits/algo/blob/master/templates/CIS.conf.j2
https://github.com/trailofbits/algo/blob/master/security.yml#L44-L52

Here's a short guide for installing and configuring go-audit:
https://summitroute.com/blog/2016/12/25/Catching_attackers_with_go-audit_and_a_logging_pipeline/

Randomly generate client cert password

It would be nicer to have an easily-typeable but randomly generated password used for the client cert instead of the currently hardcoded password of "vpn"

Add mod_pagespeed and caching to the proxy

Since many users will use the VPN on their mobile phone when they travel, we want to ensure they use less data. One way to do that is by blocking ads. Another way to do that is by compressing the remaining content with mod_pagespeed or a similar set of rules.

Strongswan client installation playbook

This would include strongswan installation, deployment of keys and configurations generated by the server deployment, as well as optional security roles to be applied to the client.

Measure data usage savings from adblocking/compression

We should do an experiment to see how much of an impact the dns ad-blocking and proxies have.

Visit the Alexa top 100 and record the size of the data transfer and speed:

  1. Only the VPN
  2. VPN + PageSpeed
  3. VPN + DNS ad-blocking
  4. VPN + Proxy ad-blocking
  5. VPN + DNS and Proxy ad-blocking + PageSpeed

Confusing "roles/cloud-ec2/tasks does not exist" error tied to lack of default on public SSH key

Though the install script doesn't specifically say that "~/.ssh/id_rsa.pub" will be used as a default, many (including me) may assume it is and simply hit enter during installation. Doing so generates an error: the file_name '/Users//Temp/algo/roles/cloud-ec2/tasks' does not exist, or is not readable."

There is no file by that name, but there is a folder, which adds to the confusion. Further research proved that the problem was assuming the default during installation...leaving the path for the SSH public key blank causes this error.

Suggest making it clear in the installation that there's no default, or else making the path displayed in the prompt an actual default value. Better still, have the ansible script better check for the path and give a more accurate error response.

User friendly provider UI

A friendly wrapper around deploy.yml for deploying to different providers (EC2, DigitalOcean, etc) should be created.

Currently provider selection is done via passing a variable at the command line.
Ex:
ansible-playbook deploy.yml -e "provider=ec2"

While I fully support implementing all options configurable at the command line through variables for scripting purposes, we need a UI for this.

Can't enter p12 password containing quotes

I tried to enter a p12 password like There's No Hamburger! but it results in a crash:

$ ./algo 
-n 
  What provider would you like to use?
    1. DigitalOcean
    2. Amazon EC2
    3. Google Compute Engine
    4. Remote installation (install to existing Ubuntu server)

Enter the number of your desired provider  
: 
1
-n 
Enter the password for p12 certificates (default: vpn):
: 
ERROR! the playbook: No could not be found

I'm running algo from Mac OS X.

Support for *BSD

Particularly interested in FreeBSD, HardenedBSD, and OpenBSD.

Explain Why Aren't You Using OpenVPN in FAQ

The readme says

Does not install Tor, OpenVPN, or other insecure servers

Implying OpenVPN is insecure.

However the FAQ only explains why you are not using Tor, Racoon, LibreSwan, or OpenSwan.

Add a proxy to intercept all network traffic

I'm not sure the best way to do this, but the intention is to strip advertisements and compress what remains with mod_pagespeed or similar. This likely means that either Apache or Nginx are preferred.

I'm not sure if this should be transparent or not. Maybe we can start off by making it require configuration by the user to turn on the HTTP proxy, and then investigate ways to make it transparent later.

OS X error "boto required for this module" during installation

Though I'd installed boto as required, I still got errors on OS X El Capitan with the system not finding boto. Turns out there's a known issue with ansible: ansible/ansible#15019

As suggested, added "ansible_python_interpreter=python" to the "localhost" line in inventory, and it worked fine.

Suggestion: consider adding that setting to the default inventory file, or adding to the README as a possible item needing attention.

Ensure that StrongSwan is wrapped in an AppArmor profile

This issue was automatically created by Allstar and refers to trailofbits/algo.

Security Policy Violation
PR Approvals not configured for branch master


⚠️ There is an updated version of this policy result! Click here to see the latest update


This issue will auto resolve when the policy is in compliance.

Issue created by Allstar. See https://github.com/ossf/allstar/ for more information. For questions specific to the repository, please contact the owner or maintainer.

Figure out how to load certificates onto ChromeOS

It looks like Google Chromebooks only support L2TP, oddly:
https://support.google.com/chromebook/answer/1282338?hl=en

However, the Cisco AnyConnect client is available for Chromebooks and it supports IKEv2. It says that it can only be used with Cisco ASA devices but somehow I doubt that is an enforced technical control.
https://chrome.google.com/webstore/detail/cisco-anyconnect/jacdijibdjifphcecdielmekkmfdpgee?hl=en-US

Does anyone have a Chromebook that they can test on?

Allow the VM to self-destruct after 1 month

Most people will use this script to setup a VPN when they travel. When they return home they might stop using the VPN and forget that the VM still exists. This will cost them money. Let's have the VM self-destruct after a given time period by default. 1 month sounds like a good timeframe.

This has security benefits as well, since an attacker would need to setup infrastructure, services, maybe get a warrant, etc to intercept traffic to/from your VPN server. Routinely rotating the infrastructure makes it much harder to "get a fix" on you.

Here's a great implementation of this idea:

Review rsyslog configuration

We stole a config for this service from the CIS Ubuntu security guide. We should take a closer look at it and see if it's what we really need.

Research the best way to configure iptables

Which one of these is "right"?

  • iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
  • iptables -A POSTROUTING -s 10.0.0.0/24 -m policy --dir out --pol ipsec -j ACCEPT
  • iptables -t nat -A POSTROUTING -o eth0 ! -p esp -j SNAT --to-source [server IP]

Add usage instructions

We should update the README.md with some basic instructions that describe how to use these scripts.

Minor updates to the sshd_config

I discovered ssh_scan and the Mozilla OpenSSH Security Guidelines tonight, and discovered a few enhancements we can make to the sshd_config in the process.

HostKeys are apparently an ordered list and OpenSSH still includes RSA and DSA keys by default. We can remove both of those and leave only the ED25519 and ECDSA keys.

# Supported HostKey algorithms by order of preference.
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

There is a HostKeyAlgorithms parameter in sshd_config but I haven't gone through it in enough detail to pick a list of allowed algorithms yet. I think that simply limiting the host key choices to only the above should do what we want for now.

There is an AuthenticationMethods option in newer version of OpenSSH intended to rollup the list of allowed auth methods into a single place. This should be set to pubkey only:

# Password based logins are disabled - only public key based logins are allowed.
AuthenticationMethods publickey

Astonishingly, OpenSSH does not use seccomp out of the box. You have to configure it by hand.

# Use kernel sandbox mechanisms where possible in unprivilegied processes
# Systrace on OpenBSD, Seccomp on Linux, seatbelt on MacOSX/Darwin, rlimit elsewhere.
UsePrivilegeSeparation sandbox

None of these make algo radically safer, but they are nice to have.

Configure IPv6 on the VPN

This is such an enormous pain in the ass, but to ensure that clients don't leak IPv6 requests we should configure this too. At least for Digital Ocean, this requires manual setup on their end to enable IPv6 for the VM.

OpenDNS and Google DNS both have resolvers we can use.

There's something about proxying NDP requests that we need to figure out too, but I'm not sure what that is right now.

I think it's even possible that a client with a configured IPv6 address could leak requests outside the VPN if IPv6 is not supported by it...

Switch to less common IP ranges

Please use some not so regular IP addresses for rightsubnet and rightdns. Those IP addresses have higher chance of clashing with existing subsets which already exist on user's device. Picking some uncommon subnets (like 10.231.87.0/24) from higher ranges of 10.0.0.0/8 is preferred.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.