Tìm hiểu UFW căn Bản trên Ubuntu: Các Quy Tắc và Lệnh Tường Lửa Thông Dụng UFW Ubuntu

UFW căn Bản trên Ubuntu

Hôm nay, các bạn cùng DataOnline tìm hiểu về UFW Ubuntu nhé. UFW (Uncomplicated Firewall) là một công cụ cấu hình tường lửa chạy trên nền tảng của iptables, được tích hợp sẵn trong các bản phân phối Ubuntu. Nó cung cấp một giao diện dòng lệnh đơn giản để cấu hình các trường hợp sử dụng tường lửa thông dụng.

Hướng dẫn dạng “cheat sheet” này cung cấp tài liệu tham khảo nhanh về các trường hợp sử dụng và lệnh UFW thông dụng, bao gồm ví dụ về cách cho phép và chặn các dịch vụ dựa theo cổng, giao diện mạng và địa chỉ IP nguồn.

Cách Sử Dụng Hướng Dẫn Này

  •  Hướng dẫn này được trình bày ở dạng cheat sheet với các đoạn lệnh dòng lệnh tự chứa.
  •  Bạn có thể nhảy đến bất kỳ phần nào có liên quan đến công việc bạn cần thực hiện.
  •  Khi bạn thấy các đoạn văn bản được đánh dấu (highlighted) trong lệnh, hãy nhớ rằng những giá trị này nên là các địa chỉ IP từ mạng của riêng bạn.
  •  Nhớ rằng bạn có thể kiểm tra tập quy tắc UFW hiện tại bằng lệnh:
    sudo ufw status

    hoặc

    sudo ufw status verbose

Ngoài ra, bạn có thể triển khai ứng dụng frontend từ GitHub sử dụng DataOnline App Platform để DataOnline lo việc mở rộng ứng dụng của bạn.

Kiểm Tra Trạng Thái UFW Ubuntu

Để kiểm tra xem UFW đã được bật chưa, chạy:

sudo ufw status verbose

Output

Status: inactive

Đầu ra trên cho biết tường lửa của bạn đang ở trạng thái không hoạt động.

Bật UFW

Nếu khi chạy ufw status hiển thị “Status: inactive”, nghĩa là tường lửa chưa được bật. Bạn cần chạy lệnh để bật nó lên.

Mặc định, khi được bật, UFW sẽ chặn tất cả lưu lượng đến từ bên ngoài trên mọi cổng của máy chủ. Trong thực tế, nếu bạn đang kết nối qua SSH và bật UFW trước khi cho phép lưu lượng qua cổng SSH, bạn sẽ bị ngắt kết nối. Hãy đảm bảo rằng bạn đã theo dõi phần “Allow SSH” (Cho phép SSH) của hướng dẫn này trước khi bật tường lửa nếu trường hợp của bạn như vậy.

Để bật UFW trên hệ thống, chạy:

sudo ufw enable

Bạn sẽ thấy đầu ra như sau:

Output

Firewall is active and enabled on system startup

Để xem những gì hiện đang bị chặn hoặc cho phép, bạn có thể sử dụng tham số verbose với lệnh ufw status:

sudo ufw status

Output (ví dụ)

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

Tắt UFW

Nếu vì lý do nào đó bạn cần tắt UFW, hãy chạy:

sudo ufw disable

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

Chặn Một Địa Chỉ IP

Để 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ể, thay thế địa chỉ IP được đánh dấu bằng địa chỉ bạn muốn chặn:

sudo ufw deny from 203.0.113.100

Output

Rule added

Trong ví dụ trên, from 203.0.113.100 chỉ định địa chỉ IP nguồn là “203.0.113.100”. Nếu bạn chạy sudo ufw status ngay bây giờ, bạn sẽ thấy địa chỉ IP này được liệt kê với hành động DENY.

Output

Status: active

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

Tất cả các kết nối, đến và đi, sẽ bị chặn cho địa chỉ IP đã chỉ định.

Chặn Một Mạng Con

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

sudo ufw deny from 203.0.113.0/24

Output

Rule added

Chặn Kết Nối Đến Một Giao Diện Mạng

Để chặn các kết nối đến từ một địa chỉ IP cụ thể đến một giao diện mạng cụ thể, chạy lệnh sau (thay thế địa chỉ IP bạn muốn chặn):

sudo ufw deny in on eth0 from 203.0.113.100

Output

Rule added

