Trang chủHướng dẫnTìm hiểu các rule và lệnh UFW cơ bản
Networking

Tìm hiểu các rule và lệnh UFW cơ bản

CyStack blog 11 phút để đọc
CyStack blog30/08/2025
Locker Avatar

Chris Pham

Technical Writer

Locker logo social
Reading Time: 11 minutes

UFW (viết tắt của Uncomplicated Firewall) là một công cụ cấu hình firewall chạy trên nền iptables. Nó được tích hợp sẵn trong các bản phân phối của Ubuntu và cung cấp một giao diện đã được đơn giản hóa để cấu hình các tác vụ firewall phổ biến thông qua dòng lệnh.

Tìm hiểu các rule và lệnh UFW cơ bản

Bài viết này có dạng một tài liệu tham khảo nhanh về các câu lệnh và trường hợp sử dụng UFW thường gặp, bao gồm các ví dụ về cách cho phép và chặn dịch vụ theo port, network interface, và địa chỉ IP nguồn.

Các rule và lệnh UFW cơ bản

Xác minh trạng thái UFW

Để kiểm tra xem ufw đã được kích hoạt hay chưa, hãy chạy lệnh:

sudo ufw status
Status: inactive

Output sẽ cho biết firewall của bạn có đang hoạt động hay không.

Kích hoạt UFW

Nếu bạn nhận được thông báo Status: inactive khi chạy ufw status, điều đó có nghĩa là firewall chưa được kích hoạt trên hệ thống. Bạn sẽ cần chạy một lệnh để kích hoạt nó.

Theo mặc định, khi được kích hoạt, UFW sẽ chặn mọi truy cập từ bên ngoài vào tất cả các port trên server. Trên thực tế, điều này có nghĩa là nếu bạn đang kết nối với server qua SSH và bạn kích hoạt UFW trước khi cho phép truy cập tới port SSH, kết nối SSH đó sẽ bị ngắt ngay lập tức. Vì vậy, hãy làm theo hướng dẫn trong phần cho phép truy cập SSH trước khi kích hoạt firewall.

Để kích hoạt UFW trên hệ thống của bạn, hãy chạy lệnh:

sudo ufw enable

Bạn sẽ thấy kết quả như sau:

Firewall is active and enabled on system startup

Để xem những gì hiện đang bị chặn hoặc được phép, bạn có thể sử dụng tham số verbose khi chạy ufw status như sau:

sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

Vô hiệu hóa UFW

Nếu vì lý do nào đó bạn cần vô hiệu hóa UFW, bạn có thể chạy lệnh sau:

sudo ufw disable

Lưu ý rằng lệnh này sẽ vô hiệu hóa hoàn toàn dịch vụ firewall trên hệ thống của bạn.

Chặn một địa chỉ IP

Dùng lệnh sau để chặn tất cả các kết nối mạng xuất phát từ một địa chỉ IP cụ thể (nhớ thay thế địa chỉ IP được tô sáng bằng địa chỉ IP bạn muốn chặn):

sudo ufw deny from 203.0.113.100
Rule added

Trong ví dụ này, from 203.0.113.100 chỉ định một địa chỉ IP nguồn là “203.0.113.100”.

Nếu bây giờ chạy sudo ufw status, bạn sẽ thấy địa chỉ IP được chỉ định được liệt kê là bị từ chối (denied):

Status: active

To                         Action      From
--                         ------      ----
Anywhere                   DENY        203.0.113.100         

Tất cả các kết nối, đến hoặc đi, đều bị chặn đối với địa chỉ IP được chỉ định.

Chặn một subnet

Nếu bạn cần chặn toàn bộ một subnet, bạn có thể sử dụng địa chỉ subnet làm tham số from trong lệnh ufw deny.

Lệnh này sẽ chặn tất cả các địa chỉ IP trong subnet ví dụ 203.0.113.0/24:

sudo ufw deny from 203.0.113.0/24
Rule added

Chặn kết nối đến một network interface

