linux 7 防火牆操作

来源:https://www.cnblogs.com/wx90/archive/2018/07/24/9359131.html
-Advertisement-
Play Games

1、firewalld的基本使用 啟動: systemctl start firewalld 查看狀態: systemctl status firewalld 停止: systemctl disable firewalld 禁用: systemctl stop firewalld 2.systemc ...


1、firewalld的基本使用

啟動: systemctl start firewalld 查看狀態: systemctl status firewalld  停止: systemctl disable firewalld 禁用: systemctl stop firewalld   2.systemctl是CentOS7的服務管理工具中主要的工具,它融合之前service和chkconfig的功能於一體。

啟動一個服務: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

查看版本: firewall-cmd --version 查看幫助: firewall-cmd --help 顯示狀態: firewall-cmd --state 查看所有打開的埠: firewall-cmd --zone=public --list-ports 更新防火牆規則: firewall-cmd --reload 查看區域信息:  firewall-cmd --get-active-zones 查看指定介面所屬區域: firewall-cmd --get-zone-of-interface=eth0 拒絕所有包:firewall-cmd --panic-on 取消拒絕狀態: firewall-cmd --panic-off 查看是否拒絕: firewall-cmd --query-panic   那怎麼開啟一個埠呢 添加 firewall-cmd --zone=public --add-port=80/tcp --permanent    (--permanent永久生效,沒有此參數重啟後失效) 重新載入 firewall-cmd --reload 查看 firewall-cmd --zone= public --query-port=80/tcp 刪除 firewall-cmd --zone= public --remove-port=80/tcp --permanent   詳解:

entos 7中防火牆是一個非常的強大的功能了,但對於centos 7中在防火牆中進行了升級了,下麵我們一起來詳細的看看關於centos 7中防火牆使用方法。

FirewallD 提供了支持網路/防火牆區域(zone)定義網路鏈接以及介面安全等級的動態防火牆管理工具。它支持 IPv4, IPv6 防火牆設置以及乙太網橋接,並且擁有運行時配置和永久配置選項。它也支持允許服務或者應用程式直接添加防火牆規則的介面。 以前的 system-config-firewall/lokkit 防火牆模型是靜態的,每次修改都要求防火牆完全重啟。這個過程包括內核 netfilter 防火牆模塊的卸載和新配置所需模塊的裝載等。而模塊的卸載將會破壞狀態防火牆和確立的連接。 相反,firewall daemon 動態管理防火牆,不需要重啟整個防火牆便可應用更改。因而也就沒有必要重載所有內核防火牆模塊了。不過,要使用 firewall daemon 就要求防火牆的所有變更都要通過該守護進程來實現,以確保守護進程中的狀態和內核里的防火牆是一致的。另外,firewall daemon 無法解析由 ip*tables 和 ebtables 命令行工具添加的防火牆規則。 守護進程通過 D-BUS 提供當前激活的防火牆設置信息,也通過 D-BUS 接受使用 PolicyKit 認證方式做的更改。

“守護進程”

應用程式、守護進程和用戶可以通過 D-BUS 請求啟用一個防火牆特性。特性可以是預定義的防火牆功能,如:服務、埠和協議的組合、埠/數據報轉發、偽裝、ICMP 攔截或自定義規則等。該功能可以啟用確定的一段時間也可以再次停用。

通過所謂的直接介面,其他的服務(例如 libvirt )能夠通過 iptables 變元(arguments)和參數(parameters)增加自己的規則。 amanda 、ftp 、samba 和 tftp 服務的 netfilter 防火牆助手也被“守護進程”解決了,只要它們還作為預定義服務的一部分。附加助手的裝載不作為當前介面的一部分。由於一些助手只有在由模塊控制的所有連接都關閉後才可裝載。因而,跟蹤連接信息很重要,需要列入考慮範圍。

靜態防火牆(system-config-firewall/lokkit)

使用 system-config-firewall 和 lokkit 的靜態防火牆模型實際上仍然可用並將繼續提供,但卻不能與“守護進程”同時使用。用戶或者管理員可以決定使用哪一種方案。

在軟體安裝,初次啟動或者是首次聯網時,將會出現一個選擇器。通過它你可以選擇要使用的防火牆方案。其他的解決方案將保持完整,可以通過更換模式啟用。 firewall daemon 獨立於 system-config-firewall,但二者不能同時使用。

