Chào bạn, trong thế giới quản trị hệ thống Linux, việc đảm bảo an ninh mạng là một trong những ưu tiên hàng đầu. Một trong những công cụ mạnh mẽ và linh hoạt nhất để thực hiện nhiệm vụ này chính là tường lửa. Lệnh firewall-cmd là giao diện dòng lệnh chính cho Firewalld, dịch vụ tường lửa mặc định trên nhiều bản phân phối Linux hiện đại như CentOS, RHEL và Fedora. Hiểu và sử dụng thành thạo firewall-cmd không chỉ giúp bạn bảo vệ máy chủ khỏi các truy cập trái phép mà còn cho phép bạn kiểm soát luồng dữ liệu ra vào một cách chi tiết và hiệu quả. Việc quản lý firewall qua dòng lệnh mang lại tốc độ, sự chính xác và khả năng tự động hóa cao, là kỹ năng không thể thiếu của bất kỳ quản trị viên hệ thống nào. Bài viết này sẽ hướng dẫn bạn từ những bước cơ bản nhất như cài đặt, cấu hình cho đến việc sử dụng các lệnh firewall-cmd để quản lý tường lửa, cùng với các ví dụ thực tiễn và mẹo hữu ích. Chúng ta sẽ cùng nhau khám phá cách làm chủ công cụ này để xây dựng một hàng rào bảo vệ vững chắc cho hệ thống của bạn.
Giới thiệu về lệnh firewall-cmd trong Linux
Firewall-cmd là một công cụ giao diện dòng lệnh (CLI) được sử dụng để quản lý và tương tác với dịch vụ Firewalld trên các hệ điều hành Linux. Firewalld hoạt động như một bức tường lửa động, cho phép quản trị viên hệ thống cấu hình các quy tắc mạng mà không cần phải khởi động lại dịch vụ, giảm thiểu thời gian gián đoạn. Vai trò chính của firewall-cmd là cung cấp một cách thức đơn giản và nhất quán để định nghĩa các quy tắc kiểm soát truy cập mạng, chẳng hạn như mở hoặc đóng các cổng, cho phép hoặc từ chối các dịch vụ, và quản lý các kết nối mạng.
Trong bối cảnh an ninh mạng ngày càng phức tạp, việc quản lý tường lửa hiệu quả là vô cùng quan trọng. Bất kỳ máy chủ nào kết nối với internet đều có nguy cơ bị tấn công từ các tác nhân độc hại. Firewall-cmd giúp bạn thiết lập một tuyến phòng thủ đầu tiên, lọc các lưu lượng truy cập không mong muốn và chỉ cho phép những kết nối hợp lệ đi qua. Sử dụng công cụ này giúp bảo vệ các dịch vụ đang chạy trên máy chủ, ngăn chặn các cuộc tấn công quét cổng và bảo vệ dữ liệu nhạy cảm khỏi bị truy cập trái phép. So với các công cụ quản lý tường lửa cũ hơn như iptables, firewall-cmd cung cấp một giao diện thân thiện và dễ sử dụng hơn, đặc biệt là với khái niệm “vùng” (zones) giúp đơn giản hóa việc áp dụng các bộ quy tắc khác nhau cho các giao diện mạng khác nhau.
.jpg)
Bài viết này sẽ là một hướng dẫn toàn diện, giúp bạn nắm vững cách sử dụng lệnh firewall-cmd. Chúng ta sẽ bắt đầu từ việc cài đặt và cấu hình Firewalld trên các bản phân phối Linux phổ biến. Tiếp theo, bài viết sẽ đi sâu vào các lệnh cơ bản để thêm, xóa và kiểm tra quy tắc tường lửa. Để giúp bạn dễ hình dung, chúng tôi sẽ cung cấp các ví dụ thực tiễn như mở cổng cho máy chủ web hoặc chặn một địa chỉ IP cụ thể. Cuối cùng, bài viết sẽ đề cập đến các vấn đề thường gặp, cách khắc phục, cùng những lời khuyên và thực tiễn tốt nhất để bạn có thể quản lý tường lửa một cách chuyên nghiệp và an toàn. Hãy cùng bắt đầu hành trình làm chủ firewall-cmd để nâng cao kỹ năng bảo mật hệ thống của bạn.
Cài đặt và cấu hình firewalld trên hệ điều hành Linux
Để bắt đầu sử dụng lệnh firewall-cmd, trước tiên bạn cần đảm bảo rằng dịch vụ Firewalld đã được cài đặt và hoạt động trên hệ thống của mình. Firewalld thường được cài đặt mặc định trên các bản phân phối dựa trên Red Hat như CentOS, Fedora và RHEL. Tuy nhiên, trên các hệ thống khác như Ubuntu, bạn có thể cần phải cài đặt nó một cách thủ công. Việc cài đặt và cấu hình ban đầu là bước nền tảng quan trọng để xây dựng một hệ thống tường lửa vững chắc.
Hướng dẫn cài đặt firewalld
Quá trình cài đặt Firewalld khá đơn giản và có thể thực hiện nhanh chóng thông qua trình quản lý gói của hệ điều hành. Tùy thuộc vào bản phân phối Linux bạn đang sử dụng, câu lệnh sẽ có đôi chút khác biệt.
Đối với CentOS/RHEL/Fedora:
Trên các hệ thống này, bạn sử dụng trình quản lý gói yum hoặc dnf. Hãy mở terminal và chạy lệnh sau với quyền quản trị viên (root hoặc sudo):
sudo yum install firewalld
Hoặc nếu bạn đang dùng phiên bản mới hơn:
sudo dnf install firewalld
Đối với Ubuntu/Debian:
Trên Ubuntu và các bản phân phối dựa trên Debian, Firewalld không phải là tường lửa mặc định (thường là UFW). Tuy nhiên, bạn hoàn toàn có thể cài đặt và sử dụng nó. Đầu tiên, bạn nên tắt UFW để tránh xung đột:
sudo ufw disable
Sau đó, tiến hành cài đặt Firewalld bằng trình quản lý gói apt:
sudo apt-get update
sudo apt-get install firewalld

