版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、nftables 配置一、概述nftables包過濾框架歷史小解:配置詳解:此文檔的內(nèi)容是根據(jù)上面的nftables配置詳解的鏈接進行翻譯整理的,有些地方可能有錯誤,對于有問題的地方,可以去上面的英文網(wǎng)站查詢,同時對于一些不需要了解 的內(nèi)容,在文中只給出了鏈接。nftables配置分為表、鏈、規(guī)則三個層次,示例如下:table ip filter64 bytes from icmp_req=1 ttl=64 time= ms然后,如果我們列出規(guī)則集,我們獲得:% nft -nn list table filtertable ip filter chain input type filter h
2、ook input priority 0;chain output type filter hook output priority 0;ip daddr counter packets 1 bytes 84tcp dport 22 counter packets 0 bytes 0 請注意,計數(shù)器已更新、在給定位置添加規(guī)則如果要在給定位置添加規(guī)則,則必須使用句柄作為參考:% nft list table filter -n -atable filter chain output type filter hook output priority 0;ip protocol tcp counte
3、r packets 82 bytes 9680 # handle 8ip saddr ip daddr drop # handle 7)如果要在處理程序編號為8的規(guī)則之后添加規(guī)則,則必須鍵入:% nft add rule filter output position 8 ip daddr drop現(xiàn)在,您可以通過列出規(guī)則集來檢查該命令的效果:% nft list table filter -n -atable filter chain output type filter hook output priority 0;ip protocol tcp counter packets 190 by
4、tes 21908 # handle 8ip daddr drop # handle 10ip saddr ip daddr drop # handle 7)如果要在具有處理程序編號8的規(guī)則之前插入規(guī)則,則必須鍵入:% nft insert rule filter output position 8 ip daddr drop、刪除規(guī)則您必須通過-a選項獲取刪除規(guī)則的句柄。句柄由內(nèi)核自動分配,它唯一地標識規(guī)則% nft list table filter -atable ip filter chain input type filter hook input priority 0;)chain
5、 output type filter hook output priority 0;ip daddr counter packets 1 bytes 84 # handle 5)可以使用以下命令刪除句柄為5的規(guī)則:% nft delete rule filter output handle 5注意:有計劃通過傳遞以支持刪除規(guī)則:% nft delete rule filter output ip saddr counter但這還沒有實現(xiàn)。因此,您必須使用句柄來刪除規(guī)則,直到實現(xiàn)該特性。、刪除一條鏈中的所有規(guī)則您可以使用以下命令刪除鏈中的所有規(guī)則:% nft delete rule filte
6、r output您還可以使用以下命令刪除表中的所有規(guī)則:% nft flush table filter、在最前面添加新規(guī)則要通過insert命令預先添加新規(guī)則:% nft insert rule filter output ip daddr counter這預先附加了一個規(guī)則,該規(guī)則將針對尋址到的流量更新每個規(guī)則包和字節(jié)計數(shù)器。在iptables中的等價是:% iptables -I OUTPUT -t filter -d請注意,iptables總是提供每個規(guī)則的計數(shù)器。、替換規(guī)則您可以通過指定規(guī)則句柄通過replace命令替換任何規(guī)則。因此,首先必須列出帶有選項-a的規(guī)則集,以獲取規(guī)則句柄
7、。nft list ruleset -atable ip filter chain input type filter hook input priority 0; policy accept;ip protocol tcp counter packets 0 bytes 0 # handle 2然后,假設您想要使用句柄號2替換規(guī)則,則必須指定此句柄號和要放置的新規(guī)則,而不是它:nft replace rule filter input handle 2 counter然后,當列出規(guī)則集時:nft list ruleset -atable ip filter chain input count
8、er packets 0 bytes 0您可以有效地注意到,該規(guī)則已被替代為計數(shù)任何數(shù)據(jù)包的簡單規(guī)則,而不是如前面 的規(guī)則那樣計數(shù)TCP數(shù)據(jù)包。、原子規(guī)則替換您可以使用-f選項自動更新規(guī)則集:% nft -f file其中file包含您的規(guī)則集您可以通過將現(xiàn)有列表存儲在文件中來保存規(guī)則集,即。% nft list table filter filter-table然后,您可以使用-f選項恢復它:% nft -f filter-table如果您在過濾器表文件的最開始處預置flush表過濾器行,您將實現(xiàn)原子規(guī)則集替換,等同于iptables-restore提供的內(nèi)容。注意,內(nèi)核在一個事務中處理文件
9、中的規(guī)則命 令,因此基本上新規(guī)則的刷新和加載發(fā)生在一個單獨的事務中。有些人喜歡用規(guī)則集來維護一個 shell腳本文件。注意這種方法,你不能使用shell腳本文件來實現(xiàn)原子規(guī)則集更新。因此,最好的方法是使用本機 nftables腳本功能,并通過nft -f恢復規(guī)則集。、從命令行報告錯誤當您使用錯誤的數(shù)據(jù)類型時,nft命令行實用程序會嘗試幫助您。以下示例顯示如果將IPv4地址作為TCP端口傳遞,則錯誤輸出。% nft add rule filter input tcp dport counter drop:1:33-39: Error: Could not resolve service: Ser
10、vname not supported for ai_socktypeadd rule filter input tcp dport counter drop如果命令不完整,典型輸出如下:% nft add rule filter input tcp dport:1:32-32: Error: syntax error, unexpected end of fileadd rule filter input tcp dport、通過表達式構建規(guī)則nftables提供以下內(nèi)置操作:NE表示不相等,或者你可以使用!=LT表示小于,或者你可以使用 LE表示小于等于,或者你可以使用二注意:如果您使用來
11、自shell的符號,因為它會將它們分別解釋為標準輸入和輸出 重定向。你需要逃避他們,例如。 = 1024、規(guī)則集級別的操作、使用原生nft語法Linux Kernel包括一些有關管理您的規(guī)則集作為一個整體的可用操作的改進。1、查看規(guī)則集清單列出完整的規(guī)則集% nft list ruleset列出每個系列的規(guī)則集% nft list ruleset arp% nft list ruleset ip% nft list ruleset ip6% nft list ruleset bridge% nft list ruleset inet這些命令將打印給定系列的所有表/鏈/集/規(guī)則。2、刪除規(guī)則集此
12、外,您還可以沖洗(擦除,刪除,擦除)完整的規(guī)則集:% nft flush ruleset也適用于每個系列:% nft flush ruleset arp% nft flush ruleset ip% nft flush ruleset ip6% nft flush ruleset bridge% nft flush ruleset inet3、備份和還原您可以組合以上兩個命令來備份您的規(guī)則集:% echo nft flush ruleset % nft list ruleset 并原子加載:% nft -f4、以 XML 或 JSON&式您還可以以XML或JSON&式導出規(guī)則集。% nft e
13、xport xml % nft export json 注意,導出操作輸出所有家庭(ip, ip6, inet, arp, bridge)的所有表、監(jiān)視規(guī)則集更新nft可以通過以下方式顯示規(guī)則集更新的通知:% nft monitor這將訂閱任何種類的規(guī)則集更新。您可以按以下類型過濾掉事件:object: tables, chains, rules, sets and elements.event: new and destroy.輸出格式可以是:plain text (ie. native nft format)xmljson以下示例顯示了如何跟蹤規(guī)則更新:% nft monitor rule
14、s如果您只想接收新規(guī)則:% nft monitor new rules有點更發(fā)達的例子在終端中鍵入以下內(nèi)容:term1% nft monitor從不同的終端,如果你鍵入:term2% nft add table inet filterterm2% nft add chain inet filter forwardterm2% nft add rule inet filter forward counter acceptterm2% nft flush table inet filter forwardterm2% nft flush ruleset然后,如果你回到term1,你會看到:term
15、1% nft monitoradd table inet filteradd chain inet filter forwardadd rule inet filter forward counter packets 0 bytes 0 acceptdelete rule inet filter forward handle 4delete chain inet filter forward delete table inet filter、腳本三、數(shù)據(jù)包匹配支持的選項、匹配數(shù)據(jù)包報頭字段nft命令行實用程序支持以下的第4層協(xié)議:AH, ESR UDP, UDPlite, TCP, DCCRS
16、CTP IPComp。、匹配傳輸協(xié)議以下規(guī)則顯示如何匹配任何類型的TCP流量:% nft add rule filter output ip protocol tcp、匹配以太網(wǎng)頭字段如果要匹配目標地址為 ff: ff: ff: ff: ff: ff的以太網(wǎng)流量,可以鍵入以下命令:% nft add rule filter input ether daddr ff:ff:ff:ff:ff:ff counter不要忘記,第2層頭信息僅在input路徑中可用。、匹配IPv4報頭字段您還可以根據(jù)IPv4源和目標匹配流量,以下示例顯示如何計入來自并且發(fā)往的所有流量:% nft add rule fil
17、ter input ip saddr ip daddr counter請注意,由于規(guī)則附加到輸入鏈,本地機器需要使用地址,否則您將看不到任何匹配的;-)。要過濾像TCP這樣的第4層協(xié)議,可以使用protocol關鍵字:% nft add rule filter input protocol tcp counter、匹配Ipv6標頭字段如果要計算尋址到 abdc二100的IPv6流量,可以鍵入以下命令:% nft add rule filter output ip6 daddr abcd:100 counter要過濾像TCP這樣的第4層協(xié)議,可以使用nexthdr關鍵字:% nft add ru
18、le filter input ip6 nexthdr tcp counter不要忘記創(chuàng)建一個ip6表并注冊相應的鏈來運行下面的例子:、匹配 TCP / UDP / UDPlite流量以下示例顯示如何丟棄低TCP端口( 1-1024)的所有tcp流量:% nft add rule filter input tcp dport 1-1024 counter drop請注意,此規(guī)則使用間隔(從 1到1024)要匹配TCP標志,需要使用二進制操作。例如,要計數(shù)非SYNC的數(shù)據(jù)包:% nft add rule filter input tcp flags != syn counter可以使用更復雜的過
19、濾器。例如,要計數(shù)和記錄標志SYN和ACK設置的TCP數(shù)據(jù)包:% nft -inft add rule filter output tcp flags & (syn | ack) = syn | ack counter log、匹配ICMP流量您可以通過以下方式刪除所有ICMP回顯請求(通常稱為 ping):% nft add rule filter input icmp type echo-request counter drop這里是可用的icmp類型的列表:名稱說明echo-reply回聲應答destination-unreachable目的地不可達source-quench來源淬火re
20、direct重定向echo-requesttime-exceeded時間超過parameter-problem參數(shù)問題timestamp-request時間戳請求timestamp-reply時間戳回復info-request信息請求info-reply信息回復address-mask-request地址掩碼請求address-mask-reply地址掩碼回復、匹配數(shù)據(jù)包元信息nftables附帶了分組元信息選擇器,您可以使用它來匹配存儲在網(wǎng)絡數(shù)據(jù)包中的元信 息。、元選擇器您可以匹配的當前元信息是:接口設備名稱和接口設備索引:iifname, oifname, iif and oif.接 口類
21、型:iiftyte and oiftype.TC 手柄:priority.socket user and group 標識:skuid and skgid.包長度:length.、按接口名稱匹配數(shù)據(jù)包您可以使用以下選擇器來匹配接名稱:iifname,用來匹配輸入網(wǎng)絡接口名稱。oifname,用來匹配輸出網(wǎng)絡接口名稱。IIF,用來匹配網(wǎng)絡接口名稱的接口索引。這比iifname快,因為它只需要比較一個32位無符號整數(shù)而不是一個字符串。接口索引是動態(tài)分配的,因此不要將其用于動態(tài)創(chuàng)建和銷毀的接口,例如。 ppp0oOIF,像iif,但它匹配輸出網(wǎng)絡接口索引。接口名稱的示例用法如下:% nft add
22、rule filter input meta oifname lo accept此規(guī)則接受環(huán)回偽設備lo的所有流量。、按包標記匹配數(shù)據(jù)包您可以使用以下規(guī)則匹配標記為123的數(shù)據(jù)包:nft add rule filter output meta mark 123 counter、匹配數(shù)據(jù)包的套接字UID您可以使用您的用戶名來匹配流量,例如。% nft add rule filter output meta skuid pablo counter或者在給定用戶的/ etc / passwd中沒有條目的情況下,使用 32位無符號整數(shù) (UID)。% nft add rule filter outpu
23、t meta skuid 1000 counter讓我們只是生成一些HTTP流量來測試此規(guī)則:% wget -spider然后,如果檢查計數(shù)器,您可以驗證數(shù)據(jù)包是否匹配該規(guī)則。% nft list table filtertable ip filter chain output type filter hook output priority 0;skuid pablo counter packets 7 bytes 510)chain input type filter hook input priority 0;)重要:請注意,如果您使用ping測試,通常使用suid安裝,以便流量匹配ro
24、ot用戶(uid = 0)。、匹配連接跟蹤狀態(tài)元信息正如在iptables中一樣,您可以匹配 Netfilter通過連接跟蹤系統(tǒng)收集的狀態(tài)跟蹤信息 (有時稱為conntrack或ct信息)以部署狀態(tài)防火墻。、匹酉己conntrack信息nftables提供了 ct選擇器,可以用來匹配:1、狀態(tài)信息:new, established, related and invalid.在這方面,與 iptables 沒有改變;2、 conntrack 的標志;、匹配狀態(tài)信息以下示例說明如何使用nftables部署極為簡單的狀態(tài)防火墻:nft add rule filter input ct state e
25、stablished,related counter accept #1nft add rule filter input counter drop #2規(guī)則# 1允許作為與網(wǎng)絡已經(jīng)建立的通信的一部分的分組。因此,從網(wǎng)絡中的計算機到達您的計算機的任何嘗試將被刪除。但是,作為您已啟動的流的一部分的流量將被接受。請注意,上面的示例使用逗號分隔的您要匹配的狀態(tài)列表。如果你不熟悉Netfilter數(shù)據(jù)流狀態(tài)機,可以快速閱讀一下:、匹酉己conntrack標t己以下示例顯示如何根據(jù)conntrack標記匹配數(shù)據(jù)包:nft add rule filter input ct mark 123 counter
26、要了解更多的關于鏈接跟蹤標記和標記數(shù)據(jù)包,請查閱下面鏈接:、速率限制匹配您可以通過限速對流量進行限制。以下示例顯示如何每秒接受最多10個ICMP回顯請求數(shù)據(jù)包:% nft add rule filter input icmp type echo-request limit rate 10/second accept從Linux內(nèi)核,你也可以ratelimit每個字節(jié):% nft add rule filter input limit rate 10 mbytes/second accept以上規(guī)則接受低于10 mbytes /秒速率的流量。您還可以使用burst參數(shù)指示可以超過速率限制的數(shù)據(jù)包
27、/字節(jié)數(shù):% nft add rule filter input limit rate 10 mbytes/second burst 9000 kbytes accept這表示您可以超過9000 kbytes的時候進行速率限制。您還可以將其用于數(shù)據(jù)包:% nft add rule filter input icmp type echo-request limit rate 10/second burst 2 packets counter accept所以你可以超過2包每秒后進行速率限制。限制表達式,您可以將其用于來自入口的流量監(jiān)管,作為來自新netdev系列的tc的替代。四、對數(shù)據(jù)包支持的處
28、理措施、接受和丟棄數(shù)據(jù)包、丟棄數(shù)據(jù)包您可以使用drop選項丟棄數(shù)據(jù)包。請注意,drop是一個終止操作,因此您無法在其后添加任何其他操作(此操作放在其他所有操作之后)。nft add rule filter output drop請注意,當測試這個,你可能會失去任何互聯(lián)網(wǎng)連接:-)。、接受包接受任何類型流量的簡單規(guī)則是:nft add rule filter output accept您可以向該規(guī)則添加計數(shù)器:nft add rule filter output counter accept因此,您可以觀看所有流量實際接受:nft list table filtertable ip filter
29、 chain output type filter hook output priority 0;counter packets 1 bytes 84 accept、跳到鏈像iptables 一樣,你可以使用鏈的樹來構造你的規(guī)則集。為此,您首先需要通過以下方式創(chuàng)建自定義鏈:% nft add chain ip filter tcp-chain上面的示例創(chuàng)建了tcp鏈,將用于添加規(guī)則以過濾 tcp流量,例如。% nft add rule ip filter input ip protocol tcp jump tcp-chain我們可以添加一個簡單的規(guī)則到tcp-chain來計算包和字節(jié):% n
30、ft add rule ip filter tcp-chain counter列表應該顯示:% nft list table filtertable ip filter chain input type filter hook input priority 0;ip protocol tcp jump tcp-chainchain tcp-chain counter packets 8 bytes 2020)計數(shù)器應通過生成簡單的 TCP流量來更新。注意:您只能跳轉(zhuǎn)到非基本鏈。、jump 與 goto請注意jump和goto之間的區(qū)別。1、如果使用jump來獲取在另一個鏈中處理的數(shù)據(jù)包,數(shù)據(jù)包
31、將在結束后返回到調(diào)用 規(guī)則的鏈。2、但是,如果使用goto,數(shù)據(jù)包將在另一個鏈中處理,但它們不會返回到調(diào)用規(guī)則的 鏈。在這種情況下,應用于數(shù)據(jù)包的默認策略將是開始處理數(shù)據(jù)包的原始基礎鏈的默 認策略。jump示例:分組是:SRC = DST = TCP 口 111 運動 222table ip filter chain input type filter hook input priority 0; policy accept;this is the 1o matching ruleip saddr ip daddr tcp dport 111 tcp dport 222 jump other-
32、chainthis is the 3o matching ruleip saddr ip daddr tcp dport 111 tcp dport 222 accept)chain other-chain this is the 2o matching rulecounter packets 8 bytes 2020) goto示例:分組是:SRC = DST = T的口 111運動222table ip filter chain input ype filter hook input priority 0; policy accept;this is the 1o matching rul
33、edefault policy accept will be applied after other-chain ends processingip saddr ip daddr tcp dport 111 tcp dport 222 goto other-chainthis rule will never be reached by this packet!ip saddr ip daddr tcp dport 111 tcp dport 222 acceptchain other-chain this is the 2o matching rulecounter packets 8 byt
34、es 2020、拒絕流量注意:完全拒絕支持可用,在 Linux內(nèi)核。以下規(guī)則顯示如何拒絕來自網(wǎng)絡的所有流量:% nft add rule filter input reject如果不指定任何原因,則會在 ICMP / ICMPv6端口發(fā)送不可達報文到源。您可以通過ct選擇器縮小此范圍,因此這只會拒絕來自本地計算機的流量,而不是源 自我們的流量。% nft add rule filter input ct state new reject您還可以指定拒絕原因。例如:% nft add rule filter input reject with icmp type host-unreachable
35、對于ICMP,您可以使用以下拒絕原因:net-unreachable:目標網(wǎng)絡不可達host-unreachable:目標主機不可訪問prot-unreachable:目標協(xié)議不可訪問port-unreachable:目的端口不可達net-prohibited:網(wǎng)絡管理方式禁止host-prohibited:主機管理方式禁止admin-prohibited:通訊管理方式禁止您還可以拒絕指示拒絕原因的IPv6流量,例如:% nft add rule ip6 filter input reject with icmpv6 type no-route對于ICMPv6,您可以使用以下原因:no-rou
36、te:沒有到目的地址的路由admin-prohibited:與目的地的通信方式禁止addr-unreachable:地址不可達port-unreachable:端口不可達從inet系列,您可以使用一個抽象,即所謂的icmpx,使用一個單一的規(guī)則來拒絕IPv4和IPv6流量。例如:% nft add rule inet filter input reject with icmpx type no-route此規(guī)則拒絕原因為net unreachable ”的IPv4流量和原因為no route ”的IPv6流量 映射如下表所示:ICMPX REASON ICMPv6ICMPv4admin-prohibitedadmin-prohibitedadmin
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024建筑行業(yè)勞務輸出與班組合作協(xié)議版B版
- 2025年度顯示屏安裝與系統(tǒng)集成服務合同3篇
- 2025版智能交通系統(tǒng)建設第三方擔保及運營合同3篇
- 2024版供貨商管理協(xié)議3篇
- 二零二五年度化妝品包裝盒設計制作合同3篇
- 2025年度新型可降解包裝材料研發(fā)及生產(chǎn)合同3篇
- 2024年裝配式住宅施工借款合同范本3篇
- 二零二五年度醫(yī)療器械臨床試驗研究者損害賠償責任協(xié)議2篇
- 2025版高端石材礦山開采權出讓合同2篇
- 2024年高效農(nóng)業(yè)種植技術轉(zhuǎn)讓合同
- 商業(yè)發(fā)票INVOICE模板
- (完整版)食堂管理制度及流程
- 超聲波焊接作業(yè)指導書(共8頁)
- 某醫(yī)院后備人才梯隊建設方案
- 二年級上冊英語教案Unit6 Lesson22︱北京課改版
- 桂枝加龍骨牡蠣湯_金匱要略卷上_方劑加減變化匯總
- 電機與電氣控制技術PPT課件
- 廢棄鉆井泥漿和壓裂返排液無害化處理研究報告
- 論文-基于單片機的搶答器.doc
- 《AFM簡介實驗》ppt課件
- 客運公司崗位安全生產(chǎn)操作規(guī)程
評論
0/150
提交評論