Setting Up a Basic Linux Server
In this guide, I’ll show you how to set up and configure a basic Linux server in the DigitalOcean cloud running Debian 7 Wheezy.
Uploading your SSH key
After signing up with DigitalOcean, the first thing you’ll want to do is uploading your public SSH key. This makes it possible to log into your newly created server without typing out a password.
In the DigitalOcean settings, click on the menu item labeled Security. Click the Add SSH Key button and enter a name for your key. Paste the contents of your public key into the SSH Key Content field, and then click Add SSH Key.
If you are running X11 and have xclip
installed, you can copy the contents of
your public key to the clipboard by running the following command:
xclip < ~/.ssh/id_rsa.pub
If you’re running macOS, you can use the pbcopy
utility to copy your key to
the clipboard:
pbcopy < ~/.ssh/id_rsa.pub
Creating your virtual server
DigitalOcean call their virtual servers Droplets.
In the DigitalOcean management console click the main menu item labeled Droplets and then click the Create Droplet button.
Select the Debian 7.0 x64 image.
Select the desired size and region for your Droplet.
Select your SSH key.
Enter a hostname for your server. This hostname can be pretty much anything,
but if you’re going to set up DNS records for this server’s IP address you
should enter the desired fully qualified domain name (e.g.,
yourserver.example.com
) as the hostname. This will automatically set up a
PTR/rDNS record for the server’s IP address.
Click the Create button.
When your Droplet has been created, you will be taken back to the Droplets page. Take note of your server’s IP address in the IP Address column.
Logging in
Now that you have created your virtual server, it’s time to log into it using SSH:
DROPLET_IP=203.0.113.0 # Replace this with your droplet’s IP address
ssh root@$DROPLET_IP
Since you uploaded and selected your SSH key when creating your Droplet, you won’t have to provide a password when logging in.
The first thing you should do after logging in, is changing the root user’s password:
passwd
To ensure that you are up to date with the latest security upgrades, update the package index and then upgrade the system:
apt-get update
apt-get upgrade
Enabling automatic security upgrades
If you don’t want to regularly log into your server to apply security upgrades,
you can activate automatic upgrades. To do this, install the
unattended-upgrades
package:
apt-get install unattended-upgrades
Edit the configuration file.
vi /etc/apt/apt.conf.d/10periodic
Update it to look like this:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
By default, this will only download and install packages labeled as security
upgrades. If you want more packages to be downloaded and installed, edit
/etc/apt/apt.conf.d/50unattended-upgrades
to your preference.
Installing Fail2Ban
Fail2ban is a daemon that monitors log files for failed login attempts and
other suspicious activity, and bans the IP addresses that show malicious signs.
Install it using apt-get
. The default configuration should be sufficient.
apt-get install fail2ban
Configuring the firewall
Linux includes a firewall that can be configured using the iptables
program.
Using the iptables
program can be cumbersome, so instead, we’ll use a
front-end called ufw
(The Uncomplicated Firewall). Install ufw
using
apt-get
:
apt-get install ufw
Configure the firewall to allow connections on port 22, i.e., SSH connections:
ufw allow 22
Enable the firewall. This will tell you that the command may disrupt existing SSH connections and will ask if you want to proceed. Answer y(es).
ufw enable
Setting up a user
Logging in as root for everyday tasks is considered bad practice since it makes
dangerous mistakes easy to make. Instead, you should log in as a normal user
and use the sudo
command whenever you need root privileges. Create your user
and its home directory using the useradd
command:
NEW_USER=alice # Replace this with your desired username
useradd -s /bin/bash -m $NEW_USER
To be able to log in as the new user using your SSH key, copy the
authorized_keys
file from the root user’s .ssh
directory to one in your new
user’s home directory.
mkdir -m 700 /home/$NEW_USER/.ssh
cp ~/.ssh/authorized_keys /home/$NEW_USER/.ssh/authorized_keys
chown -R $NEW_USER:$NEW_USER /home/$NEW_USER
Set a password for your user:
passwd $NEW_USER
Grant sudo
access to your user:
VISUAL=vi visudo
Remove all existing user/group grant lines and add the following at the end,
replacing NEW_USER
with the new user’s username:
root ALL=(ALL) ALL
NEW_USER ALL=(ALL) ALL
Configuring sshd
Configure sshd
to only allow logins from your newly created user using an
authorized SSH public key:
vi /etc/ssh/sshd_config
Find the following line:
PermitRootLogin yes
Change it to say no:
PermitRootLogin no
Uncomment this line:
#PasswordAuthentication yes
Also, change it to say no:
PasswordAuthentication no
At the bottom of the file, add the following—again, replacing NEW_USER
with
the new user’s username:
AllowUsers NEW_USER
Restart sshd
for the changes to take effect:
service ssh restart
Open another terminal window on your local machine and ensure that you can log into your server using your new user before logging out as root:
ssh NEW_USER@DROPLET_IP
You now have a basic Linux server set up and can proceed with setting up other services.