Sau khi cài đặt hoàn tất, bạn cần kiểm tra trạng thái của dịch vụ để chắc chắn rằng nó đã được cài đặt đúng cách. Sử dụng lệnh systemctl để xem trạng thái của Firewalld:
sudo systemctl status firewalld
Nếu dịch vụ đang không hoạt động (inactive), bạn đừng lo lắng. Chúng ta sẽ khởi động nó trong bước tiếp theo. Nếu lệnh báo lỗi “unit not found”, có thể quá trình cài đặt đã gặp sự cố và bạn cần kiểm tra lại các bước trên.
Thiết lập cấu hình ban đầu cho firewalld
Sau khi cài đặt thành công, bước tiếp theo là khởi động dịch vụ và kích hoạt nó để tự động chạy mỗi khi hệ thống khởi động. Điều này đảm bảo rằng máy chủ của bạn luôn được bảo vệ bởi tường lửa ngay cả sau khi reboot.
Sử dụng các lệnh systemctl sau:
Để khởi động dịch vụ Firewalld ngay lập tức:
sudo systemctl start firewalld
Để kích hoạt dịch vụ tự khởi động cùng hệ thống:
sudo systemctl enable firewalld
Bây giờ, nếu bạn kiểm tra lại trạng thái bằng sudo systemctl status firewalld, bạn sẽ thấy dịch vụ đang ở trạng thái hoạt động (active (running)).
Một trong những khái niệm cốt lõi và mạnh mẽ nhất của Firewalld là “vùng” (zone). Vùng là một tập hợp các quy tắc được định sẵn, xác định mức độ tin cậy của một mạng hoặc một kết nối. Firewalld đi kèm với nhiều vùng mặc định như public, home, work, internal, dmz. Mỗi giao diện mạng (network interface) trên hệ thống của bạn sẽ được gán cho một vùng. Ví dụ, giao diện kết nối với internet thường được đặt trong vùng public với các quy tắc nghiêm ngặt nhất, trong khi giao diện kết nối với mạng nội bộ có thể được đặt trong vùng internal với các quy tắc linh hoạt hơn.
Bạn có thể xem vùng mặc định hiện tại bằng lệnh:
firewall-cmd --get-default-zone
Và xem các vùng đang được gán cho các giao diện mạng nào:
firewall-cmd --get-active-zones
Hiểu rõ khái niệm vùng và giao diện mạng là chìa khóa để bạn có thể cấu hình Firewalld một cách linh hoạt và hiệu quả, áp dụng đúng bộ quy tắc cho đúng loại kết nối, từ đó tối ưu hóa an ninh cho hệ thống.

