Ngày đăng: 17 tháng 10 năm 2023
Firewalld là phần mềm quản lý tường lửa có sẵn cho nhiều bản phân phối Linux, hoạt động như một giao diện người dùng cho các hệ thống packet filtering (gói lọc) nftables hoặc iptables dựa trên kernel của Linux.
Trong hướng dẫn này, bạn sẽ biết cách thiết lập tường lửa firewalld
cho máy chủ Rocky Linux 9 của mình và hiểu rõ các nguyên tắc cơ bản về quản lý tường lửa bằng công cụ quản trị firewall-cmd
.
Để hoàn thành hướng dẫn này, bạn sẽ cần một máy chủ chạy Rocky Linux 9. Bạn nên đăng nhập vào máy chủ này với tư cách là non-root user, hỗ trợ sudo
. Để thiết lập tính năng này, hãy xem hướng dẫn Thiết lập máy chủ ban đầu cho Rocky Linux 9 của chúng tôi.
Trước khi xem xét cách sử dụng tiện ích firewall-cmd
để quản lý cấu hình tường lửa của mình, bạn nên làm quen với một số khái niệm mà công cụ này giới thiệu.
firewalld
daemon quản lý các nhóm quy tắc sử dụng các thực thể được gọi là zones. Zones là bộ quy tắc quy định lưu lượng truy cập nào sẽ được phép tùy thuộc vào mức độ tin cậy mà bạn có trong mạng. Network interfaces (Giao diện mạng) được gán cho một khu vực (zone) để quyết định hành vi mà tường lửa nên cho phép.
Đối với các máy tính có thể di chuyển giữa các mạng thường xuyên (như máy tính xách tay), tính linh hoạt này cung cấp một phương pháp tốt để thay đổi các quy tắc tùy thuộc vào môi trường của bạn. Bạn có thể áp dụng các quy tắc nghiêm ngặt để cấm hầu hết lưu lượng truy cập khi hoạt động trên mạng WiFi công cộng, đồng thời cho phép các hạn chế thoải mái hơn khi kết nối với mạng gia đình của bạn. Đối với máy chủ, các khu vực này thường không quan trọng bằng vì môi trường mạng hiếm khi thay đổi.
Bất kể môi trường mạng của bạn có năng động đến đâu, việc làm quen với ý tưởng chung đằng sau từng khu vực được xác định trước cho firewalld
vẫn rất hữu ích. Các khu vực được xác định trước trong firewalld
, theo thứ tự từ ít tin cậy nhất đến đáng tin cậy nhất:
icmp-host-prohibited
hoặc icmp6-adm-prohibited
.Để sử dụng tường lửa, bạn có thể tạo các quy tắc và thay đổi thuộc tính của các khu vực, sau đó gán giao diện mạng của mình cho bất kỳ khu vực nào phù hợp nhất.
Trong firewalld, các quy tắc có thể được áp dụng cho bộ quy tắc runtime hiện tại hoặc được đặt thành permanent (vĩnh viễn). Khi một quy tắc được thêm hoặc sửa đổi, theo mặc định, chỉ tường lửa hiện đang chạy mới được sửa đổi. Sau lần khởi động lại tiếp theo – hoặc tải lại dịch vụ firewalld
– chỉ các quy tắc vĩnh viễn sẽ được giữ nguyên.
Hầu hết các hoạt động firewall-cmd
có thể lấy cờ --permanent
để chỉ ra rằng những thay đổi sẽ được áp dụng cho cấu hình cố định. Ngoài ra, tường lửa hiện đang chạy có thể được lưu vào cấu hình cố định bằng lệnh firewall-cmd --runtime-to-permanent
.
Sự tách biệt giữa runtime và cấu hình permanent này có nghĩa là bạn có thể kiểm tra các quy tắc trong tường lửa đang hoạt động của mình một cách an toàn, sau đó tải lại để bắt đầu lại nếu có vấn đề.
firewalld
được cài đặt theo mặc định trên một số bản phân phối Linux, bao gồm nhiều bản triển khai Rocky Linux. Tuy nhiên, có thể bạn cần phải tự cài đặt firewalld. Bạn có thể thực hiện việc này bằng trình quản lý gói dnf
của Rocky:
- sudo dnf install firewalld -y
Sau khi cài đặt firewalld
, bạn sẽ cần kích hoạt dịch vụ bằng systemctl
. Hãy nhớ rằng việc bật firewalld sẽ khiến dịch vụ bắt đầu khởi động. Tốt nhất bạn nên tạo các quy tắc tường lửa của mình và tận dụng cơ hội để kiểm tra chúng trong khi vẫn đăng nhập qua SSH để tránh các sự cố tiềm ẩn.
- sudo systemctl enable firewalld
- sudo systemctl start firewalld
Bạn có thể xác minh rằng dịch vụ đang chạy và có thể truy cập được bằng cách nhập:
- sudo firewall-cmd --state
Outputrunning
Điều này cho thấy rằng tường lửa của bạn đang hoạt động với cấu hình mặc định. Trước khi thực hiện các sửa đổi tiếp theo, bạn nên tự làm quen với môi trường và quy tắc mặc định do firewalld cung cấp.
Bạn có thể xem khu vực nào hiện được chọn làm mặc định bằng cách chạy firewall-cmd --get-default-zone
:
- firewall-cmd --get-default-zone
Outputpublic
Vì bạn chưa đưa ra cho firewalld bất kỳ lệnh nào để đi chệch khỏi khu vực mặc định và không có giao diện nào của bạn được định cấu hình để liên kết với khu vực khác, nên khu vực đó cũng sẽ là khu vực hoạt động (active zone) duy nhất (khu vực kiểm soát lưu lượng cho các giao diện của chúng tôi) . Bạn có thể xác minh điều đó bằng cách chạy firewall-cmd --get-active-zones
:
- firewall-cmd --get-active-zones
Outputpublic
interfaces: eth0 eth1
Tại đây, bạn có thể thấy rằng máy chủ mẫu của bạn có hai giao diện mạng được tường lửa kiểm soát (eth0
và eth1
). Cả hai hiện đang được quản lý theo các quy tắc được xác định cho khu vực công cộng (public zone).
Bạn có thể in ra các quy tắc gắn với cấu hình của khu vực mặc định bằng cách sử dụng firewall-cmd --list-all
:
- sudo firewall-cmd --list-all
Outputpublic (active)
target: default
icmp-block-inversion: no
interfaces: eth0 eth1
sources:
services: cockpit dhcpv6-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Bạn có thể biết từ đầu ra rằng khu vực này vừa là mặc định (default) vừa là hoạt động (active), đồng thời các giao diện eth0
và eth1
được liên kết với khu vực này. Từ dòng services:
, bạn cũng có thể thấy rằng khu vực này cho phép lưu lượng truy cập cho máy khách DHCP (để gán địa chỉ IP), SSH (để quản trị từ xa) và Cockpit (bảng điều khiển dựa trên web).
Bạn cũng có thể tìm hiểu thông tin về các khu vực khác.
Để có danh sách các khu vực khả dụng, hãy chạy firewall-cmd --get-zones
:
- firewall-cmd --get-zones
Outputblock dmz drop external home internal nm-shared public trusted work
Bạn có thể xem cấu hình cụ thể được liên kết với một vùng bằng cách đưa tham số --zone=
vào lệnh --list-all
:
- sudo firewall-cmd --zone=home --list-all
Outputhome
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client mdns samba-client ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Bạn có thể xuất tất cả các định nghĩa vùng bằng cách sử dụng tùy chọn --list-all-zones
. Tiếp theo, bạn sẽ tìm hiểu về cách gán khu vực cho giao diện mạng.
Trừ khi bạn đã cấu hình các giao diện mạng của mình theo cách khác, mỗi giao diện sẽ được đặt trong khu vực mặc định khi tường lửa được khởi động.
Bạn có thể di chuyển giao diện giữa các khu vực trong phần bằng cách sử dụng tham số --zone=
kết hợp với tham số --change-interface=
. Giống như tất cả các lệnh sửa đổi tường lửa, bạn sẽ cần sử dụng sudo
.
Chẳng hạn, bạn có thể di chuyển giao diện eth0
của mình sang khu vực home:
- sudo firewall-cmd --zone=home --change-interface=eth0
Outputsuccess
Lưu ý: Bất cứ khi nào bạn di chuyển một giao diện sang một khu vực mới, hãy lưu ý rằng bạn đang sửa đổi những dịch vụ nào sẽ hoạt động. Trong trường hợp này, bạn đang di chuyển đến khu vực home có sẵn SSH. Điều này có nghĩa là kết nối của bạn sẽ không bị rớt. Một số khu vực khác không bật SSH theo mặc định và việc chuyển sang một trong các khu vực này có thể khiến kết nối của bạn bị ngắt, khiến bạn không thể đăng nhập lại vào máy chủ của mình.
Bạn có thể xác minh rằng việc này đã thành công bằng cách kiểm tra lại các khu vực active:
- firewall-cmd --get-active-zones
Outputhome
interfaces: eth0
public
interfaces: eth1
Nếu tất cả các giao diện của bạn có thể được xử lý tốt bởi một khu vực được xác định trước, bạn nên chỉ định khu vực đó làm mặc định. Bạn có thể thay đổi khu vực mặc định bằng tham số --set-default-zone=
. Điều này sẽ ngay lập tức thay đổi bất kỳ giao diện nào sử dụng khu vực mặc định:
- sudo firewall-cmd --set-default-zone=home
Outputsuccess
Hãy cùng tìm hiểu các cách xác định ngoại lệ tường lửa.
Phương pháp đơn giản nhất là thêm các dịch vụ hoặc cổng bạn cần vào khu vực bạn đang sử dụng. Bạn có thể nhận danh sách các định nghĩa dịch vụ có sẵn bằng cách sử dụng tùy chọn --get-services
của firewall-cmd
:
- firewall-cmd --get-services
OutputRH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit collectd condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger foreman foreman-proxy freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp galera ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell kube-api kube-apiserver kube-control-plane kube-controller-manager kube-scheduler kubelet-worker ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nbd netbios-ns nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rquotad rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wireguard wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
Lưu ý: Bạn có thể tìm thêm thông tin chi tiết về từng dịch vụ này bằng cách xem tệp .xml
được liên kết của chúng trong thư mục /usr/lib/firewalld/services
. Chẳng hạn, dịch vụ SSH được định nghĩa như sau:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="22"/>
</service>
Bạn có thể kích hoạt dịch vụ cho một khu vực bằng tham số --add-service=
. Hoạt động sẽ nhắm mục tiêu khu vực mặc định hoặc bất kỳ khu vực nào được chỉ định bởi tham số --zone=
. Theo mặc định, điều này sẽ chỉ điều chỉnh phiên tường lửa hiện tại và sẽ không tồn tại sau khi restart hoặc reboot dịch vụ. Bạn có thể điều chỉnh cấu hình tường lửa cố định bằng cách thêm cờ --permanent
.
Ví dụ: nếu bạn đang chạy một máy chủ web phục vụ lưu lượng HTTP thông thường, bạn có thể tạm thời cho phép lưu lượng truy cập này đối với các giao diện trong khu vực công cộng (public zone) của mình:
- sudo firewall-cmd --zone=public --add-service=http
Bạn có thể bỏ cờ --zone=
để sửa đổi khu vực mặc định. Bạn có thể xác minh thao tác đã thành công bằng cách sử dụng các thao tác --list-all
hoặc --list-services
:
- sudo firewall-cmd --zone=public --list-services
Outputcockpit dhcpv6-client http ssh
Sau khi kiểm tra xem mọi thứ có hoạt động bình thường hay không, bạn có thể sửa đổi các quy tắc tường lửa vĩnh viễn để dịch vụ của bạn vẫn khả dụng sau khi khởi động lại (reboot). Bạn có thể đặt lệnh trước đó vĩnh viễn bằng cách thêm cờ --permanent
:
- sudo firewall-cmd --zone=public --add-service=http --permanent
Outputsuccess
Ngoài ra, bạn có thể sử dụng cờ --runtime-to-permanent
để lưu cấu hình tường lửa hiện đang chạy vào cấu hình cố định:
- sudo firewall-cmd --runtime-to-permanent
Hãy cẩn thận với tùy chọn này vì tất cả các thay đổi được thực hiện đối với tường lửa đang chạy sẽ được thực hiện vĩnh viễn.
Dù chọn phương pháp nào, bạn cũng có thể xác minh rằng phương pháp đó thành công bằng cách thêm cờ --permanent
vào thao tác --list-services
. Bạn cần sử dụng sudo
cho mọi hoạt động --permanent
:
- sudo firewall-cmd --zone=public --list-services --permanent
Outputcockpit dhcpv6-client http ssh
Khu vực công cộng của bạn giờ đây sẽ cho phép lưu lượng truy cập web HTTP trên cổng 80. Nếu máy chủ web của bạn được định cấu hình để sử dụng SSL/TLS, bạn cũng cần thêm dịch vụ https
. Bạn có thể thêm phiên đó vào phiên hiện tại và bộ quy tắc cố định bằng cách nhập:
- sudo firewall-cmd --zone=public --add-service=https
- sudo firewall-cmd --zone=public --add-service=https --permanent
Các dịch vụ đi kèm với cài đặt firewalld đại diện cho nhiều ứng dụng phổ biến nhất mà bạn có thể cần để cho phép truy cập. Tuy nhiên, có thể sẽ có những trường hợp các dịch vụ này không phù hợp với yêu cầu của bạn.
Trong tình huống này, bạn có hai lựa chọn.
Cách đơn giản nhất để thêm hỗ trợ cho ứng dụng cụ thể của bạn là mở các cổng mà nó sử dụng trong (các) khu vực thích hợp. Điều này được thực hiện bằng cách chỉ định cổng hoặc phạm vi cổng và giao thức liên quan (TCP hoặc UDP) cho các cổng.
Ví dụ: nếu ứng dụng của bạn chạy trên cổng 5000 và sử dụng TCP, bạn có thể tạm thời thêm ứng dụng này vào khu vực public
bằng tham số --add-port=
. Các giao thức có thể được chỉ định là tcp
hoặc udp
:
- sudo firewall-cmd --zone=public --add-port=5000/tcp
Outputsuccess
Bạn có thể xác minh rằng việc này đã thành công bằng thao tác --list-ports
:
- sudo firewall-cmd --zone=public --list-ports
Output5000/tcp
Cũng có thể chỉ định một phạm vi cổng tuần tự bằng cách tách cổng đầu và cổng kết thúc trong phạm vi bằng dấu gạch ngang. Ví dụ: nếu ứng dụng của bạn sử dụng cổng UDP 4990 đến 4999, bạn có thể mở chúng ở chế độ public bằng cách nhập:
- sudo firewall-cmd --zone=public --add-port=4990-4999/udp
Sau khi thử nghiệm, bạn có thể thêm chúng vào tường lửa vĩnh viễn. Sử dụng sudo firewall-cmd --runtime-to-permanent
hoặc chạy lại các lệnh bằng cờ --permanent
:
- sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
- sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
- sudo firewall-cmd --zone=public --permanent --list-ports
Outputsuccess
success
5000/tcp 4990-4999/udp
Mở cổng cho các khu vực của bạn là một giải pháp đơn giản nhưng có thể khó theo dõi mục đích sử dụng của từng cổng. Nếu bạn từng ngừng hoạt động một dịch vụ trên máy chủ của mình, bạn có thể gặp khó khăn trong việc lập danh mục những cổng đã được mở vẫn được yêu cầu. Để tránh tình trạng này, bạn có thể xác định một dịch vụ mới.
Dịch vụ là tập hợp các cổng có tên và mô tả liên quan. Việc quản lý tường lửa của bạn bằng các dịch vụ thường dễ bảo trì hơn so với các port mapping, nhưng yêu cầu một số cấu hình ban đầu. Bạn có thể bắt đầu bằng cách sao chép tập lệnh hiện có trong /usr/lib/firewalld/services
vào thư mục /etc/firewalld/services
nơi tường lửa tìm kiếm các định nghĩa không chuẩn.
Ví dụ: bạn có thể sao chép định nghĩa dịch vụ SSH để sử dụng cho định nghĩa dịch vụ example của mình như thế này. Tên của dịch vụ trong danh sách dịch vụ tường lửa sẽ là tên của tệp này, trừ hậu tố .xml
:
- sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml
Mở tệp bằng vi
hoặc trình soạn thảo văn bản yêu thích của bạn:
- sudo vi /etc/firewalld/services/example.xml
Để bắt đầu, tệp sẽ chứa định nghĩa SSH mà bạn đã sao chép:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="22"/>
</service>
Phần lớn định nghĩa này thực sự là siêu dữ liệu (metadata). Bạn nên thay đổi tên viết tắt của dịch vụ trong thẻ <short>
. Đây là tên mà con người có thể đọc được cho dịch vụ của bạn. Bạn cũng nên thêm mô tả để có thêm thông tin nếu cần kiểm tra dịch vụ. Cấu hình duy nhất bạn cần thực hiện mà thực sự ảnh hưởng đến chức năng của dịch vụ có thể là định nghĩa cổng nơi bạn xác định số cổng và giao thức sẽ mở. Nhiều thẻ <port/>
có thể được chỉ định.
Đối với dịch vụ example
của bạn, hãy tưởng tượng rằng bạn cần mở cổng 7777 cho TCP và 8888 cho UDP. Bạn có thể sửa đổi định nghĩa hiện có bằng một cái gì đó như thế này:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Example Service</short>
<description>This is just an example service. It probably shouldn't be used on a real system.</description>
<port protocol="tcp" port="7777"/>
<port protocol="udp" port="8888"/>
</service>
Lưu và đóng tập tin.
Tải lại tường lửa của bạn để có quyền truy cập vào dịch vụ mới của bạn:
- sudo firewall-cmd --reload
Bạn có thể thấy rằng nó hiện nằm trong danh sách các dịch vụ có sẵn:
- firewall-cmd --get-services
OutputRH-Satellite-6 RH-Satellite-6-capsule amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bb bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc bittorrent-lsd ceph ceph-mon cfengine cockpit collectd condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server example finger foreman foreman-proxy freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp galera ganglia-client ganglia-master git grafana gre high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kdeconnect kerberos kibana klogin kpasswd kprop kshell kube-api kube-apiserver kube-control-plane kube-controller-manager kube-scheduler kubelet-worker ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql nbd netbios-ns nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy prometheus proxy-dhcp ptp pulseaudio puppetmaster quassel radius rdp redis redis-sentinel rpc-bind rquotad rsh rsyncd rtsp salt-master samba samba-client samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync spotify-sync squid ssdp ssh steam-streaming svdrp svn syncthing syncthing-gui synergy syslog syslog-tls telnet tentacle tftp tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wireguard wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server
Bây giờ bạn có thể sử dụng dịch vụ này trong khu vực của mình như bình thường.
Mặc dù các khu vực được xác định trước sẽ hoạt động với hầu hết người dùng, nhưng có thể hữu ích nếu bạn xác định các khu vực của riêng bạn mang tính mô tả rõ hơn về chức năng của chúng.
Ví dụ: bạn có thể cần tạo một khu vực cho máy chủ web của mình, được gọi là publicweb
. Tuy nhiên, bạn có thể cần phải cấu hình một khu vực khác cho dịch vụ DNS mà bạn cung cấp trên mạng riêng của mình. Bạn có thể tạo một khu vực khác gọi là privateDNS
cho điều đó.
Khi thêm một khu vực, bạn phải thêm nó vào cấu hình tường lửa cố định. Sau đó, bạn có thể tải lại để đưa cấu hình vào phiên đang chạy của mình. Chẳng hạn, bạn có thể tạo hai khu vực này bằng cách sử dụng firewall-cmd –new-zone
:
- sudo firewall-cmd --permanent --new-zone=publicweb
- sudo firewall-cmd --permanent --new-zone=privateDNS
Bạn có thể xác minh rằng những thứ này có trong cấu hình cố định của bạn bằng cách nhập:
- sudo firewall-cmd --permanent --get-zones
Outputblock dmz drop external home internal nm-shared privateDNS public publicweb trusted work
Tải lại tường lửa để đưa các khu vực mới này vào cấu hình active runtime:
- sudo firewall-cmd --reload
- firewall-cmd --get-zones
Outputblock dmz drop external home internal nm-shared privateDNS public publicweb trusted work
Bây giờ, bạn có thể bắt đầu chỉ định các dịch vụ và cổng thích hợp cho khu vực của mình. Thông thường, bạn nên điều chỉnh tường lửa runtime và sau đó lưu những thay đổi đó vào cấu hình cố định sau khi thử nghiệm. Ví dụ: đối với khu vực publicweb
, bạn có thể thêm các dịch vụ SSH, HTTP và HTTPS:
- sudo firewall-cmd --zone=publicweb --add-service=ssh
- sudo firewall-cmd --zone=publicweb --add-service=http
- sudo firewall-cmd --zone=publicweb --add-service=https
- sudo firewall-cmd --zone=publicweb --list-all
Outputpublicweb
target: default
icmp-block-inversion: no
interfaces:
sources:
services: http https ssh
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Sau đó, bạn có thể thêm dịch vụ DNS vào vùng privateDNS
của mình:
- sudo firewall-cmd --zone=privateDNS --add-service=dns
- sudo firewall-cmd --zone=privateDNS --list-all
OutputprivateDNS
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dns
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Sau đó, bạn có thể thay đổi giao diện của chúng tôi sang các khu vực mới này để kiểm tra chúng:
- sudo firewall-cmd --zone=publicweb --change-interface=eth0
- sudo firewall-cmd --zone=privateDNS --change-interface=eth1
Tại thời điểm này, bạn có cơ hội kiểm tra cấu hình của mình. Nếu những giá trị này phù hợp với bạn, bạn nên thêm các quy tắc này vào cấu hình cố định. Bạn có thể làm điều đó bằng cách chạy lại tất cả các lệnh với cờ --permanent
được gắn thêm, nhưng trong trường hợp này, bạn sẽ sử dụng cờ --runtime-to-permanent
để lưu vĩnh viễn toàn bộ cấu hình runtime của mình:
- sudo firewall-cmd --runtime-to-permanent
Sau khi áp dụng vĩnh viễn các quy tắc này, hãy tải lại tường lửa để kiểm tra xem các thay đổi có còn tồn tại không:
- sudo firewall-cmd --reload
Xác thực rằng các khu vực chính xác đã được chỉ định:
- firewall-cmd --get-active-zones
OutputprivateDNS
interfaces: eth1
publicweb
interfaces: eth0
Và xác nhận rằng các dịch vụ phù hợp có sẵn cho cả hai khu vực:
- sudo firewall-cmd --zone=publicweb --list-services
Outputhttp https ssh
- sudo firewall-cmd --zone=privateDNS --list-services
Outputdns
Bạn đã thiết lập thành công khu vực của riêng mình! Để đặt một trong các khu vực này làm mặc định cho các giao diện khác, hãy nhớ định cấu hình hành vi đó bằng tham số --set-default-zone=
:
- sudo firewall-cmd --set-default-zone=publicweb
Bây giờ bạn đã hiểu khá kỹ về cách quản trị dịch vụ firewalld trên hệ thống Rocky Linux của mình để sử dụng hàng ngày.
Dịch vụ firewalld cho phép bạn định cấu hình các quy tắc và bộ quy tắc có thể bảo trì để xem xét môi trường mạng của bạn. Nó cho phép bạn chuyển đổi liền mạch giữa các chính sách tường lửa khác nhau thông qua việc sử dụng các khu vực. Có được kiến thức làm việc về hệ thống này sẽ cho phép bạn tận dụng được tính linh hoạt và sức mạnh mà công cụ này cung cấp.