Page 1 of 1

[HowTo] Set Up a Firewall with UFW on Ubuntu 18.04

Posted: Thu Sep 13, 2018 5:32 pm
by xorro
Install UFW

Uncomplicated Firewall should be installed by default in Ubuntu 18.04, but if it is not installed on your system, you can install the package by typing:

Code: Select all

sudo apt install ufw
Check UFW Status

Once the installation is completed you can check the status of UFW with the following command:

Code: Select all

sudo ufw status verbose
UFW is disabled by default and if you just installed or never activated UFW before, the output will look like this:

Code: Select all

Status: inactive
If UFW is activated, the output will look similar to the following:

Image

UFW Default Policies

By default, UFW will block all of the incoming connections and allow all outbound connections. This means that anyone trying to access your server will not be able to connect unless you specifically open the port, while all applications and services running on your server will be able to access the outside world.

The default polices are defined in the /etc/default/ufw file and can be changed using sudo ufw default <policy> <chain>

Firewall policies are the foundation for building more detailed and user-defined rules. In most cases the initial UFW Default Policies are a good starting point.
Application Profiles

When installing a package with apt it will add an application profile to /etc/ufw/applications.d directory that describes the service and contain UFW settings.

You can list all application profiles available on your server by typing:

Code: Select all

sudo ufw app list
Depending on the packages installed on your system the output will look similar to the following:

Code: Select all

Available applications:
  Dovecot IMAP
  Dovecot POP3
  Dovecot Secure IMAP
  Dovecot Secure POP3
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH
  Postfix
  Postfix SMTPS
  Postfix Submission
If you want to find more information about a profile and included rules you can use the following command:

Code: Select all

sudo ufw app info 'Nginx Full'

Code: Select all

Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Code: Select all

Ports:
  80,443/tcp
As you can see from the output above the ‘Nginx Full’ profile opens port 80 and 443,
Allow SSH Connections

Before enabling the UFW firewall we need to add a rule which will allow incoming SSH connections. If you’re connecting to your server from a remote location, which is almost always the case and you enable the UFW firewall before explicitly allow incoming SSH connections you will no longer be able to connect to your Ubuntu server.

To configure your UFW firewall to allow incoming SSH connections, type the following command:

Code: Select all

sudo ufw allow ssh

Code: Select all

Rules updated
Rules updated (v6)
If you changed the SSH port to a custom port instead of the port 22, you will need to open that port. If for example your ssh daemon listens on port 4422, then you can use the following command to allow connections on that port:

Code: Select all

sudo ufw allow 4422/tcp
Enable UFW

Now that your UFW firewall is configured to allow incoming SSH connections, we can enable it by typing:

Code: Select all

sudo ufw enable

Code: Select all

Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
You will be warned that enabling the firewall may disrupt existing ssh connections, just type y and hit Enter.

Allow connections on other ports

Depending on the applications that run on your server and your specific needs you need to allow incoming access to other ports.

Below we will show you a few examples of how to allow incoming connections to some of the most common services:

Open port 80 - HTTP

HTTP connections can be allowed with the following command:

Code: Select all

sudo ufw allow http
instead of http you can use the port number, 80:

Code: Select all

sudo ufw allow 80/tcp
or you can use the application profile, in this case ‘Nginx HTTP’:

Code: Select all

sudo ufw allow 'Nginx HTTP'
Open port 443 - HTTPS

HTTP connections can be allowed with the following command:

Code: Select all

sudo ufw allow https
To achieve the same instead of https you can use the port number, 443:

Code: Select all

sudo ufw allow 443/tcp
or you can use the application profile, in this case ‘Nginx HTTPS’:

Code: Select all

sudo ufw allow 'Nginx HTTPS'
Copy
Open port 8080

If you run Tomcat or any other application that listens on port 8080 to allow incoming connections type:

Code: Select all

sudo ufw allow 8080/tcp
Allow Port Ranges

Instead of allowing access to single ports UFW allows us to allow access to port ranges. When allowing port ranges with UFW, you must specify the protocol, either tcp or udp. For example if you want to allow ports from 7100 to 7200 on both tcp and udp then run the following command:

Code: Select all

sudo ufw allow 7100:7200/tcp
sudo ufw allow 7100:7200/udp
Allow Specific IP Addresses

If you want to allow access on all ports from your home machine with IP address of 64.63.62.61, then you need to specify from before the IP address:

Code: Select all

sudo ufw allow from 64.63.62.61
Allow Specific IP Addresses on Specific port

To allow access on a specific port lets say port 22 from your work machine with IP address of 64.63.62.61, then you need to specify to any port and the port number after the IP address:

Code: Select all

sudo ufw allow from 64.63.62.61 to any port 22
Allow Subnets

The command for allowing connection to a subnet of IP addresses is same as when using a single IP address, the only difference is that you need to specify the netmask. For example if you want to allow access for IP addresses ranging from 192.168.1.1 to 192.168.1.254 to port 3360 (MySQL) you can use this command:

Code: Select all

sudo ufw allow from 192.168.1.0/24 to any port 3306
Allow Connections to a Specific Network Interface

To allow access on a specific port let’s say port 3360 only to specific network interface eth2, then you need to specify to allow in on and the name of the network interface:

sudo ufw allow in on eth2 to any port 3306

Deny connections

The default policy for all incoming connections is set to deny and if you haven’t changed it, UFW will block all incoming connection unless you specifically open the connection.

Let’s say you opened the ports 80 and 443 and your server is under attack from the 23.24.25.0/24 network. To deny all connections from 23.24.25.0/24 you can use the following command:

Code: Select all

sudo ufw deny from 23.24.25.0/24
If you only want to deny access to ports 80 and 443 you can use the following command:

Code: Select all

sudo ufw deny from 23.24.25.0/24 to any port 80
sudo ufw deny from 23.24.25.0/24 to any port 443
Writing deny rules is same as writing allow rules, you only need to replace allow with deny.

Delete UFW Rules

There are two different ways to delete UFW rules, by rule number and by specifying the actual rule.

Deleting UFW rules by rule number is easier especially if you are new to UFW. To delete a rule by a rule number first you need to list rules by numbers, you can do that with the following command:

Code: Select all

sudo ufw status numbered

Code: Select all

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 8080/tcp                   ALLOW IN    Anywhere
To delete rule number 3, the rule that allows connections to port 8080, you can use the following command:

Code: Select all

sudo ufw delete 2
The second method is to delete a rule by specifying the actual rule, for example if you added a rule to open port 8069 you can delete it with:

Code: Select all

sudo ufw delete allow 8069
Disable UFW

If for any reason you want to stop UFW and deactivate all rules you can use:

Code: Select all

sudo ufw disable
later if you want to re-enable UTF and activate all rules just type:

Code: Select all

sudo ufw enable
Reset UFW

Reseting UFW will disable UFW, and delete all active rules. This is helpful if you want to revert all of your changes and start fresh.

To reset UFW simply type in the following command:

Code: Select all

sudo ufw reset