Chuyên mục
Linux Network

Hướng dẫn UFW: Cấu hình và quản lý tường lửa trên Linux

Đa số các bản phiên bản Linux đều được cài đặt sẵn tiện tích tường lửa iptables (riêng CentOS sử dụng firewalld) để quản lý gói tin dựa theo các quy tắc được thiết lập sẵn nhằm nâng cao tính bảo mật cho hệ thống. Tuy nhiên việc cấu hình iptables chẳng dễ dàng tí nào bởi cấu trúc lệnh dài dòng và khó nhớ.

Ví dụ muốn mở port 8888 phải gõ combo sau

Mở port 8888

iptables -A INPUT -p tcp -m tcp --dport 8888 -j ACCEPTCode language: Nginx (nginx)

Lưu lại thông số, nếu không sau khi reboot sẽ bị mất

sudo netfilter-persistent saveCode language: Nginx (nginx)

Để cấu hình tường lưa trên Linux tiện lợi và hiệu quả hơn, bạn ta nên chuyển qua sử dụng UFW (Uncomplicated Firewall) do Canonical (công ty làm ra điều hành Ubuntu) phát triển. UFW không phải là một ứng dụng tường lừa thay thế iptables, nó chỉ giao diện dòng lệnh của iptablesvới các câu lệnh ngắn gọn, dễ nhớ hơn.

Với UFW, khi cần mở port 8888, chỉ cần phải gõ 1 lệnh duy nhất

sudo ufw allow 8888Code language: Nginx (nginx)

Chỉ 1 dòng ngắn gọn duy nhất thay vì 2 dòng dài lê thê như khi dùng iptables.

Dưới đây là hướng dẫn cách sử dụng UFW để giúp bạn cấu hình tường lửa trên Linux hiệu quả hơn.

1. Cài đặt UFW

Bạn chỉ nên cài đặt UFW trên hệ thống Linux mới, chưa cài đặt bất cứ control panel, script quản lý nào như cPanel, aaPanel, CyberPanel, Centminmod,… Vì các loại control panel này luôn cài đặt sẵn các tiện ích tường lửa đi kèm. Cài đặt thêm UFW sẽ gây xung đột hệ thống.

Cập nhật hệ thống trước khi cài đặt

sudo apt update
sudo apt upgrade -yCode language: Nginx (nginx)

Kiểm tra xem UFW đã được cài sẵn trên máy chưa bằng lệnh

which ufwCode language: Bash (bash)

Nếu không nhận được kết quả nào, nghĩa là ufw chưa được cài đặt trong máy. Bạn cài đặt UFW như các package quen thuộc khác

sudo apt install ufwCode language: Nginx (nginx)

Mặc định sau khi cài đặt, ufw sẽ không được kích hoạt. Bạn cần giữ nguyên như thế. Chỉ kích hoạt UFW sau khi đã thực hiện những bước cấu hình căn bản.

sudo ufw statusCode language: Nginx (nginx)

Kết quả trả về: inactivate

Output
Status: inactiveCode language: Nginx (nginx)

2. Cấu hình căn bản UFW

Thiết lập chế độ mặc định

Đầu tiên, bạn cần thiết lập chế độ hoạt động mặc định của UFW:

  • Chặn tất cả các kết nối từ ngoài truy cập vào máy chủ
  • Chỉ cho phép kết nối từ máy chủ ra bên ngoài.

Sau đó, chúng ta sẽ thiết lập thêm các quy tắc để cho phép các kết nối bên ngoài truy cập vào các dịch vụ qua các cổng được chỉ định tuỳ theo nhu cầu sử dụng.

Chặn deny truy cập từ bên ngoài vào máy chủ:

sudo ufw default deny incomingCode language: JavaScript (javascript)
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)Code language: PHP (php)

Cho phép allow kết nối từ máy chủ ra bên ngoài

sudo ufw default allow outgoingCode language: JavaScript (javascript)
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)Code language: PHP (php)

Mở cổng kết nối SSH

Bạn cần mở cổng kết nối SSH trước khi kích hoạt UFW. Nếu không, bạn sẽ không thể truy cập vào máy chủ được nữa, do thiết lập mặc định đã chặn mọi kết nối từ bên ngoài vào.

Bạn có thể mở kết nối SSH bằng 3 cách:

Sử dụng tên ứng dụng OpenSSH

sudo ufw allow OpenSSHCode language: Nginx (nginx)
Output
Rule added
Rule added (v6)Code language: Nginx (nginx)

Sử dụng tên dịch vu ssh

sudo ufw allow sshCode language: Nginx (nginx)
Output
Rule added
Rule added (v6)Code language: Nginx (nginx)

Sử dụng port 22

sudo ufw allow 22Code language: Nginx (nginx)
Rule added
Rule added (v6)Code language: Nginx (nginx)

Nếu bạn đã cấu hình truy cập SSH qua cổng khác, cần phải thay đổi port tương ứng khi cấu hình UFW. Ví dụ, nếu bạn cấu hình truy cập SSH Server qua cổng 2222, hãy đổi thành lệnh sau để mở cổng kết nối

sudo ufw allow 2222Code language: Nginx (nginx)
Rule added
Rule added (v6)Code language: Nginx (nginx)

3. Kích hoạt UFW

Sau khi đã mở cổng kết nối SSH, bạn đã có thể kích hoạt tường lửa UFW.

Trước khi kích hoạt, kiểm tra lại các quy tắc đã được thiết lập trên UFW

sudo ufw show addedCode language: Nginx (nginx)
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSHCode language: Nginx (nginx)

Sau khi đã chắc chắn đã mở cổng kết nối SSH, kích hoạt UFW bằng lệnh

sudo ufw enableCode language: Bash (bash)
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startupCode language: Nginx (nginx)

Hệ thống sẽ cảnh báo việc kích hoạt UFW có thể gây gián đoạn kết nối SSH. Do bạn đã cấu hình mở cổng SSH nên sẽ không gặp vấn đề nào cả. Chọn y và bấm Enter để xác nhận.

Tường lửa giờ đã được kích hoạt. Kiểm tra lại tình trạng hoạt động của UFW để xác nhận

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

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere                  
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)Code language: YAML (yaml)

4. Cấu hình UFW nâng cao

Ở bước này, chúng ta cần cấu hình mở kết nối cho các dịch vụ đang được cài đặt trên máy chủ.

Mở kết nối cho web server Apache / Nginx

  • Dịch vụ web server HTTP sử dụng cổng 80, mở kết nối bằng lệnh sudo ufw allow http hoặc sudo ufw allow 80
  • Dịch vụ web server HTTPS sử dụng cổng 443, mở kết nối bằng lệnh sudo ufw allow https hoặc sudo ufw allow 443
  • Bạn cũng có thể mở kết nối HTTP và HTTPS chỉ theo tên của Web Server: sudo ufw allow 'Apache Full' (nếu máy chủ đang cài web server Apache) hoặc sudo ufw allow 'Nginx Full' (nếu máy chủ đang cài web server Nginx)

Bạn có thể kiểm tra hồ sơ ứng dụng đã được cài đặt trên máy chủ bằng lệnh

sudo ufw app listCode language: PHP (php)

Mở kết nối theo cổng mạng

Bạn có thể cấu hình mở cổng mạng cho UFW bằng lệnh sudo ufw allow <port>.

Ví dụ mình muốn mở kết nối cho WireGuard VPN Server chạy trên cổng 51820, sử dụng lệnh sau

sudo ufw allow 51820Code language: Nginx (nginx)

Mở thêm kết nối cổng 873 cho dịch vụ truyền tải file qua mạng rsync

sudo ufw allow 873Code language: Nginx (nginx)

Bạn có thể mở cùng lúc 1 dãy port , nhưng phải kết hợp thêm giao thức (udp / tcp) vào lệnh. Ví dụ dưới đây là cách mở kết nối cho dịch vụ X11

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udpCode language: YAML (yaml)

Cho phép kết nối theo địa chỉ IP

Bạn có thể cho phép kết nối vào máy chủ theo địa chỉ IP

sudo ufw allow from 123.123.123.123Code language: CSS (css)

Bạn có thể quy định thêm cổng kết nối để giới hạn truy cập cho IP. Ví dụ mình muốn cho phép địa chỉ IP 123.123.123.123 kết nối vào cổng 22 (SSH), sử dụng lệnh sau

sudo ufw allow from 123.123.123.123 to any port 22Code language: YAML (yaml)

Cho phép kết nối theo Subnet

Bạn có thể thay thế IP bằng Subnet để cho phép kết nối theo lớp mạng. Ví dụ: mình muốn cho phép dãy IP từ 10.0.1.1 đến 10.0.1.254, sử dụng lệnh sau

sudo ufw allow from 10.0.1.0/24Code language: YAML (yaml)

Chặn kết nối

Sử dụng tham số deny để chặn kết nối vào máy chủ.

Chặn kết nối HTTP

sudo ufw deny httpCode language: Nginx (nginx)

Chặn địa chỉ IP 123.123.123.123

sudo ufw deny from 123.123.123.123Code language: CSS (css)

Chặn cổng 25 từ máy chủ ra bên ngoài (mục đích nhằm chặn dịch vụ email SMTP)

sudo ufw deny out 25Code language: Nginx (nginx)

Xoá kết nối theo số thứ tự

Để xoá quy tắc theo số thứ tự, bạn cần liệt kê các quy tắc theo thứ tự bằng lệnh

sudo ufw status numberedCode language: Nginx (nginx)

Kết quả nhận được

Status: active

     To                         Action      From
     --                         ------      ----
[ 1] OpenSSH                    ALLOW IN    Anywhere                  
[ 2] 80/tcp                     ALLOW IN    Anywhere                  
[ 3] OpenSSH (v6)               ALLOW IN    Anywhere (v6)             
[ 4] 80/tcp (v6)                ALLOW IN    Anywhere (v6)Code language: YAML (yaml)

Nếu muốn xoá kết nối dịch vụ HTTP, số thứ tự 2, sử dụng lệnh

sudo ufw delete 2Code language: JavaScript (javascript)
Deleting:
 allow 80
Proceed with operation (y|n)? y
Rule deletedCode language: YAML (yaml)

Xoá kết nối UFW theo tên hoặc cổng mạng

Bạn cũng có thể xoá UFW rule theo tên dịch vụ hoặc cổng mạng.

Ví dụ mình có thể xoá kết nối dịch vụ HTTP bằng 1 trong 2 cách sau

sudo ufw delete allow httpCode language: JavaScript (javascript)

hoặc

sudo ufw delete allow 80Code language: JavaScript (javascript)

Khi sử dụng cách xoá kết nối theo tên hoặc cổng mạng, cả hai quy tắc của IPv4 và IPv6 đều sẽ bị xoá.

Kiểm tra tình trạng hoạt động của UFW

Bạn có thể kiểm tra tình trạng hoạt động của UFW bằng lệnh

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

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere                  
80/tcp                     ALLOW IN    Anywhere                  
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)             
80/tcp (v6)                ALLOW IN    Anywhere (v6)Code language: YAML (yaml)

5. Tắt hoặc thiết lập lại UFW

Nếu bạn không muốn sử dụng UFW nữa, có thể vô hiệu hoá nó bằng lệnh

sudo ufw diableCode language: Nginx (nginx)
Firewall stopped and disabled on system startupCode language: Nginx (nginx)

Các quy tắc đã thiết lập vẫn được giữ nguyên, không bị xoá khi bạn vô hiệu hoá UFW. Khi bạn kích hoạt UFW, các quy tắc này sẽ hiệu lực trở lại.

Nếu muốn xoá hết tắc cả các quy tắc đã thiết lập và cấu hình UFW lại từ đầu, bạn dùng tham số reset

sudo ufw resetCode language: Nginx (nginx)

6. Lời kết

UFW giúp việc quản lý tường lửa trên Linux đơn giản và hiệu quả hơn rất nhiều so với việc cấu hình trực tiếp bằng iptables. Trong trường hợp bạn muốn thiết lập các cấu hình tường lửa bảo mật hơn, hãy nghiên cứu thêm fail2bancsf.

Nếu bạn đang sử dụng dịch vụ máy ảo miễn phí của Oracle Cloud Free Tier, UFW là công cụ không thể thiếu sau khi thiết lập máy ảo giúp bạn mở cổng dịch vụ dễ dàng hơn.

Tham khảo: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-18-04

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng mò vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Bởi Thuận Bùi

Runner at Yêu Chạy Bộ. Blogger at Ba Lô & Dép Lào. Web Developer at TB's Blog.
Follow me: Facebook / Instagram

3 trả lời trong “Hướng dẫn UFW: Cấu hình và quản lý tường lửa trên Linux”

Status ufw của mình nè.
# sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip

To Action From
— —— —-
22 ALLOW IN Anywhere
22/tcp ALLOW IN Anywhere
80 ALLOW IN Anywhere
443 ALLOW IN Anywhere
9000 ALLOW IN Anywhere
22 (v6) ALLOW IN Anywhere (v6)
22/tcp (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
9000 (v6) ALLOW IN Anywhere (v6)

Trả lời MrD Hủy

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 *