本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
文章目录
1 引言
1.1 什么是WireGuard
官方介绍如下:
WireGuard ® 是一款极其简单但快速且现代的 VPN,采用最先进的加密技术。它的目标是比 IPsec 更快、更简单、更精简、更有用,同时避免令人头疼的问题。它的性能远高于 OpenVPN。
WireGuard 被设计为通用 VPN,可在嵌入式接口和超级计算机上运行,适合许多不同的情况。它最初针对 Linux 内核发布,现在已跨平台(Windows、macOS、BSD、iOS、Android)且可广泛部署。它目前正在大力开发中,但它可能已被视为业内最安全、最易于使用且最简单的 VPN 解决方案。
我们可以用一句话概括它:
WGuard是一款可以组建虚拟私人局域网(VPN)的软件,允许用户通过公共网络(如互联网)安全地传输数据,同时保持数据的机密性和完整性。
WireGuard有如下优势:
- 更轻便:以Linux内核模块的形式运行,资源占用小。
- 更高效:相比目前主流的IPSec、OpenVPN等协议,WireGuard的效率要更高。
- 更快速:比目前主流的VPN协议,连接速度要更快。
- 更安全:使用了更先进的加密技术。
- 更易搭建:部署难度相对更低。
- 更隐蔽:以UDP协议进行数据传输,比TCP协议更低调。
- 不易被封锁:TCP阻断对WireGuard无效,IP被墙的情况下仍然可用。
- 更省电:不使用时不进行数据传输,移动端更省电。
1.2 WireGuard可以用来做什么
- 建立VPN(不限设备类型)
WireGuard支持多种平台,包括电脑、智能手机和路由器。这一特性使其成为构建虚拟私有网络(VPN)的理想选择,能在这些设备上实现安全连接。无论是用于远程工作、保护数据隐私,还是绕过地理限制,WireGuard都能提供稳定且安全的网络连接。
2. 实现内网穿透
内网穿透,即NAT(Network Address Translator)穿透,是指计算机在内网(局域网)内使用私有IP地址,在连接外网(互联网)时使用全局IP地址的技术。该技术被普遍使用在有多台主机但只通过一个公有IP地址访问的私有网络中。
举个例子:比如我在实验室配置了一个服务器 Server A,当我在实验室的时候,就可以通过自己的笔记本使用SSH连接【因为我和服务器处于一个局域网】,当我回宿舍以后,就没有办法直接使用SSH连接了【因为我和服务器不在一个局域网】,这个时候就需要进行NAT穿透,让我在宿舍也可以使用SSH连接Server A。
通过Wireguard可以将广域网上的主机连接起来,形成一个局域网。只需要有一台具有固定公网IP的服务器,就可以将其作为我们搭建的局域网的中心节点,让其他的主机(不论是否有公网IP,不论是否在NAT内),都通过这个中心节点和彼此相连。由此就构建了一个中心辐射型的局域网,实现了内网穿透等功能。
- Docker容器通信
WireGuard还可用于Docker容器之间的通信。在Docker环境中,容器之间的网络通信是一个重要的问题。WireGuard通过提供一种安全的通信方式,能够在不同容器之间建立一个加密的网络连接,从而保障数据的安全传输。这对于需要在不同容器间安全共享数据的应用尤为重要。
1.3 WireGuard原理
WireGuard 是一种在第 3 层(网络层)运行的安全网络隧道,与传统的 VPN 解决方案(如 IPsec 和 OpenVPN)相比,它的设计更安全、性能更高且更易于使用。它是作为 Linux 内核虚拟网络接口实现的,基于安全隧道的基本原理:将peer的公钥与隧道源 IP 地址关联。
相关术语:
- Peer/Node/Device
连接到VPN 并为自己注册一个VPN子网地址(如 192.0.2.3)的主机。还可以通过使用逗号分隔的 CIDR 指定子网范围,为其自身地址以外的 IP 地址选择路由。
- 中继服务器(Bounce Server)
一个公网可达的peer,可以将流量中继到
NAT
后面的其他peer。Bounce Server
并不是特殊的节点,它和其他peer一样,唯一的区别是它有公网 IP,并且开启了内核级别的 IP 转发,可以将 威屁恩 的流量转发到其他客户端。
- 子网(Subnet)
一组私有 IP,例如
192.0.2.1-255
或192.168.1.1/24
,一般在 NAT 后面,例如办公室局域网或家庭网络。
- CIDR 表示法
CIDR,即无类域间路由(Classless Inter-Domain Routing),是一种用于对IP地址进行灵活表示和分配的标准。
- NAT
子网的私有 IP 地址由路由器提供,通过公网无法直接访问私有子网设备,需要通过 NAT 做网络地址转换。路由器会跟踪发出的连接,并将响应转发到正确的内部 IP。
- 公开端点(Public Endpoint)
节点的公网 IP 地址:端口,例如
123.124.125.126:1234
,或者直接使用域名some.domain.tld:1234
。如果peer节点不在同一子网中,那么节点的公开端点必须使用公网 IP 地址。
- 私钥(Private key)
单个节点的 WireGuard 私钥,生成方法是:
wg genkey > example.key
。
- 公钥(Public key)
单个节点的 WireGuard 公钥,生成方式为:
wg pubkey < example.key > example.key.pub
。
- DNS
域名服务器,用于将域名解析为 VPN 客户端的 IP,不让 DNS请求泄漏到 VPN 之外。
主要功能和原理如下
WireGuard 通过添加一个(或多个)网络接口来工作,例如
eth0
或wlan0
,称为wg0
(或wg1
、wg2
、wg3
等)。然后可以使用ifconfig(8)
或ip-address(8)
正常配置该网络接口,并使用route(8)
或ip-route(8)
添加和删除其路由,以及所有普通网络实用程序都是如此。接口的特定 WireGuard 方面使用wg(8)
工具进行配置。该接口充当隧道接口。WireGuard 将隧道 IP 地址与公钥和远程端点相关联。当接口向peer发送数据包时,它会执行以下操作:
- 该数据包适用于 192.168.30.8。那是哪位peer啊?让我看看…好吧,这是给peer
ABCDEFGH
的。 (或者,如果它不适合任何已配置的peer,则丢弃该数据包。)- 使用peer
ABCDEFGH
的公钥加密整个 IP 数据包。- Peer
ABCDEFGH
的远程端点是什么?让我看看…好的,端点是主机 216.58.211.110 上的 UDP 端口 53133。- 使用 UDP 通过 Internet 将步骤 2 中的加密字节发送到 216.58.211.110:53133。
当接口收到数据包时,会发生以下情况:
- 我刚刚从主机 98.139.183.24 上的 UDP 端口 7361 收到一个数据包。让我们来解密吧!
- 它为peer
LMNOPQRS
正确解密和验证。好的,让我们记住,peerLMNOPQRS
的最新 Internet 端点是使用 UDP 的 98.139.183.24:7361。- 解密后,明文数据包来自 192.168.43.89。是否允许peer
LMNOPQRS
以 192.168.43.89 向我们发送数据包?- 如果是,则在接口上接受数据包。如果没有,就放弃它。
WireGuard 的核心是一个称为加密密钥路由的概念,它的工作原理是将公钥与隧道内允许的隧道 IP 地址列表相关联。每个网络接口都有一个私钥和一个peer点列表。每个peer都有一个公钥。公钥短小且简单,由peer用来相互验证。它们可以通过任何带外方法传递以在配置文件中使用,类似于将 SSH 公钥发送给朋友以访问 shell 服务器的方式。
1.4 WireGuard安装
2 WireGuard组网实现内网穿透
2.1 前提条件
- 公网服务器: 必须拥有一台具有公网IP地址的服务器,这是内网穿透的关键。该服务器充当中转站,负责将外部请求传递到内部网络。
- 网络设备配置权限: 需要对内部网络的路由器或防火墙有一定的配置权限,以便进行端口映射或其他必要的网络设置。这确保了从公网服务器到内网的连接是有效的。
- 安装WireGuard: 在公网服务器和内网设备上都需要安装和配置WireGuard软件。确保两端的WireGuard配置一致,包括公私钥的生成和网络接口的配置。
- 开启相应端口: 在公网服务器的防火墙配置中,需要打开WireGuard所使用的端口(默认是51820/UDP),以确保能够接收来自内网设备的连接请求。
- 合适的网络拓扑: 确保了解内部网络的拓扑结构,以便正确设置WireGuard配置,包括允许流量通过的子网、路由等。
2.2 网络拓扑结构
2.3 具体步骤
2.3.1 中继服务器配置
- 创建密钥对
wg genkey | tee server_privatekey | wg pubkey > server_publickey
执行以上两条命令后,会在执行命令的当前文件夹自动生成2个文件:
- 开启IP地址转发
sudo sysctl net.ipv4.ip_forward
如果显示1则说明已开启,否则则未开启。
echo "net.ipv4.ip\_forward = 1" >> /etc/sysctl.conf echo "net.ipv4.conf.all.proxy\_arp = 1" >> /etc/sysctl.conf sysctl -p /etc/sysctl.conf
- 设置IP地址伪装
# 允许防火墙伪装IP
firewall-cmd --add-masquerade
# 检查是否允许伪装IP
firewall-cmd --query-masquerade
# 禁止防火墙伪装IP
firewall-cmd --remove-masquerade
- 配置wireguard虚拟网卡(不推荐,只是让读者直观了解过程)
sudo ip link add wg0 type wireguard # 添加一块叫 wg0 的虚拟 wireguard 网卡
sudo ip addr add 192.168.71.1/24 dev wg0 # 给 wg0 网卡添加 ip 地址 192.168.71.1,子网掩码 255.255.255.0
sudo wg set wg0 private-key ./server-privatekey # wireguard 设置密钥
sudo ip link set wg0 up # 启用刚刚添加的网卡
我们可以通过
ip addr
命令查看到wg0网卡的状态
可以看到网卡
wg0
接口是已启用的,具有 IPv4 地址192.168.71.1
输入
wg
命令则可以看到配置信息,配置文件通常在/etc/wireguard/
目录中
有想继续尝试这种方式的可以看一下官方教程
- 编写配置文件配置网卡(推荐,应该
wg set
命令需要提供很多参数,很容易出错)
写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!