主頁 >  其他 > 讓 Linux 防火墻新秀 nftables 為你的 VPS 保駕護航

讓 Linux 防火墻新秀 nftables 為你的 VPS 保駕護航

2020-09-14 15:41:11 其他

上篇文章 給大家介紹了 nftables 的優點以及基本的使用方法,它的優點在于直接在用戶態把網路規則編譯成位元組碼,然后由內核的虛擬機執行,盡管和 iptables 一樣都是基于 netfilter,但 nftables 的靈活性更高,

之前用 iptables 匹配大量資料時,還得需要 ipset 配合,而 nftables 直接內置了集合和字典,可以直接匹配大量的資料,這一點比 iptables 方便多了,拿來練練魔法真是極好的,不多解釋,請直接看 Linux全域智能分流方案,

本文將會教你如何配置 nftables 來為服務器實作一個簡單的防火墻,本文以 CentOS 7 為例,其他發行版類似,

1. 安裝 nftables

首先需要安裝 nftables:

$ yum install -y nftables

由于 nftables 默認沒有內置的鏈,但提供了一些示例配置,我們可以將其 include 到主組態檔中,主組態檔為 /etc/sysconfig/nftables.conf,將下面一行內容取消注釋:

# include "/etc/nftables/inet-filter"

然后啟動 nftables 服務:

$ systemctl start nftables

現在再次查看規則,就會發現多了一張 filter 表和幾條鏈:

$ nft list ruleset

table inet filter {
	chain input {
		type filter hook input priority 0; policy accept;
	}

	chain forward {
		type filter hook forward priority 0; policy accept;
	}

	chain output {
		type filter hook output priority 0; policy accept;
	}
}

在 nftables 中,ipv4ipv6 協議可以被合并到一個單一的地址簇 inet 中,使用了 inet 地址簇,就不需要分別為 ipv4 和 ipv6 指定兩個不同的規則了,

2. 添加 INPUT 規則

和 iptables 一樣,nftables 的 filter 表包含三條鏈:INPUTFORWARDOUTPUT,一般配置防火墻只需要配置 INPUT 鏈就好了,

回環介面

首先允許訪問 localhost:

$ nft add rule inet filter input iif "lo" accept
$ nft add rule inet filter input iif != "lo" ip daddr 127.0.0.0/8 drop

可以再優化一下,加上注解(comment)和計數器(counter):

$ nft add rule inet filter input \
   iif "lo" \
   accept \
   comment \"Accept any localhost traffic\"

$ nft add rule inet filter input \
   iif != "lo" ip daddr 127.0.0.0/8 \
   counter \
   drop \
   comment \"drop connections to loopback not coming from loopback\"

查看規則:

$ nft list chain inet filter input

table inet filter {
	chain input {
		type filter hook input priority 0; policy accept;
		iif "lo" accept comment "Accept any localhost traffic"
		iif != "lo" ip daddr 127.0.0.0/8 counter packets 0 bytes 0 drop comment "drop connections to loopback not coming from loopback"
	}
}

連接跟蹤模塊

接下來的規則用到一個內核模塊叫 conntrack(connection tracking),它被用來跟蹤一個連接的狀態,最常見的使用場景是 NAT,為什么需要跟蹤記錄連接的狀態呢?因為 nftables 需要記住資料包的目標地址被改成了什么,并且在回傳資料包時再將目標地址改回來,

和 iptables 一樣,一個 TCP 連接在 nftables 中總共有四種狀態:NEWESTABLISHEDRELATEDINVALID

除了本地產生的包由 OUTPUT 鏈處理外,所有連接跟蹤都是在 PREROUTING 鏈里進行處理的,意思就是, iptables 會在 PREROUTING 鏈里從新計算所有的狀態,如果我們發送一個流的初始化包,狀態就會在 OUTPUT 鏈里被設定為 NEW,當我們收到回應的包時,狀態就會在 PREROUTING 鏈里被設定為 ESTABLISHED,如果收到回應的第一個包不是本地產生的,那就會在 PREROUTING 鏈里被設定為 NEW 狀態,綜上,所有狀態的改變和計算都是在 nat 表中的 PREROUTING 鏈和 OUTPUT 鏈里完成的,

還有其他兩種狀態:

  • RELATED : RELATED 狀態有點復雜,當一個連接與另一個已經是 ESTABLISHED 的連接有關時,這個連接就被認為是 RELATED,這意味著,一個連接要想成為 RELATED,必須首先有一個已經是 ESTABLISHED 的連接存在,這個 ESTABLISHED 連接再產生一個主連接之外的新連接,這個新連接就是 RELATED 狀態了,
  • INVAILD : 表示分組對應的連接是未知的,說明資料包不能被識別屬于哪個連接或沒有任何狀態,有幾個原因可以產生這種情況,比如,記憶體溢位,收到不知屬于哪個連接的 ICMP 錯誤資訊,我們需要 DROP 這個狀態的任何東西,并列印日志:
$ nft add rule inet filter input \
   ct state invalid \
   log prefix \"Invalid-Input: \" level info flags all \
   counter \
   drop \
   comment \"Drop invalid connections\"

查看規則:

$ nft list chain inet filter input

table inet filter {
	chain input {
		type filter hook input priority 0; policy accept;
		iif "lo" accept comment "Accept any localhost traffic"
		iif != "lo" ip daddr 127.0.0.0/8 counter packets 0 bytes 0 drop comment "drop connections to loopback not coming from loopback"
		ct state invalid log prefix "Invalid-Input: " level info flags all counter packets 0 bytes 0 drop comment "Drop invalid connections"
	}
}

令牌桶

為了防止有惡意攻擊者利用 ping 泛洪(ping flood)來進行攻擊,可以利用令牌桶模型來對 ping 包限速,ping 泛洪的原理很簡單,就是采用多執行緒的方法一次性發送多個 ICMP 請求報文,讓目的主機忙于處理大量這些報文而造成速度緩慢甚至宕機,

先來介紹一下令牌桶模型,

熟悉 iptables 的朋友應該知道,iptables 通過 hashlimit 模塊來實作限速的功能,而 hashlimit 的匹配方式就是基于令牌桶(Token bucket)的模型,nftables 也類似,
令牌桶是一種網路通訊中常見的緩沖區作業原理,它有兩個重要的引數,令牌桶容量 n令牌產生速率 s

  • 令牌桶容量 n:可以把令牌當成是門票,而令牌桶則是負責制作和發放門票的管理員,它手里最多有n張令牌,初始時,管理員開始手里有 n 張令牌,每當一個資料包到達后,管理員就看看手里是否還有可用的令牌,如果有,就把令牌發給這個資料包,limit 就告訴nftables,這個資料包被匹配了,而當管理員把手上所有的令牌都發完了,再來的資料包就拿不到令牌了;這時,limit 模塊就告訴 nftables ,這個數據包不能被匹配,
  • 令牌產生速率 s:當令牌桶中的令牌數量少于 n,它就會以速率 s 來產生新的令牌,直到令牌數量到達 n 為止,

通過令牌桶機制,可以有效的控制單位時間內通過(匹配)的資料包數量,又可以容許短時間內突發的大量資料包的通過(只要資料包數量不超過令牌桶 n),真是妙哉啊,

nftables 比 iptables 做的更絕,它不僅可以基于資料包來限速,也可以基于位元組來限速,為了更精確地驗證令牌桶模型,我們選擇基于位元組來限速:

$ nft add rule inet filter input \
   ip protocol icmp icmp type echo-request \
   limit rate 20 bytes/second burst 500 bytes \
   counter \
   accept \
   comment \"No ping floods\"

上面的規則表示:

  • 為所有 echo-request 型別的 ICMP 包建立一個匹配項;
  • 匹配項對應的令牌桶容量為 500 個位元組;
  • 令牌產生速率為 20 位元組/s

再添加一條規則,拒絕不滿足上訴條件的資料包:

$ nft add rule inet filter input \
   ip protocol icmp icmp type echo-request \
   drop \
  comment \"No ping floods\"

同時還要接收狀態為 ESTABLISHED 和 RELATED 的資料包:

$ nft add rule inet filter input \
   ct state \{ established, related \} \
   counter \
   accept \
   comment \"Accept traffic originated from us\"

下面來做個實驗,直接 ping 該服務器的 IP 地址,ping 包大小設定為 100 位元組,每秒發送一次:

$ ping -s 92 192.168.57.53 -i 1

PING 192.168.57.53 (192.168.57.53) 92(120) bytes of data.
100 bytes from 192.168.57.53: icmp_seq=1 ttl=64 time=0.402 ms
100 bytes from 192.168.57.53: icmp_seq=2 ttl=64 time=0.373 ms
100 bytes from 192.168.57.53: icmp_seq=3 ttl=64 time=0.465 ms
100 bytes from 192.168.57.53: icmp_seq=4 ttl=64 time=0.349 ms
100 bytes from 192.168.57.53: icmp_seq=5 ttl=64 time=0.411 ms
100 bytes from 192.168.57.53: icmp_seq=11 ttl=64 time=0.425 ms
100 bytes from 192.168.57.53: icmp_seq=17 ttl=64 time=0.383 ms
100 bytes from 192.168.57.53: icmp_seq=23 ttl=64 time=0.442 ms
100 bytes from 192.168.57.53: icmp_seq=29 ttl=64 time=0.464 ms
...

