Firewalld概述
動態防火牆後臺程序 firewalld 提供了一個 動態管理的防火牆,用以支持網絡 “ zones” ,以分配對一個網絡及其相關鏈接和界面一定程度的信任。它具備對 IP v4 和 IP v6 防火牆設置的支持。它支持以太網橋,並有分離運行時間和永久性配置選擇。它還具備一個通向服務或者應用程序以直接增加防火牆規則的接口。
系統提供了圖像化的配置工具firewall-config、system-config-firewall, 提供命令行客戶端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可以在運行時間內,改變設置而不丟失現行連接。
4基於用戶對網絡中設備和交通所給與的信任程度,防火牆可以用來將網絡分割成不同的區域。
NetworkManager通知firewalld一個接口歸屬某個區域,新加入的接口被分配到默認區域。
網絡區名稱 默認配置
trusted( 信任 ) 可接受所有的網絡連接
home( 家庭 ) 用於家庭網絡,僅接受ssh、mdns、ipp-client、samba-client、或dhcpv6-client服
務連接
internal( 內部 ) 用於內部網絡,僅接受ssh、mdns、ipp-client、samba-client、dhcpv6-client服務
連接
work( 工作 ) 用於工作區,僅接受ssh、ipp-client或dhcpv6-client服務連接
public( 公共 ) 在公共區域內使用,僅接受ssh或dhcpv6-client服務連接,爲firewalld的默認區域
external( 外部 ) 出去的ipv4網絡連接通過此區域僞裝和轉發,僅接受ssh服務連接
dmz( 非軍事區 ) 僅接受ssh服務接連
block( 限制 ) 拒絕所有網絡連接
drop( 丟棄 ) 任何接收的網絡數據包都被丟棄,沒有任何回覆
5管理防火牆
安裝防火牆軟件:
# yum install -y firewalld firewall-config
啓動和禁用防火牆:
# systemctl start firewalld ; systemctl enable firewalld
# systemctl disable firewalld ; systemctl stop firewalld
使用iptables服務:
# yum install -y iptables-services
# systemctl start iptables ; systemctl start ip6tables
# systemctl enable iptables ; systemctl enable ip6tables
推薦使用firewalld服務
6使用命令行接口配置防火牆
查看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)
7列出所有區域的設置:
# firewall-cmd --list-all-zones
設置默認區域:
# firewall-cmd --set-default-zone=dmz
設置網絡地址到指定的區域:
# firewall-cmd --permanent --zone=internal --add-source=172.25.0.0/24
(--permanent參數表示永久生效設置,如果沒有指定--zone參數,那麼會加入默認區域)
刪除指定區域中的網路地址:
# firewall-cmd --permanent --zone=internal --remove-source=172.25.0.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
8列出、添加、刪除端口:
# 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選項)
firewalld的規則被保存在/etc/firewalld目錄下的文件中,你也可以直接編輯這些文件達到
配置防火牆的目的。/usr/lib/firewalld目錄下的內容是不可以被編輯的,但可以用做默認
模板。
9Direct 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
10Rich Rules
通過“ rich language”語法,可以用比直接接口方式更易理解的方法建立複雜防火牆規則。此外,還能永久保留設置。這種語言使用關鍵詞值,是 iptables 工具的抽象表示。這種語言可以用來配置分區,也仍然支持現行的配置方式。
語法結構:
11source
指定源地址,可以是一個ipv4/ipv6的地址或網段,不支持使用主機名。
destination
指定目的地址,用法和source相同。
service
服務名稱是 firewalld 提供的其中一種服務。要獲得被支持的服務的列表,輸入以下命令:
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
12icmp-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
13log
註冊含有內核記錄的新連接請求到規則中,比如系統記錄。你可以定義一個前綴文本,記錄等級可以是 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 , 所有數據
包會被丟棄,並且不會向來源地發送任何信息。
14多語言命令的格式 :
在這個部分,所有命令都必須以 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
15添加規則:
# firewall-cmd --add-rich-rule='rule family="ipv4" source address="172.25.0.10" accept'
允許172.25.0.10主機所有連接。
# 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="172.25.0.0/24"
service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept'
允許來自172.25.0.0/24地址的新 IPv4連接連接TFTP服務,並且每分鐘記錄一次。
# firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
丟棄所有icmp包
www.westos.org
16# firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.25.0.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=172.25.0.0/24 service name=ftp accept'
允許172.25.0.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
17僞裝和端口轉發
18僞裝:
# firewall-cmd --permanent --zone=< ZONE > --add-masquerade
# firewall-cmd --permanent --zone=< ZONE > --add-rich-rule='rule family=ipv4 source
addres=172.25.0.0/24 masquerade'
端口轉發:
# firewall-cmd --permanent --zone=< ZONE > --add-forward-port=
port=80:proto=tcp:toport=8080:toaddr=172.25.0.10
# firewall-cmd --permanent --zone=< ZONE > --add-rich-rule='rule family=ipv4 source
address=172.25.0.0/24 forward-port port=80 protocol=tcp to-port=8080'
1.添加信任地址
[root@localhost ~]#firewall-cmd --permanent --add-source=172.25.254.250 --zone=trusted ##只有172.25.254.250可以訪問
[root@localhost ~]#firewall-cmd --permanent --remove-source=172.25.254.250 --zone=trusted
2.訪問http權限
[root@localhost ~]#firewall-cmd --add-port=80/tcp --zone=public ##所有人可以通過80端口訪問http
[root@localhost ~]#firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 80 -s 172.25.254.250 -j REJECT ##拒絕某個人,允許其他人
3.端口僞裝
[root@localhost ~]# firewall-cmd --zone=public --add-masquerade
[root@localhost ~]# firewall-cmd --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.43 ##當有人通過ssh連接本機時通過22端口轉到43
[root@localhost ~]#firewall-cmd --zone=public --add-rich-rule='rule famliy=ipv4 source address=172.25.254.100 masqquerade' ##可發揮服務端的路由功能