CentOS7 Firewall防火牆配置用法詳解

FirewallD 提供了支持網絡/防火牆區域(zone)定義網絡連接以及接口安全等級的動態防火牆管理工具。它支持 IPv4, IPv6 防火牆設置以及以太網橋接,而且擁有運行時配置和永久配置選項。它也支持容許服務或者應用程序直接添加防火牆規則的接口。 之前的 system-config-firewall/lokkit 防火牆模型是靜態的,每次修改都要求防火牆徹底重啓。這個過程包括內核 netfilter 防火牆模塊的卸載和新配置所需模塊的裝載等。而模塊的卸載將會破壞狀態防火牆和確立的鏈接。html


相反,firewall daemon 動態管理防火牆,不須要重啓整個防火牆即可應用更改。於是也就沒有必要重載全部內核防火牆模塊了。不過,要使用 firewall daemon 就要求防火牆的全部變動都要經過該守護進程來實現,以確保守護進程中的狀態和內核裏的防火牆是一致的。另外,firewall daemon 沒法解析由 ip*tables 和 ebtables 命令行工具添加的防火牆規則。linux


守護進程經過 D-BUS 提供當前激活的防火牆設置信息,也經過 D-BUS 接受使用 PolicyKit 認證方式作的更改。小程序



「守護進程」安全


應用程序、守護進程和用戶能夠經過 D-BUS 請求啓用一個防火牆特性。特性能夠是預約義的防火牆功能,如:服務、端口和協議的組合、端口/數據報轉發、假裝、ICMP 攔截或自定義規則等。該功能能夠啓用肯定的一段時間也能夠再次停用。網絡


經過所謂的直接接口,其餘的服務(例如 libvirt )可以經過 iptables 變元(arguments)和參數(parameters)增長本身的規則。app


amanda 、ftp 、samba 和 tftp 服務的 netfilter 防火牆助手也被「守護進程」解決了,只要它們還做爲預約義服務的一部分。附加助手的裝載不做爲當前接口的一部分。因爲一些助手只有在由模塊控制的全部鏈接都關閉後纔可裝載。於是,跟蹤鏈接信息很重要,須要列入考慮範圍。ssh



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


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


在軟件安裝,初次啓動或者是首次聯網時,將會出現一個選擇器。經過它你能夠選擇要使用的防火牆方案。其餘的解決方案將保持完整,能夠經過更換模式啓用。工具


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 助手模塊以及 IPv四、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. Only selected 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


啓用區(www.111cn.net)域中的服務

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 鏈以前處理。


該模型使得在不干擾其餘塊的狀況下向一個具體塊添加或刪除規則而變得更加容易。from:http://www.111cn.net/sys/linux/75503.html

相關文章
相關標籤/搜索