Các lệnh cơ bản với firewall-cmd để quản lý firewall
Sau khi đã cài đặt và cấu hình Firewalld, giờ là lúc tìm hiểu các lệnh cơ bản để tương tác và quản lý tường lửa. Lệnh firewall-cmd cung cấp đầy đủ các tùy chọn để bạn có thể thêm, xóa, sửa đổi và kiểm tra các quy tắc một cách dễ dàng. Việc nắm vững các lệnh này sẽ giúp bạn nhanh chóng kiểm soát được luồng dữ liệu ra vào hệ thống của mình.
Thêm quy tắc firewall
Một trong những tác vụ phổ biến nhất khi quản lý tường lửa là mở một cổng hoặc cho phép một dịch vụ cụ thể đi qua. Ví dụ, nếu bạn đang chạy một máy chủ web, bạn cần mở cổng 80 (HTTP) và 443 (HTTPS) để người dùng bên ngoài có thể truy cập.
Firewall-cmd cho phép bạn thực hiện điều này theo hai cách: cho phép một dịch vụ được định nghĩa trước (như http, ssh) hoặc mở một cổng cụ thể.
Cú pháp để cho phép một dịch vụ:
sudo firewall-cmd --zone=<tên-vùng> --add-service=<tên-dịch-vụ> --permanent
Cú pháp để mở một cổng:
sudo firewall-cmd --zone=<tên-vùng> --add-port=<số-cổng>/<giao-thức> --permanent
Lưu ý quan trọng ở đây là tùy chọn --permanent. Khi bạn thêm một quy tắc, nó chỉ có hiệu lực trong phiên làm việc hiện tại (runtime). Nếu bạn muốn quy tắc này được áp dụng vĩnh viễn, ngay cả sau khi khởi động lại hệ thống, bạn phải thêm cờ --permanent. Sau khi thêm một quy tắc vĩnh viễn, bạn cần tải lại cấu hình tường lửa để nó có hiệu lực ngay lập tức:
sudo firewall-cmd --reload
Ví dụ thực tế:
Để cho phép dịch vụ HTTP trên vùng public một cách vĩnh viễn:
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload
Để mở cổng 8080 sử dụng giao thức TCP trên vùng public:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Xóa quy tắc firewall
Tương tự như việc thêm quy tắc, việc xóa các quy tắc không còn cần thiết cũng rất quan trọng để giữ cho cấu hình tường lửa của bạn luôn gọn gàng và an toàn. Cú pháp để xóa quy tắc gần như giống hệt cú pháp thêm, chỉ thay đổi --add thành --remove.
Cú pháp để xóa một dịch vụ:
sudo firewall-cmd --zone=<tên-vùng> --remove-service=<tên-dịch-vụ> --permanent
Cú pháp để xóa một cổng:
sudo firewall-cmd --zone=<tên-vùng> --remove-port=<số-cổng>/<giao-thức> --permanent
Giống như khi thêm, bạn cũng cần sử dụng tùy chọn --permanent và sau đó là firewall-cmd --reload để thay đổi có hiệu lực vĩnh viễn và được áp dụng ngay lập tức. Nếu bạn quên --permanent, quy tắc sẽ được thêm lại sau khi tường lửa được tải lại hoặc hệ thống khởi động lại.
Ví dụ thực tế:
Để xóa dịch vụ HTTP đã thêm trước đó khỏi vùng public:
sudo firewall-cmd --zone=public --remove-service=http --permanent
sudo firewall-cmd --reload
Việc sửa đổi và cập nhật quy tắc thực chất là sự kết hợp của việc xóa quy tắc cũ và thêm quy tắc mới. Hiện tại, firewall-cmd không cung cấp một lệnh trực tiếp để “chỉnh sửa” một quy tắc hiện có, vì vậy quy trình tiêu chuẩn là xóa và thêm lại.
Kiểm tra trạng thái và cấu hình hiện tại của firewall
Kiểm tra thường xuyên trạng thái và cấu hình của tường lửa là một thói quen tốt để đảm bảo rằng hệ thống đang được bảo vệ đúng như mong muốn. Firewall-cmd cung cấp nhiều lệnh hữu ích để bạn có thể xem nhanh thông tin này.
Để kiểm tra xem dịch vụ Firewalld có đang chạy hay không:
sudo firewall-cmd --state
Lệnh này sẽ trả về running nếu dịch vụ đang hoạt động.
Để liệt kê tất cả các quy tắc, dịch vụ và cổng đang được áp dụng cho vùng mặc định, bạn có thể sử dụng lệnh:
sudo firewall-cmd --list-all
Lệnh này sẽ hiển thị thông tin chi tiết về vùng mặc định, bao gồm giao diện mạng, các dịch vụ được cho phép, các cổng đang mở và nhiều thông tin khác. Đây là một trong những lệnh kiểm tra hữu ích nhất.
.jpeg)
Nếu bạn muốn xem cấu hình của một vùng cụ thể khác, hãy thêm tùy chọn --zone:
sudo firewall-cmd --zone=internal --list-all
Để xem danh sách tất cả các dịch vụ và cổng đã được thêm vào cấu hình vĩnh viễn (permanent), bạn có thể thêm cờ --permanent vào lệnh liệt kê:
sudo firewall-cmd --permanent --list-all
Việc so sánh kết quả giữa cấu hình runtime và permanent giúp bạn phát hiện ra những thay đổi chưa được lưu vĩnh viễn. Bằng cách kết hợp các lệnh kiểm tra này, bạn luôn có một cái nhìn tổng quan và chi tiết về bức tường lửa của mình, giúp việc quản lý trở nên dễ dàng và chính xác hơn.
Ví dụ thực tiễn sử dụng firewall-cmd trong quản lý firewall trên Linux
Lý thuyết là nền tảng, nhưng thực hành mới thực sự giúp bạn củng cố kiến thức. Trong phần này, chúng ta sẽ đi vào các ví dụ cụ thể, mô phỏng những tác vụ quản trị tường lửa mà bạn sẽ thường xuyên gặp phải trong công việc hàng ngày. Các ví dụ này sẽ giúp bạn hiểu rõ hơn cách áp dụng các lệnh firewall-cmd vào các tình huống thực tế để bảo vệ máy chủ của mình.
Mở cổng HTTP và SSH
Hai trong số các dịch vụ phổ biến nhất mà bạn cần cho phép truy cập từ bên ngoài là SSH (Secure Shell) để quản trị từ xa và HTTP/HTTPS cho máy chủ web. Việc mở các cổng này là một trong những bước cấu hình đầu tiên sau khi cài đặt một máy chủ mới.
Bước 1: Xác định vùng hoạt động
Trước tiên, hãy kiểm tra xem giao diện mạng công cộng của bạn đang sử dụng vùng nào. Thông thường, đó sẽ là vùng public.
sudo firewall-cmd --get-active-zones
Lệnh này sẽ hiển thị, ví dụ, public: interfaces: eth0.
Bước 2: Mở cổng cho dịch vụ SSH
SSH là dịch vụ cực kỳ quan trọng để bạn có thể truy cập và quản lý máy chủ. Nó thường đã được cho phép theo mặc định trên nhiều hệ thống. Tuy nhiên, nếu chưa, bạn có thể thêm nó bằng lệnh sau:
sudo firewall-cmd --zone=public --add-service=ssh --permanent
Lệnh này sử dụng tên dịch vụ ssh đã được định nghĩa sẵn, tương đương với việc mở cổng 22/tcp.
Bước 3: Mở cổng cho dịch vụ Web (HTTP và HTTPS)
Để máy chủ web của bạn có thể phục vụ người dùng, bạn cần mở cổng 80 (HTTP) và 443 (HTTPS).
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
Bước 4: Áp dụng các thay đổi
Sau khi đã thêm tất cả các quy tắc vĩnh viễn, hãy tải lại tường lửa để các thay đổi có hiệu lực ngay lập tức.
sudo firewall-cmd --reload
Bước 5: Kiểm tra lại cấu hình
Cuối cùng, hãy kiểm tra lại để chắc chắn rằng các dịch vụ đã được thêm vào.
sudo firewall-cmd --zone=public --list-services
Kết quả trả về nên bao gồm ssh http https.

