自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

過(guò)渡到nftables,如何構(gòu)建nftables的教程

開(kāi)源
開(kāi)源世界中的每個(gè)主要發(fā)行版都在演進(jìn),逐漸將 nftables 作為了默認(rèn)防火墻。換言之,古老的 iptables 現(xiàn)在已經(jīng)消亡。本文是有關(guān)如何構(gòu)建 nftables 的教程。

[[280617]]

開(kāi)源世界中的每個(gè)主要發(fā)行版都在演進(jìn),逐漸將 nftables 作為了默認(rèn)防火墻。換言之,古老的 iptables 現(xiàn)在已經(jīng)消亡。本文是有關(guān)如何構(gòu)建 nftables 的教程。

當(dāng)前,有一個(gè)與 nftables 兼容的 iptables-nft 后端,但是很快,即使是它也不再提供了。另外,正如 Red Hat 開(kāi)發(fā)人員所指出的那樣,有時(shí)它可能會(huì)錯(cuò)誤地轉(zhuǎn)換規(guī)則。我們需要知道如何構(gòu)建自己的 nftables,而不是依賴(lài)于 iptables 到 nftables 的轉(zhuǎn)換器。

在 nftables 中,所有地址族都遵循一個(gè)規(guī)則。與 iptables 不同,nftables 在用戶(hù)空間中運(yùn)行,iptables 中的每個(gè)模塊都運(yùn)行在內(nèi)核(空間)中。它很少需要更新內(nèi)核,并帶有一些新功能,例如映射、地址族和字典。

地址族

地址族確定要處理的數(shù)據(jù)包的類(lèi)型。在 nftables 中有六個(gè)地址族,它們是:

  • ip
  • ipv6
  • inet
  • arp
  • bridge
  • netdev

在 nftables 中,ipv4 和 ipv6 協(xié)議可以被合并為一個(gè)稱(chēng)為 inet 的單一地址族。因此,我們不需要指定兩個(gè)規(guī)則:一個(gè)用于 ipv4,另一個(gè)用于 ipv6。如果未指定地址族,它將默認(rèn)為 ip 協(xié)議,即 ipv4。我們感興趣的領(lǐng)域是 inet 地址族,因?yàn)榇蠖鄶?shù)家庭用戶(hù)將使用 ipv4 或 ipv6 協(xié)議。

nftables

典型的 nftables 規(guī)則包含三個(gè)部分:表、鏈和規(guī)則。

表是鏈和規(guī)則的容器。它們由其地址族和名稱(chēng)來(lái)標(biāo)識(shí)。鏈包含 inet/arp/bridge/netdev 等協(xié)議所需的規(guī)則,并具有三種類(lèi)型:過(guò)濾器、NAT 和路由。nftables 規(guī)則可以從腳本加載,也可以在終端鍵入,然后另存為規(guī)則集。

對(duì)于家庭用戶(hù),默認(rèn)鏈為過(guò)濾器。inet 系列包含以下鉤子:

  • Input
  • Output
  • Forward
  • Pre-routing
  • Post-routing

使用腳本還是不用?

最大的問(wèn)題之一是我們是否可以使用防火墻腳本。答案是:這是你自己的選擇。這里有一些建議:如果防火墻中有數(shù)百條規(guī)則,那么最好使用腳本,但是如果你是典型的家庭用戶(hù),則可以在終端中鍵入命令,然后(保存并在重啟時(shí))加載規(guī)則集。每種選擇都有其自身的優(yōu)缺點(diǎn)。在本文中,我們將在終端中鍵入它們以構(gòu)建防火墻。

nftables 使用一個(gè)名為 nft 的程序來(lái)添加、創(chuàng)建、列出、刪除和加載規(guī)則。確保使用以下命令將 nftables 與 conntrackd 和 netfilter-persistent 軟件包一起安裝,并刪除 iptables:

  1. apt-get install nftables conntrackd netfilter-persistent
  2. apt-get purge iptables

nft 需要以 root 身份運(yùn)行或使用 sudo 運(yùn)行。使用以下命令分別列出、刷新、刪除規(guī)則集和加載腳本。

  1. nft list ruleset
  2. nft flush ruleset
  3. nft delete table inet filter
  4. /usr/sbin/nft -f /etc/nftables.conf

輸入策略

就像 iptables 一樣,防火墻將包含三部分:輸入(input)、轉(zhuǎn)發(fā)(forward)和輸出(output)。在終端中,為輸入(input)策略鍵入以下命令。在開(kāi)始之前,請(qǐng)確保已刷新規(guī)則集。我們的默認(rèn)策略將會(huì)刪除所有內(nèi)容。我們將在防火墻中使用 inet 地址族。將以下規(guī)則以 root 身份添加或使用 sudo 運(yùn)行:

  1. nft add table inet filter
  2. nft add chain inet filter input { type filter hook input priority 0 \; counter \; policy drop \; }

