使用VPN【wireguard】搭建安全,方便的跳板机【0到1架构系列】

vpn,wireguard · 浏览次数 : 6

小编点评

**跳板机定义:** 跳板机是一个具有公网通讯能力的服务器,用于远程登陆和与内网服务器进行通信或作业。 **跳板机的安全注意事项:** * 在搭建公网服务的服务器上暴露远程登陆端口是不安全的,建议采用 VPN 或其他安全方式。 * 使用默认端口的远程登陆可能会导致攻击。 * 使用长密码的远程登录策略可以提高安全性。 **WireGuard 的部署方式:** 1. 下载并安装 WireGuard 二进制文件。 2. 创建服务端公钥和私钥。 3. 创建客户端公钥和私钥。 4. 配置 WireGuard 配置文件。 5. 启动服务端和客户端。 6. 测试本地电脑与跳板机之间的网络连接。 **其他安全配置:** * 设置流量转发,允许内网计算机与跳板机相互通信。 * 配置防火墙端口放开。

正文

什么是跳板机?

部署一台具有公网通讯能力的服务器,开发或运维通过这台服务器的远程登陆功能,远程登陆该服务器然后与处于内网的服务器进行通讯或作业,那么这台服务器一般称为"跳板机"。

跳板机的安全

  • 一般来说不建议在搭建公网服务的服务器上面暴露远程登陆端口,因为公网IP己经暴露,部署专门用于登陆的跳板机可以降低服务器的主机安全问题。虽然你的跳板机远程登陆端口仍可能被进行广泛扫描的端口的工具控测到,然而隐藏跳板机的IP可以减少针对性的功击行为。非内部员工暴露,否则很难发起针对性功击。漫无目的探测者即使控测到端口也无法确定具体用户。
  • 修改远程默认端口,对于资深攻击者来说于事无补,非默认端口仍然可以减少极多数毫无意义的端口扫描工具,避免多数菜鸟的功击行为。
  • 采用长密码的策略。
  • 使用RDP、SSH协议基本可以保证绝多数的安全,因为这两种系统默认的协议都会采用证书加密通讯。
  • 无论采用VPN或原生协议连接,就系统安全性而言,差别不大,因为都采用证书加密通讯。

常用的跳板机部署方式

  1. 无VPN部署选择Window系统,登陆Windows的GUI界面,再进行服务器内网连接,常见于中小型公司。
  2. 部署VPN于Linux/Window,开发者登陆VPN,即登陆虚拟专用网络,与跳板机处于同一局域网进而连接服务器内网。

VPN服务端部署

安装

目前开源免费的VPN比较多,最受欢迎且比较成熟的是OpenVPN,WireGuard是目前也流行的较新的开源VPN,简单易用,安全,高性能。我们目前选择WireGuard部署到Centos7.9系统上面,官网上面快速安装有市场几乎各种常用操作系统的安装方式,可以自行去查看,Centos7目前有三种安装方式,这里使用ELRepo仓库进行安装

sudo yum install epel-release elrepo-release
sudo yum install yum-plugin-elrepo
sudo yum install kmod-wireguard wireguard-tools

 创建服务端公钥私钥

 WireGuard服务端和客户端双方都必须创建各自的公钥私钥,服务端使用自己私钥和客户端的公钥进行部署,客户端使用自己的私钥和服务端的公钥进行部署,也就是双方交换公钥。每新增一个客户端都需要双方生成公私钥进行部署后连接。WireGuard安装成功之后默认配置路径是:/etc/wireguard

#转到默认配置文件夹
cd /etc/wireguard
#配置权限
umask 077
#生成私钥
wg genkey > private.key 
#使用私钥生成公钥
wg pubkey < private.key > public.pub

编辑WireGuard配置文件

#在/etc/wireguard
vi wg0.conf

在/etc/wireguard目录中编辑最精简的配置文件wg0.conf,输入如下内容:

[Interface]

  1. 区域为服务器端
  2. 使用服务端的私钥
  3. 设置监听端口,防火墙需要放行端口

