Linux 学习历程(四):VPS保护

前言:

在上一篇《Linux基础:装饰你的Shell》中,我们要么复习了 Vim 的用法,要么接触了 OhMyZsh 和 htop 这种酷炫的软件。看着花里胡哨的界面,你可能觉得:“哇,我的服务器已经很强了!”

但残酷的现实是:你还不算真正的强大。

因为在某种程度上,你的 VPS 正赤裸裸地暴露在一个充满恶意的互联网环境中,而你对此可能还没有太多的认知。

大家可能偶尔会听到 Facebook 账号泄露、推特名流被盗号这种大新闻,感觉离自己很远。在日常生活中,我们的微信、支付宝由腾讯和阿里这种巨头保护,黑客想攻破 HTTPS 和 SSL 加密极难。但在 VPS 的世界里,情况变了:

如果你玩 VPS,你就是这台服务器唯一的安全负责人。

网络安全是一个相对的概念。对于个人 VPS 而言,我们要做的不是绝对安全(那不可能),而是比大多数人安全。 只要你的骨头比别人硬,黑客的自动化脚本就会放弃你,去捏那些还在用默认端口和弱密码的“软柿子”。

今天这篇长文,我们将手把手教你给 VPS 穿上一层厚厚的“防弹衣”。

测试环境

在开始之前,先确认一下我们的环境。虽然不使用 Ubuntu 的小伙伴也可以参考,但不保证命令完全一致。

uname -a

运行结果参考:

Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

只要看到是 Linux 且内核版本不算太老,就可以继续顺着下面的代码一步步无障碍运行。

安全措施:打造铜墙铁壁

更新软件:打补丁是基本功

旧版本的软件往往含有已知漏洞。作为个人用户,最好的安全习惯就是:保持最新

sudo apt-get update && sudo apt-get upgrade

🧐 命令解析:

update:去“应用商店”拉取最新的商品清单(只下载列表)。

upgrade:对照清单,把你电脑里的旧软件全部更新一遍。

运行结果预览:

如果看到下面这个提示,果断回车(默认选 Y):

Do you want to continue? [Y/n] Get:1 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 linux-libc-dev amd64 5.4.0-123.139 [1,123 kB] ... Setting up systemd (245.4-4ubuntu3.17) ...

使用非 root 用户:收回最高权限

默认的 root 用户就像是皇帝,权力无限大。一旦 root 密码泄露,黑客想干嘛就干嘛。

策略: 创建一个普通大臣(普通用户),平时干活由他来,需要尚方宝剑时再申请(sudo)。

创建新用户

首先,我们给新用户建一个“部门”(用户组),这里我随手取个 ID 344,名字叫 test

sudo groupadd -g 344 test

接着,正式招募新员工 test_user 入职:

sudo useradd -m -d /home/test_user -s /bin/bash -g test -G sudo test_user

关键参数: -G sudo 表示把这个用户加入 sudo 组,让他有权使用管理员命令。

别忘了设密码(输入时看不见是正常的):

sudo passwd test_user

验证身份

我们切换到新用户,看看能不能用 sudo

su - test_user

尝试查看只有 root 能看的文件
sudo ls -hl /etc/sudoers

运行结果:

系统会要求输入密码,验证成功后会显示文件信息。如果没报错,说明新用户创建成功。

禁用 root 远程登录

既然有了 test_user,我们就要把 root 的远程大门焊死。以后谁想用 root 登录,直接拒之门外。

修改 SSH 配置文件(用 Vim):

sudo vim /etc/ssh/sshd_config

找到 PermitRootLogin 这一行,按 i 改成:

PermitRootLogin no

保存退出后,重启 SSH 服务让它生效:

sudo service sshd restart

⚠️ 高危预警: 改完不要急着关窗口!新开一个终端窗口,尝试用 test_user 登录一下。如果能登进去,再关旧窗口。防止把自己锁在外面。


隐藏公网 IP(选修)

