前言
最近工作關係開始玩 CentOS 了,本次實作環境中採用的是 CentOS 7.4 (1709) Kernel 3.10.0-693.el7.x86_64) 映像檔,也就是新版 CentOS 7.4 最小化安裝版本 (Minimal Install),那麼開始來玩玩吧。💪實作環境
- Windows Server 2016 Hyper-V
- CentOS 7.4 (1709) Kernel 3.10.0-693.el7.x86_64
- firewalld-0.4.4.4-6.el7.noarch
Firewalld 防火牆
在過去 CentOS 5 / 6 版本中預設採用的防火牆為 IPTables,而新版 CentOS 7 版本中預設採用的防火牆則是 Firewalld。雖然 IPTables / Firewalld 這兩者都是使用 iptables tools 來與 Kernel Packet Filter 進行溝通,但是在實際運作上仍然有差異。首先,在防火牆組態設定的部分,過去 IPTables 防火牆會將組態設定儲存於「/etc/sysconfig/iptables、/etc/sysconfig/ip6tables」檔案中,而新一代 Firewalld 則是將防火牆組態設定儲存於「/usr/lib/firewalld、/etc/firewalld」的 XML 檔案內。其次,在防火牆規則套用生效的部分,傳統的 IPTables 防火牆運作環境中,每當調整防火牆規則時 IPTables 防火牆將會重新讀取所有防火牆規則並重新建立及套用 (套用生效的過程中,原有連線將會中斷)。
新一代 Firewalld 防火牆則不會重建所有防火牆規則 (僅套用差異的防火牆規則部分),因此在套用新的防火牆規則時 Firewalld 不會中斷現有已經允許且連線中相關的防火牆規則連線。
圖、IPTables 及 Firewalld 防火牆堆疊運作架構示意圖
圖、Firewalld 防火牆運作架構示意圖
調整 Firewalld 防火牆規則
預設情況下,Firewalld 防火牆有多個不同的「區域」(Zone)並內含許多預設的防火牆規則,以便因應企業及組織不同的運作環境需求。你可以查看「/usr/lib/firewalld/zones」路徑內容,即可發現 Firewalld 防火牆預設有「Drop、Block、Public、External、DMZ、Work、Home、Internal、Tursted」等區域,詳細資訊請參考 RHEL 7 Document - Security Guide - Using FIrewalls 文件內容。# ls -l /usr/lib/firewalld/zones/
total 36
-rw-r--r--. 1 root root 299 Nov 12 2016 block.xml
-rw-r--r--. 1 root root 293 Nov 12 2016 dmz.xml
-rw-r--r--. 1 root root 291 Nov 12 2016 drop.xml
-rw-r--r--. 1 root root 304 Nov 12 2016 external.xml
-rw-r--r--. 1 root root 369 Nov 12 2016 home.xml
-rw-r--r--. 1 root root 384 Nov 12 2016 internal.xml
-rw-r--r--. 1 root root 315 Nov 12 2016 public.xml
-rw-r--r--. 1 root root 162 Nov 12 2016 trusted.xml
-rw-r--r--. 1 root root 311 Nov 12 2016 work.xml
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
倘若,管理人員需要調整 Firewalld 防火牆規則允許其它公用服務通過,例如,http、https。那麼只要在「/etc/firewalld/zones/public.xml」XML 組態設定檔內容中,加入「<service name="http"/> 及 <service name="https"/>」後,接著使用「firewall-cmd --reload」指令即可載入新的防火牆規則並套用生效。
# grep -E "http|https" /etc/firewalld/zones/public.xml
<service name="http"/>
<service name="https"/>
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: http https ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
# 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
# firewall-cmd --info-service=ssh
ssh
ports: 22/tcp
protocols:
source-ports:
modules:
destination:
# grep 8080 /etc/firewalld/zones/public.xml
<port protocol="tcp" port="8080"/>
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: http https ssh
ports: 8080/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
CentOS 7.4 基礎設定系列文章:
- CentOS 7.4 基礎設定 (1) - 安裝整合服務並建立一般使用者帳號
- CentOS 7.4 基礎設定 (2) - 組態設定網路功能
- CentOS 7.4 基礎設定 (3) - 簡述 SELinux 安全性增強機制
- CentOS 7.4 基礎設定 (4) - 組態設定 VIM 及 Bash Shell 操作環境
- CentOS 7.4 基礎設定 (5) - 設定 sudo 管理員帳號管理機制
- CentOS 7.4 基礎設定 (6) - 禁止 Root 帳號本機及 SSH 遠端登入
- CentOS 7.4 基礎設定 (7) - 簡述 YUM 套件管理工具
- CentOS 7.4 基礎設定 (8) - 擴充 YUM 套件數量
- CentOS 7.4 基礎設定 (9) - 簡述 Systemd 啟動模式等級
- (本文) CentOS 7.4 基礎設定 (10) - 調整 Firewalld 防火牆規則
- CentOS 7.4 基礎設定 (11) - 定期寄送 CentOS 主機系統資訊 Log
- CentOS 7.4 基礎設定 (12) - 關閉不必要的系統服務
- CentOS 7.4 基礎設定 (13) - 採用 I/O Scheduler Noop 加速 Disk I/O
- CentOS 7.4 基礎設定 (14) - 完成 CentOS Base VM 的製作
- CentOS 7.4 基礎設定 (15) - 範本 CentOS 重新產生 Product_UUID