Cách cài đặt tường lửa FirewallD trên CentOS 7

Tác giả Network Engineer, T.M.Một 04, 2021, 08:32:53 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cách cài đặt tường lửa FirewallD trên CentOS 7


Firewalld là một giải pháp 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 hệ thống lọc gói iptables do Kernel Linux cung cấp.

Trong hướng dẫn này, chúng ta sẽ trình bày cách thiết lập tường lửa cho máy chủ của bạn và chỉ cho bạn những kiến ​​thức cơ bản về quản lý tường lửa bằng công cụ quản trị firewall-cmd. Nếu bạn muốn sử dụng iptables với CentOS, hãy làm theo hướng dẫn này.

Lưu ý: Có khả năng bạn đang làm việc với phiên bản firewalld mới hơn so với phiên bản có sẵn tại thời điểm viết bài này hoặc máy chủ của bạn được thiết lập hơi khác so với máy chủ mẫu được sử dụng trong hướng dẫn này. Thao tác của một số lệnh được giải thích trong hướng dẫn này có thể khác nhau tùy thuộc vào cấu hình cụ thể của bạn.

1. Các khái niệm cơ bản trong Firewalld

Trước khi bắt đầu nói về cách thực sự sử dụng tiện ích firewall-cmd để quản lý cấu hình tường lửa của bạn, chúng ta nên làm quen với một vài khái niệm cơ bản mà công cụ này giới thiệu.

1.1. Zones

Các daemon firewalld quản lý nhóm các quy tắc sử dụng các đối tượng được gọi là "Zones". Về cơ bản, Zones là tập hợp các quy tắc quy định lưu lượng nào được phép tùy thuộc vào mức độ tin cậy của bạn đối với các mạng mà máy tính của bạn được kết nối. Các giao diện mạng được gán một Zones để chỉ định hành vi mà tường lửa sẽ 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, loại linh hoạt này cung cấp một phương pháp tốt để thay đổi các quy tắc của bạn tùy thuộc vào môi trường của bạn. Bạn có thể đưa ra các quy định nghiêm ngặt về việc cấm hầu hết lưu lượng 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 Zones này không quan trọng ngay lập tức 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ó thể năng động như thế nào, vẫn hữu ích khi làm quen với ý tưởng chung đằng sau mỗi Zones được xác định trước firewalld. Để từ ít đáng tin cậy nhất đến đáng tin cậy nhất, các Zones được xác định trước bên trong firewalld là:

  • drop: Mức độ tin cậy thấp nhất. Tất cả các kết nối vào đều bị ngắt mà không có phản hồi và chỉ có thể thực hiện các kết nối ra.
  • block: Tương tự như trên, nhưng thay vì chỉ đơn giản là bỏ kết nối, các yêu cầu vào sẽ bị từ chối bằng một thông báo icmp-host-prohibited hoặc icmp6-adm-prohibited.
  • public: Đại diện cho các mạng công khai, không đáng tin cậy. Bạn không tin tưởng các máy tính khác nhưng có thể cho phép các kết nối đến đã chọn tùy theo từng trường hợp.
  • external: Các mạng bên ngoài trong trường hợp bạn đang sử dụng tường lửa làm gateway của mình. Nó được cấu hình cho NAT để mạng nội bộ của bạn vẫn riêng tư nhưng có thể truy cập được.
  • internal: Phía bên kia của vùng bên ngoài, được sử dụng cho phần bên trong của gateway. Các máy tính này khá đáng tin cậy và một số dịch vụ bổ sung có sẵn.
  • 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ỉ một số kết nối đến mới được phép.
  • work: Dùng cho máy làm việc. Tin tưởng hầu hết các máy tính trong mạng. Một số dịch vụ khác có thể được cho phép.
  • home: 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 vài dịch vụ nữa sẽ được chấp nhận.
  • trusted: Tin tưởng 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, chúng ta có thể tạo các quy tắc và thay đổi thuộc tính của các Zones của chúng ta, sau đó gán các giao diện mạng của chúng ta cho bất kỳ Zones nào thích hợp nhất.

1.2. Quy tắc Permanence

