firewall概述
動態防火牆後台程序 firewalld 提供了一個 動態管理的防火牆,用以支持網路 「 zones」 ,以分配對一個網路及其相關鏈接和界面一定程度的信任。它具備對 IP v4 和 IP v6 防火牆
設置的支持。它支持乙太網橋,並有分離運行時間和永久性配置選擇。它還具備一個通向服務或者應用程序以直接增加防火牆規則的介面。系統提供了圖像化的配置工具firewall-config(rhel7)、system-config-firewall(rhel6), 提供命令行客戶端firewall-cmd, 用於配置 firewalld永久性或非永久性運行時間的改變:它依次用 iptables
工具與執行數據包篩選的內核中的 Netfilter通信。
firewalld和iptables service 之間最本質的不同是:? iptables service 在 /etc/sysconfig/iptables 中儲存配置,而 firewalld將配置儲存在/usr/lib/firewalld/ 和 /etc/firewalld/ 中的各種XML文件里.? 使用 iptables service每一個單獨更改意味著清除所有舊有的規則和從/etc/sysconfig/iptables里讀取所有新的規則,然而使用 firewalld卻不會再創建任何新的規則;僅僅運行規則中的不同之處。因此,firewalld可以在運行時間內,改變設置而不丟失現行連接。 基於用戶對網路中設備和交通所給與的信任程度,防火牆可以用來將網路分割成不同的區域。
NetworkManager通知firewalld一個介面歸屬某個區域,新加入的介面被分配到默認區域。
管理防火牆
安裝防火牆軟體:# yum install -y firewalld firewall-config啟動和禁用防火牆:
# systemctl start firewalld ; systemctl enable firewalld
# systemctl disable firewalld ; systemctl stop firewalld使用iptables服務(rhel7中需要自己安裝iptables):# yum install -y iptables-services# systemctl start iptables ; systemctl start iptables# systemctl enable iptables ; systemctl enable iptables推薦使用firewalld服務
使用命令行介面配置防火牆
查看firewalld的狀態:
# firewall-cmd --state
查看當前活動的區域,並附帶一個目前分配給它們的介面列表:# firewall-cmd --get-active-zones查看默認區域:# firewall-cmd --get-default-zone查看所有可用區域:# firewall-cmd --get-zones列出指定域的所有設置:# firewall-cmd --zone=public --list-all列出所有預設服務:
# firewall-cmd --get-services
(這樣將列出 /usr/lib/firewalld/services/ 中的伺服器名稱。注意:配置文件是以服務本身命名的service-name. xml)列出所有區域的設置:# firewall-cmd --list-all-zones設置默認區域:# firewall-cmd --set-default-zone=dmz設置網路地址到指定的區域:# firewall-cmd --permanent --zone=internal --add-source=192.168.122.0/24(--permanent參數表示永久生效設置,如果沒有指定--zone參數,那麼會加入默認區域)刪除指定區域中的網路地址:
# firewall-cmd --permanent --zone=internal --remove-source=192.168.122.0/24
添加、改變、刪除網路介面:# firewall-cmd --permanent --zone=internal --add-interface=eth0# firewall-cmd --permanent --zone=internal --change-interface=eth0# firewall-cmd --permanent --zone=internal --remove-interface=eth0添加、刪除服務:# firewall-cmd --permanent --zone=public --add-service=smtp# firewall-cmd --permanent --zone=public --remove-service=smtp列出、添加、刪除埠:# firewall-cmd --zone=public --list-ports
# firewall-cmd --permanent --zone=public --add-port=8080/tcp
# firewall-cmd --permanent --zone=public --remove-port=8080/tcp重載防火牆:# firewall-cmd --reload(注意:這並不會中斷已經建立的連接,如果打算中斷,可以使用 --complete-reload選項)
Direct Rules通過 firewall-cmd 工具,可以使用 --direct 選項在運行時間裡增加或者移除鏈。如果不熟悉 iptables ,使用直接介面非常危險,因為您可能無意間導致防火牆被入侵。直接埠模式適用於服務或者程序,以便在運行時間內增加特定的防火牆規則。
直接埠模式添加的規則優先應用。
添加規則:# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 0 -p tcp --dport 80 -jACCEPT刪除規則:# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 10 -p tcp --dport 80 -jACCEPT列出規則:# firewall-cmd --direct --get-all-rules
Rich Rules通過「 rich language」語法,可以用比直接介面方式更易理解的方法建立複雜防火牆規則。此外,還能永久保留設置。這種語言使用關鍵詞值,是 iptables 工具的抽象表示。這種語言可以用來配置分區,也仍然支持現行的配置方式。語法結構:
source指定源地址,可以是一個ipv4/ipv6的地址或網段,不支持使用主機名。
destination指定目的地址,用法和source相同。
service服務名稱是 f irewalld 提供的其中一種服務。要獲得被支持的服務的列表,輸入以下命令:firewall-cmd --get-services 。命令為以下形式:service name=service_name
port埠既可以是一個獨立埠數字,又或者埠範圍,例如,5060-5062。協議可以指定為 tcp 或udp 。命令為以下形式:port port=number_or_range protocol=protocol
protocol協議值可以是一個協議 ID 數字,或者一個協議名。預知可用協議,請查閱 /etc/protocols。命令為以下形式:protocol value=protocol_name_or_ID
icmp-block用這個命令阻絕一個或多個ICMP類型。IC MP 類型是 firewalld支持的ICMP類型之一。要獲得被支持的ICMP類型列表,輸入以下命令: firewall-cmd --get-icmptypesicmp-block在內部使用 reject 動作,因此不允許指定動作。命令為以下形式:icmp-block name=icmptype_name
masquerade打開規則里的 IP 偽裝。用源地址而不是目的地址來把偽裝限制在這個區域內。不允許指定動作。
forward-port從一個帶有指定為 tcp 或 udp 協議的本地埠轉發數據包到另一個本地埠,或另一台機器,或另一台機器上的另一個埠。port 和 to-port 可以是一個單獨的埠數字,或一個埠範圍。而目的地址是一個簡單的 IP 地址。不允許指定動作,命令使用內部動作accept 。命令為以下形式:forward-port port=number_or_range protocol=protocol /to-port=number_or_range to-addr=address
log註冊含有內核記錄的新連接請求到規則中,比如系統記錄。你可以定義一個前綴文本,記錄等級可以是 emerg、alert、crit、error、warning、notice、info 或者 debug 中的一個。命令形式:log [prefix=prefix text] [level=log level] limit value=rate/duration(等級用正的自然數 [1, ..] 表達,持續時間的單位為 s 、 m 、 h 、 d 。 s 表示秒, m 表示分鐘, h表示小時, d 表示天。最大限定值是 1/d ,意為每天最多有一條日誌進入。)
audit審核為發送到 aud i td 服務的審核記錄來註冊提供了另一種方法。審核類型可以是ACCEPT、REJECT或DROP中的一種,但不能在 audit命令後指定,因為審核類型將會從規則動作中自動收集。審核不包含自身參數,但可以選擇性地增加限制。審核的使用是可選擇的。選擇 accept 所有新的連接請求都會被允許。選擇 reject ,連接將被拒絕,連接來源將接到一個拒絕信息。拒絕的類型可以被設定為使用另一種值。選擇 drop , 所有數據包會被丟棄,並且不會向來源地發送任何信息。
多語言命令的格式:在這個部分,所有命令都必須以 root 用戶身份運行。增加一項規則的命令格式如下:firewall-cmd [--zone=zone] --add -rich-rule=rule [--timeout=seconds]這樣將為 zone 分區增加一項多語言規則 rule 。這個選項可以多次指定。如果分區被省略,將使用默認分區。如果出現超時,規則將在指定的秒數內被激活,並在之後被自動移除移除一項規則:firewall-cmd [--zone=zone] --remove-rich-rule=rule檢查一項規則是否存在:firewall-cmd [--zone=zone] --query-rich-rule=rule這將複查是否已經為區域增加一個多語言規則 。如果可用,屏幕會顯示 yes,退出狀態為0; 否則,屏幕顯示 no ,退出狀態為 1。如果省略 zone,默認區域將被使用。列出所有多語言規則:firewall-cmd --list-rich-rules
添加規則:# firewall-cmd --add-rich-rule=rule family="ipv4" source address="192.168.122.0" accept允許192.168.122.0/24主機所有連接。# firewall-cmd --add-rich-rule=rule service name=ftp limit value=2/m accept每分鐘允許2個新連接訪問ftp服務。# firewall-cmd --add-rich-rule=rule service name=ftp log limit value="1/m" audit accept同意新的 IP v4 和 IP v6 連接 FT P ,並使用審核每分鐘登錄一次。# firewall-cmd --add-rich-rule=rule family="ipv4" source address="192.168.122.0/24"service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept允許來自192.168.122.0/24地址的新 IPv4連接連接TFTP服務,並且每分鐘記錄一次。# firewall-cmd --permanent --add-rich-rule=rule protocol value=icmp drop丟棄所有icmp包# firewall-cmd --add-rich-rule=rule family=ipv4 source address=192.168.122.0/24 reject --timeout=10當使用source和destination指定地址時,必須有family參數指定ipv4或ipv6。如果指定超時,規則將在指定的秒數內被激活,並在之後被自動移除。# firewall-cmd --add-rich-rule=rule family=ipv6 source address="2001:db8::/64" servicename="dns" audit limit value="1/h" reject --timeout=300拒絕所有來自2001:db8::/64子網的主機訪問dns服務,並且每小時只審核記錄1次日誌。# firewall-cmd --permanent --add-rich-rule=rule family=ipv4 sourceaddress=192.168.122.0/24 service name=ftp accept允許192.168.122.0/24網段中的主機訪問ftp服務# firewall-cmd --add-rich-rule=rule family="ipv6" source address="1:2:3:4:6::" forward-portto-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"轉發來自ipv6地址1:2:3:4:6::TCP埠4011,到1:2:3:4:7的TCP埠4012
推薦閱讀: