Chuyên mục
Linux

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 ACCEPT

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

sudo netfilter-persistent save

Để 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 8888

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 -y

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

which ufw

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 ufw

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 status

Kết quả trả về: inactivate

Output
Status: inactive

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 incoming
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

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

sudo ufw default allow outgoing
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)

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 OpenSSH
Output
Rule added
Rule added (v6)

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

sudo ufw allow ssh
Output
Rule added
Rule added (v6)

Sử dụng port 22

sudo ufw allow 22
Rule added
Rule added (v6)

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 2222
Rule added
Rule added (v6)

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 added
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH

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 enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

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
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)

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 list

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 51820

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 873

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/udp

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

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 22

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/24

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 http

Chặn địa chỉ IP 123.123.123.123

sudo ufw deny from 123.123.123.123

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 25

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 numbered

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)

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 2
Deleting:
 allow 80
Proceed with operation (y|n)? y
Rule deleted

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 http

hoặc

sudo ufw delete allow 80

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 verbose
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)

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 diable
Firewall stopped and disabled on system startup

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 reset

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

Trả lời