Centos 7的firewalld防火牆地址假裝和端口轉發原理

博文目錄:
1、firewalld高級配置
一、firewalld支持的NAT
二、IP地址假裝
三、端口轉發
2、firewalld-cmd高級配置
一、firewalld中理解直接規則
二、使用富語言
三、富規則命令
四、富規則配置舉例:centos

1、firewalld高級配置

一、firewalld支持的NAT

firewalld支持兩種類型的NAT:服務器

  • IP地址假裝;網絡

  • 端口轉發;

二、IP地址假裝

地址假裝:經過地址假裝,NAT設備將通過設備的包轉發到指定的接收方,同時將經過的數據包的源地址更改成其本身的接口地址。當返回的數據包到達時,會將目的地址修改成原始主機的地址並作路由。地址假裝能夠實現局域網多個地址共享單一公網地址上網。相似於NAT技術中的端口多路複用(PAT)。IP地址假裝僅支持ipv4,不支持ipv6。ssh

三、端口轉發

端口轉發:也能夠稱之爲目的地址轉換或端口映射。經過端口轉發,將指定IP地址及端口的流量轉發到相同計算機上的不一樣端口,或不一樣計算機上的端口。通常公司內網的服務器都採用私網地址,而後經過端口轉發將使用私網地址的服務器發佈到公網上,以便讓互聯網用戶訪問。(例如,當接收互聯網用戶的HTTP請求時,網關服務器判斷數據包的目標地址與目標端口,一旦匹配指定規則,則將其目標地址修改成內網真正的服務器地址,從而創建有效鏈接)。tcp

2、firewalld-cmd高級配置

一、firewalld中理解直接規則

firewalld提供了「direct interface」(直接端口),它容許管理員手動編寫的iptables、ip6tables和ebtables規則插入firewalld管理的區域中,適用於應用程序,而不是用戶。若是對iptables不太熟,不建議使用直接接口,可能會無心中致使防火牆被***。firewalld保持對所增長項目的追蹤,因此他還能質詢firewalld和發現使用直接端口模式的程序形成的更改。直接端口經過firewalld-cmd命令中的--direct選項實現。除非將直接規則顯式插入firewalld管理的區域,不然將首先解析直接規則,而後再解析其餘firewalld規則。
執行如下命令便可添加一些直接規則以將某個IP範圍列入黑名單:ide

