Cách thiết lập Firewall sử dụng FirewallD trên CentOS 7

2 năm trước

 

Giới Thiệu 

Firewalld là một giải pháp quản lý firewall 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 hạt nhân Linux cung cấp. Trong hướng dẫn này, chúng tôi sẽ giới thiệu cách thiết lập firewall cho máy chủ của bạn và chỉ ranhững điều cơ bản về quản lý firewall bằng công cụ 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).

Có khả năng bạn có thể đang làm việc với một phiên bản firewall mới hơn cái đã 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. Do đó, hành vi 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.

Lưu ý: Có khả năng bạn có thể đang làm việc với một phiên bản firewall mới hơn cá đã có sẵn tại thời điểm viết bài này howjc máy chủ của bạn được thiết lập khác so với máy chủ mẫu được sử dụng trong hướng dẫn này . Do đó , hành vi 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.

 

Khái niệm cơ bản trong Firewalld

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

Zones

Daemon firewalld quản lý các nhóm quy tắc bằng cách sử dụng các thực thể được gọi là "zones". Zones là bộ quy tắc đơn giản quyết định traffic nào nên được cho phép tùy thuộc vào mức độ tin cậy bạn có trong 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 zone để quyết định hành vi mà firewall 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 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 của bạn tùy thuộc vào môi trường của bạn. Bạn có thể có các quy tắc nghiêm ngặt tại chỗ cấm hầu hết traffic 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ột máy chủ, các vùng này không quan trọng ngay lập tức vì môi trường mạng hiếm khi, nếu có, thay đổi.

Bất kể môi trường mạng của bạn có động như thế nào, nó vẫn hữu ích khi làm quen với ý tưởng chung đằng sau mỗi vùng được xác định trước cho firewalld. Theo thứ tự từ least trusted đến most trusted, các vùng được xác định trước trong firewalld là:

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

Quy tắc vĩnh viễn

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 quy tắc được thêm hoặc sửa đổi, theo mặc định, hành vi của firewall hiện đang chạy được sửa đổi. Ở lần khởi động tiếp theo, các quy tắc cũ sẽ được hoàn nguyên

Hầu hết các hoạt động firewall-cmd đều có thể lấy chỉ báo --permanent để chỉ ra rằng  firewall không tạm thời 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ự phân tách này có nghĩa là bạn có thể kiểm tra các quy tắc trong cá thể firewall hoạt động của bạn và sau đó tải lại nếu có vấn đề. Bạn cũng có thể sử dụng chỉ báo ---permanent để xây dựng toàn bộ các quy tắc theo thời gian mà tất cả sẽ được áp dụng cùng một lúc khi lệnh tải lại được phát hành.

Cài đặt và kích hoạt Firewall của bạn để bắt đầu khi khởi động

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 cài đặt firewalld:

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 kích hoạt firewall sẽ làm cho dịch vụ khởi động khi khởi động hệ thống. Cách tốt nhất là tạo quy tắc firewallcủa bạn và tận dụng cơ hội để kiểm tra chúng trước khi định cấu hình hành vi này để tránh các vấn đề tiềm ẩn.

sudo systemctl enable firewalld
sudo reboot

 

Khi máy chủ khởi động lại, firewall của bạn sẽ được đưa lên, giao diện mạng của bạn sẽ được đưa vào các vùng bạn đã cấu hình (hoặc quay trở lại vùng mặc định đã được cấu hình) và bất kỳ quy tắc nào liên quan đến (các) vùng sẽ được áp dụng cho 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 bằng cách nhập:

sudo firewall-cmd --state
output
running

 

Điều này chỉ ra rằng firewall của chúng ta đang hoạt động và chạy với cấu hình mặc định.

 

Làm quen với các quy tắc firewall hiện tại

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

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

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

firewall-cmd --get-default-zone
output
public