Tham số in cho biết áp dụng quy tắc chỉ đối với các kết nối đến, và on eth0 chỉ định quy tắc chỉ áp dụng cho giao diện eth0. Điều này hữu ích nếu máy của bạn có nhiều giao diện (bao gồm cả ảo) và bạn chỉ cần chặn lưu lượng đến một số giao diện nhất định.

Cho Phép Một Địa Chỉ IP

Để 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ể, chạy lệnh sau (thay thế địa chỉ IP tương ứng):

sudo ufw allow from 203.0.113.101

Output

Rule added

Nếu bạn chạy sudo ufw status bây giờ, bạn sẽ thấy từ “ALLOW” hiển thị bên cạnh địa chỉ IP đó.

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ừ một mạng con bằng cách cung cấp địa chỉ mạng con, ví dụ: 203.0.113.0/24.

Cho Phép Kết Nối Đến Một Giao Diện Mạng

Để cho phép các kết nối đến từ một địa chỉ IP cụ thể đến một giao diện mạng cụ thể, chạy lệnh sau (thay thế địa chỉ IP cần cho phép):

sudo ufw allow in on eth0 from 203.0.113.102

Output

Rule added

Tham số in áp dụng quy tắc cho các kết nối đến, và on eth0 chỉ định quy tắc chỉ áp dụng cho giao diện eth0.

Nếu bạn chạy sudo ufw status, đầu ra sẽ hiển thị:

Output

Status: active

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

Xóa Quy Tắc UFW

Để xóa một quy tắc mà bạn đã thiết lập trước đó trong UFW, hãy sử dụng lệnh ufw delete theo sau bởi quy tắc (allow hoặc deny) và mô tả mục tiêu. Ví dụ, để xóa quy tắc cho phép tất cả các kết nối từ địa chỉ IP 203.0.113.101:

sudo ufw delete allow from 203.0.113.101

Output

Rule deleted

Một cách khác để chỉ định quy tắc cần xóa là cung cấp ID của quy tắc. Bạn có thể lấy thông tin ID bằng:

sudo ufw status numbered

ufw ubuntu can ban 2

Output

Status: active

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

Từ đầu ra, bạn thấy có hai quy tắc đang hoạt động. Quy tắc thứ nhất (với ID [1]) chặn tất cả các kết nối từ 203.0.113.100, quy tắc thứ hai cho phép kết nối trên giao diện eth0 từ 203.0.113.102.

Vì mặc định UFW đã chặn tất cả lưu lượng đến ngoại trừ những quy tắc cho phép, quy tắc thứ nhất có thể không cần thiết và bạn có thể xóa nó. Để xóa quy tắc theo ID, chạy:

sudo ufw delete 1

Bạn sẽ được nhắc xác nhận việc xóa quy tắc. Ví dụ:

Output

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

Nếu bạn chạy lại sudo ufw status, bạn sẽ thấy quy tắc đã bị xóa.

Liệt Kê Các Hồ Sơ Ứng Dụng Có Sẵn

Sau khi cài đặt, các ứng dụng sử dụng giao tiếp mạng thường tự thiết lập một hồ sơ UFW (UFW profile) để bạn có thể sử dụng nhằm cho phép lưu lượng đến. Điều này tương tự như chạy lệnh ufw allow from nhưng có ưu điểm là trừu tượng hoá các số cổng mà dịch vụ sử dụng, đồng thời cung cấp tên gọi thân thiện cho người dùng.

Để liệt kê các hồ sơ hiện có, chạy:

sudo ufw app list

Nếu bạn đã cài đặt một dịch vụ như máy chủ web hay phần mềm phụ thuộc vào mạng mà không có hồ sơ nào được tạo trong UFW, hãy đảm bảo rằng dịch vụ đó đã được bật. Ví dụ, đối với các máy chủ từ xa, thông thường sẽ có OpenSSH sẵn có.

Output

Available applications:
  OpenSSH

Kích Hoạt Hồ Sơ Ứng Dụng

Để kích hoạt một hồ sơ ứng dụng UFW, chạy lệnh ufw allow theo sau là tên của hồ sơ ứng dụng mà bạn muốn kích hoạt (tên có thể được lấy từ lệnh sudo ufw app list). Ví dụ, để kích hoạt hồ sơ OpenSSH (cho phép tất cả các kết nối SSH đến trên cổng mặc định):

sudo ufw allow “OpenSSH”

Output