Dùng lệnh sau để chặn các kết nối đến từ một địa chỉ IP cụ thể tới một network interface (giao diện mạng) cụ thể (thay thế địa chỉ IP được tô sáng bằng địa chỉ IP bạn muốn chặn):

sudo ufw deny in on eth0 from 203.0.113.100
Rule added

Tham số in yêu cầu ufw chỉ áp dụng rule cho các kết nối đến, và tham số on eth0 chỉ định rằng rule chỉ áp dụng cho interface eth0. Điều này có thể có ích nếu bạn có một hệ thống với nhiều network interface (bao gồm cả các interface ảo) và bạn cần chặn truy cập bên ngoài vào một số interface này nhưng không phải tất cả.

Cho phép một địa chỉ IP

Chạy lệnh sau để cho phép tất cả các kết nối mạng xuất phát từ một địa chỉ IP cụ thể (thay thế địa chỉ IP được tô sáng bằng địa chỉ IP mà bạn muốn cho phép truy cập):

sudo ufw allow from 203.0.113.101
Rule added

Nếu bây giờ bạn chạy sudo ufw status, bạn sẽ thấy output tương tự như sau. Nó hiển thị từ ALLOW bên cạnh địa chỉ IP bạn vừa thêm.

Status: active

To                         Action      From
--                         ------      ----
...          
Anywhere                   ALLOW       203.0.113.101 

Bạn cũng có thể cho phép các kết nối từ cả một subnet bằng cách cung cấp subnet mask (dùng để phân chia subnet) tương ứng cho một host, chẳng hạn như 203.0.113.0/24.

Cho phép kết nối đến một network interface

Chạy lệnh sau để cho phép các kết nối đến từ một địa chỉ IP cụ thể tới một network interface cụ thể (thay thế địa chỉ IP được tô sáng bằng địa chỉ IP bạn muốn cho phép):

sudo ufw allow in on eth0 from 203.0.113.102
Rule added

Tham số in yêu cầu ufw chỉ áp dụng rule cho các kết nối đến, và tham số on eth0 chỉ định rằng rule chỉ áp dụng cho interface eth0.

Nếu bây giờ bạn chạy sudo ufw status, bạn sẽ thấy output tương tự như sau:

Status: active

To                         Action      From
--                         ------      ----
...         
Anywhere on eth0           ALLOW       203.0.113.102            

Xóa một rule UFW

Để xóa một rule đã được thiết lập trong UFW, hãy dùng lệnh ufw delete, theo sau là nội dung của rule đó (allow hoặc deny) cùng với các tham số tương ứng. Ví dụ sau sẽ xóa một rule đã được thiết lập trước đó để cho phép tất cả các kết nối từ địa chỉ IP 203.0.113.100:

sudo ufw delete allow from 203.0.113.101
Rule deleted

Một cách khác để chỉ định rule bạn muốn xóa là cung cấp ID của rule đó. Thông tin này có thể được lấy bằng lệnh sau:

sudo ufw status numbered
Status: active

     To                         Action      From
     --                         ------      ----
[ 1] Anywhere                   DENY IN     203.0.113.100             
[ 2] Anywhere on eth0           ALLOW IN    203.0.113.102             

Từ output này, bạn có thể thấy có hai rule đang hoạt động. Rule đầu tiên (với các giá trị được tô sáng) từ chối tất cả các kết nối đến từ địa chỉ IP 203.0.113.100. Rule thứ hai cho phép các kết nối trên interface eth0 đến từ địa chỉ IP 203.0.113.101.

Vì theo mặc định, UFW đã chặn tất cả truy cập bên ngoài trừ khi được cho phép một cách tường minh, nên rule đầu tiên là dư thừa và bạn có thể xóa nó. Để xóa một rule bằng ID của nó, hãy chạy lệnh:

sudo ufw delete 1

Bạn sẽ được yêu cầu xác nhận. Nhớ đảm bảo rằng ID bạn cung cấp trỏ đến đúng rule bạn muốn xóa.

Deleting:
 deny from 203.0.113.100
Proceed with operation (y|n)? y
Rule deleted

