天天看點

5招詳解linux之openEuler /centos7防火牆基本使用指南

防火牆是一種防火牆管了解決方案,可用于許多 Linux 發行版,它充當 Linux 核心提供的 iptables 資料包篩選系統的前端。在本指南中,将介紹如何為伺服器設定防火牆,并向你展示使用管理工具管理防火牆的基礎知識

注:你可能正在使用比本指南釋出時可用的較新版本的防火牆,或者你的伺服器設定與本指南中使用的示例伺服器略有不同。是以,本指南中解釋的一些指令的行為可能因你的特定配置而異。

防火牆中的基本概念

在我們開始介紹如何實際使用實用程式來管理防火牆配置之前,我們應該熟悉該工具介紹的一些基本概念。firewall-cmd

區域

守護程序使用稱為"區域"的實體管理規則組。區域基本上是一組規則,根據計算機連接配接到的網絡的信任級别,規定應允許哪些流量。網絡接口被配置設定一個區域,以訓示防火牆應允許的行為。

無論你所處的網絡環境有多動态,熟悉每個預定義區域仍然很有用。從最不信任 到 最受信任的順序,中的預定義區域是

  • drop(丢棄):最低信任級别。所有傳入連接配接在沒有回複的情況下丢棄,并且隻能進行傳出連接配接。
  • block(限制):與上述類似,但傳入請求不是簡單地丢棄連接配接,而是使用 或 消息被拒絕。icmp-host-prohibited icmp6-adm-prohibited
  • public(公共):表示公共、不受信任的網絡。您不信任其他計算機,但可能會根據情況允許標明的傳入連接配接。
  • external(外部):使用防火牆作為網關時的外部網絡。它配置為 NAT 僞裝,以便你的内部網絡保持私有但可通路。
  • internal(内部):外部區域的另一側,用于網關的内部部分。計算機是相當值得信賴的,一些額外的服務是可用的。
  • dmz: 用于位于 DMZ 中的計算機(無法通路網絡其餘部分的隔離計算機)。僅允許某些傳入連接配接。
  • work(工作):用于工作機器。信任網絡中的大多數計算機。可能允許使用更多服務。
  • home(家):家庭環境。它通常意味着你信任大多數其他計算機,并且将接受更多服務。
  • trusted(受信任) :信任網絡中的所有計算機。最開放的可用選項,應謹慎使用。

要使用防火牆,我們可以建立規則并更改區域的屬性,然後将網絡接口配置設定給最合适的區域。

永久性規則

在防火牆中,規則可以指定為永久規則或即時規則。如果添加或修改了規則,預設情況下,将修改目前運作的防火牆的行為。在下次啟動時,将恢複舊規則。

大多數操作都可以采取該标志來訓示非臨時防火牆應作為目标。這将影響啟動時重新加載的規則集。這種分離意味着您可以在活動防火牆執行個體中測試規則,然後在出現問題時重新加載。還可以使用标志來建構一整組規則,這些規則将在發出重載指令時同時應用。firewall-cmd --permanent --permanent

安裝并啟用防火牆啟動

firewalld預設情況下安裝在某些 Linux 發行版上,包括 openEuler/CentOS 7 的許多映像。但是,您可能有必要自行安裝防火牆:

sudo yum install firewalld
sudo systemctl enable firewalld
sudo reboot      

驗證防火牆服務是否正在運作:

sudo firewall-cmd --state      

修改防火牆規則

在開始修改之前,我們應該熟悉守護程序提供的預設環境和規則。

浏覽預設值

通過鍵入以下類型,我們可以看到目前選擇哪個區域為預設值:

firewall-cmd --get-default-zone      

由于我們沒有給出任何指定區域的指令,并且我們的接口都沒有配置為綁定到另一個區域,是以該區域也将是唯一的"活動"區域(控制我們接口的流量的區域)。我們可以通過鍵入以下類型來驗證這一點:

firewall-cmd --get-active-zones      
輸出:interfaces: eth0 eth1      

我們可以看到,我們的示例伺服器有兩個網絡接口由防火牆控制。它們目前都按照為公共區域定義的規則進行管理。

我們怎麼知道哪些規則與公共區域相關?我們可以通過鍵入以下類型列印出預設區域的配置:

sudo firewall-cmd --list-all      
輸出:
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:      

我們可以從輸出中判斷此區域是預設的和活躍的,并且和接口與此區域關聯,我們也可以看到,此區域允許與 DHCP 用戶端(用于 IP 位址配置設定)和 SSH(用于遠端管理)關聯的正常操作。

為你的接口選擇區域

除非已配置網絡接口,否則在啟動防火牆時,每個接口都将置于預設區域。

更改接口區域

可以在會話期間将接口與參數結合使用,在會話期間在區域之間轉換接口。與修改防火牆的所有指令一樣,您需要使用 。

例如,可以通過鍵入以下内容将接口轉換為"主"區域:eth0

sudo firewall-cmd --zone=home --change-interface=eth0      
輸出:success      

可以通過再次請求活動區域來驗證這是否成功:

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

調整預設區域

如果所有接口由單個區域處理,則隻需選擇最佳預設區域,然後将它用于配置可能更容易。

可以使用參數更改預設區域。這将立即更改已傳回預設到新區域的任何接口:--set-default-zone=

sudo firewall-cmd --set-default-zone=home      
輸出:success      

為應用程式設定規則

向區域添加服務

最簡單的方法是将所需的服務或端口添加到您使用的區域。同樣,您可以使用以下選項擷取可用服務的清單:--get-services

firewall-cmd --get-services      
輸出:
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      

例如,如果我們運作一個為正常 HTTP 流量服務的 Web 伺服器,我們可以通過鍵入以下方式,為此會話的"公共"區域中的接口允許此流量:

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

可以通過使用 或 操作驗證操作是否成功:--zone= --list-all --list-services

sudo firewall-cmd --zone=public --list-services      
輸出:dhcpv6-client http ssh      

測試到所有内容都正常工作後,如果想要修改永久防火牆規則,以便重新啟動後服務仍然可用。我們可以通過鍵入:

sudo firewall-cmd --zone=public --permanent --add-service=http      
輸出:success      

可以通過向操作添加标志來驗證這是否成功。需要用于任何操作:--permanent--list-servicessudo``--permanent

sudo firewall-cmd --zone=public --permanent --list-services      
輸出:dhcpv6-client http ssh      

現在你的"公共"區域現在将允許端口 80 上的 HTTP Web 流量。如果你的 Web 伺服器配置為使用 SSL/TLS,還需要添加該服務。我們可以通過鍵入以下類型将其添加到目前會話和永久規則集中:https

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

建立屬于自己的區域

雖然預定義區域對于大多數使用者來說可能已經足夠了,但定義自己的區域可以更描述其功能會很有幫助。

例如,你可能希望為 Web 伺服器建立一個區域,稱為"公共網站"。但是,你可能希望為專用網絡上提供 DNS 服務配置其他區域。為此,需要建一個名為"私有 DNS"的區域。

添加區域時,必須将其添加到永久防火牆配置中。然後可以重新加載以将配置引入正在運作的會話中。例如,我們可以通過鍵入以下兩個區域來建立上面讨論的兩個區域:

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

可以通過鍵入以下類型來驗證這些配置是否存在于永久配置中:

sudo firewall-cmd --permanent --get-zones      
輸出:block dmz drop external home internal privateDNS public publicweb trusted work      

如之前所述,這些在防火牆的目前執行個體中尚不可用:

firewall-cmd --get-zones      
輸出:block dmz drop external home internal public trusted work      

需要重新加載防火牆以将這些新區域引入活動配置:

sudo firewall-cmd --reload
firewall-cmd --get-zones      
輸出:block dmz drop external home internal privateDNS public publicweb trusted work      

現在,你可以開始為區域配置設定适當的服務和端口。通過調整活動執行個體,然後在測試後将這些更改傳輸到永久配置。例如,對于"公共 web"區域,如果你需要添加 SSH、HTTP 和 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      
輸出:
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:      

同樣,我們可以将 DNS 服務添加到我們的"私有 DNS"區域:

sudo firewall-cmd --zone=privateDNS --add-service=dns
sudo firewall-cmd --zone=privateDNS --list-all      
輸出:
privateDNS
  interfaces: 
  sources: 
  services: dns
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:      

然後,我們可以将接口更改為這些新區域以測試它們:

sudo firewall-cmd --zone=publicweb --change-interface=eth0
sudo firewall-cmd --zone=privateDNS --change-interface=eth1      

來測試運作配置。調試完成後(即符合自己的要求)需要向永久配置添加相同的規則。可以通過使用标志重新應用規則來做到這一點:--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      

永久應用這些規則後,重新開機防火牆服務:

sudo systemctl restart network
sudo systemctl reload firewalld      

驗證是否配置設定了正确的區域:

firewall-cmd --get-active-zones      
輸出:
privateDNS
  interfaces: eth1
publicweb
  interfaces: eth0      

并驗證兩個區域都提供相應的服務:

sudo firewall-cmd --zone=publicweb --list-services      
輸出:http https ssh      
sudo firewall-cmd --zone=privateDNS --list-services      
輸出:dns      

這是就成功地設定了自己的區域,如果要使這些區域之一成為其他接口的預設區域之一,請記住使用這個參數配置該行為:--set-default-zone=

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

總結

防火牆服務允許你配置可維護的規則和規則集,這些規則和規則集可以考慮你的網絡環境。你可以通過使用區域在不同防火牆政策之間無縫切換,并允許管理者将端口管理抽象為更友好的服務。

點選關注,第一時間了解華為雲新鮮技術~

繼續閱讀