Rule added
Rule added (v6)

Lưu ý: Hãy nhớ đặt tên hồ sơ có nhiều từ trong dấu nháy kép, ví dụ: “Nginx HTTPS”.

setup UFW ubuntu 4

Vô Hiệu Hồ Sơ Ứng Dụng

Để vô hiệu hóa một hồ sơ ứng dụng mà bạn đã kích hoạt trước đó, bạn cần xóa quy tắc tương ứng. Ví dụ, nếu bạn có đầu ra từ sudo ufw status như sau:

sudo ufw status

Output

Status: active

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

Điều này cho biết hồ sơ ứng dụng Nginx Full đang được kích hoạt, cho phép lưu lượng HTTP và HTTPS đến. Nếu bạn muốn chỉ cho phép HTTPS, bạn cần kích hoạt hồ sơ “Nginx HTTPS” và sau đó vô hiệu hóa “Nginx Full”:

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

Nhớ rằng bạn có thể liệt kê tất cả các hồ sơ ứng dụng có sẵn với:

sudo ufw app list

Cho Phép SSH

Khi làm việc với các máy chủ từ xa, bạn cần đảm bảo rằng cổng SSH luôn được mở để bạn có thể đăng nhập vào máy chủ.

Lệnh sau sẽ kích hoạt hồ sơ ứng dụng OpenSSH và cho phép tất cả các kết nối đến trên cổng SSH mặc định:

sudo ufw allow OpenSSH

Output

Rule added
Rule added (v6)

Một cách thay thế, bạn có thể chỉ định số cổng SSH (thường là 22):

sudo ufw allow 22

Output

Rule added
Rule added (v6)

Cho Phép Kết Nối SSH Đến Từ Một Địa Chỉ IP hoặc Mạng Con Cụ Thể

Để cho phép các kết nối SSH đến từ một địa chỉ IP hoặc mạng con cụ thể, bạn cần thêm tham số from để xác định nguồn. Điều này yêu cầu bạn chỉ định địa chỉ đích bằng tham số to và giới hạn giao thức với proto tcp cùng tham số port đặt thành 22 (cổng mặc định của SSH).

Ví dụ, để chỉ cho phép các kết nối SSH đến từ địa chỉ IP 203.0.113.103, chạy:

sudo ufw allow from 203.0.113.103 proto tcp to any port 22

Output

Rule added

Bạn cũng có thể sử dụng địa chỉ mạng con, ví dụ để cho phép toàn bộ mạng 203.0.113.0/24:

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

utput

Rule added

Cho Phép Kết Nối Rsync Đến Từ Một Địa Chỉ IP hoặc Mạng Con Cụ Thể

Chương trình Rsync, chạy trên cổng 873, được dùng để chuyển tập tin giữa các máy.
Để cho phép các kết nối Rsync đến từ một địa chỉ IP hoặc mạng con cụ thể, chỉ định tham số from với địa chỉ IP nguồn và to với cổng đích 873.

Ví dụ, để cho phép chỉ 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

Output

Rule added

Để cho phép toàn bộ mạng 203.0.113.0/24 kết nối Rsync, chạy:

sudo ufw allow from 203.0.113.0/24 to any port 873

Output

Rule added

Cho Phép Kết Nối HTTP/HTTPS cho Nginx

Khi cài đặt máy chủ web Nginx, hệ thống thường tự tạo ra một số hồ sơ ứng dụng UFW. Để xem các hồ sơ có sẵn của Nginx, chạy:

sudo ufw app list | grep Nginx

Output

Nginx Full
Nginx HTTP
Nginx HTTPS

Để cho phép cả lưu lượng HTTP và HTTPS, bạn có thể kích hoạt hồ sơ “Nginx Full”. Nếu chỉ muốn cho phép HTTP hoặc HTTPS, bạn có thể kích hoạt “Nginx HTTP” hoặc “Nginx HTTPS” tương ứng.

Ví dụ, để cho phép cả lưu lượng HTTP và HTTPS trên máy chủ (các cổng 80 và 443), chạy:

sudo ufw allow "Nginx Full"

Output

Rule added
Rule added

Cho Phép Kết Nối cho Apache

Tương tự như Nginx, khi cài đặt Apache, hệ thống sẽ tạo ra các hồ sơ ứng dụng. Để xem các hồ sơ có sẵn của Apache, chạy:

sudo ufw app list | grep Apache

Output

Apache
Apache Full
Apache Secur