使用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
靜態防火牆規則配置文件是 /etc/sysconfig/iptables 以及 /etc/sysconfig/ip6tables . 註: iptables 與 iptables-services 軟體包不提供與服務配套使用的防火牆規則. 這些服務是用來保障相容性以及供想使用自己防火牆規則的人使用的. 你可以安裝並使用 system-config-firewall 來創建上述服務需要的規則. 為了能使用 system-config-firewall, 你必須停止 firewalld. 為服務創建規則並停用 firewalld 後,就可以啟用 iptables 與 ip6tables 服務了:
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 控制,你也可以使用 nm-connection-editor 來修改區域。

由NetworkManager控制的網路連接

防火牆不能夠通過 NetworkManager 顯示的名稱來配置網路連接,只能配置網路介面。因此在網路連接之前 NetworkManager 將配置文件所述連接對應的網路介面告訴 firewalld 。如果在配置文件中沒有配置區域,介面將配置到 firewalld 的預設區域。如果網路連接使用了不止一個介面,所有的介面都會應用到 fiwewalld。介面名稱的改變也將由 NetworkManager 控制並應用到firewalld。

為了簡化,自此,網路連接將被用作與區域的關係。 如果一個介面斷開了,NetworkManager也將告訴firewalld從區域中刪除該介面。 當firewalld由systemd或者init腳本啟動或者重啟後,firewalld將通知NetworkManager把網路連接增加到區域。

由腳本控制的網路

對於由網路腳本控制的連接有一條限制:沒有守護進程通知 firewalld 將連接增加到區域。這項工作僅在 ifcfg-post 腳本進行。因此,此後對網路連接的重命名將不能被應用到firewalld。同樣,在連接活動時重啟 firewalld 將導致與其失去關聯。現在有意修複此情況。最簡單的是將全部未配置連接加入預設區域。

區域定義了本區域中防火牆的特性:

使用firewalld

你可以通過圖形界面工具 firewall-config 或者命令行客戶端 firewall-cmd 啟用或者關閉防火牆特性。

使用firewall-cmd

命令行工具 firewall-cmd 支持全部防火牆特性。對於狀態和查詢模式,命令只返回狀態,沒有其他輸出。

一般應用

獲取 firewalld 狀態

firewall-cmd --state
此舉返回 firewalld 的狀態,沒有任何輸出。可以使用以下方式獲得狀態輸出:
firewall-cmd --state && echo "Running" || echo "Not running"
在 Fedora 19 中, 狀態輸出比此前直觀:
# rpm -qf $( which firewall-cmd )
firewalld-0.3.3-2.fc19.noarch# firewall-cmd --state
not running
在不改變狀態的條件下重新載入防火牆:
firewall-cmd --reload
如果你使用–complete-reload,狀態信息將會丟失。這個選項應當僅用於處理防火牆問題時,例如,狀態信息和防火牆規則都正常,但是不能建立任何連接的情況。 獲取支持的區域列表
firewall-cmd --get-zones
這條命令輸出用空格分隔的列表。 獲取所有支持的服務
firewall-cmd --get-services
這條命令輸出用空格分隔的列表。 獲取所有支持的ICMP類型
firewall-cmd --get-icmptypes
這條命令輸出用空格分隔的列表。 列出全部啟用的區域的特性
firewall-cmd --list-all-zones
輸出格式是:
<zone>
  interfaces: <interface1> ..
  services: <service1> ..
  ports: <port1> ..
  forward-ports: <forward port1> ..
  icmp-blocks: <icmp type1> ....
