Hướng Dẫn Cơ Bản Về UFW Trên Ubuntu
Tìm hiểu cơ bản về UFW trên Ubuntu. Hướng dẫn chi tiết cách bật/tắt, mở/đóng port, và cấu hình tường lửa UFW chuẩn nhất.
UFW là một công cụ quản lý tường lửa cực kỳ phổ biến và thân thiện với người dùng trên các hệ điều hành Linux, đặc biệt là Ubuntu. Bản chất UFW là một frontend (giao diện thao tác) giúp đơn giản hóa việc cấu hình cho nftables hoặc iptables ở phía sau.
Bài viết này sẽ hướng dẫn bạn những thao tác cơ bản nhất để làm chủ UFW, từ cách bật/tắt tường lửa, mở cổng (port), cho đến việc thiết lập các quy tắc nâng cao.
1. UFW Hoạt Động Ra Sao?
Trên Ubuntu 24.04 (và các bản phân phối mới), backend mặc định của UFW là nftables. Bạn có thể kiểm tra xem hệ thống đang dùng backend nào bằng lệnh:
root@dlp:~# update-alternatives --config iptables
Output tham khảo:
There are 2 choices for the alternative iptables (providing /usr/sbin/iptables).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/sbin/iptables-nft 20 auto mode
1 /usr/sbin/iptables-legacy 10 manual mode
2 /usr/sbin/iptables-nft 20 manual mode
Press <enter> to keep the current choice[*], or type selection number:
2. Kiểm Tra Trạng Thái Và Kích Hoạt UFW
Mặc dù service của UFW thường được chạy tự động cùng hệ thống, nhưng mặc định tường lửa UFW sẽ ở trạng thái vô hiệu hóa (inactive). Để sử dụng, bạn cần phải tự tay bật nó lên.
Đầu tiên, kiểm tra xem service của UFW có đang chạy hay không:
systemctl status ufw
Xem trạng thái hiện tại của tường lửa UFW:
ufw status
# Output: Status: inactive (Đang tắt)
Kích hoạt (Bật) UFW:
ufw enable
# Output: Firewall is active and enabled on system startup
Vô hiệu hóa (Tắt) UFW:
ufw disable
# Output: Firewall stopped and disabled on system startup
3. Quản Lý Rule (Quy Tắc): Mở/Đóng Port Cơ Bản
Theo mặc định, UFW sẽ từ chối (deny) tất cả các kết nối đi vào (incoming) và cho phép (allow) tất cả các kết nối đi ra (outgoing). Bạn có thể kiểm tra chi tiết bằng lệnh:
ufw status verbose
Output sẽ cho thấy: Default: deny (incoming), allow (outgoing), disabled (routed)
Do đó, bạn sẽ cần mở (allow) các port hoặc dịch vụ cần thiết để hệ thống hoạt động. Khi bạn gọi tên một dịch vụ (như ssh, http), UFW sẽ tự động tham chiếu port trong tệp /etc/services.
Một số ví dụ mở port phổ biến:
Cho phép kết nối SSH (Port 22):
ufw allow ssh
Cho phép kết nối Web HTTP (Port 80):
ufw allow http
Cho phép kết nối tới Port 2049 sử dụng giao thức TCP:
ufw allow 2049/tcp
Kiểm tra lại kết quả cấu hình:
ufw status verbose
4. Cách Xóa Quy Tắc (Delete Rules) Và Đặt Lại (Reset) UFW
Nếu bạn lỡ tay cấu hình sai hoặc không cần mở một port nào đó nữa, bạn có thể xóa quy tắc đó đi.
Cách 1: Xóa bằng cách gọi tên quy tắc đã tạo
# Xóa quy tắc cho phép SSH
ufw delete allow ssh
# Xóa quy tắc cho phép Port 80/tcp
ufw delete allow 80/tcp
Cách 2: Xóa theo số thứ tự (Khuyên dùng) Bạn có thể liệt kê các quy tắc kèm theo số thứ tự (rule number) để dễ dàng xóa chính xác:
ufw status numbered
Output tham khảo:
To Action From
-- ------ ----
[ 1] 2049/tcp ALLOW IN Anywhere
[ 2] 2049/tcp (v6) ALLOW IN Anywhere (v6)
Để xóa quy tắc số 2:
ufw delete 2
Reset lại UFW (Xóa mọi thứ): Nếu bạn muốn xóa sạch mọi quy tắc đã cấu hình và đưa UFW về trạng thái mặc định ban đầu:
ufw reset
5. Quy Tắc Nâng Cao: Chỉ Định IP Nguồn Và Đích
Đôi khi, bạn không muốn mở port cho cả thế giới, mà chỉ muốn cấp quyền cho một địa chỉ IP cụ thể nào đó. UFW hoàn toàn hỗ trợ bạn làm điều này với cú pháp trực quan.
Cho phép kết nối SSH chỉ từ IP 10.0.0.213:
ufw allow from 10.0.0.213 to any port ssh
Cho phép kết nối tới Web (Port 80/tcp) trên máy chủ hiện tại (IP 10.0.0.30) chỉ từ IP 10.0.0.213:
ufw allow from 10.0.0.213 to 10.0.0.30 port 80 proto tcp
Giới hạn kết nối để chống Brute-Force (Limit):
Bạn có thể sử dụng limit để giới hạn số lần kết nối. Ví dụ, nếu ai đó thử đăng nhập SSH quá 6 lần trong vòng 30 giây, kết nối của họ sẽ bị từ chối:
ufw limit from 10.0.0.221 to any port ssh
6. Cấu Hình ICMP (Ping) Trên UFW
Mặc dù các kết nối đi vào (incoming) bị từ chối theo mặc định, nhưng các kết nối liên quan đến ICMP (như lệnh Ping) lại được UFW cho phép ở cấu hình mặc định.
Để thay đổi thiết lập này, bạn không dùng lệnh ufw thông thường mà cần chỉnh sửa trực tiếp tệp tin cấu hình:
vi /etc/ufw/before.rules
Cách chặn Ping (Từ chối ICMP):
Tìm đến đoạn có cấu hình ICMP và thêm dấu # (comment) vào đầu các dòng để vô hiệu hóa:
# ok icmp codes for INPUT
# -A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
# -A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
# -A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
# -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
Cách chỉ cho phép Ping từ một mạng lưới nhất định:
Nếu bạn chỉ muốn cho phép mạng 10.0.0.0/24 có thể Ping đến máy chủ, hãy thêm dòng sau:
-A ufw-before-input -p icmp --icmp-type echo-request -s 10.0.0.0/24 -j ACCEPT
Sau khi chỉnh sửa xong, hãy lưu file lại và tải lại (reload) cấu hình của UFW:
ufw reload
Trên đây là những kiến thức cơ bản nhất để bạn bắt đầu sử dụng UFW trên môi trường Linux/Ubuntu. Nắm vững tường lửa UFW sẽ giúp máy chủ của bạn an toàn hơn rất nhiều trước các nguy cơ tấn công từ mạng bên ngoài. Chúc bạn thao tác thành công!
Bình luận
Bài viết liên quan
Beszel là gì? Giải pháp giám sát hệ thống nhẹ, hiện đại và miễn phí cho Linux, Docker và Homelab
Tìm hiểu Beszel là gì, giải pháp giám sát (monitoring) tài nguyên hệ thống, VPS, Docker hiện đại, nhẹ nhàng và hoàn toàn miễn phí thay thế Prometheus.
Dockhand - Công cụ quản lý Docker giao diện web cho người mới
Dockhand là một công cụ quản lý Docker có giao diện web hiện đại, dễ sử dụng, rất phù hợp cho người mới bắt đầu và các hệ thống homelab.
Lập lịch backup Daily, Weekly, Monthly bằng Tar, Rsync và Cron trên Linux
Hướng dẫn cách tự động hóa quá trình sao lưu dữ liệu hàng ngày, hàng tuần và hàng tháng trên Linux sử dụng công cụ tar, find, rsync và crontab.