Thứ sáu, 03/04/2020 | 00:00 GMT+7

Cách thiết lập firewall bằng firewalld trên CentOS 8

firewalld là phần mềm 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 user cho các hệ thống lọc gói tin iptables hoặc nftables trong nhân của Linux.

Trong hướng dẫn này, ta sẽ chỉ cho bạn cách cài đặt firewall firewalld cho server CentOS 8 của bạn và trình bày các kiến thức cơ bản về quản lý firewall bằng công cụ quản trị firewall-cmd .

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần một server chạy CentOS 8. Ta sẽ cho rằng bạn đã đăng nhập vào server này với quyền là user không root , sudo -enabled. Để cài đặt điều này, hãy xem hướng dẫn Cài đặt Server Ban đầu cho CentOS 8 của ta .

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 trình firewall-cmd để quản lý cấu hình firewall của bạn, ta nên làm quen với một vài khái niệm mà công cụ này giới thiệu.

Khu vực

Daemon firewalld quản lý các group luật bằng cách sử dụng các thực thể được gọi là vùng . Vùng là tập hợp các luật 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 trong mạng. Các network interface được gán cho một vùng để chỉ đị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ư notebook ), loại linh hoạt này cung cấp một phương pháp tốt để thay đổi các luật 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 định nghiêm ngặt 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ột server , những vùng này thường không quan trọng bằng vì môi trường mạng hiếm khi thay đổi.

Dù 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 vùng được định nghĩa cho firewalld . Các khu vực được định nghĩa trong firewalld , theo thứ tự từ ít tin cậy nhất đến 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ị chặn mà không có phản hồi và chỉ có thể thực hiện các kết nối đi.
  • chặn : 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 đến sẽ bị từ chối với thông báo icmp-host-prohibited icmp6-adm-prohibited hoặc icmp6-adm-prohibited .
  • public : Đại diện cho các mạng công khai, khô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.
  • bên ngoài : Các mạng bên ngoài trong trường hợp bạn đang sử dụng firewall làm cổng của bạn . Nó được cấu hình cho NAT giả mạo để mạng nội bộ của bạn vẫn riêng tư nhưng có thể truy cập được.
  • nội bộ : 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 cổng. Các máy tính này khá 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.
  • công việc : 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.
  • tin cậy : 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 firewall , ta có thể tạo các luật và thay đổi các thuộc tính của vùng của ta và sau đó gán các network interface của ta cho bất kỳ vùng nào thích hợp nhất.

Quy luật Permanence

Trong firewalld, các luật có thể được áp dụng cho bộ luật thời gian chạy hiện tại hoặc được đặt vĩnh viễn . Khi một luật được thêm vào hoặc sửa đổi, theo mặc định, chỉ firewall hiện đang chạy mới được sửa đổi . Sau lần khởi động lại tiếp theo - hoặc reload dịch vụ firewalld - chỉ các luật vĩnh viễn sẽ vẫn còn.

Hầu hết các hoạt động firewall-cmd có thể có cờ --permanent để cho biết các thay đổi nên được áp dụng cho cấu hình permenent. Ngoài ra, firewall hiện đang chạy có thể được lưu vào cấu hình vĩnh viễn bằng lệnh firewall-cmd --runtime-to-permanent .

Sự tách biệt giữa thời gian chạy và cấu hình vĩnh viễn này nghĩa là bạn có thể kiểm tra an toàn các luật trong firewall đang hoạt động của bạn , sau đó reload để bắt đầu lại nếu có sự cố.

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 hình ảnh của CentOS 8. Tuy nhiên, có thể bạn cần tự cài đặt firewalld:

  • sudo dnf 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 server của bạn . Lưu ý việc bật firewalld sẽ khiến dịch vụ khởi động khi server khởi động . Cách tốt nhất là tạo các luật firewall của bạn và tận dụng cơ hội để kiểm tra chúng trước khi cấu hình hành vi này để tránh các vấn đề tiềm ẩn.

  • sudo systemctl enable firewalld
  • sudo systemctl start firewalld

