Shawn's Blog

一个伪程序员的伪技术博客

0X00 你需要一台 NAS 吗

不知怎么的,在移动互联网疯狂发展的今天,反而慢慢开始兴起了自建网络服务这种复古风潮。最近这些年身边的朋友同事越来越多聊到 NAS 了,甚至 B 站上出现了一小撮 NAS 区 UP 主(没错,你知道我说的是谁)。就更不说现在淘宝咸鱼上大量的 NAS 专用机箱,甚至是 3D 打印的定制化版本了。

你真的需要一台 NAS 吗?NAS 说白了就是一块连着网的硬盘,速度比直接插电脑上还慢一些,如果你平日里需要访问数据的设备并不多,且拥有一个台式电脑,那不如先买两块硬盘插上去。通过文件共享功能将台式机转换成一个带有存储功能的兼职 NAS。

如果你家里的多个手机、平板、电脑、电视都需要访问存储,或者你没有台式机可以扩容,那确实可以考虑搞一台 NAS。

我自己的需求是这样的:

  • 平时喜欢摄影,每次拍摄回来的照片少则 10G 多则 50G,日积月累已经有大几百 G 了,需要备份
  • 也喜欢拍一些视频,相机拍摄的码率都很高,随随便便 50G 100G 的,需要备份
  • 患有仓鼠症,喜欢囤一些高清电影电视剧来看,总共搞了有差不多 8T 了
  • 手机、平板、电视、电脑都需要访问上面的影视资源

什么,你说你就是想要,不管需求?那就买呀,挑着贵的和好玩的买~

0X01 我的 NAS 之路

最早的一台 NAS 是 2018 年买的 Synology DS118 性能烂到家了,也只有一个盘位,配了一块 4T 红盘,不过还是老老实实用了差不多 3 年。

DS118 存储告急之后打算升级 NAS,觉得自己很少用得上群晖引以为豪的软件,再加上对自己的技术实力有一捏捏🤏的信心,所以开始尝试自组 NAS。硬件选择了奔腾 G6400 + 16G 内存,第一次使用了 OMV ,觉得它对 Linux 的改动很少,所以相对来说更玩得惯。不过用了没多久还是换成了 TrueNAS Core,这套平台就稳定运行了很久。

当时买了 8T 的 HC320,买了没几天奇亚币就上天了,我的硬盘价格也跟着上天了。时隔一周,我 899 买的硬盘店家就卖 1899 了 🤷‍♂️

因为 TrueNAS Core 是基于 BSD 的系统,后来看 TrueNAS SCALE(基于 Linux 的)稳定了之后就切到了 SCALE 版本,也顺势将 G6400 升级成了 i3-10100,内存也加到了 32G。

升级之后的 NAS 一直稳定运行到了今年,突然有一天我觉得家里另外一台用作 homelab 的服务器开机时间太少了,然后我看着身边的一台性能「强劲」的 homelab 和一台性能「羸弱」的 NAS 陷入了沉思。沉思过后,从兜里掏出了一张「融合」:

0X02 有点强的硬件配置

说是融合,其实就是选用了 homelab 的 CPU内存主板和原 NAS 的机箱硬盘,大概配置如下

Name Model
CPU AMD Epyc 7551P 32C64T
主板 SuperMicro H11SSL-i
内存 DDR4 16G ECC * 4
HDD HC320 8T * 3
HDD 红盘 4T * 1
HDD 银河 4T * 1
SSD Intel 1.6T
网卡 Intel 2.5G

试问哪个程序员不想要一台 32 核 64 线程 64G 内存 近 30T 存储容量的 NAS 呢 🤣