Trong firewalld, các quy tắc có thể được chỉ định là vĩnh viễn hoặc ngay lập tức. Nếu một quy tắc được thêm vào hoặc sửa đổi, theo mặc định, hoạt động của tường lửa hiện đang chạy sẽ được sửa đổi. Ở lần khởi động tiếp theo, các sửa đổi sẽ bị loại bỏ và các quy tắc cũ sẽ được áp dụng.

Hầu hết các firewall-cmd hoạt động có thể lấy tùy chọn  --permanent để chỉ ra rằng tường lửa không phù hợp nên được nhắm mục tiêu. Điều này sẽ ảnh hưởng đến bộ quy tắc được tải lại khi khởi động. Sự tách biệt này có nghĩa là bạn có thể kiểm tra các quy tắc trong phiên bản tường lửa đang hoạt động của mình và sau đó tải lại nếu có vấn đề. Bạn cũng có thể sử dụng tùy chọn --permanent để xây dựng toàn bộ bộ quy tắc theo thời gian, tất cả sẽ được áp dụng cùng một lúc khi lệnh tải lại được đưa ra.

3. Cài đặt và kích hoạt tường lửa của bạn để khởi động khi hệ thống khởi động

Tường lửa 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 hình ảnh của CentOS 7. Tuy nhiên, bạn có thể cần tự cài đặt firewalld bằng lệnh sau:

Mã nguồn [Chọn]
$ sudo yum install firewalld
Sau khi cài đặt firewalld, bạn có thể kích hoạt dịch vụ và khởi động lại máy chủ của mình. Hãy nhớ rằng việc bật firewalld sẽ khiến dịch vụ khởi động khi khởi động. Cách tốt nhất là tạo các quy tắc tường lửa của bạn và tận dụng cơ hội để kiểm tra chúng trước khi cấu hình thao tác này để tránh các vấn đề tiềm ẩn.

Mã nguồn [Chọn]
$ sudo systemctl enable firewalld
Mã nguồn [Chọn]
$ sudo reboot
Khi máy chủ khởi động lại, tường lửa của bạn sẽ được kích hoạt, các giao diện mạng của bạn phải được đưa vào các vùng bạn đã cấu hình (hoặc trở lại vùng mặc định đã cấu hình) và mọi quy tắc liên quan đến các zones sẽ được áp dụng cho các các giao diện.

Chúng ta 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:

Mã nguồn [Chọn]
$ sudo firewall-cmd --state
Mã nguồn [Chọn]
running
Điều này cho thấy rằng tường lửa của chúng ta đang hoạt động với cấu hình mặc định.

3. Làm quen với các quy tắc tường lửa hiện tại

Trước khi bắt đầu sửa đổi, chúng ta nên tự làm quen với môi trường và quy tắc mặc định do daemon cung cấp.

3.1. Khám phá các giá trị mặc định

Chúng ta có thể thấy Zones nào hiện được chọn làm mặc định bằng cách nhập:

Mã nguồn [Chọn]
$ firewall-cmd --get-default-zone
Mã nguồn [Chọn]
public
Vì chúng ta chưa đưa ra bất kỳ lệnh nào để firewalld đi chệch khỏi Zones mặc định và không có giao diện mạng nào của chúng ta được cấu hình để liên kết với một Zones khác, nên Zones đó cũng sẽ là Zones "hoạt động" duy nhất (Zones đang kiểm soát lưu lượng truy cập cho các giao diện mạng của chúng ta ). Chúng ta có thể xác minh điều đó bằng cách nhập:

Mã nguồn [Chọn]
$ firewall-cmd --get-active-zones
Mã nguồn [Chọn]
public
  interfaces: eth0 eth1

Ở đây, chúng ta có thể thấy rằng máy chủ mẫu của chúng ta có hai giao diện mạng đang được kiểm soát bởi tường lửa (eth0 và eth1). Cả hai hiện đang được quản lý theo các quy tắc được xác định cho Zones có tên public.

Làm thế nào để chúng ta biết những quy tắc nào được liên kết với Zones có tên public? chúng ta có thể in ra cấu hình của Zones mặc định bằng cách nhập:

