| 1 | = Secure SHell (SSL) = |
| 2 | |
| 3 | In this lab we are using your host machine as the ssh client and your Ubuntu VM as the ssh server. Download following applications |
| 4 | - [https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe PuTTY] (the Telnet and SSH client itself) |
| 5 | - [https://the.earth.li/~sgtatham/putty/latest/w64/puttygen.exe PuTTYgen] (an RSA and DSA key generation utility |
| 6 | |
| 7 | == Setting up virtualbox == |
| 8 | |
| 9 | === Installation of VirtualBox and Downloading Ubuntu iso image === |
| 10 | - Download and install VirtualBox |
| 11 | - Download Ubuntu image from [https://releases.ubuntu.com/20.04.3/ubuntu-20.04.3-live-server-amd64.iso here] |
| 12 | - Note down the location of the downloaded iso file |
| 13 | |
| 14 | === Creating the VM === |
| 15 | - Start virtualbox and Click on New button (at top-right) to create new virtual machine |
| 16 | - Enter name of the VM as: '''Ubuntu'''. |
| 17 | - Select OS Type: '''Linux''' |
| 18 | - Select Version: '''Ubuntu (64-bit)''' |
| 19 | - Then click on '''Continue''' button |
| 20 | - Set VM's memory size to '''1024MB''' and click on Continue button |
| 21 | - Set VM's hard disk option to '''Create a virtual hard disk now''' and then click on '''Continue''' |
| 22 | - Select disk type to '''VDI''' |
| 23 | - Select storage type to '''Fixed size''' and '''Continue''' |
| 24 | - Make sure virtual hard disk file name in following format |
| 25 | '''Ubuntu''' |
| 26 | - adjust the disk size to '''12.0GB''' and click on '''Create''' to create the VM |
| 27 | |
| 28 | This might take a couple of minutes |
| 29 | |
| 30 | (Note down the location of vdi image file when VirtualBox flashes it on the screen) |
| 31 | |
| 32 | === Setting up Network Interface === |
| 33 | |
| 34 | - Select the VM from the left panel on Virtual box, right-click and open '''Settings''' |
| 35 | - Click on the '''Network''' title |
| 36 | - On '''Adapter 1''' While ''Enable'' Network Adapter selected choose Attached to be '''Bride Adapter'''. |
| 37 | |
| 38 | === Setting up boot device and Booting=== |
| 39 | |
| 40 | - Click on '''Storage''' title and select '''CD ROM icon''' with Caption "Empty" under the '''Controller:IDE''', Click on CD ROM icon under the '''Attribute''' on the left side to select |
| 41 | - Select '''Choose a disk file''' |
| 42 | - Locate the '''Ubuntu CD Image''' file you downloaded. Press OK to close the settings window. |
| 43 | - Right-click on VM and select Start to make a '''Normal Start'''. You should now see a separate window with Installation screen" |
| 44 | |
| 45 | === Installation === |
| 46 | |
| 47 | Installation is quite simple. You can figure it out yourself but make sure to select OpenSSH server when it asks. |
| 48 | |
| 49 | |
| 50 | |
| 51 | == Password Based Authentication == |
| 52 | - Go to your host machine. |
| 53 | - Start PuTTY utility, by double-clicking on its .exe file. |
| 54 | - In the Host Name field, enter the IP address/Hostname of ssh server |
| 55 | [[Image(https://ws.learn.ac.lk/raw-attachment/wiki/netsec2018ssh/putty.png)]] |
| 56 | |
| 57 | - Click open. |
| 58 | - It will ask for username followd by password. |
| 59 | - Logout/close this session. |
| 60 | |
| 61 | == Public Key Authentication == |
| 62 | |
| 63 | === Generating OpenSSH-compatible Keys for Use with PuTTY === |
| 64 | To generate a set of RSA keys with PuTTYgen |
| 65 | |
| 66 | - Start the PuTTYgen utility, by double-clicking on its .exe file. |
| 67 | - For Type of key to generate, select SSH-2 RSA |
| 68 | - In the Number of bits in a generated key field, specify either 2048 or 4096 (increasing the bits makes it harder to crack the key by brute-force methods). |
| 69 | - Click the Generate button. |
| 70 | [[Image(https://ws.learn.ac.lk/raw-attachment/wiki/netsec2018ssh/puttygen.png)]] |
| 71 | |
| 72 | - Move your mouse pointer around in the blank area of the Key section, below the progress bar (to generate some randomness) until the progress bar is full. |
| 73 | [[Image(https://ws.learn.ac.lk/raw-attachment/wiki/netsec2018ssh/puttygen1.png)]] |
| 74 | |
| 75 | - A private/ public key pair has now been generated. |
| 76 | - In the Key comment field, enter your email address. |
| 77 | - The Key passphrase field & re-type the same passphrase in the Confirm passphrase field.9. Click the Save private key button and save as private_key . |
| 78 | - Right-click in the text field labeled Public key for pasting into OpenSSH authorized_keys file and choose Select All. |
| 79 | [[Image(https://ws.learn.ac.lk/raw-attachment/wiki/netsec2018ssh/puttygen2.png)]] |
| 80 | |
| 81 | - Right-click again in the same text field and choose Copy. |
| 82 | - Open notepad; paste the public key and save it as txt file. |
| 83 | |
| 84 | === Save The Public Key On The Server === |
| 85 | Now, you need to paste the copied public key in the file ~/.ssh/authorized_keys on your server. |
| 86 | |
| 87 | - Log in to your destination server using putty with username apnic |
| 88 | - If your SSH folder does not yet exist, create it manually |
| 89 | {{{ |
| 90 | mkdir ~/.ssh |
| 91 | chmod 0700 ~/.ssh |
| 92 | touch ~/.ssh/authorized_keys |
| 93 | chmod 0644 ~/.ssh/authorized_keys |
| 94 | }}} |
| 95 | - Paste the SSH public key into your ~/.ssh/authorized_keys file: |
| 96 | {{{ |
| 97 | sudo vi ~/.ssh/authorized_keys |
| 98 | }}} |
| 99 | - Tap the '''i''' key on your keyboard & right-click your mouse to paste. |
| 100 | - To save, tap the following keys on your keyboard (in this order): '''Esc, :wq''' Enter. |
| 101 | |
| 102 | === Create a PuTTY Profile to Save Your Server’s Settings === |
| 103 | In PuTTY, you can create (and save) profiles for connections to your various SSH servers, so you don't have to remember, and continually re-type, redundant information. |
| 104 | - Start PuTTY by double-clicking its executable file. |
| 105 | - PuTTY's initial window is the Session Category (navigate PuTTY's various categories, along the left- hand side of the window). |
| 106 | - In the Host Name field, enter the IP address/Hostname of ssh server |
| 107 | - Enter the port number in the Port field as 22 |
| 108 | - Along the left-hand side of the window, select Connection > SSH > Auth |
| 109 | [[Image(https://ws.learn.ac.lk/raw-attachment/wiki/netsec2018ssh/puttyauth.png)]] |
| 110 | |
| 111 | - Browse your file system and select your previously created private key. |
| 112 | - Return to the Session Category and enter a name for this profile in the Saved Sessions field. |
| 113 | - Click the Save button for the Load, Save or Delete a stored session area. |
| 114 | Now you can go ahead and log in and you will not be prompted for a password. However, if you had set a passphrase on your public key, you will be asked to enter the passphrase at that time (and every time you log in, in the future). |
| 115 | |
| 116 | == Two Factor Authenticating == |
| 117 | We will enable two-factor authentication in our ubuntu server. To implement that we are going to use multifactor authentication with Google Authenticator. |
| 118 | |
| 119 | === Google auhtenticator === |
| 120 | - Install Google Authenticator from following link in your Android device/iPhone/iPad/BlackBerry/Firefox devices |
| 121 | {{{ |
| 122 | https://support.google.com/accounts/answer/1066447?hl=en |
| 123 | }}} |
| 124 | - Follow the instruction and install the app on your mobile. |
| 125 | - Or you can search for google-authenticator in Google Play or Apple Store. |
| 126 | |
| 127 | === Create an Authentication Key === |
| 128 | - Go to the Ubuntu VM |
| 129 | - Install google-authenticator module first: |
| 130 | {{{ |
| 131 | sudo apt-get update |
| 132 | sudo apt-get install libpam-google-authenticator |
| 133 | }}} |
| 134 | - Log in as the user you’ll be logging in with remotely and run the google-authenticator command to create a secret key for that user. |
| 135 | {{{ |
| 136 | $ google-authenticator |
| 137 | |
| 138 | Do you want authentication tokens to be time-based (y/n) y |
| 139 | }}} |
| 140 | - You will get some QR code ouput like bellow: |
| 141 | [[Image(https://ws.learn.ac.lk/raw-attachment/wiki/netsec2018ssh/qr.png)]] |
| 142 | |
| 143 | You will be prompted for some configurations. |
| 144 | - Scan the QRcode that appears with the Google Authenticator app or you can add the secret key Google Authenticator app. |
| 145 | - Save the backup codes listed somewhere safe. They will allow you to regain access if you lose your phone with the Authenticator app. |
| 146 | - Next it will ask several question; unless you have a good reason to, the defaults presented are sane. Just enter "y" for them. |
| 147 | {{{ |
| 148 | Do you want me to update your "/home/myuser/.google_authenticator" file (y/n) |
| 149 | Do you want to disallow multiple uses of the same authentication |
| 150 | token? This restricts you to one login about every 30s, but it increases |
| 151 | your chances to notice or even prevent man-in-the-middle attacks (y/n) |
| 152 | By default, tokens are good for 30 seconds and in order to compensate for |
| 153 | possible time-skew between the client and the server, we allow an extra |
| 154 | token before and after the current time. If you experience problems with poor |
| 155 | time synchronization, you can increase the window from its default |
| 156 | size of 1:30min to about 4min. Do you want to do so (y/n) |
| 157 | If the computer that you are logging into isn't hardened against brute-force |
| 158 | login attempts, you can enable rate-limiting for the authentication module. |
| 159 | By default, this limits attackers to no more than 3 login attempts every 30s. |
| 160 | Do you want to enable rate-limiting (y/n) |
| 161 | }}} |
| 162 | |
| 163 | === Enable two factor authentication for SSH === |
| 164 | - Edit the /etc/pam.d/sshd file |
| 165 | {{{ |
| 166 | sudo vi /etc/pam.d/sshd |
| 167 | }}} |
| 168 | - Add the following line: |
| 169 | {{{ |
| 170 | auth required pam_google_authenticator.so |
| 171 | }}} |
| 172 | - ''':wq''' Save and quit. |
| 173 | - Edit /etc/ssh/sshd_config file |
| 174 | {{{ |
| 175 | sudo vi /etc/ssh/sshd_config |
| 176 | }}} |
| 177 | - Search for '''ChallengeResponseAuthentication''' and replace no with yes |
| 178 | {{{ |
| 179 | ChallengeResponseAuthentication yes |
| 180 | }}} |
| 181 | - ''':wq''' Save and quit. |
| 182 | - Now you need to reload the ssh service. You can do it to way: |
| 183 | {{{ |
| 184 | sudo service ssh restart |
| 185 | }}} |
| 186 | |
| 187 | === Login to the server === |
| 188 | Try to ssh to the server from a new terminal. It will ask for the verification code. |