Nếu sa đó bạn liệt kê lại các rule bằng sudo ufw status, bạn sẽ thấy rule đó đã được xóa.

Liệt kê các profile ứng dụng có sẵn

Sau khi cài đặt, các ứng dụng dùng giao tiếp mạng thường sẽ thiết lập một profile UFW mà bạn có thể sử dụng để cho phép kết nối từ các địa chỉ bên ngoài. Điều này thường tương tự như việc chạy ufw allow <port>. Nó có lợi thế là cung cấp một giải pháp đơn giản gộp các port cụ thể mà một dịch vụ sử dụng và cung cấp danh pháp để dễ dàng tham chiếu đến các dịch vụ.

Để liệt kê các profile hiện có, hãy chạy lệnh:

sudo ufw app list

Nếu bạn đã cài đặt một dịch vụ (như web server hoặc phần mềm phụ thuộc mạng khác) và profile không có sẵn trong UFW, trước tiên hãy đảm bảo dịch vụ đó đã được bật. Đối với các server từ xa, bạn thường sẽ có sẵn OpenSSH:

Available applications:
  OpenSSH

Kích hoạt một profile ứng dụng

Để kích hoạt một profile ứng dụng UFW, hãy chạy ufw allow theo sau là tên của profile ứng dụng bạn muốn kích hoạt (lấy bằng lệnh sudo ufw app list).

Trong ví dụ sau, chúng ta đang kích hoạt profile của OpenSSH để cho phép tất cả các kết nối SSH đến trên port SSH mặc định.

sudo ufw allow "OpenSSH"
Rule added
Rule added (v6)

Hãy nhớ đặt tên profile trong dấu ngoặc kép nếu chúng bao gồm nhiều từ, chẳng hạn như “Nginx HTTPS”.

Vô hiệu hóa profile ứng dụng

Để vô hiệu hóa một profile ứng dụng mà bạn đã thiết lập trước đó trong UFW, bạn sẽ cần xóa rule tương ứng của nó. Ví dụ, hãy xem xét output từ sudo ufw status:

sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                               
Nginx Full                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)                   
Nginx Full (v6)            ALLOW       Anywhere (v6)        

Output này cho thấy profile ứng dụng Nginx Full hiện đang được kích hoạt. Nó cho phép tất cả các kết nối đến web server cả qua HTTP và HTTPS. Nếu bạn chỉ muốn cho phép các yêu cầu HTTPS đến và đi từ web server của mình, bạn sẽ phải trước tiên kích hoạt rule hạn chế nhất (trong trường hợp này sẽ là Nginx HTTPS) và sau đó vô hiệu hóa rule Nginx Full đang hoạt động:

sudo ufw allow "Nginx HTTPS"
sudo ufw delete allow "Nginx Full"

Hãy nhớ rằng bạn có thể liệt kê tất cả các profile ứng dụng có sẵn bằng sudo ufw app list.

Cho phép SSH

Khi làm việc với các server từ xa, phải đảm bảo rằng port SSH được mở cho các kết nối để bạn có thể đăng nhập vào server của mình từ xa.

Lệnh sau sẽ kích hoạt profile ứng dụng OpenSSH của UFW và cho phép tất cả các kết nối đến port SSH mặc định trên server:

sudo ufw allow OpenSSH
Rule added
Rule added (v6)

Mặc dù cú pháp thay thế sau ít thân thiện với người dùng hơn, nó trực tiếp chỉ định số port của dịch vụ SSH (thường được đặt là 22 theo mặc định):

sudo ufw allow 22
Rule added
Rule added (v6)

Cho phép SSH đến từ địa chỉ IP hoặc subnet cụ thể

Để cho phép các kết nối đến từ một địa chỉ IP hoặc subnet cụ thể, bạn cần thêm một chỉ thị from để xác định nguồn của kết nối. Bạn cũng cần phải chỉ định địa chỉ đích bằng tham số to.

Để giới hạn rule này chỉ cho SSH, bạn sẽ chỉ định proto (protocol) thành tcp và sau đó sử dụng tham số port và đặt nó thành 22, port mặc định của SSH.