[root@centos01 ~]# firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist
success
[root@centos01 ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.10.0/24 -j blacklist
success
[root@centos01 ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted"
success
[root@centos01 ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP
success

二、使用富語言

firewalld的富語言提供了一種不須要了解iptables語法的經過高級語言配置複雜的IPv4和IPv6防火牆規則的機制,爲管理員提供了一種表達性語言,經過這種語言,能夠表達firewalld的基本語法中未涵蓋的自定義防火牆規則。(例如,僅容許從單個IP地址而非經過某個區域路由的因此IP地址鏈接到服務)。工具

富規則可用於表達基本的容許/拒絕規則,也能夠用於配置記錄(面向syslog和auditd),以及端口轉發、假裝和速率限制。下面簡單看一下表達富規則的基本語法:
Centos 7的firewalld防火牆地址假裝和端口轉發原理
規則的每一個單一元素都可以以option=value的形式來採用附加參數。測試

1)規則排序

一旦向某個區域(通常是指防火牆)中添加了多個規則,規則的排序會在很大程度上影響防火牆的行爲。對於全部的區域,區域內的規則的基本排序是相同的。若是區域中的任何規則與包均不匹配,一般會拒絕此包,可是區域可能具備不一樣的默認值。(例如,可信區域將接收任何不匹配的包。此外,在匹配某個記錄規則後,將繼續正常處理包)。
直接規則是個例外。大部分直接規則將首先進行解析,而後由firewalld進行其餘處理,可是直接規則語法容許管理員在任何區域中的任何位置插入任何規則。debug

2)測試和調試

爲了便於測試和調試,幾乎全部規則均可以與超時一塊兒添加到運行時配置。當包含超時的規則添加到防火牆時,計時器便針對該規則開始倒計時,一旦規則的計時器到達0秒,便從運行時配置中刪除該規則。
在使用遠程防火牆時,使用超時會是一種極其有用的工具,特別是在測試更復制的規則集時。若是規則有效,則管理員能夠再次添加該規則;若是規則沒有按照預期運行,甚至可能將管理員鎖定而使其沒法進入系統,那麼規則將被自動刪除,以容許管理員能夠繼續工做。經過在啓用規則的firewalld-cmd命令的結尾追加選項--timeout<TIMEINSECONDS>可向運行時規則中添加超時。調試

三、富規則命令

firewalld-cmd有四個選項能夠用於處理富規則,全部這些選項均可以同常規的--permanent或--zone=<ZONE>選項組合使用,以下所示:

  • --add-rich-rule='RULE' #向指定區域添加RULE,若是沒有指定區域,則爲默認區域;

  • --remove-rich-rule='RULE' #從指定區域中刪除RULE,若是沒有指定區域,則爲默認區域;

  • --query-rich-rule='RULE' #查詢RULE是否已添加到指定區域,若是未指定區域,則爲默認區域。規則存在,則返回0,不然返回1;

  • --list-rich-rules #輸出指定區域的全部富規則,若是未指定區域,則爲默認區域;

任何已配置的富規則都會顯示在firewall-cmd --list-all 和 firewall-cmd --list-all-zone的輸出結果中。具備語法解釋以下所示:

  • source:限制源IP地址,源地址能夠是一個IPv四、IPv6地址或者一個網絡地址段;

  • destination:限制目標地址,目標地址使用跟源地址相同的語法;

  • element:要素,該項只能是如下幾種要素類型之一:service、port、protocol、icmp-block、masquerade和forward-port;

①service:服務名稱是firewalld提供的其中一種服務。要得到支持的服務列表,輸入如下命令:firewalld-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;

④icmp-block:阻斷一盒或多個ICMP類型。要得到支持的ICMP類型列表,輸入firewalld-cmd--get-icmptypes命令便可查看。命令格式爲:icmp-blick name=icmptype_name;

⑤masquerade:規則裏的IP假裝。用源地址而部署目的地址來把假裝限制在一個範圍內;

⑥forward-port:將指定的TCP或UDP協議的數據包轉發到本機的其餘端口,或另外一臺機器,或另外一臺機器上的其餘端口。port和to-port能夠是一個單獨的端口數字,或一個端口範圍。而目的地址是一個簡單的IP地址。命令格式爲:forward-port port=number_or_range protocol=protocol to-port=number_or_range to-addr=address;

  • log:註冊有內核日誌的鏈接請求到規則中,如系統日誌。能夠定義一個前綴文本把日誌信息做爲前綴加入。日誌等級能夠是emerg、alert、crit、error、warning、notice、info或者debug中的一個。能夠選擇日誌的用法,按如下方式限制日誌:log [prefix text] [level=log level] limint value=rate/duration。持續時間的單位爲s、m、h、d。s表示秒,m表示分鐘,h表示小時,d表示天。最大限定值是1/d(天天最多有一條日誌進入);

  • audit:審覈,審覈類型能夠是accept、reject或drop中的一種,但不能再audit命令後指定,由於審覈類型將會從規則動做中自動收集。審覈不包含自身參數,但能夠選擇性地增長限制。審覈的使用是可選擇的;

  • accept|reject|drop:能夠是accept、reject或drop中的一個行爲。命令格式爲:accept | reject鏈接將被拒絕,發起端將接到一個拒絕信息。指定drop時,全部數據包會被丟棄,而且不會向發起端發送任何信息;

四、富規則配置舉例:

1)爲認證報頭協議AH使用新的IPv4和IPv6鏈接:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule protocolvalue=ah accept'
success

2)容許新的IPv4和IPv6鏈接FTP,並使用審覈每分鐘記錄一次:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule service name=ftp log limit value=1/m audit accept'
success

3)容許來自192.168.0.0/24地址的TFTP協議的IPv4鏈接,而且使用系統日誌每分鐘記錄一次:

[root@centos01 ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name= "tftp" log prefix="tftp" level="info" limit value="1/m" accept'
success

4)爲RADIUS協議拒絕全部來自1:2:3:4:6::的新IPv6鏈接,日誌前綴爲「dns」,級別爲「info」,並每分鐘最多記錄3次。接受來自其餘發起端新的IPv6鏈接:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" reject'
success
[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule family="ipv6" service name="radius" accept'
success

5)將源192.168.2.2地址加入白名單,以容許來自這個源地址的全部鏈接:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule family="ipv4" source address="192.168.2.2" accept'
success

6)拒絕來自piblic區域中IP地址192.168.0.11的全部流量:

[root@centos01 ~]# firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.0.11/32 reject'
success

7)丟棄來自默認區域中任何位置的全部傳入的ipsec esp協議包:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule protocol value="esp" drop'
success

8)在192.168.1.0/24子網的dmz區域中,接收端口7900~7905的全部TCP包:

[root@centos01 ~]# firewall-cmd --zone=dmz --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-7905 protocol=tcp accept'
success

9)接收從work區域到SSH的新鏈接,以notice級別且每分鐘最多三條消息的方式將新鏈接記錄到syslog:

[root@centos01 ~]# firewall-cmd --zone=work --add-rich-rule='rule service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept'
success

10)在接下來的5min內,拒絕從默認區域中的子網192.168.2.0/24到DNS的新鏈接,而且拒絕的鏈接將記錄到audit系統,且每小時最多一條消息:

[root@centos01 ~]# firewall-cmd --add-rich-rule= 'rule family=ipv4 source address=192.168.2.0/24 service name=dns audit limit value="1/h" reject' --timeout=300
success

下一篇博客再配置firewalld防火牆的地址假裝和端口轉發案例。

—————— 本文至此結束,感謝閱讀 ——————

相關文章
相關標籤/搜索