Install UFW
UFW is installed by default in Ubuntu 18.04, but you can verify this:
which ufw
You should receive the following output:
/usr/sbin/ufw
If you don't receive output, that means that UFW is not installed. You can install it yourself if this is the case:
sudo apt-get install ufw
Allow connections
If you are running a web server, you want the world to be able to access your website(s). Therefore, you need to make sure that the default TCP ports for web are open.
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
In general, you can allow any port you need by using the following format:
sudo ufw allow <port>/<optional: protocol>
Deny connections
If you need to deny access to a certain port, use the deny
command:
sudo ufw deny <port>/<optional: protocol>
For example, you can deny access to your default MySQL port:
sudo ufw deny 3306
UFW also supports a simplified syntax for the most common service ports:
root@ubuntu:~$ sudo ufw deny mysql
Rule updated
Rule updated (v6)
It is highly recommended that you restrict access to your SSH port, (by default, this is port 22
), from anywhere except your trusted IP addresses.
Allow access from a trusted IP address
Typically, you would need to allow access only to publicly open ports, such as port 80
. Access to all other ports should be restricted or limited. You can whitelist your home or office IP address, (preferably a static IP), to be able to access your server through SSH or FTP:
sudo ufw allow from 192.168.0.1 to any port 22
You can also allow access to the MySQL port:
sudo ufw allow from 192.168.0.1 to any port 3306
Enable UFW
Before enabling (or restarting) UFW, you need to make sure that the SSH port is allowed to receive connections from your IP address. To start/enable your UFW firewall, use the following command:
sudo ufw enable
You will see the following output:
root@ubuntu:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Press Y, then press ENTER to enable the firewall:
Firewall is active and enabled on system startup
Check UFW status
Print the UFW rule list:
sudo ufw status
You will see output similar to the following:
Status: active
To Action From
-- ------ ----
80/tcp DENY Anywhere
443/tcp DENY Anywhere
3306 DENY Anywhere
22 ALLOW 192.168.0.1
3306 ALLOW 192.168.0.1
80/tcp (v6) DENY Anywhere (v6)
443/tcp (v6) DENY Anywhere (v6)
3306 (v6) DENY Anywhere (v6)
Use the verbose
parameter to see a more detailed status report:
sudo ufw status verbose
That output will resemble the following:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
80/tcp DENY IN Anywhere
443/tcp DENY IN Anywhere
3306 DENY IN Anywhere
22 ALLOW IN 192.168.0.1
3306 ALLOW IN 192.168.0.1
80/tcp (v6) DENY IN Anywhere (v6)
443/tcp (v6) DENY IN Anywhere (v6)
3306 (v6) DENY IN Anywhere (v6)
Disable/reload/restart UFW
If you need to reload the firewall rules run the following:
sudo ufw reload
To disable, or stop UFW:
sudo ufw disable
In order to restart UFW, you will need to disable it first, and then enable it again:
sudo ufw disable
sudo ufw enable
Note: Before enabling UFW, make sure that the SSH port is allowed for your IP address.
Removing rules
To manage your UFW rules, you need to list them. You can do that by checking UFW status with the parameter numbered
:
sudo ufw status numbered
You will see output similar to the following:
Status: active
To Action From
-- ------ ----
[ 1] 80/tcp DENY IN Anywhere
[ 2] 443/tcp DENY IN Anywhere
[ 3] 3306 DENY IN Anywhere
[ 4] 22 ALLOW IN 192.168.0.1
[ 5] 3306 ALLOW IN 192.168.0.1
[ 6] 80/tcp (v6) DENY IN Anywhere (v6)
[ 7] 443/tcp (v6) DENY IN Anywhere (v6)
[ 8] 3306 (v6) DENY IN Anywhere (v6)
Now, to remove any of these rules, you will need to use these numbers in the square brackets:
sudo ufw delete [number]
To remove the HTTP
rule, (80
), use the following command:
sudo ufw delete 1
Enabling IPv6 support
If you use IPv6 on your VPS, you need to ensure that IPv6 support is enabled in UFW. To do so, open the config file in a text editor:
sudo vi /etc/default/ufw
Once opened, make sure that IPV6
is set to "yes":
IPV6=yes
After making this change, save the file. Then, restart UFW by disabling and re-enabling it:
sudo ufw disable
sudo ufw enable
Back to default settings
If you need to go back to default settings, simply type in the following command. This will revert any of your changes:
sudo ufw reset
Congratulations, you've just set up some basic firewall rules. To learn some more examples, check out the UFW - Community Help Wiki.