Thiết lập quy tắc chặn IP hoặc giới hạn truy cập
Bên cạnh việc mở cổng cho các dịch vụ hợp lệ, một chức năng quan trọng khác của tường lửa là chặn các truy cập không mong muốn. Điều này có thể là chặn một địa chỉ IP cụ thể đang có hành vi tấn công, hoặc giới hạn quyền truy cập vào một dịch vụ chỉ từ một số địa chỉ IP tin cậy.
Firewalld sử dụng “rich rules” (quy tắc giàu thông tin) để xử lý các yêu cầu phức tạp này.
Ví dụ 1: Chặn một địa chỉ IP cụ thể
Giả sử bạn phát hiện địa chỉ IP 198.51.100.10 đang cố gắng tấn công brute-force vào máy chủ của bạn. Bạn có thể chặn hoàn toàn IP này bằng lệnh sau:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.10" reject' --permanent
Lệnh này tạo một quy tắc: đối với các gói tin IPv4 (family="ipv4") từ địa chỉ nguồn (source address) 198.51.100.10, hãy từ chối (reject) chúng. Sau đó, đừng quên tải lại tường lửa:
sudo firewall-cmd --reload
Để xem các rich rule đã được thêm, bạn dùng lệnh:
sudo firewall-cmd --zone=public --list-rich-rules
Ví dụ 2: Chỉ cho phép truy cập SSH từ một địa chỉ IP
Để tăng cường bảo mật, bạn có thể cấu hình để chỉ cho phép kết nối SSH từ địa chỉ IP văn phòng của bạn (ví dụ: 203.0.113.5). Trước tiên, hãy xóa quy tắc SSH chung (nếu có):
sudo firewall-cmd --zone=public --remove-service=ssh --permanent
Sau đó, thêm một rich rule mới chỉ cho phép IP của bạn:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.5" service name="ssh" accept' --permanent
Cuối cùng, tải lại tường lửa:
sudo firewall-cmd --reload
Bằng cách sử dụng các ví dụ thực tiễn này, bạn có thể thấy được sức mạnh và sự linh hoạt của firewall-cmd trong việc bảo vệ hệ thống Linux, từ các tác vụ cơ bản đến các kịch bản bảo mật nâng cao.