查看本机公网 IP 的命令:

curl ifconfig.me

如果你有域名,建议套一层 Cloudflare CDN。这样别人 ping 你的域名时,看到的是 Cloudflare 的 IP,而不是你真实的服务器 IP,相当于多了一层“隐身斗篷”。

安装 UFW 防火墙

UFW (Uncomplicated Firewall),人如其名,就是给不想背复杂 iptables 命令的懒人准备的。

安装与查看状态:

sudo apt-get install ufw sudo ufw status

通常会显示 Status: inactive(未激活)。别急着激活,先配置规则!

配置基础规则(按顺序敲):

# 拒绝所有外人进入,允许自己人出去 sudo ufw default deny incoming sudo ufw default allow outgoing

务必允许 SSH 端口(默认22),否则你就把自己锁外面了!
sudo ufw allow 22/tcp

允许网页端口(如果有建站需求)
sudo ufw allow 80/tcp sudo ufw allow 443/tcp

启动引擎:

sudo ufw enable

系统会提示你这可能会断开 SSH 连接,输入 y 确认。


更改默认的 SSH 端口

全世界都知道 SSH 默认是 22 端口。我们把它改到 1234,能避开 90% 的无脑扫描。

第一步:在防火墙放行新端口(重中之重!)

sudo ufw allow 1234/tcp

第二步:修改配置文件:

sudo vim /etc/ssh/sshd_config

找到 #Port 22,把井号去掉,改成 Port 1234

第三步:重启服务:

sudo service sshd restart

现在,退出服务器,下次登录就要这样写啦:

ssh -p 1234 test_user@你的IP

登录成功后,你可以顺手把旧的 22 端口关掉:

sudo ufw delete allow 22/tcp

禁 Ping:隐身模式

你可以让服务器对外界的探测(Ping)装聋作哑,假装自己不在线。

sudo vim /etc/ufw/before.rules

在文件中搜索 echo-request,找到下面这行:

-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

把最后的 ACCEPT 改成 DROP

然后重载防火墙:

sudo ufw reload

此时你在本地电脑 cmd 里 ping 你的服务器,会发现全是“请求超时”,这就成功了。


Fail2ban:不仅防守,还会反击

Fail2ban 就像一个暴脾气的保安。如果发现同一个 IP 连续几次输错密码,它会直接把这个 IP 拉黑,让它连登录界面都打不开。

安装并启动:

sudo apt install fail2ban -y sudo systemctl start fail2ban sudo systemctl enable fail2ban

配置规则(创建新文件):

我们建议新建一个 jail.local 文件来管理配置,而不是直接改原文件。

sudo vim /etc/fail2ban/jail.local

写入以下内容:

[sshd] enabled = true port = 1234 # 记得改成你刚才设置的端口! maxretry = 5 # 输错5次就封 bantime = 3600 # 封禁1小时

重启服务生效:sudo systemctl restart fail2ban

看看它有没有在工作:

sudo fail2ban-client status sshd

运行结果:

Status for the jail: sshd |- Filter | |- Currently failed: 0 | - File list: /var/log/auth.log - Actions |- Currently banned: 1 |- Total banned: 12 `- Banned IP list: 192.168.1.50

如果你看到 Currently banned 后面有数字,恭喜你,它已经帮你挡住了攻击者!

小结

呼,终于配置完了。现在你的 VPS 已经具备了:

非 Root 登录(即使密码泄露也不至于立刻完蛋)。

UFW 防火墙(只开需要的门)。

隐藏的 SSH 端口(避开扫码枪)。

Fail2ban 自动防御(暴力破解的克星)。

这套组合拳打下来,虽然不能说固若金汤,但至少能让 99% 的脚本小子知难而退。下一篇,我们终于可以开始部署一些好玩的 Web 服务了,敬请期待!

博客内容均系原创,未经允许严禁转载!
您可以通过 RSS 订阅本站文章更新,订阅地址:https://blog.abco.fun
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