你會(huì)注意到有一個(gè)名為 priority 0 的東西。這意味著賦予該規(guī)則更高的優(yōu)先級(jí)。掛鉤通常賦予負(fù)整數(shù),這意味著更高的優(yōu)先級(jí)。每個(gè)掛鉤都有自己的優(yōu)先級(jí),過(guò)濾器鏈的優(yōu)先級(jí)為 0。你可以檢查 nftables Wiki 頁(yè)面以查看每個(gè)掛鉤的優(yōu)先級(jí)。

要了解你計(jì)算機(jī)中的網(wǎng)絡(luò)接口,請(qǐng)運(yùn)行以下命令:

  1. ip link show

它將顯示已安裝的網(wǎng)絡(luò)接口,一個(gè)是本地主機(jī)、另一個(gè)是以太網(wǎng)端口或無(wú)線(xiàn)端口。以太網(wǎng)端口的名稱(chēng)如下所示:enpXsY,其中 XY 是數(shù)字,無(wú)線(xiàn)端口也是如此。我們必須允許本地主機(jī)的流量,并且僅允許從互聯(lián)網(wǎng)建立的傳入連接。

nftables 具有一項(xiàng)稱(chēng)為裁決語(yǔ)句的功能,用于解析規(guī)則。裁決語(yǔ)句為 accept、drop、queue、jump、gotocontinuereturn。由于這是一個(gè)很簡(jiǎn)單的防火墻,因此我們將使用 acceptdrop 處理數(shù)據(jù)包。

  1. nft add rule inet filter input iifname lo accept
  2. nft add rule inet filter input iifname enpXsY ct state new, established, related accept

接下來(lái),我們必須添加規(guī)則以保護(hù)我們免受隱秘掃描。并非所有的隱秘掃描都是惡意的,但大多數(shù)都是。我們必須保護(hù)網(wǎng)絡(luò)免受此類(lèi)掃描。第一組規(guī)則列出了要測(cè)試的 TCP 標(biāo)志。在這些標(biāo)志中,第二組列出了要與第一組匹配的標(biāo)志。

  1. nft add rule inet filter input iifname enpXsY tcp flags \& \(syn\|fin\) == \(syn\|fin\) drop
  2. nft add rule inet filter input iifname enpXsY tcp flags \& \(syn\|rst\) == \(syn\|rst\) drop
  3. nft add rule inet filter input iifname enpXsY tcp flags \& \(fin\|rst\) == \(fin\|rst\) drop
  4. nft add rule inet filter input iifname enpXsY tcp flags \& \(ack\|fin\) == fin drop
  5. nft add rule inet filter input iifname enpXsY tcp flags \& \(ack\|psh\) == psh drop
  6. nft add rule inet filter input iifname enpXsY tcp flags \& \(ack\|urg\) == urg drop

記住,我們?cè)诮K端中鍵入這些命令。因此,我們必須在一些特殊字符之前添加一個(gè)反斜杠,以確保終端能夠正確解釋該斜杠。如果你使用的是腳本,則不需要這樣做。

關(guān)于 ICMP 的警告

互聯(lián)網(wǎng)控制消息協(xié)議(ICMP)是一種診斷工具,因此不應(yīng)完全丟棄該流量。完全阻止 ICMP 的任何嘗試都是不明智的,因?yàn)樗€會(huì)導(dǎo)致停止向我們提供錯(cuò)誤消息。僅啟用最重要的控制消息,例如回聲請(qǐng)求、回聲應(yīng)答、目的地不可達(dá)和超時(shí)等消息,并拒絕其余消息?;芈曊?qǐng)求和回聲應(yīng)答是 ping 的一部分。在輸入策略中,我們僅允許回聲應(yīng)答、而在輸出策略中,我們僅允許回聲請(qǐng)求。

  1. nft add rule inet filter input iifname enpXsY icmp type { echo-reply, destination-unreachable, time-exceeded } limit rate 1/second accept
  2. nft add rule inet filter input iifname enpXsY ip protocol icmp drop

最后,我們記錄并丟棄所有無(wú)效數(shù)據(jù)包。

  1. nft add rule inet filter input iifname enpXsY ct state invalid log flags all level info prefix \”Invalid-Input: \”
  2. nft add rule inet filter input iifname enpXsY ct state invalid drop

轉(zhuǎn)發(fā)和輸出策略

在轉(zhuǎn)發(fā)和輸出策略中,默認(rèn)情況下我們將丟棄數(shù)據(jù)包,僅接受已建立連接的數(shù)據(jù)包。

  1. nft add chain inet filter forward { type filter hook forward priority 0 \; counter \; policy drop \; }
  2. nft add rule inet filter forward ct state established, related accept
  3. nft add rule inet filter forward ct state invalid drop
  4. nft add chain inet filter output { type filter hook output priority 0 \; counter \; policy drop \; }

