Introduction
Security is very important thing to consider when you run your own server. The UFW (uncomplicated firewall) is a frontend for managing firewall rules and it is easy to use for host-based firewalls. UFW is used through the command line interface and aims to make firewall configuration easy.
Iptables is one of the most popular firewall tool used by system administrators. It is used to manage and secure incoming and outgoing connections in the server, but iptables runs in console mode and it is very complex to manage and configure. The ufw is an application firewall used to manage an iptables based firewall on Ubuntu that gives a framework for managing netfilter rules, as well as providing a command-line interface for controlling the firewall rules.
You can allow and block various services by port, network interface and source IP address using the UFW firewall. If you are beginner and are looking to get started securing your network, then the UFW is right choice for you.
In this tutorial, we will learn the UFW commands with different options to secure various services on Ubuntu 16.04.
- Ubuntu-16.04 installed on your system
- A non-root user account with sudo privilege set up on your system
Installing UFW
In Ubuntu 16.04, UFW is installed by default. If not, you can easily install it by running the following command:
sudo apt-get install ufw
You can also check the status of UFW by running the following command:
sudo ufw status
You should see the following output:
Status: inactive
If you see above output, it means it’s not active. You can enable it by just running the following command:
sudo ufw enable
You should see the following output:
Firewall is active and enabled on system startup
To disable it, run the following command:
sudo ufw disable
List Out the Current UFW Rules
You can list the default firewall rules by using the following command:
sudo ufw status verbose
You should see the following output:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
You should see that by default every incoming connection is denied.
Allow Incoming Connections
If you want to access your system from remote machine then you will need to allow SSH connections.
You can allow SSH by running the following command:
sudo ufw allow ssh
or
sudo ufw allow 22/tcp
Output:
Rule added
Rule added (v6)
Now, check the status of ufw:
sudo ufw status
You should see the output like this:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
22/tcp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
Deny Incoming Connections
If you want to deny access to a certain port then you can use the following format:
sudo ufw deny "Port/Protocol"
For example, you can deny access to port 80 by running the following command:
sudo ufw deny 80/tcp
Allow Port Range
You can also add port ranges into the rules. For example, if you want to allow ports from 2100 to 2200 with tcp protocol then run the following command:
sudo ufw allow 2100:2200/tcp
Now, check the status for the ufw:
sudo ufw status
You should see the following output:
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
22/tcp ALLOW Anywhere
80/tcp DENY Anywhere
2200:2300/tcp ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) DENY Anywhere (v6)
2100:2200/tcp (v6) ALLOW Anywhere (v6)
Application Profiles
You can list out application profiles available on your local system. To do so, run the following command:
sudo ufw app list
Output:
Available applications:
Apache
Apache Full
Apache Secure
CUPS
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSH
Samba
To list out information about a profile and its included rules, run the following command:
sudo ufw app info "App Name"
For example, if you want to know information of Apache profile, run the following command:
sudo ufw app info Apache
Output:
Profile: Apache
Title: Web Server
Description: Apache v2 is the next generation of the omnipresent Apache web
server.
Port:
80/tcp
Allow Access from Specific IP Addresses
You can also allow access to specific port from specific IP address. For example, if you want to allow IP 192.168.0.10 to access only port 22 then run the following command:
sudo ufw allow from 192.168.0.10 to any port 22
Deleting UFW Rules
You can also delete specific ufw rules. First, you will need to list ufw rules then you can remove it.
Run the following command to list out ufw rules:
sudo ufw status numbered
Output:
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN Anywhere
[ 2] 22/tcp ALLOW IN Anywhere
[ 3] 80/tcp DENY IN Anywhere
[ 4] 2200:2300/tcp ALLOW IN Anywhere
[ 5] 22 ALLOW IN 192.168.0.15
[ 6] 22 (v6) ALLOW IN Anywhere (v6)
[ 7] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 8] 80/tcp (v6) DENY IN Anywhere (v6)
[ 9] 2200:2300/tcp (v6) ALLOW IN Anywhere (v6)
Now, to remove any of these rules, you will need to use these numbers.
sudo ufw delete [number]
For example, if you want to remove third number rule then run the following command:
sudo ufw delete [3]
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
Logging UFW Firewall Events
Firewall logs are necessary for troubleshooting your firewall rules, and notifying unusual activity on your network. So you must add logging rules in your firewall.
The ufw log file will be located at /var/log/ufw.log
You can turn on logging by running the following command:
sudo ufw logging on
You can turn off logging by running the following command:
sudo ufw logging off
UFW supports multiple logging levels low, medium and high. The default ufw loglevel is low.
You can set different loglevels by running the following command:
sudo ufw logging low|medium|high
- Low log blocked all packets not matching the default policy as well as packets matching logged rules.
- Medium log blocked low, plus all allowed packets not matching the default policy, all INVALID packets, and all new connections.
- High log blocked medium plus all packets with rate limiting.
UFW Graphical Interface
GUFW is a graphical interface for ufw. By default, Ubuntu-16.04 does not come with GUFW. You can install GUFW from Ubuntu repository.
You can install it by simply running the following command:
sudo apt-get install gufw
Advanced UFW Rules
You can do everything with ufw that iptables can do. You can add only simple rules using the command line. If you want to add more advance rules, then you can accomplish this by editing several ufw config files.
- /etc/default/ufw : This is main ufw config file for default policy and kernel modules.
- /etc/ufw/before.rules : Rules in these files are calculate before any rules added via the ufw command.
- /etc/ufw/after.rules : Rules in these files are calculate after any rules added via the ufw command.
By default UFW allows DHCP, ping and loopback. You can disallow this by editing the before.rules file.
sudo nano /etc/ufw/before.rules
Comment out the following lines:
#-A ufw-before-input -i lo -j ACCEPT
#-A ufw-before-output -o lo -j ACCEPT
#-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
#-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
#-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
#-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
#-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
#-A ufw-before-input -p udp --sport 67 --dport 68 -j ACCEPT
Save the file, disable and re-enable ufw to apply the changes:
sudo ufw disable && sudo ufw enable
UFW Help
To list out all available switches of ufw, run the following command:
sudo ufw -h
Output:
Usage: ufw COMMAND
Commands:
enable enables the firewall
disable disables the firewall
default ARG set default policy
logging LEVEL set logging to LEVEL
allow ARGS add allow rule
deny ARGS add deny rule
reject ARGS add reject rule
limit ARGS add limit rule
delete RULE|NUM delete RULE
insert NUM RULE insert RULE at NUM
reload reload firewall
reset reset firewall
status show firewall status
status numbered show firewall status as numbered list of RULES
status verbose show verbose firewall status
show ARG show firewall report
version display version information
Application profile commands:
app list list application profiles
app info PROFILE show information on PROFILE
app update PROFILE update PROFILE
app default ARG set default application policy
Conclusion
Now you have enough knowledge to install and configure UFW firewall on your server. UFW is a very flexible tool so you can use it in production environment with different options to match your specific needs if they aren’t covered here.