UFW (Uncomplicated Firewall) là công cụ quản lý firewall đơn giản cho Ubuntu/Debian. Thay vì học iptables phức tạp, bạn có thể quản lý firewall chỉ với vài lệnh đơn giản. Bài viết này hướng dẫn setup và cấu hình UFW firewall từ cơ bản đến production.

Kết hợp với SSH Hardening để bảo mật server toàn diện.

UFW là gì?

UFW là front-end cho iptables, được thiết kế để đơn giản hóa việc quản lý firewall trên Linux. Thay vì viết hàng chục dòng iptables rules, bạn chỉ cần vài lệnh UFW.

  • Đơn giản: Cú pháp dễ nhớ, không cần học iptables.
  • An toàn: Mặc định block tất cả incoming connections.
  • Tích hợp: Có sẵn trên Ubuntu, Debian.
  • IPv6 support: Hỗ trợ cả IPv4 và IPv6.

1. Cài đặt UFW

# Cài đặt UFW
apt update
apt install ufw -y

# Kiểm tra version
ufw version

2. Các lệnh cơ bản

Bật/Tắt Firewall

# Bật firewall
ufw enable

# Tắt firewall (không khuyến khích)
ufw disable

# Xem trạng thái
ufw status

# Xem trạng thái chi tiết
ufw status verbose

Cho phép/Không cho phép

# Cho phép port
ufw allow 80          # HTTP
ufw allow 443         # HTTPS
ufw allow 22          # SSH
ufw allow 5432         # PostgreSQL

# Cho phép với protocol
ufw allow 80/tcp
ufw allow 443/udp

# Không cho phép port
ufw deny 3306         # MySQL
ufw deny 27017        # MongoDB

# Xóa rule
ufw delete allow 80

Cho phép theo Service

# Dùng service name thay vì port
ufw allow ssh
ufw allow http
ufw allow https
ufw allow postgresql
ufw allow nginx

# Kiểm tra service ports
grep -E "^ssh|^http|^https" /etc/services

3. Cấu hình SSH

QUAN TRỌNG: Trước khi bật UFW, LUÔN cho phép SSH trước. Nếu không bạn sẽ bị lock out khỏi server!

# Cho phép SSH trước khi bật firewall
ufw allow ssh

# Hoặc cho phép SSH với limit (chống brute-force)
ufw limit ssh

# Nếu dùng port khác 22
ufw allow 2222/tcp

# Bật firewall
ufw enable

# Confirm và kiểm tra
ufw status verbose

SSH Limit (chống brute-force)

# Limit cho phép 6 kết nối trong 30 giây
ufw limit 22/tcp

# Kiểm tra denied attempts
tail -f /var/log/ufw.log | grep LIMIT

4. Cấu hình cho Web Server

Nginx/Apache

# Cho phép HTTP và HTTPS
ufw allow 'Nginx Full'
# Tương đương:
# ufw allow 80/tcp
# ufw allow 443/tcp

# Hoặc riêng lẻ
ufw allow http
ufw allow https

# Nếu dùng Apache
ufw allow 'Apache Full'

Cấu hình điển hình

# Bước 1: Cho phép SSH
ufw allow ssh

# Bước 2: Cho phép web traffic
ufw allow 'Nginx Full'

# Bước 3: Cho phép database (chỉ từ localhost)
# Database không cần mở ra ngoài nếu app cùng server

# Bước 4: Bật firewall
ufw enable

# Kiểm tra
ufw status numbered

5. Cho phép theo IP

Cho phép specific IP

# Cho phép IP cụ thể truy cập tất cả ports
ufw allow from 192.168.1.100

# Cho phép IP truy cập port cụ thể
ufw allow from 192.168.1.100 to any port 22
ufw allow from 192.168.1.100 to any port 3306

# Cho phép subnet
ufw allow from 192.168.1.0/24

# Cho phép subnet truy cập port cụ thể
ufw allow from 192.168.1.0/24 to any port 5432

Ví dụ thực tế

# Cho phép office IP truy cập SSH
ufw allow from 203.0.113.50 to any port 22

# Cho phép developer team truy cập port 3000 (dev server)
ufw allow from 10.0.0.0/24 to any port 3000

# Cho phép backup server truy cập PostgreSQL
ufw allow from 10.0.1.100 to any port 5432

6. Deny theo mặc định

UFW mặc định deny tất cả incoming traffic. Nếu muốn thay đổi:

# Xem default policies
ufw status verbose

# Output:
# Status: active
# To                         Action      From
# --                         ------      ----
# 22                         ALLOW       Anywhere
# 80                         ALLOW       Anywhere
# 443                        ALLOW       Anywhere
# 22 (v6)                    ALLOW       Anywhere (v6)

# Thay đổi default policies
ufw default deny incoming   # Block tất cả incoming (mặc định)
ufw default allow outgoing  # Cho phép tất cả outgoing (mặc định)
ufw default deny routed     # Block forwarded packets

7. Application Profiles

UFW có sẵn profiles cho các ứng dụng phổ biến:

# Xem available profiles
ufw app list

