Firewall đóng vai trò rất quan trọng trong việc bảo vệ hệ thống hoặc mạng máy tính khỏi các cuộc tấn công (thường là từ bên ngoài thông qua kết nối internet). Khi kết nối với internet thiết bị đều phải đi qua firewall để bảo vệ các truy cập độc hại. Trên hệ điều hành CentOS 9, việc cài đặt và cấu hình FirewallD không chỉ đơn giản mà còn rất linh hoạt. Bạn có thể tùy chỉnh các quy tắc theo yêu cầu cụ thể của môi trường và ứng dụng của bạn. Trong bài viết này, chúng tôi sẽ giới thiệu các khái niệm cơ bản về firewalld và cách cấu hình tường lửa bằng các công cụ được cung cấp cùng với hệ điều hành CentOS Stream 9.
Giới thiệu về firewalld
Firewalld sử dụng một bộ quy tắc để kiểm soát lưu lượng mạng đến và xác định lưu lượng nào sẽ bị chặn và lưu lượng nào được phép đi qua hệ thống và được xây dựng trên một công cụ firewall phức tạp hơn có tên là iptables .
Hệ thống firewall cung cấp một cách linh hoạt để quản lý lưu lượng truy cập đến. Ví dụ, tường lửa có thể được cấu hình để chặn lưu lượng truy cập đến từ một địa chỉ IP bên ngoài cụ thể hoặc ngăn chặn tất cả lưu lượng truy cập đến một cổng TCP/IP cụ thể. Các quy tắc cũng có thể được xác định để chuyển tiếp lưu lượng truy cập đến các hệ thống khác nhau hoặc hoạt động như một cổng internet để bảo vệ các máy tính khác trên mạng.
Để tuân thủ các biện pháp bảo mật tiêu chuẩn, cài đặt firewall mặc định được cấu hình để chặn mọi quyền truy cập ngoại trừ đăng nhập từ xa bằng SSH và dịch vụ DHCP mà hệ thống sử dụng để lấy địa chỉ IP động (cả hai đều cần thiết nếu quản trị viên hệ thống muốn có thể truy cập vào hệ thống sau khi hoàn tất cài đặt).
Các yếu tố quan trọng của cấu hình firewall trên CentOS 9 là: zones, interfaces, services, và ports.
Zones
Theo mặc định, firewalld được cài đặt với một loạt các zones được cấu hình sẵn. Một vùng là một tập hợp các quy tắc được cấu hình sẵn có thể được áp dụng cho hệ thống bất kỳ lúc nào để nhanh chóng triển khai các cấu hình tường lửa cho các tình huống cụ thể.
Ví dụ, block zone sẽ chặn tất cả lưu lượng truy cập đến, trong khi vùng chính áp đặt các quy tắc ít nghiêm ngặt hơn với giả định rằng hệ thống đang chạy trong một môi trường an toàn hơn, nơi có mức độ tin cậy cao hơn. Có thể thêm các zone mới vào hệ thống và sửa đổi các zone hiện có để thêm hoặc xóa các quy tắc. Các zone cũng có thể bị xóa hoàn toàn khỏi hệ thống. Dưới đây là liệt kê tập hợp các zones có sẵn theo mặc định trên hệ thống CentOS 9:
Zone | Description |
---|---|
drop | Khu vực an toàn nhất. Chỉ cho phép các kết nối đi và tất cả các kết nối đến đều bị hủy mà không cần thông báo cho máy khách đang kết nối. |
block | Tương tự như vùng drop, ngoại trừ việc các kết nối đến bị từ chối bằng thông báo icmp-host-prohibited hoặc icmp6-adm-prohibited. |
public | Dành cho mục đích sử dụng khi kết nối với public networks hoặc internet nơi các máy tính khác không được biết là đáng tin cậy. Cho phép chọn các kết nối đến. |
external | Trong firewalld , zone external được sử dụng cho các mạng public với tính năng masquerading và network address translation (NAT), đặc biệt hữu ích cho các router. Zone này không tin tưởng các máy tính khác trên mạng và chỉ chấp nhận các kết nối đến đã được chọn lọc. |
internal | Trong firewalld , zone internal được sử dụng cho các mạng nội bộ. Zone này thường được cấu hình để cho phép nhiều dịch vụ và kết nối hơn so với các 5 zone khác, vì các thiết bị trong mạng nội bộ thường được coi là an toàn hơn. |
dmz | Để sử dụng khi hệ thống đang chạy trong demilitarized zone (DMZ). Đây thường là những máy tính có thể truy cập công khai nhưng được cách ly khỏi các phần khác của mạng nội bộ của bạn. Cho phép chọn các kết nối đến. |
work | Để sử dụng khi chạy hệ thống trên mạng trong môi trường làm việc nơi các máy tính khác được tin cậy. Cho phép chọn các kết nối đến. |
home | Để sử dụng khi chạy hệ thống trên mạng gia đình nơi các máy tính khác được tin cậy. Cho phép chọn các kết nối đến. |
trusted | Khu vực kém an toàn nhất. Tất cả các kết nối đến đều được chấp nhận. |
nm-shared | Vùng này được NetworkManager sử dụng nội bộ khi triển khai chia sẻ kết nối. |
libvirt | Được sử dụng bởi các mạng ảo, thường là khi máy chủ lưu trữ máy ảo. |
Để xem lại các cấu hình cụ thể cho một zone, hãy tham khảo tệp cấu hình XML tương ứng nằm trên hệ thống trong thư mục /usr/lib/firewalld/zones
. Ví dụ, sau đây liệt kê nội dung của tệp cấu hình vùng public.xml :
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="cockpit"/>
<forward/>
</zone>
Interfaces
Bất kỳ hệ thống CentOS 9 nào được kết nối với internet hoặc network (hoặc cả hai) sẽ chứa ít nhất một interface trong thiết bị mạng vật lý hoặc ảo. Khi firewalld hoạt động, mỗi interface này được gán cho một zone cho phép gán các mức bảo mật firewall khác nhau cho các interface khác nhau. Ví dụ, hãy xem xét một máy chủ chứa hai interface, một interface được kết nối bên ngoài với internet và interface còn lại với mạng nội bộ. Trong trường hợp như vậy, interface hướng ra bên ngoài rất có thể sẽ được gán cho external zone hạn chế hơn, trong khi interface bên trong có thể sử dụng internal zone.
Services
TCP/IP một tập hợp các dịch vụ giao tiếp trên các port tiêu chuẩn. Ví dụ, kết nối web HTTPS an toàn sử dụng port 443, trong khi dịch vụ email SMTP sử dụng port 25. Để kích hoạt lưu lượng truy cập đến một cách có chọn lọc cho các dịch vụ cụ thể, có thể thêm các rules firewall vào các zone. Ví dụ, zone home không cho phép kết nối HTTPS đến theo mặc định. Có thể kích hoạt lưu lượng truy cập này bằng cách thêm các roles vào một zone để cho phép kết nối HTTPS đến mà không cần phải tham chiếu đến port cụ thể.
Ports
Mặc dù các dịch vụ TCP/IP phổ biến có thể được tham chiếu khi thêm các rules firewall, nhưng sẽ phát sinh các tình huống mà các kết nối đến cần được cho phép trên một port cụ thể không được phân bổ cho một dịch vụ. Điều này có thể đạt được bằng cách thêm các rulu tham chiếu đến các port cụ thể thay vì các dịch vụ.
Cài đặt Firewalld
Firewalld được cài đặt mặc định trên một số bản phân phối của Linux, bao gồm cả CentOS 9. Tuy nhiên, bạn có thể phải tự cài đặt Firewalld.
# sudo dnf install firewalld
Khởi động Firewalld:
# sudo systemctl enable firewalld
# sudo systemctl start firewalld
Kiểm tra tình trạng hoạt động:
# systemctl status firewalld
* firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled;
Active: active (running) since Fri 2021-11-25 20:29:20 JST; 5min ago
Docs: man:firewalld(1)
Main PID: 710 (firewalld)
Tasks: 2 (limit: 4419)
Memory: 41.6M
CPU: 427ms
CGroup: /system.slice/firewalld.service
+- 710 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
# systemctl is-active firewalld
active
# firewall-cmd --state
running
Thiết lập Firewalld khởi động cùng hệ thông:
# systemctl enable firewalld
Dừng và xóa Firewalld
# systemctl stop firewalld
# systemctl disable firewalld
Cấu hình Firewalld
Thiết lập các Zone
Liệt kê các Zone có trong hệ thống:
# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
Kiểm tra Zone mặc định:
# firewall-cmd --get-default-zone
public
Thay đổi Zone mặc định thành home
# firewall-cmd --set-default-zone=home success
Xem các Zone đang được áp dụng và cấu hình:
# firewall-cmd --get-active-zones
public
interfaces: eth0
Thiết lập các Rules
Liệt kê toàn bộ quy tắc của Zone:
# firewall-cmd --list-all-zones
Liệt kê tất cả quy tắc trong Zone default và Zone Active
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Kết quả trên cho thấy public là zone mặc định đang được kích hoạt. Nó liên kết với card mạng eth0 và cho phép DHCP cùng SSH.
Liệt kê tất cả quy tắc trong một Zone cụ thể, chẳng hạn như home
# firewall-cmd --zone=home --list-all
home
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh mdns samba-client dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Liệt kê danh sách services/port được cho phép trong zone cụ thể
# firewall-cmd --zone=public --list-services
# firewall-cmd --zone=public --list-ports
Thiết lập service cho zone
Đây chính là điểm khác biệt của FirewallD so với Iptables – quản lý thông qua các services. Việt thiết lập tường lửa trở nên dễ dàng hơn, giờ đây bản chỉ cần thêm các services vào zone đang sử dụng.
Xác định các services trên hệ thống
# firewall-cmd --get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
Thêm services cho zone
# firewall-cmd --zone=public --add-service=http
success
# firewall-cmd --zone=public --add-service=http --permanent
success
Ngay lập tức, zone “public” cho phép kết nối HTTP trên cổng 80. Kiểm tra lại
# firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
Xóa services khỏi zone
# firewall-cmd --zone=public --remove-service=http
# firewall-cmd --zone=public --remove-service=http --permanent
Thêm services theo Port
Bên cạnh đó, người dùng có thể thêm service qua port
# firewall-cmd --zone=public --add-port=80/http
# firewall-cmd --zone=public --add-port=80/http --permanent
Mở 1 dải port
# firewall-cmd --zone=public --add-port=4990-5000/tcp
# firewall-cmd --zone=public --add-port=4990-5000/tcp --permanent
Kiểm tra lại
# firewall-cmd --zone=public --list-ports
80/tcp 4990-5000/tcp
Đóng port và xóa port
firewall-cmd --zone=public --remove-port=80/http
firewall-cmd --zone=public --remove-port=80/http --permanent
Tạo Zone riêng
Ngoài các zone mặc định, bạn vẫn có thể tạo zone riêng, để cấu hình các service phù hợp với công việc. Bạn cần thiết lập Permanent khi thêm một zone. Ví dụ, bạn có thể tạo một zone riêng cho webserver có tên publicwed, và thiết lập các service ssh, http, https.
# firewall-cmd --permanent --new-zone=publicweb
success
# firewall-cmd --reload
success
# firewall-cmd --zone=publicweb --add-service=ssh --permanent
# firewall-cmd --zone=publicweb --add-service=http --permanent
# firewall-cmd --zone=publicweb --add-service=https --permanent
Kiểm tra lại
# firewall-cmd --get-zones
block dmz drop external home internal public publicweb trusted work
Kết luận
Việc sử dụng firewalld trên CentOS 9 mang lại nhiều lợi ích quan trọng trong việc bảo vệ hệ thống và mạng máy tính khỏi các mối đe dọa từ bên ngoài. Với việc cấu hình linh hoạt, hỗ trợ nhiều services. firewalld không chỉ giúp quản trị viên hệ thống dễ dàng kiểm soát các kết nối mạng mà còn nâng cao hiệu quả bảo mật tổng thể cho hệ thống.
Để làm quen và khai thác tốt các tính năng của firewalld là điều cần thiết đối với bất kỳ ai đang quản lý hệ thống Linux và muốn đảm bảo tính toàn vẹn và bảo mật cho dữ liệu và các dịch vụ của mình.