原文地址:http://www.excelib.com/article/290/showhtml
target:目標,這個前面學生也已經給你們介紹過了,能夠理解爲默認行爲,有四個可選值:default、ACCEPT、%%REJECT%%、DROP,若是不設置默認爲defaultbash
service:這個在前面學生已經給你們解釋過了,他表示一個服務tcp
port:端口,使用port能夠不經過service而直接對端口進行設置debug
interface:接口,能夠理解爲網卡調試
source:源地址,能夠是ip地址也能夠是ip地址段excel
icmp-block:icmp報文阻塞,能夠按照icmp類型進行設置code
masquerade:ip地址假裝,也就是按照源網卡地址進行NAT轉發xml
forward-port:端口轉發htm
rule:自定義規則blog
對於一個接受到的請求具體使用哪一個zone,firewalld是經過三種方法來判斷的:
這三個的優先級按順序依次下降,也就是說若是按照source能夠找到就不會再按interface去查找,若是前兩個都找不到纔會使用第三個,也就是學生在前面給你們講過的在firewalld.conf中配置的默認zone。
source是在zone的xml文件中配置的,其格式爲
<zone> <source address="address[/mask]"/> </zone>
只要咱們將source節點放入相應的zone配置文件中就能夠了,節點的address屬性就是源地址,不過咱們要注意相同的source節點只能夠在一個zone中進行配置,也就是說同一個源地址只能對於一個zone,另外,直接編輯xml文件以後還須要reload才能夠起做用。
也可使用firewall-cmd命令進行配置,這裏主要有五個相關命令(參數)
firewall-cmd [--permanent] [--zone=zone] --list-sources firewall-cmd [--permanent] [--zone=zone] --query-source=source[/mask] firewall-cmd [--permanent] [--zone=zone] --add-source=source[/mask] firewall-cmd [--zone=zone] --change-source=source[/mask] firewall-cmd [--permanent] [--zone=zone] --remove-source=source[/mask]
--list-sources:用於列出指定zone的全部綁定的source地址
--query-source:用於查詢指定zone是否跟指定source地址進行了綁定
--add-source:用於將一個source地址綁定到指定的zone(只可綁定一次,第二次綁定到不一樣的zone會報錯)
--change-source:用於改變source地址所綁定的zone,若是原來沒有綁定則進行綁定,這樣就跟--add-source的做用同樣了
--remove-source:用於刪除source地址跟zone的綁定
interface有兩個能夠配置的位置:一、zone所對應的xml配置文件二、網卡配置文件(也就是ifcfg-*文件)。
第一種配置跟source大同小異,學生這裏就再也不細述了,interface在zone配置文件中的節點爲
<zone> <interface name="string"/> </zone>
相關的firewall-cmd命令爲
firewall-cmd [--permanent] [--zone=zone] --list-interfaces firewall-cmd [--permanent] [--zone=zone] --add-interface=interface firewall-cmd [--zone=zone] --change-interface=interface firewall-cmd [--permanent] [--zone=zone] --query-interface=interface firewall-cmd [--permanent] [--zone=zone] --remove-interface=interface
另外,咱們還能夠在網卡配置文件中進行配置,好比能夠在
ifcfg-em1
文件中添加下面的配置
ZONE=public
這行配置就至關於下面的命令
firewall-cmd --zone=public --change-interface=em1
這樣配置以後來自em1的鏈接就會使用public這個zone進行管理(若是source匹配了其餘的zone除外)。
經過firewalld.conf配置文件的DefaultZone配置項來配置的,固然也可使用firewall-cmd命令來配置
firewall-cmd --set-default-zone=zone
另外還能夠經過--get-default-zone來獲取默認zone的值。
firewall-cmd --get-active-zones
這個命令會返回全部綁定了source、interface以及默認的zone,並會說明在什麼狀況下使用。
firewalld還給咱們提供了反向查詢的命令,也就是根據source或者interface查詢所對應的zone,其命令以下
firewall-cmd --get-zone-of-interface=interface firewall-cmd --get-zone-of-source=source[/mask]
zone規則中首先最重要的是target的設置,他默承認以取四個值:default、ACCEPT、%%REJECT%%、DROP,
在xml文件中target是zone節點的一個屬性,好比drop.xml中爲
<zone target="DROP">
block.xml中爲
<zone target="%%REJECT%%">
若是使用firewall-cmd命令來操做,命令以下
firewall-cmd --permanent [--zone=zone] --get-target firewall-cmd --permanent [--zone=zone] --set-target=target
這裏的--permanent不是可選的,也就是說使用firewall-cmd命令也不可讓他直接生效,也須要reload才能夠。
和咱們上面所介紹的source基本相同,只不過同一個service能夠配置到多個不一樣的zone中,固然也就不須要--change命令了,在zone配置文件中的節點爲
<zone> <service name="string"/> </zone>
相應的配置命令爲
firewall-cmd [--permanent] [--zone=zone] --list-services firewall-cmd [--permanent] [--zone=zone] --add-service=service [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-service=service firewall-cmd [--permanent] [--zone=zone] --query-service=service
具體每一個命令的含義你們對照上面的source很容易就理解了,不過這裏的--add命令中多了一個--timeout選項,學生這裏給你們介紹一下。
--add-service中的--timeout的含義是這樣的:添加一個服務,可是不是一直生效而是生效一段時間,過時以後自動刪除。
這個選項很是有用,好比咱們想暫時開放一個端口進行一些特殊的操做(好比遠程調試),等處理完成後再關閉,不過有時候咱們處理完以後就忘記關閉了,而如今的--timeout選項就能夠幫咱們很好地解決這個問題,咱們在打開的時候就能夠直接設置一個時間,到時間以後他自動就能夠關閉了。
port是直接對端口的操做,他和service很是類似,因此這裏也不詳細介紹了,port在zone中的配置節點爲
<zone> <port port="portid[-portid]" protocol="tcp|udp"/> </zone>
相應命令爲
irewall-cmd [--permanent] [--zone=zone] --list-ports firewall-cmd [--permanent] [--zone=zone] --add-port=portid[-portid]/protocol [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-port=portid[-portid]/protocol firewall-cmd [--permanent] [--zone=zone] --query-port=portid[-portid]/protocol
icmp-block在zone配置文件中的節點爲
<zone> <icmp-block name="string"/> </zone>
相應操做命令爲
firewall-cmd [--permanent] [--zone=zone] --list-icmp-blocks firewall-cmd [--permanent] [--zone=zone] --add-icmp-block=icmptype [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-icmp-block=icmptype firewall-cmd [--permanent] [--zone=zone] --query-icmp-block=icmptype
icmp-block是按照icmp的類型進行設置阻塞,好比咱們不想接受ping報文就可使用下面的命令來設置
firewall-cmd --add-icmp-block=echo-request
masquerade的做用就是ip地址假裝,也就是NAT轉發中的一種,具體處理方式是將接收到的請求的源地址設置爲轉發請求網卡的地址,這在路由器等相關設備中很是重要,好比你們不少都使用的是路由器鏈接的局域網,而想上互聯網就得將咱們的ip地址給修改一下,要不你們都是192.168.1.XXX的內網地址,那請求怎麼能正確返回呢?因此在路由器中將請求實際發送到互聯網的時候就會將請求的源地址設置爲路由器的外網地址,這樣請求就能正確地返回給路由器了,而後路由器再根據記錄返回給咱們發送請求的主機了,這就是masquerade。
其設置很是簡單,在zone中是一個沒有參數(屬性)的節點
<zone> <masquerade/> </zone>
操做命令爲
firewall-cmd [--permanent] [--zone=zone] --add-masquerade [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-masquerade firewall-cmd [--permanent] [--zone=zone] --query-masquerade
在zone配置文件中節點以下
<zone> <forward-port port="portid[-portid]" protocol="tcp|udp" [to-port="portid[-portid]"] [to-addr="ipv4address"]/> </zone>
相關操做命令以下
firewall-cmd [--permanent] [--zone=zone] --list-forward-ports firewall-cmd [--permanent] [--zone=zone] --add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]][--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]] firewall-cmd [--permanent] [--zone=zone] --query-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]
他是進行端口轉發的,好比咱們要將在80端口接收到tcp請求轉發到8080端口可使用下面的命令
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
forward-port還支持範圍轉發,好比咱們還能夠將80到85端口的全部請求都轉發到8080端口,這時只須要將上面命令中的port修改成80-85便可。
rule能夠用來定義一條複雜的規則,其在zone配置文件中的節點定義以下
<zone> <rule [family="ipv4|ipv6"]> [ <source address="address[/mask]" [invert="bool"]/> ] [ <destination address="address[/mask]" [invert="bool"]/> ] [ <service name="string"/> | <port port="portid[-portid]" protocol="tcp|udp"/> | <protocol value="protocol"/> | <icmp-block name="icmptype"/> | <masquerade/> | <forward-port port="portid[-portid]" protocol="tcp|udp" [to-port="portid[-portid]"] [to-addr="address"]/> ] [ <log [prefix="prefixtext"] [level="emerg|alert|crit|err|warn|notice|info|debug"]/> [<limit value="rate/duration"/>] </log> ] [ <audit> [<limit value="rate/duration"/>] </audit> ] [ <accept/> | <reject [type="rejecttype"]/> | <drop/> ] </rule> </zone>
能夠看到這裏一條rule的配置的配置項很是多,比zone自己還多出了destination、log、audit等配置項。其實這裏的rule就至關於使用iptables時的一條規則。rule的操做命令以下
firewall-cmd [--permanent] [--zone=zone] --list-rich-rules firewall-cmd [--permanent] [--zone=zone] --add-rich-rule='rule' [--timeout=seconds] firewall-cmd [--permanent] [--zone=zone] --remove-rich-rule='rule' firewall-cmd [--permanent] [--zone=zone] --query-rich-rule='rule'
這裏的參數'rule'表明一條規則語句,語句結構就是直接按照上面學生給你們的節點結構去掉尖括號來書寫就能夠了,好比要設置地址爲1.2.3.4的source就能夠寫成source address="1.2.3.4",也就是直接寫標籤名,而後跟着寫屬性就能夠了,咱們來看個例子
firewall-cmd --add-rich-rule='rule family="ipv4" source address="1.2.3.4" drop'
這條規則就會將1.2.3.4這個源地址的鏈接所有給drop掉。
使用rule結合--timeout咱們能夠實現一些很是好玩和有用的功能,好比咱們能夠寫個自動化腳本,當發現有異常的鏈接時就能夠添加一條rule將其相應的地址drop掉,並且還可使用--timeout給設置個時間段,過了以後再自動開放!