Cài đặt và cấu hình Firewalld trên AlmaLinux 9 cho VPS

Khi nhận một VPS Linux mới với AlmaLinux 9, việc đầu tiên bạn cần làm là bảo vệ nó. Không giống như Ubuntu dùng UFW, AlmaLinux và các hệ thống RHEL-based sử dụng firewalld làm tường lửa mặc định. Nó vừa mạnh mẽ lại vừa linh hoạt nhờ backend nftables. Bài này sẽ hướng dẫn bạn từ đầu đến cuối cách cài đặt và cấu hình firewalld, đảm bảo VPS của bạn an toàn ngay từ phút đầu tiên.
- Firewalld mặc định đã được cài sẵn trên AlmaLinux 9 nhưng chưa được kích hoạt.
- Cách đơn giản nhất để quản lý là dùng lệnh
firewall-cmd. - Bạn có thể mở port, tạo zone riêng hoặc chặn IP theo nhu cầu.
- Luôn nhớ kiểm tra trạng thái và reload để áp dụng thay đổi lâu dài.
Yêu cầu trước khi bắt đầu
- Một VPS đã cài AlmaLinux 9 (bản full OS, có hỗ trợ từ nhà cung cấp như thueVPS).
- Bạn có quyền root hoặc user sudo.
- Kết nối SSH vào VPS để thao tác.
Vì sao nên dùng Firewalld trên AlmaLinux?
Firewalld không chỉ là tường lửa thông thường. Nó hoạt động theo zone, cho phép bạn áp dụng các bộ quy tắc khác nhau cho từng giao diện mạng. Ví dụ: giao diện public chỉ mở port 80 và 443, trong khi giao diện internal có thể mở rộng hơn. Điều này rất hữu ích khi bạn quản lý VPS chạy nhiều dịch vụ. Hơn nữa, firewalld trên AlmaLinux 9 sử dụng nftables backend, hiện đại và hiệu suất cao hơn iptables cũ.
Bước 1 - Kiểm tra và kích hoạt Firewalld
Trước hết, kiểm tra xem firewalld đã được cài đặt chưa:
sudo systemctl status firewalld
Nếu chưa có, cài đặt ngay:
sudo dnf install firewalld -y
Kích hoạt và khởi động firewalld:
sudo systemctl enable --now firewalld
Verify: Chạy sudo firewall-cmd --state, output phải là running.
Bước 2 - Các lệnh cơ bản với Firewalld
Hầu hết thao tác đều qua lệnh firewall-cmd. Dưới đây là các lệnh bạn sẽ dùng thường xuyên:
- Xem zone mặc định:
sudo firewall-cmd --get-default-zone, kết quả thường làpublic. - Liệt kê tất cả zone:
sudo firewall-cmd --get-zones. - Xem chi tiết zone đang dùng:
sudo firewall-cmd --list-all. - Xem tất cả quy tắc:
sudo firewall-cmd --list-all-zones.
Bước 3 - Mở port cho các dịch vụ phổ biến
VPS cần mở port để các dịch vụ như SSH, web, database… hoạt động. Có hai cách: theo service name hoặc theo port+protocol. Cách theo service name gọn hơn và tự động hiểu protocol.
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
Nếu dịch vụ không có trong danh sách mặc định, bạn phải mở bằng port cụ thể. Ví dụ mở port 3306 cho MySQL/MariaDB (chỉ nên giới hạn cho IP nội bộ, xem bước 5):
sudo firewall-cmd --permanent --add-port=3306/tcp
Sau khi thêm xong, reload để áp dụng:
sudo firewall-cmd --reload
Verify: sudo firewall-cmd --list-services hoặc sudo firewall-cmd --list-ports.
Bước 4 - Tạo và quản lý zone riêng
Giả sử bạn có 2 giao diện mạng: eth0 (public) và eth1 (internal). Bạn muốn giao diện internal được phép truy cập nhiều dịch vụ hơn. Tạo một zone mới tên internal và gán nó cho giao diện eth1:
sudo firewall-cmd --permanent --new-zone=internal
sudo firewall-cmd --permanent --zone=internal --add-source=192.168.1.0/24
sudo firewall-cmd --permanent --zone=internal --add-service=mysql
sudo firewall-cmd --reload
Giải thích: Lệnh trên tạo zone internal, cho phép dải IP 192.168.1.0/24 nằm trong zone này và dịch vụ mysql được phép truy cập từ dải IP đó. Đây là cách bảo mật tốt hơn là mở MySQL ra toàn internet.
Bước 5 - Chặn IP bằng Rich-Rules
Khi phát hiện IP lạ quét SSH hoặc tấn công, bạn có thể chặn ngay lập tức bằng rich-rule:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.50" reject'
sudo firewall-cmd --reload
Để chặn toàn bộ một dải IP:
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" drop'
sudo firewall-cmd --reload
Verify: sudo firewall-cmd --list-rich-rules.
Bước 6 - Xử lý lỗi thường gặp
- Lỗi không reload được: Kiểm tra log với
journalctl -u firewalld -n 20. Thường do sai cú pháp rich-rule hoặc conflict với các tường lửa khác (như iptables service). - Dịch vụ không hoạt động sau khi mở port: Kiểm tra
sudo firewall-cmd --list-allxem port đã xuất hiện chưa. Nếu chưa, bạn có thể đã quên thêm flag--permanenthoặc chưa reload. - Firewalld không start: Xung đột với
iptables-services. Hãy disable iptables:sudo systemctl mask iptables.
Câu hỏi thường gặp
Làm sao để xóa một port đã mở?
Dùng lệnh sudo firewall-cmd --permanent --remove-port=3306/tcp hoặc --remove-service=mysql. Sau đó reload.
Firewalld và iptables khác nhau thế nào?
Firewalld là công cụ quản lý tường lửa cấp cao, tự động động và hỗ trợ zone. Nó dùng nftables backend thay vì iptables. Nên dùng firewalld trên AlmaLinux thay vì iptables thủ công.
Có nên tắt firewalld không?
rất cao không. Nếu bạn có một tường lửa khác (ví dụ của nhà cung cấp VPS hoặc bên thứ ba), bạn có thể disable firewalld, nhưng thường thì firewalld là đủ. Chỉ tắt khi bạn thực sự hiểu rủi ro.
Zone mặc định có thay đổi được không?
Có. Dùng sudo firewall-cmd --set-default-zone=internal. Lưu ý thêm --permanent nếu muốn áp dụng lâu dài.
Bài viết liên quan
- Cấu hình Fail2ban chống brute force SSH
- Cấu hình iptables cơ bản cho VPS
- Tự xây AI chatbot với Ollama