Những vấn đề thường gặp và cách xử lý
Ngay cả với một công cụ mạnh mẽ và tương đối dễ sử dụng như firewall-cmd, bạn vẫn có thể gặp phải một số vấn đề trong quá trình cấu hình và quản lý. Hiểu rõ các sự cố phổ biến và biết cách khắc phục sẽ giúp bạn tiết kiệm thời gian và tránh được những tình huống khó xử, chẳng hạn như vô tình khóa chính mình ra khỏi máy chủ. Dưới đây là một số vấn đề thường gặp và hướng dẫn xử lý chi tiết.
Lệnh firewall-cmd không phản hồi hoặc báo lỗi
Đây là một trong những vấn đề cơ bản nhất mà người dùng mới có thể gặp phải. Khi bạn chạy một lệnh firewall-cmd và nhận được thông báo lỗi như “command not found” hoặc lệnh bị treo không có phản hồi, nguyên nhân thường xuất phát từ dịch vụ Firewalld.
Nguyên nhân:
- Dịch vụ Firewalld chưa được cài đặt: Đặc biệt trên các hệ điều hành như Ubuntu, Firewalld không được cài đặt mặc định.
- Dịch vụ Firewalld không hoạt động (inactive): Dịch vụ có thể đã được cài đặt nhưng chưa được khởi động hoặc đã bị dừng vì một lý do nào đó.
- Xung đột với dịch vụ tường lửa khác: Nếu trên hệ thống đang chạy một dịch vụ tường lửa khác như iptables hoặc ufw, nó có thể gây xung đột với Firewalld.
Cách khắc phục nhanh:
- Kiểm tra cài đặt: Chạy lệnh
rpm -q firewalld (trên CentOS/RHEL) hoặc dpkg -l | grep firewalld (trên Ubuntu/Debian) để xác nhận gói đã được cài đặt. Nếu chưa, hãy cài đặt theo hướng dẫn ở phần trước.
- Kiểm tra trạng thái dịch vụ: Sử dụng lệnh
sudo systemctl status firewalld. Nếu dịch vụ không chạy (inactive), hãy khởi động nó bằng sudo systemctl start firewalld. Để đảm bảo nó tự khởi động sau này, hãy dùng sudo systemctl enable firewalld.
- Kiểm tra xung đột: Đảm bảo rằng các dịch vụ tường lửa khác đã được vô hiệu hóa. Ví dụ, trên Ubuntu, bạn nên chạy
sudo ufw disable trước khi sử dụng Firewalld.

