Mục lục

Không có mục lục
Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly

Cách thiết lập tường lửa bằng firewalld trên Rocky Linux 9

Ngày đăng: 17 tháng 10 năm 2023

Giới thiệu

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.

Điều kiện tiên quyết

Để 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.

Bước 1 - Xem lại các khái niệm cốt lõi trong firewalld

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.

Khu vực (Zones)

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:

  • drop: Mức độ tin cậy thấp nhất. Tất cả các kết nối đến đều bị loại bỏ mà không có phản hồi và chỉ có thể thực hiện được các kết nối đi.
  • block: Tương tự như trên, nhưng thay vì hủy kết nối, các yêu cầu đến sẽ bị từ chối bằng thông báo icmp-host-prohibited hoặc icmp6-adm-prohibited.
  • public: Đại diện cho các mạng công cộng, không đáng tin cậy. Bạn không tin cậy các máy tính khác nhưng có thể cho phép các kết nối đến được chọn trong từng trường hợp cụ thể.
  • external: Mạng bên ngoài (External networks) trong trường hợp bạn đang sử dụng tường lửa làm cổng. Nó được cấu hình để giả mạo NAT để mạng nội bộ của bạn vẫn ở chế độ riêng tư nhưng vẫn có thể truy cập được.
  • internal: Phía bên kia của khu vực bên ngoài, được sử dụng cho phần bên trong của cổng. Các máy tính này khá đáng tin cậy và có sẵn một số dịch vụ bổ sung.
  • dmz: Được sử dụng cho các máy tính nằm trong DMZ (các máy tính bị cô lập sẽ không có quyền truy cập vào phần còn lại của mạng của bạn). Chỉ cho phép một số kết nối đến nhất định.
  • work: Dùng cho máy công việc. Tin cậy hầu hết các máy tính trong mạng. Một vài dịch vụ nữa có thể được cho phép.
  • home: Một môi trường gia đình. Nó thường ngụ ý rằng bạn tin tưởng hầu hết các máy tính khác và một số dịch vụ nữa sẽ được chấp nhận.
  • trusted: Tin cậy tất cả các máy trong mạng. Tùy chọn mở nhất trong số các tùy chọn có sẵn và nên được sử dụng một cách tiết kiệm.

Để 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.

Quy tắc thường trực

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 đề.

Bước 2 - Cài đặt và kích hoạt firewalld

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:

  1. 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.

  1. sudo systemctl enable firewalld
  2. 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:

  1. sudo firewall-cmd --state
Output
running

Đ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.

Khám phá các mặc định

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:

  1. firewall-cmd --get-default-zone
Output
public

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:

  1. firewall-cmd --get-active-zones
Output
public 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 (eth0eth1). 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:

  1. sudo firewall-cmd --list-all
Output
public (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 eth0eth1 đượ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).

Khám phá các khu vực thay thế

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:

  1. firewall-cmd --get-zones
Output
block 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:

  1. sudo firewall-cmd --zone=home --list-all
Output
home 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.

Bước 3 - Chọn khu vực cho giao diện của bạn

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.

Thay đổi khu vực của giao diện

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:

  1. sudo firewall-cmd --zone=home --change-interface=eth0
Output
success

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:

  1. firewall-cmd --get-active-zones
Output
home interfaces: eth0 public interfaces: eth1

Điều chỉnh khu vực mặc định

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:

  1. sudo firewall-cmd --set-default-zone=home
Output
success

Bước 4 - Đặt quy tắc cho ứng dụng của bạn

Hãy cùng tìm hiểu các cách xác định ngoại lệ tường lửa.

Thêm dịch vụ vào khu vực của bạn

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:

  1. firewall-cmd --get-services
Output
RH-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:

/usr/lib/firewalld/services/ssh.xml
<?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:

  1. 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:

  1. sudo firewall-cmd --zone=public --list-services
Output
cockpit 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:

  1. sudo firewall-cmd --zone=public --add-service=http --permanent
Output
success

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:

  1. 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:

  1. sudo firewall-cmd --zone=public --list-services --permanent
Output
cockpit 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:

  1. sudo firewall-cmd --zone=public --add-service=https
  2. 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.

Mở cổng cho khu vực của bạ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:

  1. sudo firewall-cmd --zone=public --add-port=5000/tcp
Output
success

Bạn có thể xác minh rằng việc này đã thành công bằng thao tác --list-ports:

  1. sudo firewall-cmd --zone=public --list-ports
Output
5000/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:

  1. 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:

  1. sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
  2. sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
  3. sudo firewall-cmd --zone=public --permanent --list-ports
Output
success success 5000/tcp 4990-4999/udp

Xác định một dịch vụ

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:

  1. 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:

  1. 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:

/etc/firewalld/services/example.xml
<?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:

/etc/firewalld/services/example.xml
<?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:

  1. 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:

  1. firewall-cmd --get-services
Output
RH-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.

Bước 5 - Tạo khu vực riêng của bạn

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:

  1. sudo firewall-cmd --permanent --new-zone=publicweb
  2. 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:

  1. sudo firewall-cmd --permanent --get-zones
Output
block 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:

  1. sudo firewall-cmd --reload
  2. firewall-cmd --get-zones
Output
block 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:

  1. sudo firewall-cmd --zone=publicweb --add-service=ssh
  2. sudo firewall-cmd --zone=publicweb --add-service=http
  3. sudo firewall-cmd --zone=publicweb --add-service=https
  4. sudo firewall-cmd --zone=publicweb --list-all
Output
publicweb 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:

  1. sudo firewall-cmd --zone=privateDNS --add-service=dns
  2. sudo firewall-cmd --zone=privateDNS --list-all
Output
privateDNS 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:

  1. sudo firewall-cmd --zone=publicweb --change-interface=eth0
  2. 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:

  1. 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:

  1. sudo firewall-cmd --reload

Xác thực rằng các khu vực chính xác đã được chỉ định:

  1. firewall-cmd --get-active-zones
Output
privateDNS 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:

  1. sudo firewall-cmd --zone=publicweb --list-services
Output
http https ssh
  1. sudo firewall-cmd --zone=privateDNS --list-services
Output
dns

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=:

  1. sudo firewall-cmd --set-default-zone=publicweb

Kết luận

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.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Chia sẻ

0 câu trả lời