Mã nguồn [Chọn]
$ sudo firewall-cmd --list-all
Mã nguồn [Chọn]
public (default, active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Chúng ta có thể biết từ đầu ra rằng Zones này vừa là mặc định vừa hoạt động và các giao diện eth0 và eth1 đều được liên kết với Zones này (chúng ta đã biết tất cả điều này từ các câu hỏi trước của chúng ta). Tuy nhiên, chúng ta cũng có thể thấy rằng Zones này cho phép thực hiện các hoạt động bình thường liên quan đến máy khách DHCP (để gán địa chỉ IP) và SSH (để quản trị từ xa).

3.2. Khám phá các Zones thay thế

Bây giờ chúng ta có một ý tưởng tốt về cấu hình cho Zones mặc định và Zones hoạt động. Chúng ta cũng có thể tìm hiểu thông tin về các Zones khác.

Để nhận danh sách các Zones khả dụng, hãy nhập:

Mã nguồn [Chọn]
$ firewall-cmd --get-zones
Mã nguồn [Chọn]
block dmz drop external home internal public trusted work
Chúng ta có thể thấy cấu hình cụ thể được liên kết với một vùng bằng cách bao gồm tham số --zone trong lệnh --list-all của chúng ta:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=home --list-all
Mã nguồn [Chọn]
home
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client mdns samba-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Bạn có thể xuất tất cả các định nghĩa Zones bằng cách sử dụng tùy chọn --list-all-zones. Bạn có thể sẽ muốn chuyển đầu ra để xem dễ dàng hơn:

Mã nguồn [Chọn]
$ sudo firewall-cmd --list-all-zones | less
4. Chọn Zones 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 bằng cách khác, mỗi giao diện mạng sẽ được đặt trong Zones mặc định khi tường lửa được khởi động.

4.1. Thay đổi Zones của giao diện mạng

Bạn có thể chuyển đổi giao diện mạng giữa các Zones trong một phiên bằng cách sử dụng tham số --zone kết hợp với tham số --change-interface. Như với tất cả các lệnh sửa đổi tường lửa, bạn sẽ cần sử dụng sudo.

Ví dụ: chúng ta có thể chuyển giao diện mạng eth0 của mình sang Zones "home" bằng cách nhập:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=home --change-interface=eth0
Mã nguồn [Chọn]
success
Lưu ý: Bất cứ khi nào bạn chuyển một giao diện mạng sang một Zones mới, hãy lưu ý rằng bạn có thể đang sửa đổi các dịch vụ sẽ hoạt động. Ví dụ, ở đây chúng ta đang chuyển đến vùng "home", nơi có sẵn SSH. Điều này có nghĩa là kết nối của chúng ta sẽ không bị ngắt. Một số Zones khác không được bật SSH theo mặc định và nếu kết nối của bạn bị ngắt khi sử dụng một trong các Zones này, bạn có thể thấy mình không thể đăng nhập lại.

Chúng ta có thể xác minh rằng điều này đã thành công bằng cách yêu cầu lại các Zones đang hoạt động:

Mã nguồn [Chọn]
$ firewall-cmd --get-active-zones
Mã nguồn [Chọn]
home
  interfaces: eth0
public
  interfaces: eth1

4.2. Điều chỉnh Zones mặc định

Nếu tất cả các giao diện mạng của bạn có thể được xử lý tốt nhất bởi một Zones duy nhất, có lẽ sẽ dễ dàng hơn để chọn Zones mặc định tốt nhất và sau đó sử dụng Zones đó cho cấu hình của bạn.

Bạn có thể thay đổi Zones mặc định với tham số --set-default-zone. Điều này sẽ ngay lập tức thay đổi bất kỳ giao diện mạng nào đã trở lại mặc định thành Zones mới:

Mã nguồn [Chọn]
$ sudo firewall-cmd --set-default-zone=home
Mã nguồn [Chọn]
success
5. Đặt quy tắc cho ứng dụng của bạn

Cách cơ bản để xác định ngoại lệ tường lửa cho các dịch vụ bạn muốn cung cấp khá đơn giản. Chúng ta sẽ chạy qua ý tưởng cơ bản ở đây.

5.1. Thêm dịch vụ vào Zones 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 các Zones bạn đang sử dụng. Một lần nữa, bạn có thể nhận được danh sách các dịch vụ có sẵn với tùy chọn --get-services:

Mã nguồn [Chọn]
$ firewall-cmd --get-services
Mã nguồn [Chọn]
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
Lưu ý: Bạn có thể biết thêm chi tiết về từng dịch vụ này bằng cách xem tập tin .xml được liên kết của chúng trong thư mục /usr/lib/firewalld/services. Ví dụ, dịch vụ SSH được định nghĩa như sau:

Mã nguồn [Chọn]
$ vi /usr/lib/firewalld/services/ssh.xml
Mã nguồn [Chọn]
<?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 một dịch vụ cho một khu vực bằng cách sử dụng tham số --add-service. Thao tác này sẽ nhắm mục tiêu đến Zones mặc định hoặc bất kỳ Zones 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. Bạn có thể điều chỉnh cấu hình tường lửa vĩnh viễn bằng cách thêm tùy chọn --permanent.

Ví dụ: nếu chúng ta đang chạy một máy chủ web phục vụ lưu lượng HTTP thông thường, chúng ta có thể cho phép lưu lượng này cho các giao diện mạng trong Zones "public" của chúng ta cho phiên này bằng cách nhập:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --add-service=http
Bạn có thể bỏ qua --zone nếu bạn muốn sửa đổi Zones mặc định. Chúng ta có thể xác minh hoạt động thành công bằng cách sử dụng tùy chọn --list-all hoặc --list-services:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --list-services
Mã nguồn [Chọn]
dhcpv6-client http ssh
Khi bạn đã kiểm tra rằng mọi thứ đều hoạt động bình thường, bạn có thể sẽ muốn 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 có sẵn sau khi khởi động lại. Chúng ta có thể thực hiện thay đổi khu vực "public" vĩnh viễn bằng cách nhập:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --permanent --add-service=http     
Mã nguồn [Chọn]
success
Bạn có thể xác minh rằng điều này đã thành công bằng cách thêm tùy chọn --permanent vào --list-services. Bạn cần sử dụng sudo cho bất kỳ --permanent nào.

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --permanent --list-services
Mã nguồn [Chọn]
dhcpv6-client http ssh
Khu vực "public" của bạn bây giờ 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 cấu hình để sử dụng SSL / TLS, bạn cũng sẽ muốn thêm dịch vụ https. Chúng ta có thể thêm điều đó vào phiên hiện tại và quy tắc vĩnh viễn được đặt bằng cách nhập:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --add-service=https
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --permanent --add-service=https
5.2. Điều gì xảy ra nếu không có dịch vụ thích hợp?

Các dịch vụ tường lửa đi kèm với cài đặt firewalld đại diện cho nhiều yêu cầu phổ biến nhất đối với các ứng dụng mà bạn có thể muốn cho phép truy cập. Tuy nhiên, có thể sẽ có những trường hợp mà 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 Zones của bạn:

Một cách để thêm hỗ trợ cho ứng dụng cụ thể của bạn là mở các cổng mà ứng dụng đó sử dụng trong các Zones 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 cho các cổng bạn cần mở.

Ví dụ: nếu ứng dụng của chúng ta chạy trên cổng 5000 và sử dụng TCP, chúng ta có thể thêm nó vào vùng "public" cho phiên này bằng cách sử dụng tham số --add-port. Giao thức có thể là một trong hai tcp hoặc udp:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --add-port=5000/tcp
Mã nguồn [Chọn]
success
Chúng ta có thể xác minh rằng điều này đã thành công bằng cách sử dụng --list-ports:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --list-ports
Mã nguồn [Chọn]
5000/tcp
Cũng có thể chỉ định một dải cổng tuần tự bằng cách phân tách cổng bắt đầu và cổng kết thúc trong phạm vi bằng một dấu gạch ngang. Ví dụ: nếu ứng dụng của chúng ta sử dụng các cổng UDP 4990 đến 4999, chúng ta có thể mở các cổng này trên "public" bằng cách nhập:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --add-port=4990-4999/udp
Sau khi thử nghiệm, chúng ta có thể muốn thêm những thứ này vào tường lửa vĩnh viễn. Bạn có thể làm điều đó bằng cách gõ:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --permanent --add-port=5000/tcp
Mã nguồn [Chọn]
success
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --permanent --add-port=4990-4999/udp
Mã nguồn [Chọn]
success
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=public --permanent --list-ports
Mã nguồn [Chọn]
5000/tcp 4990-4999/udp
Xác định một dịch vụ:

Việc mở các cổng cho các khu vực của bạn rất dễ dàng, nhưng có thể khó theo dõi xem từng Zones đó dùng để làm gì. 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 khi nhớ những cổng nào đã được mở vẫn được yêu cầu. Để tránh tình huống này, có thể xác định một dịch vụ.

Dịch vụ là tập hợp các cổng có tên và mô tả liên quan. Sử dụng các dịch vụ dễ quản lý hơn các cổng, nhưng yêu cầu một chút công việc trước. Một cách tốt để bắt đầu là sao chép một tập lệnh hiện có được tìm thấy 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ụ: chúng ta có thể sao chép định nghĩa dịch vụ SSH để sử dụng cho định nghĩa dịch vụ "ví dụ" của chúng ta như thế này. Tên tập tin .xml sẽ chỉ ra tên của dịch vụ trong danh sách dịch vụ tường lửa:

Mã nguồn [Chọn]
$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/example.xml
Bây giờ, bạn có thể điều chỉnh định nghĩa được tìm thấy trong tập tin bạn đã sao chép:

Mã nguồn [Chọn]
$ sudo vi /etc/firewalld/services/example.xml
Để bắt đầu, tập tin sẽ chứa định nghĩa SSH mà bạn đã sao chép:

Mã nguồn [Chọn]
$ vi /etc/firewalld/services/example.xml
Mã nguồn [Chọn]
<?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. Bạn sẽ muốn thay đổi tên viết tắt của dịch vụ trong các 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 bạn cần kiểm tra dịch vụ. Cấu hình duy nhất bạn cần thực hiện thực sự ảnh hưởng đến chức năng của dịch vụ có thể sẽ là định nghĩa cổng nơi bạn xác định số cổng và giao thức bạn muốn mở. Điều này có thể được chỉ định nhiều lần.

Đối với dịch vụ "ví dụ" của chúng ta, hãy tưởng tượng rằng chúng ta cần mở cổng 7777 cho TCP và 8888 cho UDP. Bằng cách vào chế độ CHÈN bằng cách nhấn i, chúng ta có thể sửa đổi định nghĩa hiện có với một cái gì đó như sau:

Mã nguồn [Chọn]
$ vi /etc/firewalld/services/example.xml
Mã nguồn [Chọn]
<?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>

Nhấn ESC, sau đó nhấn enter :x để 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:

Mã nguồn [Chọ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:

Mã nguồn [Chọn]
$ firewall-cmd --get-services
Mã nguồn [Chọn]
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 example 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
Bây giờ bạn có thể sử dụng dịch vụ này trong Zones của mình như bình thường.

6. Tạo Zones của riêng bạn

Mặc dù các Zones được xác định trước có thể là quá đủ đối với hầu hết người dùng, nhưng có thể hữu ích khi xác định các Zones của riêng bạn mô tả rõ hơn về chức năng của chúng.

Ví dụ: bạn có thể muốn tạo một Zones cho máy chủ web của mình, được gọi là "publicweb". Tuy nhiên, bạn có thể muốn có một Zones khác được định cấu hình 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ể muốn một Zones gọi là "privateDNS" cho điều đó.

Khi thêm Zones, bạn phải thêm Zones đó vào cấu hình tường lửa vĩnh viễn. 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. Ví dụ: chúng ta có thể tạo hai Zones mà chúng ta đã thảo luận ở trên bằng cách nhập:

Mã nguồn [Chọn]
$ sudo firewall-cmd --permanent --new-zone=publicweb
Mã nguồn [Chọn]
$ 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 vĩnh viễn của bạn bằng cách nhập:

Mã nguồn [Chọn]
$ sudo firewall-cmd --permanent --get-zones
Mã nguồn [Chọn]
block dmz drop external home internal privateDNS public publicweb trusted work
Như đã nêu trước đây, những điều này sẽ không khả dụng trong phiên bản tường lửa hiện tại:

Mã nguồn [Chọn]
$ firewall-cmd --get-zones
Mã nguồn [Chọn]
block dmz drop external home internal public trusted work
Tải lại tường lửa để đưa các vùng mới này vào cấu hình đang hoạt động:

Mã nguồn [Chọn]
$ sudo firewall-cmd --reload
Mã nguồn [Chọn]
$ firewall-cmd --get-zones
Mã nguồn [Chọn]
block dmz drop external home internal privateDNS public publicweb trusted work
Bây giờ, bạn có thể bắt đầu gán các dịch vụ và cổng thích hợp cho các Zones của mình. Thông thường, bạn nên điều chỉnh phiên bản đang hoạt động và sau đó chuyển những thay đổi đó sang cấu hình vĩnh viễn sau khi thử nghiệm. Ví dụ: đối với Zones "publicweb", bạn có thể muốn thêm các dịch vụ SSH, HTTP và HTTPS:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=publicweb --add-service=ssh
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=publicweb --add-service=http
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=publicweb --add-service=https
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=publicweb --list-all
Mã nguồn [Chọn]
publicweb
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: ssh http https
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Tương tự như vậy, chúng ta có thể thêm dịch vụ DNS vào vùng "privateDNS" của chúng ta:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=privateDNS --add-service=dns
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=privateDNS --list-all     
Mã nguồn [Chọn]
privateDNS
  interfaces:
  sources:
  services: dns
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

Sau đó, chúng ta có thể thay đổi giao diện mạng của mình sang các Zones mới này để kiểm tra chúng:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=publicweb --change-interface=eth0
Mã nguồn [Chọn]
$ 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 các giá trị này phù hợp với bạn, bạn sẽ muốn thêm các quy tắc tương tự vào cấu hình vĩnh viễn. Bạn có thể làm điều đó bằng cách áp dụng lại các quy tắc với tùy chọn --permanent:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=publicweb --permanent --add-service=http
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=publicweb --permanent --add-service=https
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=privateDNS --permanent --add-service=dns
Sau khi áp dụng vĩnh viễn các quy tắc này, bạn có thể khởi động lại mạng và tải lại dịch vụ tường lửa của mình:

Mã nguồn [Chọn]
$ sudo systemctl restart network
Mã nguồn [Chọn]
$ sudo systemctl reload firewalld
Xác thực rằng các khu vực chính xác đã được chỉ định:

Mã nguồn [Chọn]
$ firewall-cmd --get-active-zones     
Mã nguồn [Chọn]
privateDNS
  interfaces: eth1
publicweb
  interfaces: eth0

Và xác nhận rằng các dịch vụ thích hợp có sẵn cho cả hai khu vực:

Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=publicweb --list-services     
Mã nguồn [Chọn]
http https ssh
Mã nguồn [Chọn]
$ sudo firewall-cmd --zone=privateDNS --list-services
Mã nguồn [Chọn]
dns
Bạn đã thiết lập thành công Zones của riêng mình! Nếu bạn muốn đặt một trong những Zones này làm mặc định cho các giao diện mạng khác, hãy nhớ cấu hình thao tác đó với tham số --set-default-zone:

Mã nguồn [Chọn]
$ sudo firewall-cmd --set-default-zone=publicweb
Bây giờ bạn đã hiểu khá rõ về cách quản lý dịch vụ firewalld trên hệ thống CentOS của bạn để sử dụng hàng ngày.

Dịch vụ firewalld cho phép bạn cấu hình các quy tắc có thể bảo trì và bộ quy tắc có tính đến 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 Zones và cung cấp cho quản trị khả năng tóm tắt việc quản lý cổng thành các định nghĩa dịch vụ thân thiện hơn. 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 sự linh hoạt và sức mạnh mà công cụ này cung cấp.