Quy tắc firewall không áp dụng hoặc bị ghi đè sau khởi động lại
Đây có lẽ là lỗi phổ biến nhất đối với những người mới làm quen với Firewalld. Bạn đã thêm một quy tắc để mở một cổng, kiểm tra thấy nó hoạt động, nhưng sau khi khởi động lại máy chủ, quy tắc đó biến mất và dịch vụ của bạn không thể truy cập được nữa.
Nguyên nhân:
Vấn đề này xảy ra do sự khác biệt giữa cấu hình “runtime” (tạm thời) và “permanent” (vĩnh viễn) của Firewalld.
- Cấu hình runtime: Là cấu hình đang hoạt động. Bất kỳ thay đổi nào bạn thực hiện mà không có cờ
--permanent sẽ chỉ được áp dụng cho cấu hình này. Cấu hình này sẽ bị mất khi dịch vụ Firewalld được tải lại hoặc hệ thống khởi động lại.
- Cấu hình permanent: Là cấu hình được lưu trong các tệp tin và sẽ được tải mỗi khi Firewalld khởi động.
Nếu bạn chỉ thêm quy tắc vào runtime, nó sẽ không được lưu lại.
Lưu ý khi thêm quy tắc permanent và reload dịch vụ:
Quy trình đúng để thêm một quy tắc và đảm bảo nó tồn tại vĩnh viễn là một chu trình hai bước:
- Thêm quy tắc vào cấu hình permanent: Luôn luôn sử dụng cờ
--permanent khi bạn muốn thay đổi của mình được lưu lại.
sudo firewall-cmd --zone=public --add-service=mysql --permanent
Lệnh này sẽ ghi quy tắc vào tệp cấu hình, nhưng nó CHƯA có hiệu lực ngay lập tức đối với tường lửa đang chạy.
- Tải lại cấu hình để áp dụng thay đổi: Sau khi đã sửa đổi cấu hình permanent, bạn phải yêu cầu Firewalld tải lại cấu hình đó vào runtime.
sudo firewall-cmd --reload
Lệnh reload sẽ loại bỏ cấu hình runtime hiện tại và thay thế nó bằng cấu hình permanent đã lưu. Đây là bước cực kỳ quan trọng mà nhiều người thường bỏ qua. Bằng cách luôn tuân thủ quy trình “thêm với –permanent, sau đó reload”, bạn sẽ đảm bảo rằng các quy tắc của mình được áp dụng một cách nhất quán và không bị mất sau khi khởi động lại.

