1、firewalld的基本使用
啟動一個服務:systemctl start firewalld.service
關閉一個服務:systemctl stop firewalld.service
重啟一個服務:systemctl restart firewalld.service
顯示一個服務的狀態:systemctl status firewalld.service
在開機時啟用一個服務:systemctl enable firewalld.service
在開機時禁用一個服務:systemctl disable firewalld.service
檢視服務是否開機啟動:systemctl is-enabled firewalld.service
檢視已啟動的服務列表:systemctl list-unit-files|grep enabled
檢視啟動失敗的服務列表:systemctl –failed
3.配置firewalld-cmd
entos 7中防火牆是一個非常的強大的功能了,但對於centos 7中在防火牆中進行了升級了,下面我們一起來詳細的看看關於centos 7中防火牆使用方法。
IPv6 防火牆設定以及乙太網橋接,並且擁有執行時配置和永久配置選項。它也支援允許服務或者應用程式直接新增防火牆規則的介面。 以前的
system-config-firewall/lokkit 防火牆模型是靜態的,每次修改都要求防火牆完全重啟。這個過程包括核心
netfilter 防火牆模組的解除安裝和新配置所需模組的裝載等。而模組的解除安裝將會破壞狀態防火牆和確立的連線。
動態管理防火牆,不需要重啟整個防火牆便可應用更改。因而也就沒有必要過載所有核心防火牆模組了。不過,要使用 firewall daemon
就要求防火牆的所有變更都要通過該守護程式來實現,以確保守護程式中的狀態和核心裡的防火牆是一致的。另外,firewall daemon 無法解析由
ip*tables 和 ebtables 命令列工具新增的防火牆規則。
“守護程式”
應用程式、守護程式和使用者可以通過 D-BUS 請求啟用一個防火牆特性。特性可以是預定義的防火牆功能,如:服務、埠和協議的組合、埠/資料包轉發、偽裝、ICMP 攔截或自定義規則等。該功能可以啟用確定的一段時間也可以再次停用。
防火牆助手也被“守護程式”解決了,只要它們還作為預定義服務的一部分。附加助手的裝載不作為當前介面的一部分。由於一些助手只有在由模組控制的所有連線都關閉後才可裝載。因而,跟蹤連線資訊很重要,需要列入考慮範圍。
靜態防火牆(system-config-firewall/lokkit)
使用 system-config-firewall 和 lokkit 的靜態防火牆模型實際上仍然可用並將繼續提供,但卻不能與“守護程式”同時使用。使用者或者管理員可以決定使用哪一種方案。
使用iptables和ip6tables的靜態防火牆規則
如果你想使用自己的 iptables 和 ip6tables 靜態防火牆規則, 那麼請安裝 iptables-services 並且禁用 firewalld ,啟用 iptables 和ip6tables:
yum install iptables-services systemctl mask firewalld.service systemctl enable iptables.service systemctl enable ip6tables.service
systemctl stop firewalld.service systemctl start iptables.service systemctl start ip6tables.service
什麼是區域?
網路區域定義了網路連線的可信等級。這是一個一對多的關係,這意味著一次連線可以僅僅是一個區域的一部分,而一個區域可以用於很多連線。
預定義的服務
服務是埠和/或協議入口的組合。備選內容包括 netfilter 助手模組以及 IPv4、IPv6地址。
埠和協議
定義了 tcp 或 udp 埠,埠可以是一個埠或者埠範圍。
ICMP阻塞
可以選擇 Internet 控制報文協議的報文。這些報文可以是資訊請求亦可是對資訊請求或錯誤條件建立的響應。
私有網路地址可以被對映到公開的IP地址。這是一次正規的地址轉換。
埠轉發
埠可以對映到另一個埠以及/或者其他主機。
哪個區域可用?
由firewalld 提供的區域按照從不信任到信任的順序排序。
丟棄
任何流入網路的包都被丟棄,不作出任何響應。只允許流出的網路連線。
阻塞
任何進入的網路連線都被拒絕,並返回 IPv4 的 icmp-host-prohibited 報文或者 IPv6 的 icmp6-adm-prohibited 報文。只允許由該系統初始化的網路連線。
公開
用以可以公開的部分。你認為網路中其他的計算機不可信並且可能傷害你的計算機。只允許選中的連線接入。(You do not trust the
other computers on networks to not harm your computer. Onlyselected incoming
connections are accepted.)
外部
用在路由器等啟用偽裝的外部網路。你認為網路中其他的計算機不可信並且可能傷害你的計算機。只允許選中的連線接入。
隔離區(dmz)
用以允許隔離區(dmz)中的電腦有限地被外界網路訪問。只接受被選中的連線。
工作
用在工作網路。你信任網路中的大多數計算機不會影響你的計算機。只接受被選中的連線。
家庭
用在家庭網路。你信任網路中的大多數計算機不會影響你的計算機。只接受被選中的連線。
內部
用在內部網路。你信任網路中的大多數計算機不會影響你的計算機。只接受被選中的連線。
受信任的
允許所有網路連線。
我應該選用哪個區域?
例如,公共的 WIFI 連線應該主要為不受信任的,家庭的有線網路應該是相當可信任的。根據與你使用的網路最符合的區域進行選擇。
如何配置或者增加區域?
你可以使用任何一種 firewalld 配置工具來配置或者增加區域,以及修改配置。工具有例如 firewall-config
這樣的圖形介面工具, firewall-cmd 這樣的命令列工具,以及D-BUS介面。或者你也可以在配置檔案目錄中建立或者拷貝區域檔案。
@PREFIX@/lib/firewalld/zones 被用於預設和備用配置,/etc/firewalld/zones
被用於使用者建立和自定義配置檔案。
如何為網路連線設定或者修改區域
區域設定以 ZONE= 選項 儲存在網路連線的ifcfg檔案中。如果這個選項缺失或者為空,firewalld 將使用配置的預設區域。
由NetworkManager控制的網路連線
防火牆不能夠通過 NetworkManager 顯示的名稱來配置網路連線,只能配置網路介面。因此在網路連線之前
NetworkManager 將配置檔案所述連線對應的網路介面告訴 firewalld 。如果在配置檔案中沒有配置區域,介面將配置到
firewalld 的預設區域。如果網路連線使用了不止一個介面,所有的介面都會應用到 fiwewalld。介面名稱的改變也將由
NetworkManager 控制並應用到firewalld。
由指令碼控制的網路
對於由網路指令碼控制的連線有一條限制:沒有守護程式通知 firewalld 將連線增加到區域。這項工作僅在 ifcfg-post
指令碼進行。因此,此後對網路連線的重新命名將不能被應用到firewalld。同樣,在連線活動時重啟 firewalld
將導致與其失去關聯。現在有意修復此情況。最簡單的是將全部未配置連線加入預設區域。
使用firewalld
你可以通過圖形介面工具 firewall-config 或者命令列客戶端 firewall-cmd 啟用或者關閉防火牆特性。
使用firewall-cmd
命令列工具 firewall-cmd 支援全部防火牆特性。對於狀態和查詢模式,命令只返回狀態,沒有其他輸出。
一般應用
獲取 firewalld 狀態
firewall-cmd --state
firewall-cmd --state && echo "Running" || echo "Not running"
# rpm -qf $( which firewall-cmd ) firewalld-0.3.3-2.fc19.noarch# firewall-cmd --state not running
firewall-cmd --reload
firewall-cmd --get-zones
firewall-cmd --get-services
firewall-cmd --get-icmptypes
firewall-cmd --list-all-zones
<zone> interfaces: <interface1> .. services: <service1> .. ports: <port1> .. forward-ports: <forward port1> .. icmp-blocks: <icmp type1> ....
firewall-cmd [--zone=<zone>] --list-all
firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=<zone>
firewall-cmd --get-active-zones
<zone1>: <interface1> <interface2> ..<zone2>: <interface3> ..
firewall-cmd --get-zone-of-interface=<interface>
firewall-cmd [--zone=<zone>] --add-interface=<interface>
firewall-cmd [--zone=<zone>] --change-interface=<interface>
firewall-cmd [--zone=<zone>] --remove-interface=<interface>
firewall-cmd [--zone=<zone>] --query-interface=<interface>
firewall-cmd [ --zone=<zone> ] --list-services
firewall-cmd --panic-on
firewall-cmd --panic-off
程式碼如下 | 複製程式碼 |
應急模式在 0.3.0 版本中發生了變化 在 0.3.0 之前的 FirewallD版本中, panic 選項是 –enable-panic 與 –disable-panic. |
firewall-cmd --query-panic
firewall-cmd --query-panic && echo "On" || echo "Off"
處理執行時區域
執行時模式下對區域進行的修改不是永久有效的。重新載入或者重啟後修改將失效。
firewall-cmd [--zone=<zone>] --add-service=<service> [--timeout=<seconds>]
firewall-cmd --zone=home --add-service=ipp-client --timeout=60
firewall-cmd --add-service=http
firewall-cmd [--zone=<zone>] --remove-service=<service>
firewall-cmd --zone=home --remove-service=http
firewall-cmd [--zone=<zone>] --query-service=<service>
firewall-cmd [--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]
firewall-cmd [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
firewall-cmd [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
firewall-cmd [--zone=<zone>] --add-masquerade
firewall-cmd [--zone=<zone>] --remove-masquerade
firewall-cmd [--zone=<zone>] --query-masquerade
firewall-cmd [--zone=<zone>] --add-icmp-block=<icmptype>
firewall-cmd [--zone=<zone>] --remove-icmp-block=<icmptype>
firewall-cmd [--zone=<zone>] --query-icmp-block=<icmptype>
firewall-cmd --zone=public --add-icmp-block=echo-reply
firewall-cmd [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
firewall-cmd [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
firewall-cmd [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
firewall-cmd --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2
處理永久區域
永久選項不直接影響執行時的狀態。這些選項僅在過載或者重啟服務時可用。為了使用執行時和永久設定,需要分別設定兩者。 選項 –permanent 需要是永久設定的第一個引數。
firewall-cmd --permanent --get-services
firewall-cmd --permanent --get-icmptypes
firewall-cmd --permanent --get-zones
firewall-cmd --permanent [--zone=<zone>] --add-service=<service>
firewall-cmd --permanent [--zone=<zone>] --remove-service=<service>
firewall-cmd --permanent [--zone=<zone>] --query-service=<service>
firewall-cmd --permanent --zone=home --add-service=ipp-client
firewall-cmd --permanent [--zone=<zone>] --add-port=<port>[-<port>]/<protocol>
firewall-cmd --permanent [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
firewall-cmd --permanent [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
firewall-cmd --permanent --zone=home --add-port=443/tcp
firewall-cmd --permanent [--zone=<zone>] --add-masquerade
firewall-cmd --permanent [--zone=<zone>] --remove-masquerade
firewall-cmd --permanent [--zone=<zone>] --query-masquerade
firewall-cmd --permanent [--zone=<zone>] --add-icmp-block=<icmptype>
firewall-cmd --permanent [--zone=<zone>] --remove-icmp-block=<icmptype>
firewall-cmd --permanent [--zone=<zone>] --query-icmp-block=<icmptype>
firewall-cmd --permanent --zone=public --add-icmp-block=echo-reply
firewall-cmd --permanent [--zone=<zone>] --add-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
firewall-cmd --permanent [--zone=<zone>] --remove-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
firewall-cmd --permanent [--zone=<zone>] --query-forward-port=port=<port>[-<port>]:proto=<protocol> { :toport=<port>[-<port>] | :toaddr=<address> | :toport=<port>[-<port>]:toaddr=<address> }
firewall-cmd --permanent --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2
直接選項
直接選項主要用於使服務和應用程式能夠增加規則。 規則不會被儲存,在重新載入或者重啟之後必須再次提交。傳遞的引數 <args> 與 iptables, ip6tables 以及 ebtables 一致。
firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb } <args>
firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb } <table> <chain>
firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb } <table> <chain>
firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb } <table> <chain>
firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb } <table>
firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <args>
firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb } <table> <chain> <args>
firewall-cmd --direct --get-rules { ipv4 | ipv6 | eb } <table> <chain>
當前的firewalld特性
D-BUS介面
D-BUS 介面提供防火牆狀態的資訊,使防火牆的啟用、停用或查詢設定成為可能。
區域
網路或者防火牆區域定義了連線的可信程度。firewalld 提供了幾種預定義的區域。區域配置選項和通用配置資訊可以在firewall.zone(5)的手冊裡查到。
服務
服務可以是一系列本讀埠、目的以及附加資訊,也可以是服務啟動時自動增加的防火牆助手模組。預定義服務的使用使啟用和禁用對服務的訪問變得更加簡單。服務配置選項和通用檔案資訊在 firewalld.service(5) 手冊裡有描述。
ICMP型別
Internet控制報文協議 (ICMP) 被用以交換報文和網際網路協議 (IP) 的錯誤報文。在 firewalld 中可以使用 ICMP 型別來限制報文交換。 ICMP 型別配置選項和通用檔案資訊可以參閱 firewalld.icmptype(5) 手冊。
直接介面
直接介面主要用於服務或者應用程式增加特定的防火牆規則。這些規則並非永久有效,並且在收到 firewalld 通過 D-Bus 傳遞的啟動、重啟、過載訊號後需要重新應用。
執行時配置
執行時配置並非永久有效,在重新載入時可以被恢復,而系統或者服務重啟、停止時,這些選項將會丟失。
永久配置
永久配置儲存在配置檔案種,每次機器重啟或者服務重啟、重新載入時將自動恢復。
托盤小程式
托盤小程式 firewall-applet 為使用者顯示防火牆狀態和存在的問題。它也可以用來配置使用者允許修改的設定。
圖形化配置工具
firewall daemon 主要的配置工具是 firewall-config 。它支援防火牆的所有特性(除了由服務/應用程式增加規則使用的直接介面)。 管理員也可以用它來改變系統或使用者策略。
命令列客戶端
firewall-cmd是命令列下提供大部分圖形工具配置特性的工具。
對於ebtables的支援
要滿足libvirt daemon的全部需求,在核心 netfilter 級上防止 ip*tables 和 ebtables 間訪問問題,ebtables 支援是需要的。由於這些命令是訪問相同結構的,因而不能同時使用。
/usr/lib/firewalld中的預設/備用配置
該目錄包含了由 firewalld 提供的預設以及備用的 ICMP 型別、服務、區域配置。由 firewalld 軟體包提供的這些檔案不能被修改,即使修改也會隨著 firewalld 軟體包的更新被重置。 其他的 ICMP 型別、服務、區域配置可以通過軟體包或者建立檔案的方式提供。
儲存在此的系統或者使用者配置檔案可以是系統管理員通過配置介面定製的,也可以是手動定製的。這些檔案將過載預設配置檔案。
正在開發的特性
富語言
富語言特性提供了一種不需要了解iptables語法的通過高階語言配置複雜 IPv4 和 IPv6 防火牆規則的機制。
鎖定
鎖定特性為 firewalld 增加了鎖定本地應用或者服務配置的簡單配置方式。它是一種輕量級的應用程式策略。
永久直接規則
這項特性處於早期狀態。它將能夠提供儲存直接規則和直接鏈的功能。通過規則不屬於該特性。更多關於直接規則的資訊請參閱Direct options。
這項特性處於早期狀態。它將盡可能提供由iptables,ip6tables 和 ebtables 服務配置轉換為永久直接規則的指令碼。此特性在由firewalld提供的直接鏈整合方面可能存在侷限性。
計劃和提議功能
防火牆抽象模型
在 ip*tables 和 ebtables
防火牆規則之上新增抽象層使新增規則更簡單和直觀。要抽象層功能強大,但同時又不能複雜,並不是一項簡單的任務。為此,不得不開發一種防火牆語言。使防火牆規則擁有固定的位置,可以查詢埠的訪問狀態、訪問策略等普通訊息和一些其他可能的防火牆特性。
對於conntrack的支援
要終止禁用特性已確立的連線需要 conntrack 。不過,一些情況下終止連線可能是不好的,如:為建立有限時間內的連續性外部連線而啟用的防火牆服務。
使用者互動模型
這是防火牆中使用者或者管理員可以啟用的一種特殊模式。應用程式所有要更改防火牆的請求將定向給使用者知曉,以便確認和否認。為一個連線的授權設定一個時間限制並限制其所連主機、網路或連線是可行的。配置可以儲存以便將來不需通知便可應用相同行為。
該模式的另一個特性是管理和應用程式發起的請求具有相同功能的預選服務和埠的外部連結嘗試。服務和埠的限制也會限制傳送給使用者的請求數量。
使用者策略支援
管理員可以規定哪些使用者可以使用使用者互動模式和限制防火牆可用特性。
埠後設資料資訊(由 Lennart Poettering 提議)
擁有一個埠獨立的後設資料資訊是很好的。當前對 /etc/services 的埠和協議靜態分配模型不是個好的解決方案,也沒有反映當前使用情況。應用程式或服務的埠是動態的,因而埠本身並不能描述使用情況。
- 允許外部訪問檔案共享應用程式或服務
- 允許外部訪問音樂共享應用程式或服務
- 允許外部訪問全部共享應用程式或服務
- 允許外部訪問 torrent 檔案共享應用程式或服務
- 允許外部訪問 http 網路服務
第一種是新增到 netfilter (核心空間)。好處是每個人都可以使用它,但也有一定使用限制。還要考慮使用者或系統空間的具體資訊,所有這些都需要在核心層面實現。
第二種是新增到 firewall daemon 中。這些抽象的規則可以和具體資訊(如:網路連線可信級、作為具體個人/主機要分享的使用者描述、管理員禁止完全共享的應歸則等)一起使用。
第二種解決方案的好處是不需要為有新的後設資料組和納入改變(可信級、使用者偏好或管理員規則等等)重新編譯核心。這些抽象規則的新增使得 firewall daemon 更加自由。即使是新的安全級也不需要更新核心即可輕鬆新增。
現在仍有 sysctl 設定沒有正確應用。一個例子是,在 rc.sysinit 正執行時,而提供設定的模組在啟動時沒有裝載或者重新裝載該模組時會發生問題。
和使用者/管理員更改都需要它。如果有兩個應用程式或守護程式只在需要時開啟 ip_forwarding
,之後可能其中一個在不知道的情況下關掉服務,而另一個正需要它,此時就不得不重啟它。
防火牆規則
netfilter
防火牆總是容易受到規則順序的影響,因為一條規則在鏈中沒有固定的位置。在一條規則之前新增或者刪除規則都會改變此規則的位置。
在靜態防火牆模型中,改變防火牆就是重建一個乾淨和完善的防火牆設定,且受限於 system-config-firewall / lokkit
直接支援的功能。也沒有整合其他應用程式建立防火牆規則,且如果自定義規則檔案功能沒在使用 s-c-fw / lokkit
就不知道它們。預設鏈通常也沒有安全的方式新增或刪除規則而不影響其他規則。
*filter :INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]:FORWARD_ZONES - [0:0]:FORWARD_direct - [0:0]:INPUT_ZONES - [0:0]:INPUT_direct - [0:0]:IN_ZONE_public - [0:0]:IN_ZONE_public_allow - [0:0]:IN_ZONE_public_deny - [0:0]:OUTPUT_direct - [0:0]-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j INPUT_direct -A INPUT -j INPUT_ZONES -A INPUT -p icmp -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -i lo -j ACCEPT -A FORWARD -j FORWARD_direct -A FORWARD -j FORWARD_ZONES -A FORWARD -p icmp -j ACCEPT -A FORWARD -j REJECT --reject-with icmp-host-prohibited -A OUTPUT -j OUTPUT_direct -A IN_ZONE_public -j IN_ZONE_public_deny -A IN_ZONE_public -j IN_ZONE_public_allow -A IN_ZONE_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT -A IN_ZONE_public_allow -d 224.0.0.251/32 -p udp -m udp --dport 5353 -m conntrack --ctstate NEW -j ACCEPT -A IN_ZONE_public_allow -p udp -m udp --dport 631 -m conntrack --ctstate NEW -j ACCEPT