典型的桌面用戶(hù)只需要端口 80 和 443 即可訪(fǎng)問(wèn)互聯(lián)網(wǎng)。最后,允許可接受的 ICMP 協(xié)議并在記錄無(wú)效數(shù)據(jù)包時(shí)丟棄它們。

  1. nft add rule inet filter output oifname enpXsY tcp dport { 80, 443 } ct state established accept
  2. nft add rule inet filter output oifname enpXsY icmp type { echo-request, destination-unreachable, time-exceeded } limit rate 1/second accept
  3. nft add rule inet filter output oifname enpXsY ip protocol icmp drop
  4. nft add rule inet filter output oifname enpXsY ct state invalid log flags all level info prefix \”Invalid-Output: \”
  5. nft add rule inet filter output oifname enpXsY ct state invalid drop

現(xiàn)在我們必須保存我們的規(guī)則集,否則重新啟動(dòng)時(shí)它將丟失。為此,請(qǐng)運(yùn)行以下命令:

  1. sudo nft list ruleset. > /etc/nftables.conf

我們須在引導(dǎo)時(shí)加載 nftables,以下將在 systemd 中啟用 nftables 服務(wù):

  1. sudo systemctl enable nftables

接下來(lái),編輯 nftables 單元文件以刪除 Execstop 選項(xiàng),以避免在每次引導(dǎo)時(shí)刷新規(guī)則集。該文件通常位于 /etc/systemd/system/sysinit.target.wants/nftables.service?,F(xiàn)在重新啟動(dòng)nftables:

  1. sudo systemctl restart nftables

在 rsyslog 中記錄日志

當(dāng)你記錄丟棄的數(shù)據(jù)包時(shí),它們直接進(jìn)入 syslog,這使得讀取該日志文件非常困難。最好將防火墻日志重定向到單獨(dú)的文件。在 /var/log 目錄中創(chuàng)建一個(gè)名為 nftables 的目錄,并在其中創(chuàng)建兩個(gè)名為 input.logoutput.log 的文件,分別存儲(chǔ)輸入和輸出日志。確保系統(tǒng)中已安裝 rsyslog?,F(xiàn)在轉(zhuǎn)到 /etc/rsyslog.d 并創(chuàng)建一個(gè)名為 nftables.conf 的文件,其內(nèi)容如下:

  1. :msg,regex,”Invalid-Input: -/var/log/nftables/Input.log
  2. :msg,regex,”Invalid-Output: -/var/log/nftables/Output.log & stop

現(xiàn)在,我們必須確保日志是可管理的。為此,使用以下代碼在 /etc/logrotate.d 中創(chuàng)建另一個(gè)名為 nftables 的文件:

  1. /var/log/nftables/* { rotate 5 daily maxsize 50M missingok notifempty delaycompress compress postrotate invoke-rc.d rsyslog rotate > /dev/null endscript }

重新啟動(dòng) nftables?,F(xiàn)在,你可以檢查你的規(guī)則集。如果你覺(jué)得在終端中鍵入每個(gè)命令很麻煩,則可以使用腳本來(lái)加載 nftables 防火墻。我希望本文對(duì)保護(hù)你的系統(tǒng)有用。 

 

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2021-09-11 15:48:31

Linuxnftables代碼

2013-10-21 17:21:38

Linux內(nèi)核Nftablesiptables

2023-06-09 09:10:06

nftablesiptables

2021-05-31 19:04:50

低代碼平臺(tái)低代碼開(kāi)發(fā)

2014-02-18 10:59:52

nftablesLinux 3.13

2020-06-12 10:10:26

云計(jì)算IT技術(shù)

2020-05-11 18:13:51

GNULinuxnftables防火墻

2021-01-15 10:28:19

數(shù)據(jù)中心邊緣數(shù)據(jù)中心

2020-11-20 10:29:37

云計(jì)算邊緣計(jì)算物聯(lián)網(wǎng)

2011-03-30 09:58:54

IPv6過(guò)度IPv4

2020-09-15 16:27:31

邊緣計(jì)算

2012-12-10 09:51:33

Web formMVC

2012-06-08 09:25:57

私有云公有云

2018-04-04 13:42:54

2012-12-10 09:54:26

Web formMVCWeb

2016-04-14 09:12:20

惠普

2020-12-17 13:12:06

數(shù)據(jù)中心DCIMDMAAS

2023-06-01 11:35:42

Ubuntu操作系統(tǒng)

2012-08-22 09:57:44

IPv6IPv6 過(guò)渡

2013-11-20 09:22:44

IPv4過(guò)渡IPv6
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)