Lời khuyên và best practices khi sử dụng firewall-cmd
Sử dụng thành thạo các lệnh firewall-cmd là một chuyện, nhưng để quản lý tường lửa một cách chuyên nghiệp, an toàn và hiệu quả, bạn cần tuân thủ một số nguyên tắc và thực tiễn tốt nhất. Những lời khuyên dưới đây được đúc kết từ kinh nghiệm thực tế, giúp bạn tránh được các sai lầm phổ biến và xây dựng một hệ thống phòng thủ vững chắc.
1. Luôn sao lưu cấu hình trước khi thay đổi lớn
Trước khi thực hiện bất kỳ thay đổi cấu hình phức tạp nào, chẳng hạn như chỉnh sửa nhiều rich rules hoặc thay đổi vùng mặc định, hãy tạo một bản sao lưu. Các tệp cấu hình của Firewalld thường nằm trong thư mục /etc/firewalld/. Bạn có thể sao lưu toàn bộ thư mục này. Nếu có sự cố xảy ra, bạn có thể dễ dàng khôi phục lại trạng thái ổn định trước đó. Đây là một thói quen đơn giản nhưng có thể cứu bạn khỏi nhiều giờ khắc phục sự cố.
2. Sử dụng --permanent để quy tắc tồn tại vĩnh viễn
Như đã đề cập ở phần xử lý sự cố, đây là nguyên tắc vàng. Hãy tạo thói quen luôn sử dụng cờ --permanent cho mọi thay đổi mà bạn muốn duy trì. Sau đó, ngay lập tức chạy firewall-cmd --reload để áp dụng chúng. Việc chỉ thực hiện thay đổi trên runtime rất hữu ích cho việc kiểm tra tạm thời, nhưng đừng quên lưu lại nếu quy tắc đó cần thiết cho hoạt động lâu dài của hệ thống.
3. Kiểm tra kỹ cổng/mạng trước khi mở hoặc chặn
Sai một ly, đi một dặm. Gõ nhầm một số cổng hoặc một địa chỉ IP có thể gây ra hậu quả nghiêm trọng. Việc mở nhầm cổng có thể tạo ra lỗ hổng bảo mật, trong khi chặn nhầm địa chỉ IP có thể làm gián đoạn dịch vụ cho người dùng hợp lệ hoặc thậm chí là cho chính bạn. Trước khi thực hiện lệnh, hãy kiểm tra lại kỹ lưỡng các thông số bạn đã nhập. Sau khi thực hiện, hãy dùng các lệnh firewall-cmd --list-all để xác nhận rằng quy tắc đã được áp dụng đúng như ý muốn.
4. Tránh vô tình khóa mất quyền truy cập SSH khi cấu hình từ xa
Đây là sai lầm kinh điển và nguy hiểm nhất khi quản trị máy chủ từ xa. Nếu bạn thực hiện một thay đổi làm chặn kết nối SSH (ví dụ: thay đổi vùng mặc định của giao diện mạng sang một vùng không cho phép dịch vụ SSH, hoặc xóa nhầm quy tắc SSH), bạn sẽ ngay lập tức bị ngắt kết nối và không thể truy cập lại máy chủ. Để tránh điều này:
- Luôn đảm bảo quy tắc SSH là đúng: Trước khi chạy
firewall-cmd --reload, hãy chắc chắn rằng cấu hình permanent của bạn luôn có quy tắc cho phép SSH. Bạn có thể kiểm tra bằng firewall-cmd --permanent --list-services.
- Sử dụng một phiên kết nối dự phòng: Nếu có thể, hãy duy trì một phiên kết nối terminal khác trong khi thực hiện thay đổi. Nếu phiên hiện tại bị ngắt, bạn vẫn còn phiên kia để sửa lỗi.
- Sử dụng
firewall-cmd --panic-on: Đây là một chế độ khẩn cấp sẽ chặn tất cả lưu lượng truy cập. Tuy nhiên, nếu bạn chạy firewall-cmd --panic-off, nó sẽ khôi phục lại trạng thái tường lửa trước đó. Chế độ này hữu ích trong một số kịch bản, nhưng hãy cẩn thận khi sử dụng.
Bằng cách tuân thủ những thực tiễn tốt nhất này, bạn không chỉ sử dụng firewall-cmd một cách hiệu quả mà còn thể hiện sự chuyên nghiệp và cẩn trọng của một quản trị viên hệ thống giỏi.