Để cho phép cả lưu lượng HTTP và HTTPS, kích hoạt hồ sơ “Apache Full”:

sudo ufw allow "Apache Full"

Output

Rule added
Rule added (v6)

Cho Phép Tất Cả Kết Nối HTTP (Cổng 80)

Máy chủ web như Apache và Nginx thường lắng nghe yêu cầu HTTP trên cổng 80. Nếu chính sách INPUT của bạn được đặt là chặn (drop) hoặc từ chối (deny), bạn cần tạo quy tắc cho phép lưu lượng truy cập từ bên ngoài trên cổng 80.

Bạn có thể dùng tên dịch vụ (http) hoặc số cổng (80).

Để cho phép tất cả kết nối HTTP đến, chạy:

sudo ufw allow http

Output

Rule added
Rule added (v6)

Hoặc, sử dụng số cổng:

sudo ufw allow 80

Output

Rule added
Rule added (v6)

Cho Phép Tất Cả Kết Nối HTTPS (Cổng 443)

HTTPS thường sử dụng cổng 443. Để cho phép tất cả kết nối HTTPS đến, chạy:

sudo ufw allow https

Output

Rule added
Rule added (v6)

Hoặc sử dụng số cổng:

sudo ufw allow 443

Output

Rule added
Rule added (v6)

Cho Phép Cùng Lúc Kết Nối HTTP và HTTPS

Nếu bạn muốn cho phép lưu lượng đến trên cả cổng 80 và 443 cùng lúc, bạn có thể tạo một quy tắc cho cả hai cổng. Lệnh này yêu cầu chỉ định giao thức TCP với tham số proto tcp.

Để cho phép tất cả kết nối HTTP và HTTPS, chạy:

sudo ufw allow proto tcp from any to any port 80,443

Output

Rule added
Rule added (v6)

Cho Phép Kết Nối MySQL từ Một Địa Chỉ IP hoặc Mạng Con Cụ Thể

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

Để cho phép kết nối MySQL từ một địa chỉ IP cụ thể, ví dụ 203.0.113.103, chạy:

sudo ufw allow from 203.0.113.103 to any port 3306

Output

Rule added

Để cho phép toàn bộ mạng con 203.0.113.0/24, chạy:

sudo ufw allow from 203.0.113.0/24 to any port 3306

Output

Rule added

Cho Phép Kết Nối PostgreSQL từ Một Địa Chỉ IP hoặc Mạng Con Cụ Thể

PostgreSQL lắng nghe các kết nối trên cổng 5432. Để cho phép kết nối PostgreSQL từ một địa chỉ IP cụ thể, ví dụ 203.0.113.103, chạy:

sudo ufw allow from 203.0.113.103 to any port 5432

Output

Rule added

Để cho phép toàn bộ mạng con 203.0.113.0/24, chạy:

sudo ufw allow from 203.0.113.0/24 to any port 5432

Output

Rule added

Chặn Gửi Mail SMTP Outgoing

Các máy chủ mail như Sendmail và Postfix thường sử dụng cổng 25 cho lưu lượng SMTP. Nếu máy chủ của bạn không nên gửi mail đi, bạn có thể chặn lưu lượng đó.

Để chặn các kết nối SMTP gửi đi, chạy:

sudo ufw deny out 25

Output

Rule added
Rule added (v6)

Lệnh này cấu hình tường lửa chặn tất cả lưu lượng TCP ra trên cổng 25. Nếu bạn muốn chặn lưu lượng trên cổng khác, thay số 25 bằng số cổng đó.

Kết Luận

UFW là một công cụ mạnh mẽ có thể cải thiện đáng kể bảo mật của máy chủ khi được cấu hình đúng cách. Hướng dẫn này đã đề cập đến một số lệnh UFW thông dụng thường dùng để cấu hình tường lửa trên Ubuntu.

Hầu hết các lệnh trong hướng dẫn này có thể được điều chỉnh để phù hợp với các trường hợp và kịch bản khác nhau, chỉ cần thay đổi các tham số như địa chỉ IP nguồn và/hoặc cổng đích. Để biết thêm thông tin chi tiết về từng tham số và các tùy chọn có sẵn, bạn có thể dùng lệnh:

man ufw

Trang tài liệu chính thức của UFW trong Ubuntu cũng là một nguồn tham khảo tốt cho các trường hợp sử dụng nâng cao và các ví dụ khác.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *