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
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”.
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.