配置单疑点:

  1. 真有必要上这种 CPU 吗?没有,完全没有,事实上是之前 i3-10100 应付我的需求也完全没有任何问题。我只是正好有这个,卖也不怎么值钱,不如装上。
  2. 真有必要上 64G 内存吗?没有,完全没有,事实上之前 32G 内存 应付我的需求也完全没有任何问题。我只是…有点上头,所以上了 64G。
  3. 真有必要搞这么多存储吗?没有,完全没有,事实上🤦‍♂️这个还是有的,或者说因人而异,毕竟我确实要存好多照片、视频和电影电视剧。
  4. 听说 HC320 很拉?其实我没觉得,所谓炒豆子声确实存在一些,不过也只存在于读写的时候,但是 NAS 其实大多数时候磁盘是可以休眠的。另外我放在桌子下面使用完全不会在意,只要别放卧室就没有问题。
  5. 你那个 1.6T 是不是有点扎眼?这是我在咸鱼上收的二手,当时放在 homelab 上用的,现在拿过来做缓存(缓存意味着丢了也问题不大),正经自己配置缓存的话一般 250G 就妥妥够用了。
阅读全文 »

0X00 来骗,来偷袭

这次来介绍一个来骗来偷袭的 Python 库:Faker。我们平时经常会跟数据库、跟 csv 这些东西打交道。尤其是当你设计一个数据库表的时候,开发和测试环境中只有空荡荡一个表,没有测试数据就很尴尬。

Faker 就是设计来解决这种问题的,它可以快速生成各种你需要的假数据。安装和使用都非常简单:pip install Faker 就可以完成安装。

这篇 mini 博客的目的是解决「不知道自己不知道」的问题,也就是说明有这么一个库可以做什么,然后介绍简单的用法;具体这个库的完整用法还是要去查看文档。

这里给出一个简单的使用实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env python3


from faker import Faker


faker = Faker('zh-cn')

print(faker.name())
print(faker.email())
print(faker.ipv4())
print(faker.ipv4_private())
print(faker.ipv4_public())
print(faker.city_name())

OUTPUT:

1
2
3
4
5
6
李林
[email protected]
96.124.160.192
192.168.72.158
220.137.146.132
张家港

这里仅仅有两条需要注意的:

  1. 实例化 faker 的时候记得标记语言,默认是英文信息;
  2. 实例化的 faker 每次调用都会生成新的假数据,只需要实例化一次即可;

Faker 支持生成非常非常非常多数据类型,这里就不也没必要一个个介绍出来。分享一个我自己的用法:可以用 dir(faker) 的方式看它究竟有多少假数据类型可用,也可以在 iPython 中实例化一个 faker 出来然后通过 faker. TAB 的方式进行补全,比如你输入 faker.ip TAB 就可以看到ipv4()/ipv4_network_class()/ipv4_private()/ipve_public()/ipv6()这些。

👇下面我让 GPT 生成了一段脚本,可以看到使用 Faker 创建假数据使用 AI 偷懒是多么的舒爽

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env python3

import csv
from faker import Faker

# Set up Faker with Chinese locale
fake = Faker('zh_CN')

# Number of students to generate
num_students = 100

# List to store student data
students_data = []

# Generate data for 100 students
for _ in range(num_students):
student = {
"name": fake.name(),
"age": fake.random_int(min=18, max=25),
"phone_number": fake.phone_number(),
"email": fake.email(),
"address": fake.address(),
"student_id": fake.random_number(digits=8, fix_len=True)
}
students_data.append(student)

# Define the CSV file name
csv_file = 'students_info.csv'

# Define the CSV header
csv_columns = ["name", "age", "phone_number", "email", "address", "student_id"]

