Introduction and Concepts
What is UFW?
UFW (Uncomplicated Firewall) is a simplified interface for managing iptables rules on Linux. It allows you to control incoming and outgoing network traffic on your server in an intuitive way.
Why Use a Firewall?
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WHY A FIREWALL IS ESSENTIAL β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
INTERNET
β
βββββββββββββββββββββββββΌββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββ βββββββββββββ βββββββββββββ
β Legitimateβ β Suspiciousβ β Malicious β
β Traffic β β Traffic β β Traffic β
β (HTTP) β β (Scan) β β (Attack) β
βββββββ¬ββββββ βββββββ¬ββββββ βββββββ¬ββββββ
β β β
ββββββββββββββββββββββββΌβββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββ
β β
β π‘οΈ UFW FIREWALL β
β β
β ββββββββββββββββββββ β
β β Rule 1: SSH β β β
β β Rule 2: HTTP β β β
β β Rule 3: HTTPS β β β
β β Default: DENY β β β
β ββββββββββββββββββββ β
β β
βββββββββββββ¬βββββββββββββ
β
ββββββββββββββββββΌβββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββ ββββββββββ ββββββββββ
β β β β β β β β β
βAcceptedβ βBlocked β βBlocked β
ββββββββββ ββββββββββ ββββββββββ
Firewall Architecture
UFW Position in the Network Stack
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β UFW / IPTABLES / NETFILTER ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
APPLICATIONS (Layer 7)
ββββββββββββββββββββββ
β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β USER SPACE β
β β β
β β βββββββββββββββββββββββββββββββββββββββββββ β
β β β UFW (Frontend) β β
β β β β β
β β β β’ Simplified interface β β
β β β β’ Intuitive commands β β
β β β β’ Profile management β β
β β ββββββββββββββββββββ¬βββββββββββββββββββββββ β
β β β β
β β βΌ β
β β βββββββββββββββββββββββββββββββββββββββββββ β
β β β IPTABLES (Backend) β β
β β β β β
β β β β’ Tables: filter, nat, mangle β β
β β β β’ Chains: INPUT, OUTPUT, FORWARD β β
β β β β’ Detailed rules β β
β β ββββββββββββββββββββ¬βββββββββββββββββββββββ β
β β β β
β βββββββββββββββββββββββββΌββββββββββββββββββββββββββββββ
β β
β βββββββββββββββββββββββββͺββββββββββββββββββββββββββββββββ
β β
β βββββββββββββββββββββββββΌββββββββββββββββββββββββββββββ
β β βΌ KERNEL SPACE β
β β βββββββββββββββββββββββββββββββββββββββββββ β
β β β NETFILTER (Framework) β β
β β β β β
β β β β’ Hooks in network stack β β
β β β β’ Packet-level filtering β β
β β β β’ NAT, Connection tracking β β
β β ββββββββββββββββββββ¬βββββββββββββββββββββββ β
β β β β
β βββββββββββββββββββββββββΌββββββββββββββββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β NETWORK INTERFACE β
β (eth0, ens3, etc.) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
INTERNET
Packet Processing Flow
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β UFW PROCESSING FLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
INCOMING PACKET
β
βΌ
ββββββββββββββββββββββββββ
β INPUT CHAIN β
βββββββββββββ¬βββββββββββββ
β
βββββββββββββββββββββββΌββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Rule 1 β β Rule 2 β β Rule N β
β SSH (22) β β HTTP (80) β β Custom β
β β β β β β
β Match? ββββββΌββNoβββΆβ Match? ββββββΌββNoβββΆβ Match? ββββββΌββNoβββ
ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β
βYes βYes βYes β
βΌ βΌ βΌ β
βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β ACCEPT β β ACCEPT β β ACCEPT β β
βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β
βΌ
βββββββββββββββββββ
β DEFAULT RULE β
β β
β deny incoming β
β β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β DROP β
β (Packet dropped)β
βββββββββββββββββββ
OUTGOING PACKET
β
βΌ
ββββββββββββββββββββββββββ
β OUTPUT CHAIN β
βββββββββββββ¬βββββββββββββ
β
βΌ
ββββββββββββββββββββββββββ
β DEFAULT RULE β
β allow outgoing β
βββββββββββββ¬βββββββββββββ
β
βΌ
ββββββββββββββββββββββββββ
β ACCEPT β
β (Packet allowed) β
ββββββββββββββββββββββββββ
Prerequisites
System Requirements
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SYSTEM PREREQUISITES β
βββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββ€
β Element β Required β
βββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ€
β System β Ubuntu 18.04+ / Debian 9+ β
β Access β root or sudo β
β Connection β Active SSH session β
β Network β Internet connection β
βββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββ
Pre-flight Checks
# Check distribution
cat /etc/os-release
# Check sudo privileges
sudo whoami
# Check current SSH connection
who
# Check server IP
ip addr show
Installation
Installation on Ubuntu/Debian
# Update repositories
sudo apt update
# Install UFW
sudo apt install ufw -y
# Verify installation
which ufw
Check Initial Status
# Check UFW status
sudo ufw status
# Expected output:
# Status: inactive
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β INSTALLATION PROCESS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β apt β β UFW β β Config β β UFW β
β update ββββββΆβ install ββββββΆβ Files ββββββΆβ Ready β
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββ
β /etc/ufw/ β
β βββ ufw.conf (config) β
β βββ before.rules (pre-rules) β
β βββ after.rules (post-rules) β
β βββ user.rules (your rules) β
βββββββββββββββββββββββββββββββββββββββ
Basic Configuration
β οΈ CRITICAL WARNING
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β οΈ WARNING - RISK OF ACCESS LOSS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ALWAYS allow SSH port (22) BEFORE enabling UFW! β
β β
β If you enable UFW without allowing SSH, you will be β
β PERMANENTLY LOCKED OUT of your server. β
β β
β Mandatory order: β
β 1. sudo ufw allow 22/tcp β
β 2. sudo ufw enable β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Step 1: Set Default Rules
# Block all incoming traffic by default
sudo ufw default deny incoming
# Allow all outgoing traffic by default
sudo ufw default allow outgoing
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DEFAULT RULES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
INCOMING TRAFFIC OUTGOING TRAFFIC
ββββββββββββββββ ββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββ βββββββββββββββ
β DENY β β ALLOW β
β (Block) β β (Permit) β
βββββββββββββββ βββββββββββββββ
β β
βΌ βΌ
ββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββ
β Only EXPLICITLY allowed β β All outgoing connections β
β connections can pass β β are permitted β
β β β β
ββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββββ
Step 2: Allow Essential Services
# SSH (MANDATORY - Do this first!)
sudo ufw allow 22/tcp
# HTTP (web server)
sudo ufw allow 80/tcp
# HTTPS (secure web server)
sudo ufw allow 443/tcp
Step 3: Enable UFW
# Enable the firewall
sudo ufw enable
# Message displayed:
# Command may disrupt existing ssh connections. Proceed with operation (y|n)?
# Answer: y
Step 4: Verify Configuration
# Display status and rules
sudo ufw status verbose
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EXAMPLE UFW STATUS OUTPUT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6)
Advanced Rules
Command Syntax
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β UFW RULE SYNTAX β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
sudo ufw [allow|deny|reject] [from <source>] [to <dest>] [port <port>] [proto <protocol>]
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
β Syntax examples: β
β β
β ufw allow 22 β Allow port 22 (TCP+UDP) β
β ufw allow 22/tcp β Allow port 22 TCP only β
β ufw allow from 192.168.1.0/24 β Allow a subnet β
β ufw deny 3306 β Block port 3306 β
β ufw allow from 10.0.0.5 to any port 22 β Specific IP to port β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Allow Specific Port
# TCP port
sudo ufw allow 8080/tcp
# UDP port
sudo ufw allow 53/udp
# TCP and UDP port
sudo ufw allow 3478
# Port range
sudo ufw allow 6000:6007/tcp
Allow Specific IP
# Allow all connections from an IP
sudo ufw allow from 192.168.1.100
# Allow an IP to a specific port
sudo ufw allow from 192.168.1.100 to any port 22
# Allow a subnet
sudo ufw allow from 10.0.0.0/8
# Allow a subnet to a specific port
sudo ufw allow from 192.168.1.0/24 to any port 3306
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β IP-BASED RULES DIAGRAM β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
INTERNET
β
βββββββββββββββββββββββββΌββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β 192.168.1.100β β 10.0.0.50 β β Other IPs β
β (Allowed) β β (Allowed) β β (Not listed)β
ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Port 22 β β β Port 3306 β β β All ports β
β Port 80 β β β β β β β
β Port 443 β β β β β β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
Block IP or Port
# Block a specific IP
sudo ufw deny from 192.168.1.200
# Block an IP to a port
sudo ufw deny from 192.168.1.200 to any port 22
# Block a port
sudo ufw deny 3306/tcp
# Reject (with notification to sender)
sudo ufw reject 23/tcp
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DENY vs REJECT β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DENY (DROP) REJECT
βββββββββββ ββββββ
βββββββββββββββ βββββββββββββββ
β Incoming β β Incoming β
β Packet β β Packet β
ββββββββ¬βββββββ ββββββββ¬βββββββ
β β
βΌ βΌ
βββββββββββββββ βββββββββββββββ
β UFW β β UFW β
β (DENY) β β (REJECT) β
ββββββββ¬βββββββ ββββββββ¬βββββββ
β β
βΌ βΌ
βββββββββββββββ βββββββββββββββ
β Packet β β ICMP β
β silently β β Message β
β ignored β β "refused" β
βββββββββββββββ ββββββββ¬βββββββ
β
Sender doesn't know βΌ
what happened Sender receives
(timeout) notification
Rule Management
List Rules
# Simple status
sudo ufw status
# Status with rule numbers
sudo ufw status numbered
# Detailed status
sudo ufw status verbose
Delete a Rule
# Method 1: By number (recommended)
sudo ufw status numbered
# Then:
sudo ufw delete 3
# Method 2: By exact rule
sudo ufw delete allow 8080/tcp
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DELETING RULE BY NUMBER β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
$ sudo ufw status numbered
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 8080/tcp ALLOW IN Anywhere βββ To delete
[ 4] 443/tcp ALLOW IN Anywhere
$ sudo ufw delete 3
Deleting:
allow 8080/tcp
Proceed with operation (y|n)? y
Rule deleted
Reset UFW
# Reset all rules (WARNING!)
sudo ufw --force reset
# This will:
# - Disable UFW
# - Delete all rules
# - Reset to default settings
Reload Rules
# Reload configuration
sudo ufw reload
Configuration Examples
Web Server Configuration
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β WEB SERVER CONFIGURATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
INTERNET
β
βΌ
ββββββββββββββββββββββββββ
β UFW β
β β
β ββββββββββββββββββββ β
β β Port 22 (SSH) ββ β
β β Port 80 (HTTP) ββ β
β β Port 443 (HTTPS)ββ β
β β Other ports ββ β
β ββββββββββββββββββββ β
β β
βββββββββββββ¬βββββββββββββ
β
βΌ
ββββββββββββββββββββββββββ
β WEB SERVER β
β (Nginx/Apache) β
ββββββββββββββββββββββββββ
# Web server configuration
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Database Server Configuration
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATABASE SERVER CONFIGURATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
INTERNET
β
ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β Admin β β Web Server β β Other IPs β
β192.168.1.100β β 10.0.0.0/8 β β β
ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β SSH (22) β β βMySQL (3306)ββ β All ports β
β β β β β β β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
# Database server configuration
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow from 10.0.0.0/8 to any port 3306
sudo ufw enable
Game Server Configuration (Minecraft)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MINECRAFT SERVER CONFIGURATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
INTERNET
β
βΌ
ββββββββββββββββββββββββββ
β UFW β
β β
β ββββββββββββββββββββ β
β β Port 22 (SSH) ββ β
β β Port 25565 (MC) ββ β
β β Other ports ββ β
β ββββββββββββββββββββ β
β β
βββββββββββββ¬βββββββββββββ
β
βΌ
ββββββββββββββββββββββββββ
β MINECRAFT SERVER β
β (Java/Bedrock) β
ββββββββββββββββββββββββββ
# Minecraft server configuration
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 25565/tcp # Minecraft Java
# sudo ufw allow 19132/udp # Minecraft Bedrock (if needed)
sudo ufw enable
Multi-Service Configuration
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MULTI-SERVICE CONFIGURATION β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
INTERNET
β
βΌ
ββββββββββββββββββββββββββββββββββββββββ
β UFW β
β β
β Open ports: β
β ββββββββββββββββββββββββββββββββββ β
β β 22/tcp - SSH β β
β β 80/tcp - HTTP β β
β β 443/tcp - HTTPS β β
β β 25/tcp - SMTP β β
β β 587/tcp - Submission β β
β β 993/tcp - IMAPS β β
β β 3306/tcp - MySQL (IP limited) β β
β ββββββββββββββββββββββββββββββββββ β
β β
ββββββββββββββββββββ¬ββββββββββββββββββββ
β
ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ
βΌ βΌ βΌ
βββββββββββββ βββββββββββββ βββββββββββββ
β Nginx β β Postfix β β MySQL β
β (80, 443) β β (25, 587) β β (3306) β
βββββββββββββ βββββββββββββ βββββββββββββ
# Multi-service configuration
sudo ufw default deny incoming
sudo ufw default allow outgoing
# SSH
sudo ufw allow 22/tcp
# Web
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Mail
sudo ufw allow 25/tcp
sudo ufw allow 587/tcp
sudo ufw allow 993/tcp
# Database (restricted access)
sudo ufw allow from 10.0.0.0/8 to any port 3306
sudo ufw enable
Monitoring and Logs
Enable Logging
# Enable logging
sudo ufw logging on
# Available levels: off, low, medium, high, full
sudo ufw logging medium
View Logs
# Watch logs in real-time
sudo tail -f /var/log/ufw.log
# View last 50 entries
sudo tail -n 50 /var/log/ufw.log
# Search for specific events
sudo grep "BLOCK" /var/log/ufw.log | tail -20
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β UFW LOG EXAMPLE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Jan 15 10:23:45 server kernel: [UFW BLOCK] IN=eth0 OUT= MAC=...
SRC=192.168.1.200 DST=10.0.0.5 LEN=60 TOS=0x00 PREC=0x00 TTL=64
ID=12345 DF PROTO=TCP SPT=54321 DPT=3306 WINDOW=65535 RES=0x00 SYN URGP=0
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Decoded: β
β β
β [UFW BLOCK] β Action taken (packet blocked) β
β IN=eth0 β Input interface β
β SRC=192.168.1.200 β Source IP β
β DST=10.0.0.5 β Destination IP β
β PROTO=TCP β Protocol β
β DPT=3306 β Destination port (MySQL) β
β SYN β Packet type (connection attempt) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Troubleshooting
Locked Out of Server
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RECOVERY PROCEDURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββ
β SSH access blocked? β
ββββββββββββ¬βββββββββββ
β
ββββββββββββββββββ΄βββββββββββββββββ
β β
βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ
β VNC/KVM Console β β Contact hosting β
β available? β β provider β
ββββββββββ¬βββββββββ βββββββββββββββββββ
β
βΌ
βββββββββββββββββββ
β Connect via β
β VNC/KVM β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β sudo ufw disableβ
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββ
β Reconfigure β
β rules properly β
βββββββββββββββββββ
Rules Not Working
# Verify UFW is active
sudo ufw status
# Check rule order
sudo ufw status numbered
# Reload rules
sudo ufw reload
# Check underlying iptables rules
sudo iptables -L -n -v
UFW and Docker
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β UFW + DOCKER ISSUE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Docker modifies iptables directly, bypassing UFW!
ββββββββββββββββββββ
β Docker β
β (port mapping) β
ββββββββββ¬ββββββββββ
β
β Modifies directly
βΌ
ββββββββββββββββββββ
β iptables ββββββ UFW is not consulted!
β (DOCKER chain) β
ββββββββββββββββββββ
SOLUTION: Disable Docker's iptables management
# Edit Docker configuration
sudo nano /etc/docker/daemon.json
{
"iptables": false
}
# Restart Docker
sudo systemctl restart docker
Diagnostic Commands
# Check active connections
sudo ss -tulpn
# Check iptables rules
sudo iptables -L -n
# Test a specific port
nc -zv localhost 80
# Check listening processes
sudo netstat -tlnp
Best Practices
Security Checklist
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β UFW BEST PRACTICES CHECKLIST β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
ALWAYS allow SSH before enabling UFW
β
Principle of least privilege: only open necessary ports
β
Use IP-based rules when possible (more secure)
β
Enable logging to monitor blocked traffic
β
Test rules before closing SSH session
β
Document all added rules
β
Regularly review rules (remove obsolete ones)
β
Combine with fail2ban to block brute-force attacks
β
Use reject for common ports (feedback to attacker)
and deny for others (stealth mode)
β
Backup configuration before major changes
Recommended Rule Order
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RULE ORDER (PRIORITY) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
HIGH PRIORITY
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β 1. Specific DENY rules (blocked IPs) β
βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β 2. Specific ALLOW rules (IP whitelist) β
βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β 3. Service rules (open ports) β
βββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β 4. Default rule (deny incoming) β
βββββββββββββββββββββββββββββββββββββββββββ
LOW PRIORITY
Command Reference
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β UFW COMMAND CHEAT SHEET β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββ
β Command β Description β
βββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β sudo ufw status β Show status β
β sudo ufw status numbered β Show with numbers β
β sudo ufw status verbose β Show detailed β
βββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β sudo ufw enable β Enable firewall β
β sudo ufw disable β Disable firewall β
β sudo ufw reload β Reload rules β
βββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β sudo ufw default deny incomingβ Block incoming by default β
β sudo ufw default allow outgoingβ Allow outgoing by default β
βββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β sudo ufw allow 22/tcp β Allow a port β
β sudo ufw deny 3306/tcp β Block a port β
β sudo ufw allow from IP β Allow an IP β
β sudo ufw deny from IP β Block an IP β
βββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β sudo ufw delete 3 β Delete rule #3 β
β sudo ufw delete allow 80/tcp β Delete by rule β
βββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββββ€
β sudo ufw --force reset β Reset everything β
β sudo ufw logging on β Enable logging β
βββββββββββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββββββββββββββββ
FAQ
Q: Can I use UFW with another firewall? A: No, use only one firewall at a time to avoid conflicts.
Q: Does UFW work with Docker? A: Yes, but requires specific configuration (see Troubleshooting section).
Q: How do I allow multiple ports?
A: Use a range (6000:6007/tcp) or multiple allow commands.
Q: Does UFW work on CentOS/RHEL? A: Yes, but installation differs. Consider using firewalld on these distributions.


