Vì chúng ta chưa đưa ra bất kỳ lệnh firewalld nào để chuyển vùng mặc định, và không có giao diện nào được cấu hình để liên kết với một vùng khác, vùng đó cũng sẽ là vùng "hoạt động" duy nhất (vùng kiểm soát traffic cho giao diện của chúng ta). Chúng ta có thể xác minh rằng bằng cách nhập:

firewall-cmd --get-active-zones
output
public
interfaces: eth0 eth1
 

Ở đây, chúng ta có thể thấy rằng máy chủ ví dụ của chúng ta có hai giao diện mạng đang được kiểm soát bởi firewall (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.

Làm cách nào để chúng ta biết quy tắc nào được kết hợp với khu vực công khai? Chúng ta có thể in ra cấu hình của vùng mặc định bằng cách gõ:

sudo firewall-cmd --list-all
output
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ể nói từ đầu ra rằng vùng này là mặc định và đang hoạt động và các giao diện eth0 và eth1 được kết hợp với vùng này (chúng ta đã biết tất cả điều này từ các yêu cầu trước đây của chúng ta). Tuy nhiên, chúng ta cũng có thể thấy rằng vùng này cho phép các hoạt động bình thường kết hợp với một máy khách DHCP (để gán địa chỉ IP) và SSH (cho quản trị từ xa).

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

Bây giờ chúng ta có một ý tưởng tốt về cấu hình cho vùng mặc định và hoạt động. Chúng ta 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 vùng khả dụng, hãy nhập:

firewall-cmd --get-zones
output
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:

sudo firewall-cmd --zone=home --list-all
output
home
interfaces: 
sources: 
services: dhcpv6-client ipp-client mdns samba-client ssh
ports: 
masquerade: no
forward-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. Có thể bạn sẽ muốn kết nối đầu ra thành một máy nhắn tin để xem dễ dàng hơn:

sudo firewall-cmd --list-all-zones | less
 

Chọn vùng cho giao diện của bạn

Trừ khi bạn đã cấu hình giao diện mạng của bạn nếu không, mỗi giao diện sẽ được đặt trong vùng mặc định khi firewall được khởi động.

Thay đổi vùng của giao diện

Bạn có thể chuyển đổi một giao diện giữa các vùng 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 firewall, bạn sẽ cần phải sử dụng sudo.

Ví dụ, chúng ta có thể chuyển giao giao diện eth0  của chúng ta sang vùng "home" bằng cách gõ:

sudo firewall-cmd --zone=home --change-interface=eth0
output
success

 

Chú ý 

Bất cứ khi nào bạn đang chuyển đổi giao diện sang một vùng mới, hãy lưu ý rằng có thể bạn đang sửa đổi các dịch vụ sẽ hoạt động.Ví dục , ở đây chúng ta đang di chuyển đến khu vực "home" trong đó có SSH có sẵn. Điều này có nghĩa là kết nối của chúng ta không được giảm xuống . Một số vùng khác không được kích hoạ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 khu vực 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 các vùng hoạt động trở lại:

firewall-cmd --get-active-zones
output
home
interfaces: eth0
public
interfaces: eth1
 

Điều chỉnh vùng mặc định

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

Bạn có thể thay đổi vùng 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 đã rơi trở lại mặc định sang vùng mới:

sudo firewall-cmd --set-default-zone=home
output
success
 

Đặt quy tắc cho các ứng dụng của bạn

Cách cơ bản để xác định ngoại lệ firewall cho các dịch vụ mà bạn muốn cung cấp có sẵn là dễ dàng. Chúng ta sẽ chạy qua ý tưởng cơ bản ở đây.

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

firewall-cmd --get-services
output
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
 
Chú ý

Bạn có thể thêm nhiều chi tiết hơn cho mỗi dịch vụ bằng cách nhìn vào các tệp  .xml đã được liên kết trong thư mục /usr/lib/firewalld/services. Ví dụ, dịch vụ SSH được xác định như sau:

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


Bạn có thể kích hoạt một dịch vụ cho một vùng bằng cách sử dụng tham số --add-service=. Thao tác sẽ nhắm mục tiêu vùng mặc định hoặc bất kì vùng 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 firewall hiện tại . Bạn có thể điều chỉnh cấu hình firewall vĩnh viễn bằn cách bao gồm chỉ báo --permanent.

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

sudo firewall-cmd --zone=public --add-service=http

Bạn có thể bỏ qua --zone= nếu bạn muốn sửa đổi vùng 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 các hoạt động --list-all hoặc --list-services:

sudo firewall-cmd --zone=public --list-services
output
dhcpv6-client http ssh

 

Một khi bạn đãkiểm tra rằng tất cả mọi thứ đang làm việc tốt, hãy sửa đổi các quy tắc firewall vĩnh viễn để dịch vụ của bạn vẫn sẽ có sẵn sau khi khởi động lại. Chúng ta có thể thay đổi múi giờ "public" vĩnh viễn bằng cách nhập:

sudo firewall-cmd --zone=public --permanent --add-service=http
output
success
 

Bạn có thể xác minh rằng điều này đã thành công bằng cách thêm chỉ báo --permanent vào danh sách --list-services. Bạn cần sử dụng sudo cho bất kỳ hoạt động --permanent:

sudo firewall-cmd --zone=public --permanent --list-services
output
dhcpv6-client http ssh
 

Vùng "public" của bạn giờ đây sẽ cho phép HTTP web traffic 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 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à tập hợp quy tắc vĩnh viễn bằng cách nhập:

sudo firewall-cmd --zone=public --add-service=https
sudo firewall-cmd --zone=public --permanent --add-service=https

Điều gì xảy ra nếu không có dịch vụ phù hợp?

Các dịch vụ firewall được bao gồm trong cài đặt firewalld đại diện cho nhiều yêu cầu phổ biến nhất cho 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ó các tình huống 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 khu của bạn

Cách dễ 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) vùng thích hợp. Điều này dễ dàng như chỉ định cổng hoặc dải 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= . Các giao thức có thể là tcphoặc udp:

sudo firewall-cmd --zone=public --add-port=5000/tcp
output
success

Chúng ta có thể xác minh rằng điều này đã thành công khi sử dụng thao tác --list-ports :

sudo firewall-cmd --zone=public --list-ports
output
5000/tcp
 

Nó cũng có thể xác định một loạt các cổng tuần tự bằng cách tách cổng đầu và cuối trong phạm vi bằng 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 từ 4990 đến 4999, chúng ta có thể mở chúng trên "public" bằng cách gõ:

sudo firewall-cmd --zone=public --add-port=4990-4999/udp

Sau khi kiểm tra, chúng ta có thể muốn thêm chúng vào firewall vĩnh viễn. Bạn có thể làm điều đó bằng cách gõ:

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
output
success
success
5000/tcp 4990-4999/udp
 

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

Cổng mở cho các khu vực của bạn rất dễ dàng, nhưng có thể khó theo dõi những gì từng khu vực. Nếu bạn đã từng ngừng hoạt động dịch vụ trên máy chủ của mình, bạn có thể gặp khó khăn khi nhớ các cổng nào đã được mở vẫn được yêu cầu. Để tránh tình trạng này, có thể xác định một dịch vụ.

Dịch vụ đơn giản là các bộ sưu tập các cổng có tên và mô tả được liên kết. Sử dụng dịch vụ dễ quản trị hơn cổng nhưng yêu cầu một chút công việc trả trước. Cách dễ nhất để bắt đầu là sao chép tập lệnh hiện có (tìm thấy trong /usr/lib/firewalld/services) vào thư mục /etc/firewalld/services nơi firewall tìm kiếm các sự đị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 trừ đi hậu tố .xml sẽ đặt tên cho dịch vụ trong danh sách dịch vụ firewall:  

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 bạn đã sao chép:

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

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ẻ . Đây là tên người có thể đọc được cho dịch vụ của bạn. Bạn cũng nên thêm mô tả để bạn 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 mà thực sự ảnh hưởng đến chức năng của dịch vụ có thể là định rõ cổng nơi bạn xác định số cổng và giao thức mà bạn muốn mở. Điều này có thể được xác đị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  cần mở cổng 7777 cho TCP và 8888 cho UDP. Bằng cách vào chế độ INSERT bằng cách nhấn i, chúng ta có thể sửa đổi định nghĩa hiện tại với một cái gì đó như thế này:

/etc/firewalld/services/example.xml
Example ServiceThis is just an example service. It probably shouldn't be used on a real system.tcp" port="7777"/>
udp" port="8888"/>

Nhấn ESC, sau đó nhấn :x để lưu và đóng tệp.

Tải lại firewall của bạn để có quyền truy cập vào dịch vụ mới :

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
output
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 vùng của bạn như bình thường.

 

Tạo vùng riêng của bạn

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

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

Khi thêm một vùng, bạn phải thêm nó vào cấu hình firewall vĩnh viễn. Sau đó, bạn có thể tải lại để mang cấu hình vào phiên chạy của mình. Ví dụ, chúng ta có thể tạo hai vùng mà chúng ta đã thảo luận ở trên bằng cách gõ:

sudo firewall-cmd --permanent --new-zone=publicweb
sudo firewall-cmd --permanent --new-zone=privateDNS

Bạn có thể xác minh rằng chúng có trong cấu hình vĩnh viễn của bạn bằng cách gõ:

sudo firewall-cmd --permanent --get-zones
output
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 có sẵn trong phiên bản firewall hiện tại:

firewall-cmd --get-zones
output
block dmz drop external home internal public trusted work
 

Tải lại firewall để đưa các vùng mới này vào cấu hình hoạt động:

sudo firewall-cmd --reload
firewall-cmd --get-zones

output
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 vùng của bạn. Bạn nên điều chỉnh phiên bản hoạt động và sau đó chuyển các thay đổi đó sang cấu hình vĩnh viễn sau khi thử nghiệm. Ví dụ: đối với vùng "publicweb", bạn có thể muốn 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

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

sudo firewall-cmd --zone=privateDNS --add-service=dns
sudo firewall-cmd --zone=privateDNS --list-all
output
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  sang các vùng 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 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 chỉ báo --permanent :

sudo firewall-cmd --zone=publicweb --permanent --add-service=ssh
sudo firewall-cmd --zone=publicweb --permanent --add-service=http
sudo firewall-cmd --zone=publicweb --permanent --add-service=https
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 của mình và tải lại dịch vụ firewall của mình:

sudo systemctl restart network
sudo systemctl reload firewalld

Xác nhận rằng các vùng chính xác đã được chỉ định:

firewall-cmd --get-active-zones
output
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 vùng:

sudo firewall-cmd --zone=publicweb --list-services
output
http https ssh
sudo firewall-cmd --zone=privateDNS --list-services
 
sudo firewall-cmd --zone=privateDNS --list-services
output
dns
 

Bạn đã thiết lập thành công vùng của riêng mình! Nếu bạn muốn đặt một trong các vùng 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
 

Kết Luận

Bây giờ bạn sẽ có một sự hiểu biết khá tốt về cách quản trị dịch vụ firewall 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 định cấu hình các quy tắc có thể duy trì và các bộ quy tắc xem xét môi trường mạng của bạn. Nó cho phép bạn liên tục chuyển đổi giữa các chính sách firewall khác nhau thông qua việc sử dụng các vùng và cung cấp cho quản trị viên khả năng trừu tượng hóa việc quản lý cổng thành các định nghĩa dịch vụ thân thiện hơn. Nhận được kiến thức làm việc của hệ thống này sẽ cho phép bạn tận dụng lợi thế của tính linh hoạt và sức mạnh mà công cụ này cung cấp.