Khi server khởi động lại, firewall của bạn sẽ được kích hoạt, các network interface của bạn phải đượ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ấu hình ) và mọi luật liên quan đến (các) vùng sẽ được áp dụng cho các các giao diện.

Ta có thể xác minh dịch vụ đang chạy và có thể truy cập được bằng lệnh :

  • sudo firewall-cmd --state
Output
running

Điều này cho biết firewall của ta đang hoạt động với cấu hình mặc định.

Làm quen với các luật firewall hiện tại

Trước khi bắt đầu thực hiện sửa đổi, ta nên tự làm quen với môi trường và luật mặc định do firewalld cung cấp.

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

Ta có thể thấy vùng nào hiện được chọn làm mặc định bằng lệnh :

  • firewall-cmd --get-default-zone
Output
public

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

  • firewall-cmd --get-active-zones
Output
public interfaces: eth0 eth1

Ở đây, ta có thể thấy rằng server mẫu của ta có hai network interface đang được điều khiển bởi firewall ( eth0eth1 ). Cả hai hiện đang được quản lý theo các luật được xác định cho khu vực công cộng .

Làm thế nào để ta biết những luật nào được liên kết với khu vực công cộng ? Ta có thể in ra cấu hình của vùng mặc định bằng lệnh :

  • 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: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Ta có thể biết từ kết quả rằng vùng này vừa là mặc định vừa hoạt động, và rằng các giao diện eth0eth1 được liên kết với vùng này ( ta đã biết tất cả điều này từ các yêu cầu trước đây của ta ). Tuy nhiên, ta cũng có thể thấy rằng vùng này cho phép lưu lượng truy cập cho client DHCP (để gán địa chỉ IP), SSH (để quản trị từ xa) và Cockpit ( control panel dựa trên web).

Khám phá các vùng thay thế

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

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

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

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

  • 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: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Bạn có thể xuất ra tất cả các định nghĩa vùng bằng cách sử dụng tùy chọn --list-all-zones . Bạn có thể cần chuyển kết quả vào một máy nhắn tin để xem dễ dàng hơn:

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

Tiếp theo ta sẽ tìm hiểu về cách gán vùng cho các network interface .

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

Trừ khi bạn đã cấu hình các network interface của bạn bằng cách khác, 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ể di chuyển 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 cần sử dụng sudo .

Ví dụ, ta có thể di chuyển ta eth0 giao diện với khu nhà bằng lệnh này:

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

Lưu ý: Khi nào bạn chuyển giao diện sang một vùng mới, hãy lưu ý bạn có thể đang sửa đổi dịch vụ nào sẽ hoạt động. Ví dụ, ở đây ta đang chuyển sang khu vực nhà , nơi có sẵn SSH. Điều này nghĩa là kết nối của ta sẽ không bị ngắt. Một số vùng khác không được bật SSH theo mặc định và việc chuyển sang một trong các vùng này có thể khiến kết nối của bạn bị ngắt, ngăn bạn đăng nhập lại vào server của bạn .

Ta có thể xác minh điều này đã thành công bằng cách yêu cầu lại các vùng đang hoạt động:

  • 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 bởi một vùng duy nhất, có lẽ dễ nhất là chỉ định vùng tốt nhất làm mặc định và sau đó sử dụng vùng đó cho cấu hình của bạn.

Bạn có thể thay đổi vùng 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 nào sử dụng vùng mặc định:

  • sudo firewall-cmd --set-default-zone=home
Output
success

Đặt luật cho ứng dụng của bạn

Hãy xem qua cách cơ bản để xác định ngoại lệ firewall cho các dịch vụ bạn muốn cung cấp.

Thêm dịch vụ vào vùng 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. Bạn có thể nhận được danh sách các định nghĩa dịch vụ có sẵn với tùy chọn --get-services :

  • firewall-cmd --get-services
