1. 程式人生 > 實用技巧 >firewalld防火牆基本使用

firewalld防火牆基本使用

FirewallD 是 CentOS 7 伺服器上預設可用的防火牆管理工具。基本上,它是 iptables 的封裝,有圖形配置工具 firewall-config 和命令列工具 firewall-cmd。使用 iptables 服務,每次改動都要求重新整理舊規則,並且從 /etc/sysconfig/iptables 讀取新規則,然而 firewalld 只應用改動了的不同部分。

安裝並檢視狀態

yum install firewalld

啟動服務,並在系統引導時啟動該服務:

systemctl start firewalld
systemctl enable firewalld

停止並禁用:

systemctl stop firewalld
systemctl disable firewalld

檢查防火牆狀態。輸出應該是 running 或者 not running

# firewall-cmd --state
running

預設情況下,firewalld 處於執行狀態,並拒絕所有傳入流量,但有幾個例外,如 SSH。

檢視 FirewallD 守護程序的狀態:

systemctl status firewalld

FirewallD 的區域(zone)

FirewallD 使用服務(service) 和區域(zone)來代替 iptables 的規則(rule)和鏈(chain)。

預設情況下,有以下的區域(zone)可用:

  • drop – 丟棄所有傳入的網路資料包並且無迴應,只有傳出網路連線可用。
  • block — 拒絕所有傳入網路資料包並回應一條主機禁止的 ICMP 訊息,只有傳出網路連線可用。
  • public — 只接受被選擇的傳入網路連線,用於公共區域。
  • external — 用於啟用了地址偽裝的外部網路,只接受選定的傳入網路連線。
  • dmz — DMZ 隔離區,外部受限地訪問內部網路,只接受選定的傳入網路連線。
  • **work** — 對於處在你工作區域內的計算機,只接受被選擇的傳入網路連線。
    
  • home — 對於處在你家庭區域內的計算機,只接受被選擇的傳入網路連線。
  • internal — 對於處在你內部網路的計算機,只接受被選擇的傳入網路連線。
  • trusted — 所有網路連線都接受。

要列出所有可用的區域,執行:

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

列出預設的區域 :

# firewall-cmd --get-default-zone
public

改變預設的區域 :

# firewall-cmd --set-default-zone=dmz
# firewall-cmd --get-default-zone
dmz

特定區域的所有配置:

# firewall-cmd --zone=public --list-all   
public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

所有區域的配置:

# firewall-cmd --list-all-zones                                                                 root@Test-Linux
block
  target: %%REJECT%%
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


dmz
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


drop
  target: DROP
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


external
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


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: 


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


public
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


trusted
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 


work
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

FirewallD 服務

FirewallD 服務使用 XML 配置檔案,記錄了 firewalld 服務資訊。

列出所有可用的服務:

# firewall-cmd --get-services
amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap 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

XML 配置檔案儲存在 /usr/lib/firewalld/services//etc/firewalld/services/ 目錄下。
配置檔案位於兩個目錄中:

  • /usr/lib/FirewallD 下儲存預設配置,如預設區域和公用服務。 避免修改它們,因為每次 firewall 軟體包更新時都會覆蓋這些檔案。
  • /etc/firewalld 下儲存系統配置檔案。 這些檔案將覆蓋預設配置。

配置集

FirewallD 使用兩個配置集:“執行時”和“持久”。 在系統重新啟動或重新啟動 FirewallD 時,不會保留執行時的配置更改,而對持久配置集的更改不會應用於正在執行的系統。

預設情況下,firewall-cmd 命令適用於執行時配置,但使用 --permanent 標誌將儲存到持久配置中。要新增和啟用永續性規則,你可以使用兩種方法之一。

1、 將規則同時新增到持久規則集和執行時規則集中。

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

2、 將規則新增到持久規則集中並重新載入 FirewallD。

firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload

reload 命令會刪除所有執行時配置並應用永久配置。因為 firewalld 動態管理規則集,所以它不會破壞現有的連線和會話。

用 FirewallD 配置你的防火牆

作為一個例子,假設你正在執行一個 web 伺服器,SSH 服務埠為 7022 ,以及郵件服務,你可以利用 FirewallD 這樣配置你的伺服器:

首先設定預設區為 dmz。

# firewall-cmd --set-default-zone=dmz
# firewall-cmd --get-default-zone
dmz

為 dmz 區新增永續性的 HTTP 和 HTTPS 規則:

# firewall-cmd --zone=dmz --add-service=http --permanent
# firewall-cmd --zone=dmz --add-service=https --permanent

開啟埠 25 (SMTP) 和埠 465 (SMTPS) :

firewall-cmd --zone=dmz --add-service=smtp --permanent
firewall-cmd --zone=dmz --add-service=smtps --permanent

開啟 IMAP、IMAPS、POP3 和 POP3S 埠:

firewall-cmd --zone=dmz --add-service=imap --permanent
firewall-cmd --zone=dmz --add-service=imaps --permanent
firewall-cmd --zone=dmz --add-service=pop3 --permanent
firewall-cmd --zone=dmz --add-service=pop3s --permanent

因為將 SSH 埠改到了 7022,所以要移除 ssh 服務(埠 22),開啟埠 7022:

firewall-cmd --remove-service=ssh --permanent
firewall-cmd --add-port=7022/tcp --permanent

要應用這些更改,重新載入防火牆:

firewall-cmd --reload

最後可以列出這些規則:

# firewall-cmd –list-all
dmz
target: default
icmp-block-inversion: no
interfaces:
sources:
services: http https imap imaps pop3 pop3s smtp smtps
ports: 7022/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:

放行80和443埠

# firewall-cmd --permanent --add-port=80/tcp
# firewall-cmd --permanent --add-port=443/tcp
# firewall-cmd --reload # 將這些規則應用於當前會話

檢視當前防火牆上的設定

# firewall-cmd --list-services
http https ssh