Firewalld là công cụ quản lý tường lửa mặc định đi kèm với Red Hat Enterprise Linux (RHEL) và các bản phân phối dựa trên RHEL như AlmaLinux. Theo cấu hình mặc định, tường lửa luôn được bật, đồng nghĩa với việc chỉ một số lượng rất hạn chế các dịch vụ được phép nhận kết nối đến từ bên ngoài. Đây là một cơ chế bảo mật hiệu quả, giúp hệ thống Linux luôn trong trạng thái an toàn. Tuy nhiên, nó cũng đặt ra yêu cầu cho người dùng – đặc biệt là quản trị viên hệ thống (sysadmin) – phải biết cách cấu hình tường lửa mỗi khi triển khai một dịch vụ mới như HTTPD, SSH, hay các dịch vụ cơ sở dữ liệu.
Thay vì vô hiệu hóa toàn bộ firewall, bạn hoàn toàn có thể chỉ định các port cụ thể cần mở để các dịch vụ cần thiết có thể hoạt động bình thường và vẫn đảm bảo an toàn cho hệ thống. Trong hướng dẫn này, chúng tôi sẽ hướng dẫn bạn từng bước cách mở port qua firewalld trên AlmaLinux. Dù bạn đang triển khai mới một máy chủ với AlmaLinux hay vừa hoàn tất quá trình migrating từ CentOS, những hướng dẫn sau đây đều dễ hiểu và áp dụng thực tế.
Trong bài hướng dẫn này, DataOnline sẽ chỉ bạn:
● Cách cho phép một port hoặc dịch vụ qua tường lửa trên AlmaLinux
● Cách reload firewall để các thay đổi có hiệu lực
● Cách kiểm tra các port và dịch vụ đang mở trong firewall
● Cách đóng một port sau khi đã cấu hình mở
● Ví dụ lệnh để cho phép các port phổ biến qua firewall
Yêu cầu, quy ước và phiên bản phần mềm
Hệ thống: AlmaLinux
Phần mềm: firewalld
Yêu cầu khác: Cần có quyền truy cập đặc quyền (root hoặc qua sudo) đối với hệ thống Linux của bạn.
Quy ước:
- Dấu
#
– yêu cầu các lệnh Linux được thực thi với quyền root (trực tiếp dưới quyền root hoặc qua sudo). - Dấu
$
– yêu cầu các lệnh Linux được thực thi dưới quyền người dùng thông thường (non-privileged user).
Cách Cho Phép Port Qua Firewall Trên AlmaLinux
Thực hiện theo các bước dưới đây để cho phép các port hoặc dịch vụ qua firewalld trên AlmaLinux. Bạn cũng sẽ thấy cách kiểm tra các port đang mở mà firewalld đã cấu hình.
Khi kiểm tra các port mở trên firewall của RHEL 8 / CentOS 8, cần lưu ý rằng port có thể được mở theo hai cách chính:
1. Mở port theo dịch vụ đã được cấu hình sẵn:
Ví dụ, để mở port cho HTTP vào zone “public”, sử dụng lệnh sau:
# firewall-cmd --zone=public --add-service=http --permanent
Việc thêm dịch vụ HTTP vào firewalld tương đương với việc mở port 80.
2. Mở port theo cách trực tiếp với port do người dùng định nghĩa:
Ví dụ, mở port 8080 bằng cách chỉ định port trực tiếp:
# firewall-cmd --zone=public --add-port 8080/tcp --permanent
Do port 8080 không có dịch vụ tương ứng, bạn cần chỉ định số port thay vì tên dịch vụ nếu muốn mở port này.
3. Để kiểm tra các dịch vụ (service) nào đã được mở, thực hiện lệnh sau:
# firewall-cmd --zone=public --list-services cockpit dhcpv6-client http https ssh
4. Để kiểm tra các port số đang mở, dùng lệnh:
# firewall-cmd --zone=public --list-ports 20/tcp 8080/tcp
5. Sau khi bạn đã cho phép các port và dịch vụ qua tường lửa, cần reload firewalld để các thay đổi có hiệu lực. Tất cả các quy tắc được thêm với tùy chọn --permanent
bây giờ sẽ trở thành một phần của cấu hình runtime. Các quy tắc không sử dụng tùy chọn này sẽ bị hủy bỏ.
# firewall-cmd --reload
6. Bạn có thể xem danh sách tất cả các dịch vụ và port đã mở bằng cách sử dụng tùy chọn --list-all
:
# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client http ssh ports: 443/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
7. Lưu ý rằng firewalld hoạt động theo các zone. Tùy thuộc vào zone mà giao diện mạng của bạn đang sử dụng, bạn có thể cần thêm các port cần mở vào zone tương ứng. Ví dụ trên được áp dụng cho zone “public”. Để xem quy tắc của zone “public”, bạn có thể sử dụng cú pháp:
# firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client http ssh ports: 443/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Trong trường hợp bạn cần đóng một trong các port đã được mở, bạn có thể dùng cú pháp lệnh sau. Ví dụ, để đóng port dành cho dịch vụ HTTPS:
# firewall-cmd --zone=public --permanent --remove-service=https
Ví dụ về các Port phổ biến
Sử dụng các lệnh dưới đây như một tài liệu tham khảo nhanh để cho phép một số dịch vụ phổ biến qua firewall trên AlmaLinux.
Vd1: Cho phép HTTP qua firewall:
# firewall-cmd --zone=public --add-service=http --permanent
Vd2: Cho phép HTTPS qua firewall:
# firewall-cmd --zone=public --add-service=https --permanent
Vd3: Cho phép MySQL qua firewall:
# firewall-cmd --zone=public --add-service=mysql --permanent
Vd4: Cho phép SSH qua firewall:
# firewall-cmd --zone=public --add-service=ssh --permanent
Vd5: Cho phép DNS qua firewall:
# firewall-cmd --zone=public --add-service=dns --permanent
Vd6: Cho phép PostgreSQL qua firewall:
# firewall-cmd --zone=public --add-service=postgresql --permanent
Vd7: Cho phép Telnet qua firewall:
# firewall-cmd --zone=public --add-service=telnet --permanent
Kết luận
Trong hướng dẫn này, bạn đã được hướng dẫn chi tiết cách mở port hoặc kích hoạt dịch vụ thông qua firewall trên hệ điều hành AlmaLinux, sử dụng lệnh firewall-cmd trong công cụ quản lý firewalld. Khi nắm rõ cú pháp và hiểu cách hoạt động của các tùy chọn, việc cấu hình firewall sẽ trở nên nhanh chóng và dễ dàng hơn rất nhiều.
Chúng tôi cũng đã cung cấp nhiều ví dụ thực tiễn, giúp bạn dễ dàng mở các port phổ biến như HTTP, HTTPS, SSH, MySQL, PostgreSQL, v.v… Tuy nhiên, điều quan trọng bạn cần luôn ghi nhớ là các quy tắc firewall cần được áp dụng đúng zone mạng để đảm bảo cấu hình được thực thi một cách chính xác và an toàn.