輸出區域 <zone> 全部啟用的特性。如果生略區域,將顯示預設區域的信息。
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>
這個選項與 –add-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>]
此舉啟用區域中的一種服務。如果未指定區域,將使用預設區域。如果設定了超時時間,服務將只啟用特定秒數。如果服務已經活躍,將不會有任何警告信息。 例: 使區域中的ipp-client服務生效60秒:
firewall-cmd --zone=home --add-service=ipp-client --timeout=60
例: 啟用預設區域中的http服務:
firewall-cmd --add-service=http
禁用區域中的某種服務
firewall-cmd [--zone=<zone>] --remove-service=<service>
此舉禁用區域中的某種服務。如果未指定區域,將使用預設區域。 例: 禁止home區域中的http服務:
firewall-cmd --zone=home --remove-service=http
區域種的服務將被禁用。如果服務沒有啟用,將不會有任何警告信息。 查詢區域中是否啟用了特定服務
firewall-cmd [--zone=<zone>] --query-service=<service>
如果服務啟用,將返回1,否則返回0。沒有輸出信息。 啟用區域埠和協議組合
firewall-cmd [--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]
此舉將啟用埠和協議的組合。埠可以是一個單獨的埠 <port> 或者是一個埠範圍 <port>-<port> 。協議可以是 tcp 或 udp。 禁用埠和協議組合
firewall-cmd [--zone=<zone>] --remove-port=<port>[-<port>]/<protocol>
查詢區域中是否啟用了埠和協議組合
firewall-cmd [--zone=<zone>] --query-port=<port>[-<port>]/<protocol>
如果啟用,此命令將有返回值。沒有輸出信息。 啟用區域中的IP偽裝功能
firewall-cmd [--zone=<zone>] --add-masquerade
此舉啟用區域的偽裝功能。私有網路的地址將被隱藏並映射到一個公有IP。這是地址轉換的一種形式,常用於路由。由於內核的限制,偽裝功能僅可用於IPv4。 禁用區域中的IP偽裝
firewall-cmd [--zone=<zone>] --remove-masquerade
查詢區域的偽裝狀態
firewall-cmd [--zone=<zone>] --query-masquerade
如果啟用,此命令將有返回值。沒有輸出信息。 啟用區域的ICMP阻塞功能
firewall-cmd [--zone=<zone>] --add-icmp-block=<icmptype>
此舉將啟用選中的Internet控制報文協議(ICMP)報文進行阻塞。ICMP報文可以是請求信息或者創建的應答報文,以及錯誤應答。 禁止區域的ICMP阻塞功能
firewall-cmd [--zone=<zone>] --remove-icmp-block=<icmptype>
查詢區域的ICMP阻塞功能
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> }
埠可以映射到另一臺主機的同一埠,也可以是同一主機或另一主機的不同埠。埠號可以是一個單獨的埠 <port> 或者是埠範圍 <port>-<port> 。協議可以為 tcp 或udp 。目標埠可以是埠號 <port> 或者是埠範圍 <port>-<port> 。目標地址可以是 IPv4 地址。受內核限制,埠轉發功能僅可用於IPv4。 禁止區域的埠轉發或者埠映射
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> }
如果啟用,此命令將有返回值。沒有輸出信息。 例: 將區域home的ssh轉發到127.0.0.2
firewall-cmd --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2

處理永久區域

永久選項不直接影響運行時的狀態。這些選項僅在重載或者重啟服務時可用。為了使用運行時和永久設置,需要分別設置兩者。 選項 –permanent 需要是永久設置的第一個參數。

獲取永久選項所支持的服務
firewall-cmd --permanent --get-services
獲取永久選項所支持的ICMP類型列表
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>
如果服務啟用,此命令將有返回值。此命令沒有輸出信息。 例: 永久啟用 home 區域中的 ipp-client 服務
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>
如果服務啟用,此命令將有返回值。此命令沒有輸出信息。 例: 永久啟用 home 區域中的 https (tcp 443) 埠
firewall-cmd --permanent --zone=home --add-port=443/tcp
永久啟用區域中的偽裝
firewall-cmd --permanent [--zone=<zone>] --add-masquerade
此舉啟用區域的偽裝功能。私有網路的地址將被隱藏並映射到一個公有IP。這是地址轉換的一種形式,常用於路由。由於內核的限制,偽裝功能僅可用於IPv4。 永久禁用區域中的偽裝
firewall-cmd --permanent [--zone=<zone>] --remove-masquerade
查詢區域中的偽裝的永久狀態
firewall-cmd --permanent [--zone=<zone>] --query-masquerade
如果服務啟用,此命令將有返回值。此命令沒有輸出信息。 永久啟用區域中的ICMP阻塞
firewall-cmd --permanent [--zone=<zone>] --add-icmp-block=<icmptype>
此舉將啟用選中的 Internet 控制報文協議 (ICMP) 報文進行阻塞。 ICMP 報文可以是請求信息或者創建的應答報文或錯誤應答報文。 永久禁用區域中的ICMP阻塞
firewall-cmd --permanent [--zone=<zone>] --remove-icmp-block=<icmptype>
查詢區域中的ICMP永久狀態
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> }
埠可以映射到另一臺主機的同一埠,也可以是同一主機或另一主機的不同埠。埠號可以是一個單獨的埠 <port> 或者是埠範圍 <port>-<port> 。協議可以為 tcp 或udp 。目標埠可以是埠號 <port> 或者是埠範圍 <port>-<port> 。目標地址可以是 IPv4 地址。受內核限制,埠轉發功能僅可用於IPv4。 永久禁止區域的埠轉發或者埠映射
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> }
如果服務啟用,此命令將有返回值。此命令沒有輸出信息。 例: 將 home 區域的 ssh 服務轉發到 127.0.0.2
firewall-cmd --permanent --zone=home --add-forward-port=port=22:proto=tcp:toaddr=127.0.0.2