# Write data to CSV file
try:
with open(csv_file, mode='w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
writer.writeheader()
writer.writerows(students_data)
print(f'Data written to {csv_file} successfully.')
except IOError:
print("I/O error occurred when writing to the CSV file.")

生成出来的文件如下,乍一看是不是还挺像那么回事的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
name,age,phone_number,email,address,student_id
杨文,21,15651446876,[email protected],天津市东莞县沈北新西宁街T座 528464,38652303
任莹,20,13151815142,[email protected],澳门特别行政区海门县静安谭街E座 169654,62640223
马斌,22,15317418861,[email protected],山西省西安市南溪海门路c座 632185,51262627
万龙,25,18675244909,[email protected],澳门特别行政区惠州县海港陈街u座 788331,12862421
唐莹,21,14524896623,[email protected],天津市马鞍山市黄浦拉萨街w座 346616,13890353
王秀芳,24,15093668582,[email protected],辽宁省佛山县魏都何街x座 791424,75220986
李建平,21,18293878743,[email protected],香港特别行政区彬市崇文北京街F座 134329,11422454
谢丽娟,19,13242202418,[email protected],新疆维吾尔自治区香港县滨城南宁路w座 529098,18889078
薛婷,20,13807465629,[email protected],北京市云市花溪刘街e座 773539,35816274
雷丽娟,18,18165303861,[email protected],湖北省济南县孝南陈街J座 484354,27706654
朱秀兰,19,15036330967,[email protected],台湾省佳县城北荆门街K座 131039,16335754
张丽丽,24,15032876465,[email protected],澳门特别行政区潜江市浔阳海口路j座 179700,60603103
赵桂兰,20,13009006486,[email protected],四川省桂芝市海陵李街s座 535125,70265537
赵春梅,24,15251434633,[email protected],北京市南昌市朝阳嘉禾街Q座 111575,84861999
蓝玉英,23,15006072574,[email protected],辽宁省齐齐哈尔市东丽张路X座 952846,59067909
马超,22,15023489681,[email protected],山东省广州市永川任路I座 246768,57163888
冯丽丽,19,18941560722,[email protected],重庆市辉县怀柔大冶街n座 651829,48840449
张辉,22,15525627747,[email protected],内蒙古自治区南京市翔安林路Y座 828410,27849301
龙帅,20,13044861787,[email protected],福建省波县城北辽阳街B座 699463,93809855
王秀兰,23,15123952816,[email protected],重庆市海燕市永川李路U座 589932,40837105
何秀云,22,13389508938,[email protected],宁夏回族自治区坤市华龙长沙街A座 448755,16331208
郑建,21,14773507926,[email protected],湖北省北镇市牧野邯郸街Q座 441383,52901105
黄桂香,20,15983226045,[email protected],江西省长沙县西峰郑街v座 555389,38532397
雷桂花,21,15779091442,[email protected],青海省重庆县魏都金路r座 438666,25582281
洪伟,24,15034551309,[email protected],甘肃省淑华市长寿沈阳街D座 781857,51371004
侯秀荣,20,15658144733,[email protected],河南省拉萨市兴山周路q座 690193,34181753
霍丽娟,23,14755592995,[email protected],湖北省沈阳市怀柔香港街E座 798600,59323935
李晶,21,14789714084,[email protected],湖南省北京县牧野吴街m座 527079,20443595
何莹,20,15371237169,[email protected],云南省北镇市涪城东莞路m座 835686,31431046
冯小红,20,13929478423,[email protected],安徽省春梅市华龙合山路x座 783485,42282144
王婷婷,25,18953524230,[email protected],江西省芳市城东马鞍山街H座 846377,89518293
萧秀荣,21,15764734584,[email protected],河南省嘉禾县普陀杨路m座 946236,60617348
卫利,22,13443120525,[email protected],宁夏回族自治区拉萨市兴山汤路U座 430226,19339491
陈凤兰,23,15701289189,[email protected],吉林省永安市吉区陈街s座 321158,51780743
吴琳,18,14529375646,[email protected],陕西省佳县新城刘路H座 759718,89498195
叶波,24,18061561625,[email protected],西藏自治区丽丽县友好潜江街s座 970715,75555133
赵建国,19,15825328065,[email protected],青海省武汉市南长澳门路t座 428291,85520541
刘瑞,24,15266286662,[email protected],甘肃省平县翔安潮州路E座 566121,33484433
李阳,18,15814354022,[email protected],陕西省艳市兴山柳州路W座 810774,77096319
乔志强,22,15310103951,[email protected],澳门特别行政区林市锡山丁路X座 168869,12169760
吴想,22,13234314473,[email protected],北京市海口县沙市宋街m座 592337,54436277
潘婷婷,22,18978526383,[email protected],台湾省东莞县丰都胡街J座 709057,91807647
姚婷,21,18956219835,[email protected],香港特别行政区斌县孝南张街O座 130247,12811809
汪峰,22,13315098113,[email protected],河北省建平市沈北新济南路m座 170271,49070156
李丹,23,13476665953,[email protected],辽宁省大冶市吉区海门路J座 372191,70769981
刘辉,18,15140639015,[email protected],湖南省香港县合川尹路C座 922526,19022713
赵雷,21,13090100149,[email protected],北京市春梅县静安袁路W座 362649,43043458
胡莉,25,18974156576,[email protected],江苏省彬县沙市蒋街H座 208132,25741533
冯欢,24,14777889865,[email protected],陕西省太原县东城何街T座 632289,17757971
萧楠,18,14520094716,[email protected],天津市秀兰县翔安刘街E座 388636,12886631
万建平,19,15915290360,[email protected],新疆维吾尔自治区秀芳市城北贵阳路f座 220049,48199977
张杨,24,15633549143,[email protected],贵州省马鞍山市浔阳曹路b座 183259,86763091
王伟,25,18102638719,[email protected],云南省娟县高明太原路b座 241294,47232715
孙桂荣,24,13214329937,[email protected],浙江省柳州县上街贾路g座 637845,57010965
胡艳,25,14551404458,[email protected],宁夏回族自治区秀芳县朝阳辛集街Y座 373194,99124759
陈桂兰,22,15705819325,[email protected],宁夏回族自治区雷市锡山拉萨街T座 109340,60143910
傅帅,18,13037296868,[email protected],山东省勇县浔阳西安街B座 734661,81970997
张斌,25,15919070157,[email protected],四川省斌县翔安徐街P座 873821,45687729
吕军,21,15004718726,[email protected],贵州省武汉县淄川郑州街c座 878856,95639249
刘建平,18,15325768175,[email protected],湖南省潮州县魏都永安街C座 573040,90720683
汪桂芝,24,13320503412,[email protected],黑龙江省长沙县白云武汉路D座 459772,65769168
罗玲,24,18084432364,[email protected],海南省张家港市海陵羊路N座 678692,53135397
郝玉华,25,15038955596,[email protected],贵州省丽娟市沙市邱街j座 419562,95848846
庞玉英,22,13728364375,[email protected],新疆维吾尔自治区彬市高明王街d座 648000,64832283
谢刚,20,13006216710,[email protected],宁夏回族自治区武汉市静安高街N座 984048,66413173
黄秀梅,24,18219872373,[email protected],河南省淑珍市白云哈尔滨路R座 365763,90582516
牟华,22,13473653213,[email protected],四川省张家港市海陵张路W座 759909,96673716
王玉英,20,13267038755,[email protected],西藏自治区沈阳县牧野拉萨路c座 477448,11364274
王玲,24,13609736441,[email protected],香港特别行政区桂英市涪城姚街p座 415052,30258177
邢桂兰,25,13104159794,[email protected],宁夏回族自治区柳州县龙潭刘路H座 233088,29134578
张亮,19,13946106449,[email protected],云南省辛集市清河李街i座 135971,78324297
胡秀芳,23,18713925682,[email protected],宁夏回族自治区马鞍山县牧野吴路y座 268410,96802279
李洁,19,18765278454,[email protected],福建省台北市长寿汕尾路o座 347366,85574490
蒋兵,24,13400202150,[email protected],台湾省关岭市新城辽阳街B座 241442,90031700
张利,24,18090151698,[email protected],海南省重庆县清城辛集街P座 162853,15567649
柳瑜,23,15575643433,[email protected],西藏自治区合肥县江北黄街Z座 356756,48715558
袁建军,21,15243210479,[email protected],山东省欣市花溪赵街L座 841242,51808908
王秀英,24,13353152189,[email protected],内蒙古自治区明市永川海门街N座 900031,11089589
徐峰,20,13931311017,[email protected],辽宁省合肥县友好林路v座 702291,39487119
傅建军,25,15568950307,[email protected],云南省晶市闵行李街w座 387061,58657816
温英,23,13600204215,[email protected],云南省长沙县大兴重庆路A座 172765,79112040
王浩,24,18878254393,[email protected],上海市亮市魏都孙路z座 173852,89935907
苏婷婷,25,15768731314,[email protected],湖南省博市高港台北路H座 384664,86207148
张晨,25,14574088802,[email protected],西藏自治区哈尔滨市大东任路T座 331900,36313643
朱鑫,25,14786084196,[email protected],内蒙古自治区文县秀英王路x座 316251,43000433
葛宁,21,13628124785,[email protected],天津市涛市合川巢湖路I座 258119,13636102
欧建华,22,13474462477,[email protected],黑龙江省梅市吉区李路Q座 346143,40699001
周淑英,22,15394468081,[email protected],黑龙江省兴城县兴山张街x座 692324,66822153
樊凯,18,15961375610,[email protected],江西省太原市合川澳门路S座 134314,47105810
杨莉,24,14535546194,[email protected],辽宁省旭县东城姚街U座 534685,47600036
宫玉珍,22,13536666673,[email protected],吉林省太原县山亭罗路g座 409209,61974123
顾鹏,25,18199286199,[email protected],陕西省宁市浔阳贵阳路n座 403156,29450095
井芳,18,18600909935,[email protected],江苏省嘉禾市清河张路g座 619941,69174743
宋玉华,20,18932355002,[email protected],青海省澳门市海港程路U座 652351,57624414
张建平,22,18155187736,[email protected],湖南省莉市淄川呼和浩特路A座 964393,80044659
姜斌,24,18803574186,[email protected],山西省辛集市东城胡路v座 119458,25854974
陈颖,23,14517412603,[email protected],云南省建华市魏都徐街D座 571366,43305147
李海燕,22,15193868140,[email protected],湖北省石家庄市丰都台北路T座 551877,56451677
李桂荣,20,15616840094,[email protected],上海市拉萨市大东叶街d座 577821,31959883
张婷婷,22,13166077906,[email protected],西藏自治区永安市永川范路i座 943614,66647808

0X00 前言

不知道为什么,当三个好用的工具在一起的时候就会被称作:三剑客;四个好用的工具在一起的时候就会被叫做四大天王 🤔。

算了,这不重要。

这篇文章的目的是带不了解这三个工具的朋友们简单上手使用它们,默认各位是掌握了 Linux 的基本用法的,其中也会出现有关正则的内容。如果你不懂正则的话建议跳过正则的部分,并且看完这篇文章马上就去学。另外,不要因为正则看起来有点像通配符就按通配符的操作进行下去。

阅读全文 »

0X00 基础知识

常用 Linux 的各位估计都知道 iptablesfirewalldufw 这三个工具吧,或者还知道 netfilter 这个内核组件。但是他们究竟是什么关系呢?从关系上来讲,可以将他们分成三层:最底层是 Linux 的安全框架 netfilter,上面是用来操作 netfilter 的 iptables,再上层是 firewalld 和 ufw。

其中 firewalld 一般会默认安装在 RHEL 和 CentOS 中,ufw 会默认安装在 Debian 和 Ubuntu 中。不过由于很多人还是习惯直接操作 iptables 所以这次的重点就是它了。很多人会说 iptables 是防火墙,这其实并不严谨,它的标准定义应该叫做 Packet Filter 也就是包过滤工具。而且事实上也是如此,它不仅能够实现防火墙的限制流量功能,还能提供 NAT 转发的能力。

iptables 内部总共拥有 4 张表(table),又有多个链(chain),如下图所示。

既然是「写给新手的 iptables 使用说明」,自然是挑选最重要的一部分来介绍的,也就是 nat 和 filter 两张表。其中 filter 表应该是我们接触最多的表,它用于决定一个数据包的「命运」,比如你想将某些数据包拦截在外,或者堵住前往某地址的出口就可以用它实现。在使用 iptables 命令时不手动指定表的话就是在操作 filter 表。另一个 nat 表顾名思义就是用来配置 NAT(网络地址转换)的了。

需要注意,严格来说本次只说明 iptables 和与之强相关的命令,也就是说只涉及 IPV4 的配置。如果需要配置 IPV6 的规则,则需要使用 ip6tables 命令,虽说两个命令大差不差,但是这里还是以 IPV4 为主,也只考虑纯 IPV4 环境。

在开始使用命令之前,先要给出一张图作为前置知识:注意看这张图(略复杂,不过前期看不明白也不影响基本的使用)。可以看到其实流量不是从一个表一个表走下去的,而是按照链的顺序在前进,并且不同的流量会走的路径也不完全一致。

另外再给出一些常用的命令,用来辅助后面的实验。

1
2
3
4
5
6
7
8
9
10
11
# 查看 filter 表的所有规则(因为没指定表,所以是默认的 filter 表)
iptables -L

# 查看 nat 表的所有规则
iptables -t nat -L

# 删除 filter 表的所有规则
iptables -F

# 删除 nat 表的所有规则
iptables -t nat -F

实验环境:

毕竟实践出真知,建议搞一台最好两台在同一网段的虚拟机进行试验。

注意,接下来两个章节的的命令都是临时生效的,所以如果玩砸了可以直接 iptables -t nat/filter -F 清空规则,或者重启虚拟机从头来过。具体如何将规则写入配置中使其持久化,可以查看章节 0X03 的内容。

阅读全文 »

0X00 什么不是加密

首先要先明确一个问题:我们日常使用非常多的 md5、SHA-1、SHA-256 这些 通通都不是加密,这些叫做摘要算法。一串明文经过加密算法加密之后,是可以再次解密成明文的,但是摘要算法就不行了。

拿最常见的摘要算法 md5 举例:针对任何一个合法输入,md5 都会给出一个固定长度为 128 bit(32 byte)的输出,例如 md5("hello, world") -> e4d7f1b4ed2e42d15898f4b27b019da4。准确来说你是不能通过后面这串摘要值来反推之前的原文是什么的。因为严格来说这一串摘要值可以对应无限个不同的原文。那么摘要算法一般是拿来做什么用的呢?比较常见的是用来校验数据一致性,比如鸡太美同学编写了一个程序放到网上给大家下载使用,但是我们都知道文件传输过程中理论上可能会出错,所以他在上传之前就计算了程序的 md5 并且在传到服务器上之后再次计算 md5。如果两次计算的摘要值都是正确的,那就可以证明此次数据传输没有出现错误。接下来他把摘要值贴在了下载地址旁边,每个来下载程序的人也都可以在下载之后计算摘要值以保证下载没有出错。

其实不只是防止文件传输出错,还能增加一定的安全性,比如在文件被偷换之后,可以通过计算摘要值来确定文件是不是自己想要的那个。

摘要算法既然是对任意输入都输出一个固定长度的摘要值,那么自然就会出现「撞车」事故。换句话说就是:不同的输入内容得到了相同的摘要值。具体的可以去搜索md5碰撞来查看相关资料。

更离谱的是 BASE64,它只是编码,对编码稍稍了解且有一定敏感程度的人一眼就能看出一段文本是经过 BASE64 编码的。如果你拿它「加密」的话,别人一秒钟不到就「破解」了 🤣

为什么说 BASE64 编码稍稍敏感一点的人就能看出来呢?因为 BASE64 编码过后,生成的内容是 26 个小写字母 + 26 个大写字母 + 10 个数字 + 加号 + 斜杠,总共是 64 个字符,所以被称为 BASE64。如果一大串文本全都是由混在一起的数字字母加号斜杠组成,尤其最后又追加了一两个等号的情况,那可以 99% 认为它是经过 BASE64 编码的了。

比如下面这段文字,真的很难看不出来:

1
aGVsbG8sIHdvcmxkIQ==
阅读全文 »
0%