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

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

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

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

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

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

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.

Kết quả trả về: inactivate

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ủ:

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

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

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

Sử dụng port 22

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

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

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

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

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

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

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

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

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

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

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

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

Chặn địa chỉ IP 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)

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

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

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

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

hoặc

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

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

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

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 fail2ban và csf.