直接選項

直接選項主要用於使服務和應用程式能夠增加規則。 規則不會被保存,在重新載入或者重啟之後必須再次提交。傳遞的參數 <args> 與 iptables, ip6tables 以及 ebtables 一致。

選項–direct需要是直接選項的第一個參數。 將命令傳遞給防火牆。參數 <args> 可以是 iptables, ip6tables 以及 ebtables 命令行參數。
firewall-cmd --direct --passthrough { ipv4 | ipv6 | eb } <args>
為表 <table> 增加一個新鏈 <chain> 。
firewall-cmd --direct --add-chain { ipv4 | ipv6 | eb } <table> <chain>
從表 <table> 中刪除鏈 <chain> 。
firewall-cmd --direct --remove-chain { ipv4 | ipv6 | eb } <table> <chain>
查詢 <chain> 鏈是否存在與表 <table>. 如果是,返回0,否則返回1.
firewall-cmd --direct --query-chain { ipv4 | ipv6 | eb } <table> <chain>
如果啟用,此命令將有返回值。此命令沒有輸出信息。 獲取用空格分隔的表 <table> 中鏈的列表。
firewall-cmd --direct --get-chains { ipv4 | ipv6 | eb } <table>
為表 <table> 增加一條參數為 <args> 的鏈 <chain> ,優先順序設定為 <priority>。
firewall-cmd --direct --add-rule { ipv4 | ipv6 | eb } <table> <chain> <priority> <args>
從表 <table> 中刪除帶參數 <args> 的鏈 <chain>。
firewall-cmd --direct --remove-rule { ipv4 | ipv6 | eb } <table> <chain> <args>
查詢帶參數 <args> 的鏈 <chain> 是否存在表 <table> 中. 如果是,返回0,否則返回1.
firewall-cmd --direct --query-rule { ipv4 | ipv6 | eb } <table> <chain> <args>
如果啟用,此命令將有返回值。此命令沒有輸出信息。 獲取表 <table> 中所有增加到鏈 <chain> 的規則,並用換行分隔。
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 類型、服務、區域配置可以通過軟體包或者創建文件的方式提供。

/etc/firewalld中的系統配置設置
存儲在此的系統或者用戶配置文件可以是系統管理員通過配置介面定製的,也可以是手動定製的。這些文件將重載預設配置文件。 為了手動修改預定義的 icmp 類型,區域或者服務,從預設配置目錄將配置拷貝到相應的系統配置目錄,然後根據需求進行修改。 如果你載入了有預設和備用配置的區域,在 /etc/firewalld下的對應文件將被重命名為 <file>.old 然後啟用備用配置。

正在開發的特性 

富語言

富語言特性提供了一種不需要瞭解iptables語法的通過高級語言配置複雜 IPv4 和 IPv6 防火牆規則的機制。

Fedora 19 提供了帶有 D-Bus 和命令行支持的富語言特性第2個裡程碑版本。第3個裡程碑版本也將提供對於圖形界面 firewall-config 的支持。 對於此特性的更多信息,請參閱: firewalld Rich Language

鎖定

鎖定特性為 firewalld 增加了鎖定本地應用或者服務配置的簡單配置方式。它是一種輕量級的應用程式策略。

Fedora 19 提供了鎖定特性的第二個裡程碑版本,帶有 D-Bus 和命令行支持。第3個裡程碑版本也將提供圖形界面 firewall-config 下的支持。 更多信息請參閱: firewalld Lockdown