Output
RH-Satellite-6 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 condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns dns-over-tls docker-registry docker-swarm dropbox-lansync elasticsearch etcd-client etcd-server finger freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp 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 ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql 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 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 tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-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 .xml liên kết của chúng trong folder /usr/lib/firewalld/services . Ví dụ: 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ể bậ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 đến đến 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ằng cách --permanent cờ --permanent .

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

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

Bạn có thể bỏ dấu --zone= cờ nếu bạn muốn sửa đổi vùng mặc định. Ta có thể xác minh hoạt động thành công bằng cách sử dụng hoạt động --list-all hoặc --list-services :

  • sudo firewall-cmd --zone=public --list-services
Output
cockpit dhcpv6-client http ssh

Khi bạn đã kiểm tra rằng mọi thứ đang hoạt động bình thường, có thể bạn cần sửa đổi các luật firewall vĩnh viễn để dịch vụ của bạn vẫn có sẵn sau khi khởi động lại. Ta có thể thực hiện thay đổi trước đó của bạn vĩnh viễn bằng lệnh lại và thêm cờ --permanent :

  • 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 firewall hiện đang chạy vào cấu hình permanant:

  • sudo firewall-cmd --runtime-to-permanent

Hãy cẩn thận với điều này, vì tất cả các thay đổi được thực hiện đối với firewall đang chạy sẽ được commit rõ ràng.

Cho dù bạn chọn phương pháp nào, bạn có thể xác minh nó đã thành công bằng cách thêm cờ --permanent vào hoạt động --list-services . Bạn cần sử dụng sudo cho bất kỳ --permanent hoạt động --permanent nào:

  • 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 bây giờ sẽ cho phép lưu lượng truy cập web HTTP trên cổng 80. Nếu web server của bạn được cấu hình để sử dụng SSL / TLS, bạn cũng cần thêm dịch vụ https . Ta có thể thêm điều đó vào phiên hiện tại và luật vĩnh viễn được đặt bằng lệnh :

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

Điều gì xảy ra nếu Không có Dịch vụ Thích hợp?

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 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 vùng 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 đượ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 ta chạy trên cổng 5000 và sử dụng TCP, ta có thể tạm thời thêm nó vào vùng công cộng bằng cách sử dụ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
Output
success

Ta có thể xác minh điều này đã thành công bằng cách sử dụng thao tác --list-ports :

  • 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 ta sử dụng các cổng UDP 4990 đến 4999, ta có thể mở các cổng này ở chế độ công khai bằng lệnh :

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

Sau khi thử nghiệm, ta có thể cần thêm chúng vào firewall vĩnh viễn. Sử dụng sudo firewall-cmd --runtime-to-permanent --permanent để làm điều đó hoặc chạy lại các lệnh với 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
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 xem mỗi khu vực đó dùng để làm gì. Nếu bạn đã từng ngừng hoạt động một dịch vụ trên server của bạn , 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ụ mới.

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. Cách dễ nhấ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 folder /etc/firewalld/services nơi firewall tìm kiếm các định nghĩa không chuẩn.

Ví dụ, ta có thể sao chép các định nghĩa dịch vụ SSH để sử dụng cho định nghĩa dịch vụ ví dụ như thế này. Tên file trừ hậu tố .xml sẽ chỉ ra tên của 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 file bạn đã sao chép. Trước tiên, hãy mở nó trong editor yêu thích của bạn. Ta sẽ sử dụng vi ở đây:

  • sudo vi /etc/firewalld/services/example.xml

Để bắt đầu, file 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à metadata . Bạn cần thay đổi tên viết tắt của dịch vụ trong các <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ở. Nhiều <port/> có thể được chỉ định.

Đối với dịch vụ ví dụ của ta , hãy tưởng tượng rằng ta cần mở cổng 7777 cho TCP và 8888 cho UDP. Ta có thể sửa đổi định nghĩa hiện có với thông tin như sau:

/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 file .

Cập nhật firewall 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
Output
RH-Satellite-6 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 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 freeipa-4 freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp 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 ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns memcache minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql murmur mysql 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 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 tftp-client tile38 tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

Đến đây bạn có thể sử dụng dịch vụ này trong khu vực của bạn như bình thường.

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

Mặc dù các vùng được định nghĩa có thể là quá đủ đối với hầu hết user , nhưng có thể hữu ích khi xác định các vùng của bạn 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 vùng cho web server của bạn , được gọi là publicweb . Tuy nhiên, bạn có thể cần có một vùng 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 bạn . Bạn có thể cần một vùng gọi là "privateDNS" cho điều đó.

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

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

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

  • 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 khả dụng trong firewall thời gian chạy:

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

Cập nhật firewall để đưa các vùng mới này vào cấu hình thời gian chạy 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 khu vực của bạn . Thông thường, bạn nên điều chỉnh firewall thời gian chạy và sau đó lưu những thay đổi đó vào cấu hình vĩnh viễn sau khi thử nghiệm. Ví dụ: đối với vùng mạng công cộng , bạn có thể cầ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: http https ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

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

  • sudo firewall-cmd --zone=privateDNS --add-service=dns
  • sudo firewall-cmd --zone=privateDNS --list-all
Output
privateDNS target: default icmp-block-inversion: no interfaces: sources: services: dns ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Sau đó, ta có thể thay đổi giao diện của bạn 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

Đến đây, bạn có cơ hội để kiểm tra cấu hình của bạn . Nếu các giá trị này phù hợp với bạn, bạn cần thêm các luật này vào cấu hình vĩnh viễn. Bạn có thể làm điều đó bằng cách chạy tất cả các lệnh với --permanent cờ nối, nhưng trong trường hợp này, ta sẽ sử dụng --runtime-to-permanent cờ để lưu toàn bộ cấu hình thời gian chạy của ta vĩnh viễn:

  • sudo firewall-cmd --runtime-to-permanent

Sau khi áp dụng vĩnh viễn các luật này, hãy cập nhật firewall để kiểm tra xem các thay đổi vẫn còn:

  • 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
Output
privateDNS interfaces: eth1 publicweb interfaces: eth0

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

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

Bạn đã cài đặt thành công vùng của riêng mình! Nếu bạn muốn đặt một trong những vùng này làm mặc định cho các giao diện khác, hãy nhớ cấu hình hành vi đó với tham số --set-default-zone= :

  • sudo firewall-cmd --set-default-zone=publicweb

Kết luận

Đến đây bạn đã hiểu khá kỹ 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 luật có thể bảo trì và các bộ luật 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 policy firewall khác nhau thông qua việc sử dụng các vùng và cung cấp cho administrator 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 của 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.

Để biết thêm thông tin về firewalld, vui lòng xem tài liệu chính thức về firewalld .


Tags:

Các tin liên quan

Cách cài đặt MariaDB trên CentOS 8
2020-04-03
Cách thêm và xóa người dùng trên CentOS 8
2020-04-03
Cách cài đặt Node.js trên CentOS 8
2020-04-01
Cách tạo người dùng mới hỗ trợ Sudo trên CentOS 8 [Khởi động nhanh]
2020-03-30
Cách tự động hóa quá trình triển khai sản xuất Node.js của bạn với Giao hàng trên CentOS 7
2020-02-26
Cách sử dụng Cron để tự động hóa công việc trên CentOS 8
2020-02-10
Cách thiết lập khóa SSH trên CentOS 8
2020-02-06
Cách cài đặt và sử dụng TimescaleDB trên CentOS 7
2020-02-03
Cách thiết lập Nền tảng Eclipse Theia Cloud IDE trên CentOS 7
2020-01-24
Cách thiết lập ứng dụng Node.js để sản xuất trên CentOS 7
2019-10-28