[Peer]

  1. 区域为客户端,多个客户端,设置多个Peer点。
  2. 使用客户端的公钥,将客户端生成的公钥放置此处。
  3. AllowedIPs是充许的IP,客户端设置地址时,需要指定这个IP地址,注意不要与其它客户端冲突,更加不要跟其它网段冲突。
# 服务端
[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
Address = 10.0.0.1
ListenPort = 51820

#客户端
[Peer]
PublicKey =  xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.0.0.2/32

VPN客户端部署

在官网下载windows客户端安装成功之后,双击运行客户端,新建链接的时候客户端就会自动生成公钥私钥,我们需要将公钥复制至上面的服务端配置文件中客户端“PublicKey”的位置。

我们需要稍稍修改这个客户端的文件才可以正常运行,此时攻受易型:

[Interface]区域是客户端信息,新增一个IP字段就可以了

  1. IP地址填写服务端设置的IP地址

[Peer]区域应该填写服务端的信息

  1. PublicKey填写服务端的公钥。
  2. AllowedIPs=0.0.0.0/0,不限制对服务端的IP访问。
  3. Endpoint填写服务端的公网IP和端口。

启动

此时双方配置已经完成,启动服务端和客户端就可以彼此连接上。服务端启动命令:

#开机自动启动
sudo systemctl enable wg-quick@wg0
#启动
sudo systemctl start wg-quick@wg0
#状态
sudo systemctl status wg-quick@wg0
#暂停
sudo systemctl stop wg-quick@wg0

在客户端测试网域是否互通

此时客户端与跳板机己经成功连接在一起,双方现在处于专用网络通道。

设置流量转发

虽然本地电脑与跳板机处于同一虚拟网段,但是并没有与服务器内网其它服务器处于同一个网段,此时在本地电脑连接服务器内网其它计算机是无法连接通,所幸的是跳板机与这些内网计算机是处于另一个共同网段,所以设置流量转发就可以实现内网互联的需求。

#开启服务器转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

#查看修改结果
sysctl -p

服务端配置了转发,我们可以通过ip addr命令查看服务器网卡信息,你会发现有多张网卡存在(同时包括wireguard的虚拟网卡),所以我们还需要配置NAT转换规则进行网络地址转换。

#增加转换规则(ens32 代表你的内网网卡,自己查询后替换成你的网卡名称)
iptables -t nat -A POSTROUTING -o ens32 -j MASQUERADE
#删除转换规则(ens32 代表你的内网网卡,自己查询后替换成你的网卡名称)
iptables -t nat -D POSTROUTING -o ens32 -j MASQUERADE

当然如果怕麻烦,我们可以在WireGuard的配置文件利用PostUp和PostDown命令,自动帮我们添加或删除NAT规则。

PostUp:在WireGuard接口启动后执行的命令。

PostUp:在WireGuard接口启动后执行的命令。

使用命令编辑文件: vi /etc/wireguard/wg0.conf

# 服务端
[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
Address = 10.0.0.1
ListenPort = 51820

PostUp = iptables -t nat -A POSTROUTING -o ens32 -j MASQUERADE
PostDown =  iptables -t nat -D POSTROUTING -o ens32 -j MASQUERADE

#客户端
[Peer]
PublicKey =  xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.0.0.2/32

如果没有使用云商的防火墙,那么主机自带的防火墙就必需开启,所以PostUp和PostDown命令中也应该加入防火墙端口放开命令,这里就不写了。

此时使用本地Xshell或者Windows远程登陆工具,就可以直接连接内网的各个服务器啦~

更多系列文章

构建高性能,可伸缩,高可用,安全,自动化,可溯源,整体式应用构架体系

 

与使用VPN【wireguard】搭建安全,方便的跳板机【0到1架构系列】相似的内容:

使用VPN【wireguard】搭建安全,方便的跳板机【0到1架构系列】

什么是跳板机? 部署一台具有公网通讯能力的服务器,开发或运维通过这台服务器的远程登陆功能,远程登陆该服务器然后与处于内网的服务器进行通讯或作业,那么这台服务器一般称为"跳板机"。 跳板机的安全 一般来说不建议在搭建公网服务的服务器上面暴露远程登陆端口,因为公网IP己经暴露,部署专门用于登陆的跳板机可

《吐血整理》高级系列教程-吃透Fiddler抓包教程(32)-Fiddler如何抓取IOS系统中Flutter应用程序的包

1.简介 上一篇讲解了安卓手机可以通过VPN代理来抓取Flutter应用程序的包,iOS(iphone)同样使用上一篇中VPN方法(原理与android是一致的),同样需要使用到VPN,在iOS也有许多与drony功能类似的软件,大家可以自己选择自己喜欢的使用,宏哥这里使用的是Shadowrocke

云服务器配置VPN访问github等

云服务器配置VPN访问github等 使用华为云服务器器默认无法访问外网,我使用 ikuuu IKUUU VPN,通过他访问外网。 我本地使用windows系统,Tabby终端。 Tabby终端配置云服务器ssh连接,点击setting→Profiles & connections → New pr

项目小结:使用Docker迁移服务到离线服务器

## 前言 最近遇到的这个场景,需要把之前开发的一套系统迁移到一个离线的服务器上,这个服务器有点麻烦,接入VPN后通过堡垒机才能访问,速度也很慢,遇到不少坑,本文记录一下迁移过程。 ## 基本信息 原本这套系统也挺简单的,Django 写的后端接口,搭配 `Vue+Echarts` 大屏,数据库用

[转帖]史上坑最少的openVPN搭建

https://www.rrfed.com/2017/09/26/openvpn/ 为什么要搭建vpn 单独购买vpn服务器的成本比较高,可以在公司现有的服务器上搭建vpn服务 可以在任何有网络的地方访问到公司资源,比使用跳板机和高端口访问要安全 爱折腾的小伙伴可以搭建vpn来满足自己的技术需求 选

指定特定IP走特定网卡的方法

指定特定IP走特定网卡的方法 背景 目标: 能够在有VPN以及多个网卡的情况下, 使用特定的IP地址进行登录服务器. 作用: 便于审计以及安全管理, 避免出现安全风险. 方式方法: route 命令设置 VPN客户端的单独设置等 route命令 route命令是一个用于查看和操作网络路由表的命令。它

jcmd的简要分析命令

# jcmd的简要分析命令 ## 背景 ``` 端午加班一整天. 回到家同事让他们抓取一下堆栈信息好进行分析 连上VPN后就进行了一下处理. 自己简单看了下堆栈的总数等信息. 同事使用工具进行了分析. 我这边其实下过很多工具,但是都荒废了 就想,自己这些时间一直学习shell, 可以手工写一个简单分

一次MTU问题导致的RDS访问故障

导语 VPN是一种通过公网连接两个或多个私网站点的专用网络,使得这些站点仿佛是通过专线连接在一起。IPSec是一套协议框架,用于保证数据传输的私密性,完整性,真实性。但是VPN网络经常会带来一些连通性上的问题,通常与MTU设置的不合理有关。本文通过一个实际案例,来具体分析解决这个问题。 作者:陆信宇

使用Cloudflare Worker加速docker镜像

前言 开发者越来越难了,现在国内的docker镜像也都️了,没有镜像要使用docker太难了,代理又很慢 现在就只剩下自建镜像的办法了 GitHub上有开源项目可以快速搭建自己的镜像库,不过还是有点麻烦,还好Cloudflare暂时还活着‍ 本文记录一下使用 Cloudf

使用C#/.NET解析Wiki百科数据实现获取历史上的今天

创建一个webapi项目做测试使用。 创建新控制器,搭建一个基础框架,包括获取当天日期、wiki的请求地址等 创建一个Http请求帮助类以及方法,用于获取指定URL的信息 使用http请求访问指定url,先运行一下,看看返回的内容。内容如图右边所示,实际上是一个Json数据。我们主要解析 大事记 部