Kết luận
Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết để tìm hiểu và làm chủ lệnh firewall-cmd, một công cụ không thể thiếu trong bộ kỹ năng của bất kỳ ai làm việc với hệ thống Linux là gì. Từ việc cài đặt, cấu hình ban đầu, cho đến việc sử dụng các lệnh cơ bản để quản lý quy tắc và xử lý các tình huống thực tế, firewall-cmd đã chứng tỏ vai trò quan trọng của mình trong việc xây dựng một tuyến phòng thủ vững chắc cho máy chủ. Nó không chỉ là một công cụ để mở hay đóng cổng, mà còn là một giao diện quản lý tường lửa linh hoạt, mạnh mẽ với các khái niệm hiện đại như “vùng” và “rich rules”, giúp đơn giản hóa các tác vụ bảo mật phức tạp.
Chúng tôi khuyến khích bạn áp dụng ngay những kiến thức đã học. Hãy bắt đầu bằng việc kiểm tra cấu hình tường lửa hiện tại trên hệ thống của bạn, thực hành thêm và xóa các quy tắc đơn giản trên một môi trường thử nghiệm. Việc tuân thủ các thực tiễn tốt nhất như luôn sử dụng cờ --permanent, kiểm tra kỹ lưỡng trước khi áp dụng và đặc biệt là cẩn thận để không khóa mất quyền truy cập SSH, sẽ giúp bạn quản lý tường lửa một cách tự tin và an toàn. Bảo mật không phải là một công việc làm một lần rồi thôi, mà là một quá trình liên tục cải tiến và giám sát.
Thế giới của Firewalld và an ninh mạng Linux còn rất nhiều điều để khám phá. Sau khi đã nắm vững các lệnh cơ bản, bạn có thể tìm hiểu sâu hơn về các tính năng nâng cao như tạo dịch vụ tùy chỉnh, cấu hình các quy tắc phức tạp với rich rules, hay tích hợp Firewalld với các công cụ tự động hóa. Đừng ngần ngại thực hành ngay hôm nay, bởi mỗi dòng lệnh bạn gõ là một viên gạch xây nên bức tường thành vững chắc bảo vệ cho hệ thống của bạn. Chúc bạn thành công trên con đường trở thành một chuyên gia quản trị hệ thống Linux.