永久直接規則

這項特性處於早期狀態。它將能夠提供保存直接規則和直接鏈的功能。通過規則不屬於該特性。更多關於直接規則的信息請參閱Direct options。

從ip*tables和ebtables服務遷移
這項特性處於早期狀態。它將儘可能提供由iptables,ip6tables 和 ebtables 服務配置轉換為永久直接規則的腳本。此特性在由firewalld提供的直接鏈集成方面可能存在局限性。 此特性將需要大量複雜防火牆配置的遷移測試。

計劃和提議功能
防火牆抽象模型

在 ip*tables 和 ebtables 防火牆規則之上添加抽象層使添加規則更簡單和直觀。要抽象層功能強大,但同時又不能複雜,並不是一項簡單的任務。為此,不得不開發一種防火牆語言。使防火牆規則擁有固定的位置,可以查詢埠的訪問狀態、訪問策略等普通信息和一些其他可能的防火牆特性。

對於conntrack的支持

要終止禁用特性已確立的連接需要 conntrack 。不過,一些情況下終止連接可能是不好的,如:為建立有限時間內的連續性外部連接而啟用的防火牆服務。

用戶交互模型

這是防火牆中用戶或者管理員可以啟用的一種特殊模式。應用程式所有要更改防火牆的請求將定向給用戶知曉,以便確認和否認。為一個連接的授權設置一個時間限制並限制其所連主機、網路或連接是可行的。配置可以保存以便將來不需通知便可應用相同行為。 該模式的另一個特性是管理和應用程式發起的請求具有相同功能的預選服務和埠的外部鏈接嘗試。服務和埠的限制也會限制發送給用戶的請求數量。

用戶策略支持

管理員可以規定哪些用戶可以使用用戶交互模式和限制防火牆可用特性。

埠元數據信息(由 Lennart Poettering 提議)

擁有一個埠獨立的元數據信息是很好的。當前對 /etc/services 的埠和協議靜態分配模型不是個好的解決方案,也沒有反映當前使用情況。應用程式或服務的埠是動態的,因而埠本身並不能描述使用情況。

元數據信息可以用來為防火牆制定簡單的規則。下麵是一些例子:
  • 允許外部訪問文件共用應用程式或服務
  • 允許外部訪問音樂共用應用程式或服務
  • 允許外部訪問全部共用應用程式或服務
  • 允許外部訪問 torrent 文件共用應用程式或服務
  • 允許外部訪問 http 網路服務
這裡的元數據信息不只有特定應用程式,還可以是一組使用情況。例如:組“全部共用”或者組“文件共用”可以對應於全部共用或文件共用程式(如:torrent 文件共用)。這些只是例子,因而,可能並沒有實際用處。 這裡是在防火牆中獲取元數據信息的兩種可能途徑:
第一種是添加到 netfilter (內核空間)。好處是每個人都可以使用它,但也有一定使用限制。還要考慮用戶或系統空間的具體信息,所有這些都需要在內核層面實現。
第二種是添加到 firewall daemon 中。這些抽象的規則可以和具體信息(如:網路連接可信級、作為具體個人/主機要分享的用戶描述、管理員禁止完全共用的應歸則等)一起使用。
第二種解決方案的好處是不需要為有新的元數據組和納入改變(可信級、用戶偏好或管理員規則等等)重新編譯內核。這些抽象規則的添加使得 firewall daemon 更加自由。即使是新的安全級也不需要更新內核即可輕鬆添加。 sysctld
現在仍有 sysctl 設置沒有正確應用。一個例子是,在 rc.sysinit 正運行時,而提供設置的模塊在啟動時沒有裝載或者重新裝載該模塊時會發生問題。 另一個例子是 net.ipv4.ip_forward ,防火牆設置、libvirt 和用戶/管理員更改都需要它。如果有兩個應用程式或守護進程只在需要時開啟 ip_forwarding ,之後可能其中一個在不知道的情況下關掉服務,而另一個正需要它,此時就不得不重啟它。 sysctl daemon 可以通過對設置使用內部計數來解決上面的問題。此時,當之前請求者不再需要時,它就會再次回到之前的設置狀態或者是直接關閉它。

防火牆規則