# Output:
# Available applications:
#   Apache
#   Apache Full
#   Apache Secure
#   CUPS
#   Nginx Full
#   Nginx HTTP
#   Nginx HTTPS
#   OpenSSH
#   Postfix
#   Postfix v6
#   Samba

Xem chi tiết profile

# Xem profile chi tiết
ufw app info 'Nginx Full'

# Output:
# Profile: Nginx Full
# Title: Web Server
# Description: Full Nginx web server with HTTP and HTTPS
#
# Ports:
#   80,443/tcp

8. Logging

# Bật logging
ufw logging on

# Đặt mức logging
ufw logging low      # Log blocked packets không match rules
ufw logging medium   # Log blocked packets + invalid packets
ufw logging high     # Log everything + rate limiting
ufw logging off      # Tắt logging

# Xem logs
tail -f /var/log/ufw.log

# Filter logs
grep -i "UFW BLOCK" /var/log/ufw.log | tail -20

# Xem từ IP nào block nhiều nhất
grep "UFW BLOCK" /var/log/ufw.log | awk '{print $NF}' | cut -d'=' -f2 | sort | uniq -c | sort -nr | head -10

9. Quản lý Rules

Xem danh sách Rules

# Xem rules với số thứ tự
ufw status numbered

# Output:
# Status: active
#
#      To                         Action      From
#      --                         ------      ----
# [ 1] 22                         ALLOW       Anywhere
# [ 2] 80                         ALLOW       Anywhere
# [ 3] 443                        ALLOW       Anywhere
# [ 4] 5432                       ALLOW       10.0.0.0/24

Xóa Rules

# Xóa theo rule number
ufw delete 2

# Xóa theo lệnh
ufw delete allow 80
ufw delete allow from 192.168.1.100

# Xóa tất cả rules
ufw reset

Chèn Rules

# Chèn rule ở vị trí cụ thể
ufw insert 1 allow from 203.0.113.50 to any port 22

10. Disable/Enable UFW tạm thời

# Tạm disable để test (sau đó bật lại)
ufw disable

# Sau khi test xong, bật lại
ufw enable

# Hoặc reset về trạng thái ban đầu
ufw reset

11. IPv6

# Kiểm tra IPv6 support
nano /etc/default/ufw

# Đảm bảo:
IPV6=yes

# Restart UFW
ufw disable && ufw enable

12. Scripts mẫu

Setup Web Server

#!/bin/bash
# setup-webserver-ufw.sh

echo "Setting up UFW for Web Server..."

# Reset UFW
ufw --force reset

# Default policies
ufw default deny incoming
ufw default allow outgoing

# SSH (thay đổi port nếu cần)
echo "Allowing SSH..."
ufw allow ssh

# Web traffic
echo "Allowing HTTP/HTTPS..."
ufw allow 'Nginx Full'

# Enable firewall
echo "Enabling UFW..."
ufw --force enable

# Show status
ufw status verbose

Setup Production Server

#!/bin/bash
# setup-production-ufw.sh

echo "Setting up UFW for Production Server..."

# Reset
ufw --force reset

# Defaults
ufw default deny incoming
ufw default allow outgoing

# SSH với limit
ufw limit ssh

# Web
ufw allow 80/tcp
ufw allow 443/tcp

# Cho phép admin IP (thay đổi IP này)
ADMIN_IP="203.0.113.50"
ufw allow from $ADMIN_IP to any port 22

# PostgreSQL (chỉ từ app server)
APP_SERVER="10.0.0.10"
ufw allow from $APP_SERVER to any port 5432

# Enable
ufw --force enable

ufw status numbered

13. Troubleshooting

Bị lock out khỏi server

  • Kết nối qua console/VNC của provider.
  • Tắt UFW: ufw disable
  • Kiểm tra và thêm rule SSH.
  • Bật lại: ufw enable

Không kết nối được

# Kiểm tra status
ufw status verbose

# Xem logs
tail -50 /var/log/ufw.log

# Reset và setup lại
ufw reset
ufw default deny incoming
ufw default allow outgoing
ufw allow ssh
ufw allow 80
ufw allow 443
ufw enable

14. So sánh UFW và iptables

Tiêu chíUFWiptables
Độ khóDễPhức tạp
Cú phápĐơn giảnPhức tạp
Tốc độTương đươngTương đương
FlexibilityGiới hạnKhông giới hạn
Phù hợpServer đơn giảnComplex networking

Kết Luận

UFW là lựa chọn tuyệt vời cho việc quản lý firewall trên Linux. Đơn giản, dễ học, và đủ mạnh cho hầu hết use cases.

Kết hợp với SSH Hardening, Docker Security, và WireGuard VPN để có security stack hoàn chỉnh.

  • LUÔN cho phép SSH trước khi bật UFW.
  • Dùng ufw limit ssh để chống brute-force.
  • Default deny incoming, allow outgoing.
  • Dùng scripts để automate setup.
  • Monitor logs để phát hiện attacks.

Chào các bạn mình là Quốc Hùng , mình sinh ra thuộc cung song tử ,song tử luôn khẳng định chính mình ,luôn luôn phấn đấu vượt lên phía trước ,mình sinh ra và lớn lên tại vùng đất võ cổ truyền ,đam mê của mình là coder ,ngày đi học tối về viết blog ...