From eb2f9e2782ee3f647de227559ef9396d01f12b5c Mon Sep 17 00:00:00 2001 From: Starbeamrainbowlabs Date: Thu, 15 Aug 2019 17:43:00 +0100 Subject: [PATCH] Add securing ssh section --- Linux-201/Lab-Sheet.md | 116 +++++++++++++++++++++++ Linux-201/images/puttygen-password.png | Bin 0 -> 17759 bytes Linux-201/images/puttygen-randomness.png | Bin 0 -> 4420 bytes Linux-201/images/puttygen.png | Bin 0 -> 12796 bytes 4 files changed, 116 insertions(+) create mode 100644 Linux-201/images/puttygen-password.png create mode 100644 Linux-201/images/puttygen-randomness.png create mode 100644 Linux-201/images/puttygen.png diff --git a/Linux-201/Lab-Sheet.md b/Linux-201/Lab-Sheet.md index 2df2cb5..973c952 100644 --- a/Linux-201/Lab-Sheet.md +++ b/Linux-201/Lab-Sheet.md @@ -26,6 +26,122 @@ - Disable root login - SSH Keys + +### Securing SSH +Used by servers and their administrators across the world to talk to one another, if someone manages to get in who isn't supposed to, they could do all kinds of damage! + +The first, and easiest thing we can do it improve security is to prevent the `root` user logging in. We already have a non-root account that we use `sudo` with, so why allow direct access to `root` at all? Edit `/etc/ssh/sshd_config`, finding the line that says something like this: + +```config +PermitRootLogin yes +``` + +....and change it to + +```config +PermitRootLogin no +``` + +You may need to uncomment the line by removing the `#` symbol preceding it. + +Once done, restart the ssh server like so: + +```bash +sudo systemctl restart ssh +``` + +Your configuration might be slightly different (e.g. it might be `PermitRootLogin without-password`) - but the principle is the same. This adds an extra barrier to getting into your server, as now attackers must not only guess your password, but your username as well (some won't even bother, and keep trying to login to the `root` account!). + +#### Key-based authentication +So we've created a new user account with a secure password (tip: use a password manager if you have trouble remembering it :-)) and disabled root login. Is there anything else we can do? Turns out there is. + +Passwords are not the only we can authenticate against an SSH server. Public private keypairs can be used too - and are much more secure - and convenient - than passwords if used correctly. They are a pair of files on your computer, which are used when you try to login instead of a password. Without the private key, you can't login. + +The exact way you do this depends on the operating system of the local machine you are using to connect to your server. + +##### For Linux users +_If your **local machine** is a Linux computer, then this is the section for you. If your local machine is a **Windows** computer, then skip this section and move onto the one below entitled "For Windows users"._ + +If you are using Linux on your _local machine_ generate your own public-private keypair like so: + + +```bash +ssh-keygen -t ed25519 +``` + +It will ask you a few questions, such as a password to encrypt the private key on disk, and where to save it. Once done, we need to tell `ssh` to use the new public-private keypair. This is fairly easy to do, actually (though it took me a while to figure out how!). Simply edit `~/.ssh/config` (or create it if it doesn't exist), and create (or edit) an entry for your ssh server, making it look something like this: + +```config +Host {bobsrockets.com} + Hostname {ip_address} + Port 22 + IdentityFile {path/to/private/keyfile} +``` + +Change `{bobsrockets.com}` to a short name that's easy to remember. You'll be able to SSH into your server later with `ssh short_name`. + +Change `{ip_address}` to match the IP address of your server (or, if you're lucky enough to have a domain name pointed at your server, use that instead). + +It's the `IdentityFile` line that's important - replace `{path/to/private/keyfile}` with the path to your key file (e.g. `~/.ssh/id_ed25519`). + +With `ssh` configured, we can use a handy little utility called `ssh-copy-id` to copy the SSH public key to the server. Do that like this: + +```bash +ssh-copy-id `{username}@{hostname}` +``` + +Where `{username}` is the username of the new user account you created earlier, and `{hostname}` is the short code from before when you editing your `~/.ssh/config` file. + + +##### For Windows users +_If your **local machine** is a Windows computer, then this is the section for you. If your local machine is a **Linux** computer, then skip this section and move onto the one below entitled "For Windows users"._ + +This section will assume that you are using [PuTTY](https://putty.org/) to connect via SSH to your server. Content in this section is taken from [this DigitalOcean tutorial](https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/create-with-putty/). + + +Start the PuTTYgen program through your Start Menu, or by launching the `puttygen.exe` portable executable. The key generation program looks similar to this: + +![A screenshot of PuTTYgen.](images/puttygen.png) + +_(Above: A screenshot of PuTTYgen. Taken from [this DigitalOcean tutorial](https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/create-with-putty/).)_ + +Set the key type to _ED25519_, and click the generate button. + +You might be prompted to "generate some randomness by moving the mouse over the blank area". This randomness, known as _entropy_, is used to create keys in a secure fashion so that other people can't reproduce them. + +![A screenshot of PuTTYgen generating some randomness.](images/puttygen-randomness.png) + +When the key is generated, you’ll see the public key displayed in a text box. Save this somewhere safe for later. Be sure to scroll within the text area so you copy the entire key. + +Next, you’ll be prompted to enter a passphrase for your SSH key. This improves security by preventing someone who gains access to your private key from using it without also knowing the passphrase. You’ll need to provide your passphrase every time you use this key (unless you use SSH agent software that stores the decrypted key). + +![A screenshot fo PuTTYgen asking for a password.](images/puttygen-password.png) + +When you’re done, click the "save private key" button and select a secure location to keep it. You can name your key whatever you’d like, and the extension `.ppk` is automatically added. + +If you have not entered a passphrase, you will be asked to confirm that you want to save the key without one. We strongly recommend using a passphrase, but you can press enter to bypass this prompt. + +Next, you need to tell your server about your new SSH key. This is done by editing the `~/.ssh/authorized_keys` file. Do that like this: + +```bash +nano ~/.ssh/authorized_keys +``` + +Paste in your public key that saved earlier. Save it and exit, and then ensure it has the correct permissions like so: + +```bash +chown -R username:username ~/.ssh +chmod 0700 ~/.ssh +chmod 0600 ~/.ssh/* +``` + +...replacing `username` with the username of the account you created earlier. + +Now, try opening a new instance of PuTTY and logging into your server with the public key. Before hitting the login button, go to "Connection" -> "SSH" -> "Auth" and select your `.ppk` file. + +If all is well, you should now be logged in with your new public/private keypair. + + ### Setting up a firewall Firewalls control how data is allowed to travel in and out of your computer. In Ubuntu, a firewall called `ufw`, the 'uncomplicated firewall' is already present. It acts as a nice front-end to `iptables`, which I find to be difficult to understand and use. We will be using that as our firewall. If for some reason it is not installed already, install it like so: diff --git a/Linux-201/images/puttygen-password.png b/Linux-201/images/puttygen-password.png new file mode 100644 index 0000000000000000000000000000000000000000..5b9c414194ce595d529bc7a818d1eafb67c073f9 GIT binary patch literal 17759 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 z zRtHyiQLBV2EoY4(V0zt-6+D0{p9{CkJ)&$fER38Ms*xA2=(@vcvQrom6zGT&I;GyB{Zu#4d)pM;>oTts|V2Ij=t67sN-0DuRL}z~MyC zTz=KtAm8>p#P32atz(0TIumNF)y;dOr^r@<;z8n(X)D}owJOF%W=v|L1Z+&=dYD(A4pp2iRYKB!Hd{NE@y7XXJkX&3ubp literal 0 HcmV?d00001 diff --git a/Linux-201/images/puttygen.png b/Linux-201/images/puttygen.png new file mode 100644 index 0000000000000000000000000000000000000000..05502549f55c4768677abd1e46ba4753af04a939 GIT binary patch literal 12796 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 Zz33MJJn|uV`1Bp1AfqB(CTSAzzW{KH#(Dq% literal 0 HcmV?d00001