首先我們能看到前 5 個包的回應都非常正常,然后從第 6 個包開始,我們每 6 秒能收到一個正常的回應,這是因為我們設定了令牌桶的容量為 500 個位元組,令牌產生速率為 20 位元組/s,而發包的速率是每秒鐘 100 個位元組,即每個包 100 個位元組,當發完 5 個包后,令牌桶的容量變為 0,這時開始以 20 位元組/s 的速率產生新令牌(和前面提到的令牌桶演算法不太一樣,只有當令牌桶容量為 0 才開始產生新的令牌),5 秒鐘之后,令牌桶的容量變為 100 個位元組,所以 6 秒鐘后又能收到正常回應,

ICMP & IGMP

接收其他型別的 ICMP 協議資料包:

$ nft add rule inet filter input \
   ip protocol icmp icmp type \{ destination-unreachable, router-advertisement, router-solicitation, time-exceeded, parameter-problem \} \
   accept \
   comment \"Accept ICMP\"

接收 IGMP 協議資料包:

$ nft add rule inet filter input \
   ip protocol igmp \
   accept \
   comment \"Accept IGMP\"

分別處理 TCP 和 UDP

這一步我們將 TCP 和 UDP 的流量拆分,然后分別處理,先創建兩條鏈:

$ nft add chain inet filter TCP
$ nft add chain inet filter UDP

然后創建一個命名字典:

$ nft add map inet filter input_vmap \{ type inet_proto : verdict \; \}

字典的鍵表示協議型別,值表示判決動作,

往字典中添加元素:

$ nft add element inet filter input_vmap \{ tcp : jump TCP, udp : jump UDP \}

最后創建一條規則拆分 TCP 和 UDP 的流量:

$ nft add rule inet filter input meta l4proto vmap @input_vmap

其中,meta l4proto 用來匹配協議的型別,

最后再瞄一眼規則:

$ nft list ruleset

table inet filter {
	map input_vmap {
		type inet_proto : verdict
		elements = { tcp : jump TCP, udp : jump UDP }
	}

	chain input {
		type filter hook input priority 0; policy accept;
		iif "lo" accept comment "Accept any localhost traffic"
		iif != "lo" ip daddr 127.0.0.0/8 counter packets 0 bytes 0 drop comment "drop connections to loopback not coming from loopback"
		ct state invalid log prefix "Invalid-Input: " level info flags all counter packets 95 bytes 6479 drop comment "Drop invalid connections"
		icmp type echo-request limit rate 20 bytes/second burst 500 bytes counter packets 17 bytes 2040 accept comment "No ping floods"
		icmp type echo-request drop comment "No ping floods"
		ct state { established, related } counter packets 172135 bytes 99807569 accept comment "Accept traffic originated from us"
		icmp type { destination-unreachable, router-advertisement, router-solicitation, time-exceeded, parameter-problem } accept comment "Accept ICMP"
		ip protocol igmp accept comment "Accept IGMP"
		meta l4proto vmap @input_vmap
	}

	chain forward {
		type filter hook forward priority 0; policy accept;
	}

	chain output {
		type filter hook output priority 0; policy accept;
	}

	chain TCP {
	}

	chain UDP {
	}
}

3. 處理 TCP 流量

這一步我們來處理 TCP 流量,首當其沖的就是 ssh 了,必須得給這位大哥放行啊:

$ nft add rule inet filter TCP \
   tcp dport 22 \
   ct state new \
   limit rate 15/minute \
   log prefix \"New SSH connection: \" \
   counter \
   accept \
   comment \"Avoid brute force on SSH\"

其次需要放行 Web 服務,和上面一樣,為了易于管理,方便后續動態添加埠,需要先創建一個命名集合:

$ nft add set inet filter web \{ type inet_service \; flags interval \; \}

查看集合:

$ nft list set inet filter web

table inet filter {
	set web {
		type inet_service
		flags interval
	}
}

向集合中添加元素:

$ nft add element inet filter web \{ 80, 443 \}

查看集合:

$ nft list set inet filter web

table inet filter {
	set web {
		type inet_service
		flags interval
		elements = { http, https }
	}
}

放行 Web 服務:

$ nft add rule inet filter TCP \
   tcp dport @web \
   counter \
   accept \
   comment \"Accept web server\"

如果你還有其他不可描述的應用,比如 xxx 之類的代理,可以按照上面的方式添加規則,先創建集合:

$ nft add set inet filter xxx \{ type inet_service \; flags interval \; \}

再添加元素:

$ nft add element inet filter xxx \{ 9000-9005, 9007 \}

查看集合:

$ nft list set inet filter xxx

table inet filter {
	set xxx {
		type inet_service
		flags interval
		elements = { 9000-9005, 9007 }
	}
}

現在體會到 nftables 集合的強大了吧,可以是區間,可以是單個元素組成的集合,也可以混合,iptables 麻煩讓一讓,

放行不可描述的服務:

$ nft add rule inet filter TCP \
   tcp dport @xxx \
   counter \
   accept \
   comment \"Accept xxx\"

4. 處理 UDP 流量

這一步我們來處理 UDP 流量,比如上面舉例的不可描述的應用,除了 TCP 埠還有 UDP 埠,具體用處我就不解釋了,自己面向谷歌找答案吧,

到了這一步,連集合都不用創建, 直接復用之前創建的集合,放行不可描述應用的 UDP 資料:

$ nft add rule inet filter UDP \
   udp dport @xxx \
   counter \
   accept \
   comment \"Accept xxx\"

查看規則:

$ nft list chain inet filter UDP

table inet filter {
	chain UDP {
		udp dport @xxx counter packets 0 bytes 0 accept comment "Accept xxx"
	}
}

其他 UDP 資料都可按此套路模塊化,簡直不要太賞心悅目,

為了使系統或 nftables 重啟后能夠繼續生效,我們需要將這些規則持久化,直接將規則寫入 /etc/nftables/inet-filter

$ echo "#! /usr/sbin/nft -f" > /etc/nftables/inet-filter
$ nft list ruleset >> /etc/nftables/inet-filter

開機自動加載 nftables 服務:

$ systemctl enable nftables

5. 在 rsyslog 中記錄日志

默認情況下,開啟日志記錄后,日志會直接進入 syslog,和系統日志混在一起,不好讀取,最好的辦法是將 nftables 的日志重定向到單獨的檔案,

以本文為例,我們只開啟了 ct state invalidssh 的日志記錄,先在 /var/log 目錄中創建一個名為 nftables 的目錄,并在其中創建兩個名為 invalid.logssh.log 的檔案,分別存盤各自的日志,

$ mkdir /var/log/nftables
$ touch /var/log/nftables/{ssh.log,invalid.log}

確保系統中已安裝 rsyslog,現在進入 /etc/rsyslog.d 目錄并創建一個名為 nftables.conf 的檔案,其內容如下:

:msg,regex,"Invalid-Input: " -/var/log/nftables/invalid.log
:msg,regex,"New SSH connection: " -/var/log/nftables/ssh.log

最后,為了確保日志是可管理的,需要在 /etc/logrotate.d 中創建一個 nftables 檔案:

$ cat /etc/logrotate.d/nftables

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

重新通過 ssh 連接服務器,就能看到日志了:

$ tail -f /var/log/nftables/ssh.log

Dec 19 17:15:33 [localhost] kernel: New SSH connection: IN=ens192 OUT= MAC=00:50:56:bd:2f:3d:00:50:56:bd:d7:24:08:00 SRC=https://www.cnblogs.com/ryanyangcs/p/192.168.57.2 DST=192.168.57.53 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=43312 DF PROTO=TCP SPT=41842 DPT=22 WINDOW=29200 RES=0x00 SYN URGP=0

6. 總結

本文教你如何使用 nftables 搭建一個簡單的防火墻,并通過集合和字典將規則集模塊化,后續可動態添加埠和 IP 等元素,而不用修改規則,更復雜的規則將會在后面的文章介紹,下篇文章將會教你如何使用 nftables 來防 DDoS 攻擊,敬請期待,

微信公眾號

掃一掃下面的二維碼關注微信公眾號,在公眾號中回復?加群?即可加入我們的云原生交流群,和孫宏亮、張館長、陽明等大佬一起探討云原生技術

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/36418.html

標籤:其他

上一篇:北斗對時裝置(北斗時鐘服務器)應用及介紹

下一篇:北斗衛星時鐘(北斗授時服務器)廠家介紹及價格分析

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more