1. 程式人生 > >firewalld動態防火墻管理-centos7.5技能

firewalld動態防火墻管理-centos7.5技能

網絡數 下使用 fault 修改文件 自己 mil accep cti fire

firewalld動態防火墻管理
前言:防火墻是 Linux 系統的主要的安全工具,可以提供基本的安全防護,在 Linux 歷史上已經使用過的防火墻工具包括:ipfwadm、ipchains、iptables。在 Firewalld 中新引入了區域(Zones)這個概念。本文介紹一下使用最新版本的 firewalld 構建動態防火墻的方法和使用技巧。

firewalld 簡介
firewalld 提供了支持網絡 / 防火墻區域 (zone) 定義網絡鏈接以及接口安全等級的動態防火墻管理工具。它支持 IPv4, IPv6 防火墻設置以及以太網橋接,並且擁有運行時配置和永久配置選項。它也支持允許服務或者應用程序直接添加防火墻規則的接口。以前的 iptables 防火墻是靜態的,每次修改都要求防火墻完全重啟。這個過程包括內核 netfilter 防火墻模塊的卸載和新配置所需模塊的裝載等。而模塊的卸載將會破壞狀態防火墻和確立的連接。現在 firewalld 可以動態管理防火墻,firewalld 把 Netfilter 的過濾功能於一身見圖 1。

圖 1 內核中的防火墻 firewalld 守護進程
技術分享圖片
firewalld 主要功能
實現動態管理,對於規則的更改不再需要重新創建整個防火墻。
一個簡單的系統托盤區圖標來顯示防火墻狀態,方便開啟和關閉防火墻。
提供 firewall-cmd 命令行界面進行管理及配置工作。
為 libvirt 提供接口及界面,會在必須的 PolicyKit 相關權限完成的情況下實現。
實現 firewall-config 圖形化配置工具。
實現系統全局及用戶進程的防火墻規則配置管理。
區域支持。
firewalld 防火墻堆棧示意圖見圖 2,iptables 服務在 /etc/sysconfig/iptables 中儲存配置,而 firewalld 將配置儲存在 /usr/lib/firewalld/ 和 /etc/firewalld/ 中的各種 XML 文件裏,使用 iptables 的時候每一個單獨更改意味著清除所有舊有的規則和從 /etc/sysconfig/iptables 裏讀取所有新的規則,使用 firewalld 卻不會再創建任何新的規則;僅僅運行規則中的不同。因此 firewalld 可以在運行時改變設置而不丟失現行配置。圖 5 是 firewalld 防火墻堆棧示意圖。
圖 2 firewalld 防火墻堆棧示意圖
技術分享圖片
firewalld 的基本命令行操作
安裝軟件包

yum install firewalld firewall-config

啟動服務

systemctl enable firewalld.service

systemctl start firewalld.service

查看防火墻狀態

systemctl status firewalld

區域管理
網絡區域簡介
通過將網絡劃分成不同的區域(通常情況下稱為 zones),制定出不同區域之間的訪問控制策略來控制不同任程度區域間傳送的數據流。例如互聯網是不可信任的區域,而內部網絡是高度信任的區域。以避免安全策略中禁止的一些通信。它有控制信息基本的任務在不同信任的區域。典型信任的區域包括互聯網 ( 一個沒有信任的區域 ) 和一個內部網絡 ( 一個高信任的區域 )。最終目標是提供受控連通性在不同水平的信任區域通過安全政策的運行和連通性模型之間根據最少特權原則。例如:公共 WIFI 網絡連接應該不信任,而家庭有線網絡連接就應該完全信任。網絡安全模型可以在安裝、初次啟動和首次建立網絡連接時選擇初始化。該模型描述了主機所聯的整個網絡環境的可信級別,並定義了新連接的處理方式。在 /etc/firewalld/ 的區域設定是一系列可以被快速執行到網絡接口的預設定。有幾種不同的初始化區域:

drop(丟棄)
任何接收的網絡數據包都被丟棄,沒有任何回復。僅能有發送出去的網絡連接。
block(限制)
任何接收的網絡連接都被 IPv4 的 icmp-host-prohibited 信息和 IPv6 的 icmp6-adm-prohibited 信息所拒絕。
public(公共)
在公共區域內使用,不能相信網絡內的其他計算機不會對您的計算機造成危害,只能接收經過選取的連接。
external(外部)
特別是為路由器啟用了偽裝功能的外部網。您不能信任來自網絡的其他計算,不能相信它們不會對您的計算機造成危害,只能接收經過選擇的連接。
dmz(非軍事區)
用於您的非軍事區內的電腦,此區域內可公開訪問,可以有限地進入您的內部網絡,僅僅接收經過選擇的連接。
work(工作)
用於工作區。您可以基本相信網絡內的其他電腦不會危害您的電腦。僅僅接收經過選擇的連接。
home(家庭)
用於家庭網絡。您可以基本信任網絡內的其他計算機不會危害您的計算機。僅僅接收經過選擇的連接。
internal(內部)
用於內部網絡。您可以基本上信任網絡內的其他計算機不會威脅您的計算機。僅僅接受經過選擇的連接。
trusted(信任)
可接受所有的網絡連接。
說明:firewalld 的缺省區域是 public。
顯示支持的區域列表

firewall-cmd --get-zones

block drop work internal external home dmz public trusted
設置為家庭區域

firewall-cmd --set-default-zone=home

查看當前的區域
#firewall-cmd --get-active-zones
設置當前的區域的接口
#firewall-cmd --get-zone-of-interface=enp03s
顯示所有公共區域(public)

firewall-cmd --zone=public --list-all

臨時修改網絡接口 enp0s3 為 內部區域(internal)

firewall-cmd --zone=internal --change-interface=enp03s

永久修改網絡接口 enp0s3 為 內部區域(internal)

firewall-cmd --permanent --zone=internal --change-interface=enp03s

服務管理
顯示服務列表
amanda 、ftp 、samba 和 tftp 等最重要的服務已被 Firewalld 提供相應的服務,可以使用命令查看:

firewall-cmd --get-services

cluster-suite pop3s bacula-client smtp ipp radius bacula ftp mdns samba dhcpv6-client https open*** imaps samba-client http dns telnet libvirt ssh ipsec ipp-client amanda-client tftp-client nfs tftp libvirt-tls
允許 ssh 服務通過

firewall-cmd --enable service=ssh

禁止 ssh 服務通過

firewall-cmd --disable service=ssh

臨時允許 samba 服務通過 600 秒

firewall-cmd --enable service=samba --timeout=600

顯示當前服務

firewall-cmd --list-services dhcpv6-client ssh

添加 http 服務到內部區域(internal)

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

firewall-cmd --reload

將一個服務加入到分區
要把一個服務加入到分區,例如允許 SMTP 接入工作區:

firewall-cmd --zone=work --add-service=smtp

firewall-cmd --reload

從一個分區移除服務,要從分區移除服務,比如從工作區移除 SMTP:

firewall-cmd --zone=work --remove-service=smtp

firewall-cmd --reload

端口管理
打開端口
打開 443/tcp 端口在內部區域(internal):

firewall-cmd --zone=internal --add-port=443/tcp

firewall-cmd – reload

端口轉發

firewall-cmd --zone=external --add-masquerade

firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3777

上面的兩個命令的意思是,首先啟用偽裝(masquerade),然後把外部區域(external)的 22 端口轉發到 3777。
直接接口設置 firewalld 有一個被稱為“direct interface”(直接接口),它可以直接通過 iptables、ip6tables 和 ebtables 的規則。它適用於應用程序,而不是用戶。firewalld 保持對所增加項目的追蹤,所以它還能質詢 firewalld 和發現由使用直接端口模式的程序造成的更改。直接端口由增加 --direct 選項到 firewall-cmd 命令來使用。直接端口模式適用於服務或者程序,以便在運行時間內增加特定的防火墻規則。這些規則不是永久性的,它們需要在每次通過 D-BU S 從 firewalld 接到啟動、重新啟動和重新加載信息後運用。例如添加端口 tcp 9999 端口。

firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT

firewall-cmd --reload

給復雜防火墻規則配置富規則(Rich Language)
通過“rich language”語法,可以用比直接接口方式更易理解的方法建立復雜防火墻規則。此外還能永久保留設置。這種語言可以用來配置分區,也仍然支持現行的配置方式。所有命令都必須以 root 用戶身份運行。增加一項規則的命令格式如下:
#firewall-cmd [--zone=zone] --add-rich-rule=‘rule‘ [--timeout 9=seconds]
移除一項規則:
#firewall-cmd [--zone=zone] --remove-rich-rule=‘rule‘
檢查一項規則是否存在:
#firewall-cmd [--zone=zone] --query-rich-rule=‘rule‘
一個具體例子,假設在一個 IP 地址(192.168.0.0)的服務器配置防火墻允許如下服務 http, https, vnc-server, PostgreSQL。
代碼:

firewall-cmd --add-rich-rule ‘rule family="ipv4" source address="192.168.0.0/24" service name="http" accept‘

firewall-cmd --add-rich-rule ‘rule family="ipv4" source address="192.168.0.0/24" service name="http" accept‘ --permanent

firewall-cmd --add-rich-rule ‘rule family="ipv4" source address="192.168.0.0/24" service name="https" accept‘

firewall-cmd --add-rich-rule ‘rule family="ipv4" source address="192.168.0.0/24" service name="https" accept‘ --permanent

firewall-cmd --add-rich-rule ‘rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept‘

firewall-cmd --add-rich-rule ‘rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept‘ --permanent

firewall-cmd --add-rich-rule ‘rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept‘

firewall-cmd --add-rich-rule ‘rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept‘ –permanent

firewall-cmd --reload

在防火墻配置文件中創建自己的服務
首先假設這裏筆者需要建立的服務是 RTMP(RTMP 是 Real Time Messaging Protocol(實時消息傳輸協議)的首字母縮寫。該協議基於 TCP)端口號 1935。在 /etc/firewalld/services/ 目錄中,利用現有的配置文件如 nfs.xml 作為模板。

cd /etc/firewalld/services/

說明:該目錄中存放的是定義好的網絡服務和端口參數,只用於參考,不能修改。這個目錄中只定義了一部分通用網絡服務。在該目錄中沒有定義的網絡服務,也不必再增加相關 xml 定義,後續通過管理命令可以直接增加。

cp /usr/lib/firewalld/services/nfs.xml /etc/firewalld/services/

說明:從上面目錄中將需要使用的服務的 xml 文件拷至這個目錄中,如果端口有變化則可以修改文件中的數值。

cd /etc/firewalld/services/ 下面修改 nfs.xml 為 rtmp.xml

#mv nfs.xml rtmp.xml 下面使用 vi 編輯器修改 rtmp.xml 文件為如下內容
清單 1. rtmp.xml 文件內容

     rtmp services 

RTMP Stream

每一個服務定義都需要一個簡短的名字、描述和端口網絡用於指定需要使用的協議、端口和模塊名。然後把此服務加入防火墻規則中。

firewall-cmd --add-service=rtmp

firewall-cmd --add-service=rtmp –permanent

firewall-cmd --reload

關閉 firewalld 服務

firewalld動態防火墻管理-centos7.5技能