2020-06-08
为了建立 VPN,我们需要找到 VPN 的主机。
#@#There are a lot of VPS providers that offer servers for as little as per month, but there are a few things that you need to consider when choosing a VPS provider:#@#
在本教程中,我将使用Linode公司
在网站上注册并确认电子邮件后,您需要输入一些详细信息,包括姓名、地址和信用卡信息。 这对所有 VPS 提供商来说都是一样的,但有时他们也接受比特币或其他加密货币。
#@#Next thing you need to do is add a server or as Linode calls it, a "linode". There's a lot of distros to choose from, if you want you can even go with Gentoo or Arch, but for this tutorial I'll go with the latest version of Ubuntu.#@#
none
#@#We're going to take the cheapest "Nanode" plan. And even if later on you decide to set up a mail server, a Nextcloud instance or a personal blog, this configuration will still be more than sufficient.#@#
Linode 标签并不重要,标签也不重要。 我的标签叫 wolfgangsvpn。
#@#After that you'll need to choose a root password and upload an SSH key, which we're not going to do now, i'll explain why later. Lastly tick a box that says "Private IP" and click the create button on the right... and there we go, our server is now created.#@#
现在你应该看到服务器的控制面板了,在服务器启动的同时,让我们为它生成 SSH 密钥。 使用明文密码登录服务器绝不是个好主意,因为密码在传输过程中没有加密,可能会暴露在敌对网络中。 通过创建 SSH 密钥,我们将使你只有在拥有密钥文件和密码的情况下才能登录服务器,同时密码也会被加密。
如果你使用的是 Linux,你可能已经知道如何打开终端;如果你使用的是 Mac,你可以在 "应用程序 "文件夹中找到 "终端 "应用程序;在 Windows 10 上,你需要以管理员权限打开 PowerShell,并使用此命令安装 SSH:
PS C:\> 添加 WindowsCapability -在线-名称 OpenSSH.Client*
这是生成 ssh 密钥的命令。 我个人推荐使用密钥大小为 4096 的 RSA 算法,因为它足够安全,而且得到广泛支持。
在要求输入密钥位置时按 Enter 键,将其保存到默认位置,然后输入您选择的密码。
现在服务器已经启动,我们可以登录了。 从服务器控制面板复制 IP 地址,回到终端并输入
输入 "是",然后输入第一步中指定的 root 密码,就这样,我们就进入了。
首先,我们要更新操作系统和软件:
&&;
我还会安装我最喜欢的文本编辑器,不过你也可以随意使用,比如 nano。
虽然不必每次都输入密码很方便,但我们还是需要创建一个非 root 用户账户。 在 SSH 服务器上暴露 root 登录可能不是一个好主意,即使你有多因素身份验证。 你可以说我偏执,但我认为有时必须输入 root 密码是我愿意为某种安全感付出的代价。 类型
这将创建一个用户,将 bash 设置为默认 shell,并允许使用 sudo。
之后,我们需要为用户创建密码,使用
none
none
none
系统会提示你输入密码,输入密码后,回到服务器的终端窗口。 先不要关闭另一个窗口。
现在,我们已将 SSH 密钥复制到服务器上,必须限制只能使用公钥进行身份验证。 让我们编辑 sshd 配置文件
首先,让我们更改默认端口。 这不会对安全有多大帮助,但对那些试图用默认凭据登录的令人讨厌的 SSH 扫描程序会有帮助。 虽然作用不大,但安全日志肯定会变得更容易阅读。 你可以使用任何未被其他服务占用的端口,但我更喜欢使用 69。 不错
#港口 22
接下来,我们需要禁用密码验证,这样你就只能使用公钥登录了。
最后但并非最不重要的一点是,我们还要禁用 root 登录功能
现在保存文件并使用以下命令重启 sshd 服务
none
如果您看到输入关键密码的提示,说明我们可以开始了。 此外,最好还能验证一下我们是否无法再用密码登录:
这样我们就会看到 "拒绝许可"。
#@#But you might have noticed that this command is kind of long and annoying to type, so let's fix that. Create a file in the ".ssh" folder in your home directory called "config" and edit it using your favourite text editor:#@#
在此,我们将为 VPS 创建一个别名
保存并关闭,现在我们只需输入ssh wolfgangsvpn
如果您也不想每次登录时都看到这堵文字墙,请键入touch .hushlogin
我知道 Wireguard 是最近大家都在关注的热门新 VPN 协议,但在本视频中,我将改用 OpenVPN。 为什么呢? 因为在客户端应用程序方面,OpenVPN 有更广泛的支持,而且在本教程的第二部分,我还会讲到一些使用 OpenVPN 的应用程序。 如果你对安装 Wireguard 服务器感兴趣,网上有很多相关教程。
none
登录服务器并安装wget
如果还没有的话。 有时,它已随操作系统镜像一起提供,但有时并没有。
nonewget
按空格键,粘贴之前复制的链接。 按回车键
现在让我们启动脚本
#@#The script will ask you some questions, and in most cases you'll want to pick the default answer. For the port, you can either choose the default port, 1194, but I prefer to choose 443, since 1194 is known as "the OpenVPN port" and in some cases it can be blocked on your network. 443 is the same port that is used for HTTPS, but whereas HTTPS uses TCP, OpenVPN (in this configuration) uses UDP, so they won't conflict with each other.#@#
您还会被问到想要使用哪个 DNS。 你可以随意选择,但我通常选择 1.1.1.1
至于客户名称,您可以随意选择。
配置完成后,按任意键,安装过程就会开始。 这是全自动的,最后你会得到一个配置文件,我们稍后会将其下载到本地计算机。 问题是,脚本默认将文件放在根目录下,为了稍后下载,我们需要将其移动到用户的主目录下,并赋予自己正确的权限:
完成这些后,服务器端只剩下一件事要做,那就是禁用日志。 让我们编辑配置文件:
none动词 3
自动词 0
现在重启 OpenVPN 服务:
就是这样! VPN实际上不记录日志。 太神奇了
#@#I also just noticed that the hostname of the server is "localhost", which is not cool for many reasons. So let's change it to something else, I'm going to call it "wolfgangsvpn"#@#
现在我们要做的就是把配置文件下载到本地机器上,这样就可以真正使用 VPN 了。 在本地计算机上打开终端,输入sftp 服务器名称
然后,使用命令获取 configname.ovpn
. 最后键入出口
现在,如果您想将此 VPN 用于所有流量,我不建议您这样做,您可以下载隧道视野在 Mac 上OpenVPN连接或将其加载到 Linux 上的 NetworkManager 中。
至此,我们已经建立并运行了一个最基本的 VPN 服务器。 你可以到此为止,像平常使用 VPN 一样使用它(在这种情况下,感谢你的阅读,我很高兴能帮到你),但如果你想知道如何让它更安全,并添加一些很好的功能,比如无人值守升级,请继续阅读。
现在,ssh 虽然不错,但有时确实很烦人,尤其是当你更换网络时,连接会立即中断。 相反,我更喜欢使用 mosh。 它没有复杂的配置文件,你只需在本地和远程机器上安装 mosh,之后就可以简单地使用闹哄哄
命令作为安全信息
现在,对于大多数人来说,公钥身份验证可能已经足够安全了,但如果你想更花哨一些,还可以添加 MFA 或多因素身份验证。 它的工作原理是在你的手机上安装一个应用程序(安卓上有很多开源应用程序,如 AndOTP),每次登录时,你都会在应用程序中获得一个一次性密码,你需要输入这个密码才能登录。 这为您的服务器提供了额外的安全保护,对于我们中一些特别偏执的人来说非常有用。
首先要做的是安装google-authenticator-libpam
是的,该协议由谷歌制定,但它是完全开源的,您不必在手机上使用谷歌验证器应用程序,正如我已经提到的那样,有许多开源选择
然后,键入谷歌验证器
. 在这里,除了关于多个用户和 30 秒令牌的问题外,其他问题基本上都要回答 "是"。
#@#Once you've done that, you might have noticed a big QR code in your command line as well as the recovery codes. Make sure to write those codes down somewhere save, they'll be useful in case you lose the access to the app on your phone. After that what you need to do is launch the authenticator app on your phone, I'll use OTP Auth, add a new account and chooe "Scan a QR code". After you scan the code, the account will be added to the app. And we're done with the phone part for now.#@#
让我们回到服务器终端,编辑 sshd 的身份验证设置文件:
在这里,我们将注释掉以下一行@include common-auth
none
接下来,我们需要在文件末尾添加这一行:
保存文件并退出。 现在,我们需要编辑 SSHD 配置文件,让 SSH 意识到新的身份验证方法:
这里我们需要修改以下几行:
并在 UsePAM 后添加一行新内容:
就这样,保存文件并退出。 现在,让我们重启 SSH 服务,使更改生效:
正如我在一开始提到的,在不关闭服务器会话的情况下,尝试在一个单独的终端窗口中登录始终是个好主意。 否则,如果你搞砸了,就会被锁在 SSH 之外,这显然是你不愿意看到的。
none
今天我想向大家展示的最后一件事是无人值守软件升级。 这意味着我们将有一个脚本,运行apt更新
和apt 升级
这样,我们就不必再手动登录服务器进行更新了。 服务器也会因为内核更新而重启,但由于重启时间不超过一分钟,而且内核更新并不频繁,因此你的 VPN 不会因为升级而停机。 如果你想自己动手,也可以禁用自动重启。
none
接下来,启用稳定的安全更新:
完成后,让我们编辑配置文件
在这里,我们需要设置用于更新通知的电子邮件地址:
;
然后还要启用自动重启,设置清理任务以删除未使用的内核,并将自动重启时间设置为凌晨 5 点。
; #这是显而易见的 ; ; ; ; #none
none
因此,现在你的系统和所有软件包都会自动更新,每次升级都会收到一封电子邮件。