netfilter 防火牆總是容易受到規則順序的影響,因為一條規則在鏈中沒有固定的位置。在一條規則之前添加或者刪除規則都會改變此規則的位置。 在靜態防火牆模型中,改變防火牆就是重建一個乾凈和完善的防火牆設置,且受限於 system-config-firewall / lokkit 直接支持的功能。也沒有整合其他應用程式創建防火牆規則,且如果自定義規則文件功能沒在使用 s-c-fw / lokkit 就不知道它們。預設鏈通常也沒有安全的方式添加或刪除規則而不影響其他規則。

動態防火牆有附加的防火牆功能鏈。這些特殊的鏈按照已定義的順序進行調用,因而向鏈中添加規則將不會幹擾先前調用的拒絕和丟棄規則。從而利於創建更為合理完善的防火牆配置。 下麵是一些由守護進程創建的規則,過濾列表中啟用了在公共區域對 ssh , mdns 和 ipp-client 的支持:
*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
使用 deny/allow 模型來構建一個清晰行為(最好沒有衝突規則)。例如: ICMP塊將進入 IN_ZONE_public_deny 鏈(如果為公共區域設置了的話),並將在 IN_ZONE_public_allow 鏈之前處理。 該模型使得在不幹擾其他塊的情況下向一個具體塊添加或刪除規則而變得更加容易。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 僅記錄學習內容 一)基礎實驗:1. Unix中常見shell及其命令(shell的縮寫) Bourne shell (sh) Korn shell (ksh) C shell (csh) Bournw-again shell (bash)2. 普通用戶與超級用戶如何進行相互切換 普通用戶—>超級用戶 ...
  • 有時候我們 使用 包管理工具,安裝很方便,但我們還要能知道它們安裝了什麼文件,都把這些文件安裝到哪裡了? 我們以探究 pygtk 為例 在 fedora 28 之中 查找 pygtk: 查看包信息: 查看包內容和安裝位置: 當然也可以通過 yum provides 和 yum search 等命令 ...
  • 前面一直都在使用ST做開發,但是也想試試傳說中的phpstorm神器。一切都弄好了,想使用它的遠程開發功能,省去我本地開發然後再ftp上傳做法。 但是卻遇到了這個問題,困擾了我三四天!!!我各種百度都沒能解決問題,然後就可能的問題挨個測試,最終解決了。 遇到這樣的問題,我能百分之九十九保證你的伺服器 ...
  • 基於 Red Hat Enterprise Linux 7.5 或者 CentOS 7.4 Linux的命令一定遵循以下格式:command指令 [-options]選項 parameter1參數1 parameter2參數2...... command指令:一定是一個指令或者是批處理腳本 [-op ...
  • cp命令 用來將一個或多個源文件或者目錄複製到指定的目的文件或目錄。它可以將單個源文件複製成一個指定文件名的具體的文件或一個已經存在的目錄下。cp命令還支持同時複製多個文件,當一次複製多個文件時,目標文件參數必須是一個已經存在的目錄,否則將出現錯誤。 語法 選項 參數 實例 如果把一個文件複製到一個 ...
  • 當我們在 apache 中 進行訪問 www 文件夾之外的目錄的時候,我們可以使用軟鏈接的方式來進行協助訪問。 我在 html 文件夾 下麵創建 了 如下軟鏈接 link: 但是剛開始訪問的時候, apache 的目錄列表中不顯示 link 目錄項: 查看配置文件: 發現 符號鏈接 顯示選項已經打開 ...
  • 一直想看webrtc的源碼,苦於翻牆能力有限且整個編譯過程耗時巨大,故求助於互聯網。在互聯網尋找許久編譯好的Webrtc源碼,好多版本下載下來總是報各種錯誤,很是失落。 皇天不負有心人,終於尋得一版可用的WebRtc源碼。具體從哪個網站找的已經記不起來了,不過還是感謝分享者。 共用給大家: 鏈接: ...
  • 在內網中 暫時需要一臺 文件 伺服器,所以準備安裝一臺 http伺服器並開啟目錄訪問許可權。這次使用 apache 在 fedora 28 機器上: 因為 fedora 28 已經包含 httpd 軟體,使用 systemctl start httpd 就能進行啟動。 啟動時 預設開啟 目錄訪問許可權, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...