Lệnh sau sẽ chỉ cho phép các kết nối SSH đến từ địa chỉ IP 203.0.113.103:

sudo ufw allow from 203.0.113.103 proto tcp to any port 22
Rule added

Bạn cũng có thể sử dụng địa chỉ subnet làm tham số from để cho phép các kết nối SSH từ toàn bộ một mạng:

sudo ufw allow from 203.0.113.0/24 proto tcp to any port 22
Rule added

Cho phép Rsync đến từ địa chỉ IP hoặc subnet cụ thể

Chương trình Rsync chạy trên port 873 và có thể được sử dụng để chuyển các tệp từ máy tính này sang máy tính khác.

Để cho phép các kết nối rsync đến từ một địa chỉ IP hoặc subnet cụ thể, hãy sử dụng tham số from để chỉ định địa chỉ IP nguồn và tham số port để đặt port đích 873.

Lệnh sau sẽ chỉ cho phép các kết nối Rsync đến từ địa chỉ IP 203.0.113.103:

sudo ufw allow from 203.0.113.103 to any port 873
Rule added

Để cho phép toàn bộ subnet 203.0.113.0/24 có thể rsync đến server của bạn, hãy chạy lệnh:

sudo ufw allow from 203.0.113.0/24 to any port 873
Rule added

Cho phép Nginx HTTP / HTTPS

Sau khi cài đặt, Nginx thiết lập một vài profile UFW khác nhau trong server. Khi bạn đã cài đặt Nginx và kích hoạt nó như một dịch vụ, hãy chạy lệnh sau để xác định các profile nào có sẵn trong hệ thống:

sudo ufw app list | grep Nginx
  Nginx Full
  Nginx HTTP
  Nginx HTTPS

Để cho phép cả lưu lượng HTTP và HTTPS, hãy chọn Nginx Full. Nếu không, hãy chọn Nginx HTTP để chỉ cho phép HTTP hoặc Nginx HTTPS để chỉ cho phép HTTPS.

Lệnh sau sẽ cho phép cả lưu lượng HTTP và HTTPS trên server (port 80443):

sudo ufw allow "Nginx Full"
Rule added
Rule added (v6)

Cho phép Apache HTTP / HTTPS

Sau khi cài đặt, Apache thiết lập một vài profile UFW khác nhau trong server. Khi bạn đã cài đặt Apache và kích hoạt nó như một dịch vụ, hãy chạy lệnh sau để xác định các profile nào có sẵn trong hệ thống:

sudo ufw app list | grep Apache
  Apache
  Apache Full
  Apache Secure

Để cho phép cả lưu lượng HTTP và HTTPS, hãy chọn Apache Full. Nếu không, hãy chọn Apache cho HTTP hoặc Apache Secure cho HTTPS.

Lệnh sau sẽ cho phép cả lưu lượng HTTP và HTTPS trên server (port 80443):

sudo ufw allow "Apache Full"
Rule added
Rule added (v6)

Cho phép tất cả kết nối HTTP đến (port 80)

Các web server như Apache và Nginx thường lắng nghe các yêu cầu HTTP trên port 80. Nếu chính sách mạng của bạn mặc định drop (loại bỏ) hoặc deny (từ chối) lưu lượng đến, bạn sẽ cần tạo một rule UFW để cho phép truy cập từ bên ngoài trên port 80. Bạn có thể sử dụng số port hoặc tên dịch vụ (http) làm tham số cho lệnh này.

Để cho phép tất cả các kết nối HTTP (port 80) đến, hãy chạy lệnh:

sudo ufw allow http
Rule added
Rule added (v6)

Một cú pháp thay thế khác là chỉ định số port của dịch vụ HTTP:

sudo ufw allow 80
Rule added
Rule added (v6)

Cho phép tất cả kết nối HTTPS đến (port 443)

HTTPS thường chạy trên port 443. Nếu chính sách mạng của bạn mặc định drop hoặc deny lưu lượng đến, bạn sẽ cần tạo một rule UFW để cho phép truy cập từ bên ngoài trên port 443. Bạn có thể sử dụng số port hoặc tên dịch vụ (https) làm tham số cho lệnh này.

Để cho phép tất cả các kết nối HTTPS (port 443) đến, hãy chạy lệnh:

sudo ufw allow https
Rule added
Rule added (v6)

Một cú pháp thay thế là chỉ định số port của dịch vụ HTTPS:

sudo ufw allow 443
Rule added
Rule added (v6)

Cho phép tất cả kết nối HTTP và HTTPS đến

Nếu bạn muốn cho phép cả lưu lượng HTTP và HTTPS, bạn có thể tạo một rule duy nhất cho phép cả hai port. Cách sử dụng này yêu cầu bạn cũng phải xác định protocol bằng tham số -p. Trong trường hợp này nó nên được đặt thành tcp.

Để cho phép tất cả các kết nối HTTP và HTTPS đến (port 80443), hãy chạy lệnh:

sudo ufw allow proto tcp from any to any port 80,443
Rule added
Rule added (v6)

Cho phép kết nối MySQL từ địa chỉ IP hoặc subnet cụ thể

MySQL lắng nghe các kết nối từ client trên port 3306. Nếu server cơ sở dữ liệu MySQL của bạn đang được sử dụng bởi một client trên một server từ xa, bạn sẽ cần tạo một rule UFW để cho phép kết nối đó.

Để cho phép các kết nối MySQL đến từ một địa chỉ IP hoặc subnet cụ thể, hãy sử dụng tham số from để chỉ định địa chỉ IP nguồn và tham số port để đặt port đích 3306.

Lệnh sau sẽ cho phép địa chỉ IP 203.0.113.103 kết nối đến port MySQL của server:

sudo ufw allow from 203.0.113.103 to any port 3306
Rule added

Để cho phép toàn bộ subnet 203.0.113.0/24 kết nối đến server MySQL của bạn, hãy chạy lệnh:

sudo ufw allow from 203.0.113.0/24 to any port 3306
Rule added

Cho phép kết nối PostgreSQL từ địa chỉ IP hoặc Subnet cụ thể

PostgreSQL lắng nghe các kết nối từ client trên port 5432. Nếu server cơ sở dữ liệu PostgreSQL của bạn đang được sử dụng bởi một client trên một server từ xa, bạn cần cho phép kết nối đó.

Để cho phép các kết nối PostgreSQL đến từ một địa chỉ IP hoặc subnet cụ thể, hãy chỉ định nguồn bằng tham số from và đặt port thành 5432:

sudo ufw allow from 203.0.113.103 to any port 5432
Rule added

Để cho phép toàn bộ subnet 203.0.113.0/24 kết nối đến server PostgreSQL của bạn, hãy chạy lệnh:

sudo ufw allow from 203.0.113.0/24 to any port 5432
Rule added

Chặn mail SMTP đi

Các mail server như Sendmail và Postfix thường sử dụng port 25 cho lưu lượng SMTP. Nếu server của bạn được gửi mail đi, bạn có thể muốn chặn loại lưu lượng đó. Để chặn các kết nối SMTP đi, hãy chạy lệnh:

sudo ufw deny out 25
Rule added
Rule added (v6)

Lệnh này cấu hình firewall của bạn để drop tất cả lưu lượng đi trên port 25. Nếu bạn cần từ chối các kết nối đi trên một số port khác, bạn có thể lặp lại lệnh này và thay thế 25 bằng số port bạn muốn chặn.

Tổng kết

UFW là một công cụ mạnh mẽ có thể cải thiện đáng kể tính bảo mật của các server của bạn khi được cấu hình đúng cách. Hầu hết các lệnh trong hướng dẫn này có thể được điều chỉnh linh hợp để áp dụng vào các trường hợp khác nhau bằng cách thay đổi các tham số như địa chỉ IP nguồn và/hoặc port đích. Để biết thêm thông tin chi tiết về ufw, bạn có thể tham khảo tài liệu của Ubuntu hoặc dùng lệnh man ufw.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất