標籤:

Firewalld詳解

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 -j

ACCEPT

刪除規則:

# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow 10 -p tcp --dport 80 -j

ACCEPT

列出規則:

# 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-icmptypes

icmp-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" service

name="dns" audit limit value="1/h" reject --timeout=300

拒絕所有來自2001:db8::/64子網的主機訪問dns服務,並且每小時只審核記錄1次日誌。

# firewall-cmd --permanent --add-rich-rule=rule family=ipv4 source

address=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-port

to-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
推薦閱讀:

Windows 2008防火牆配置指南

TAG:防火牆 |