VPS安全设置指南

以下环境基于ubuntu/debian,其他系统类似。

更新系统

旧版本的软件可能会含有某些漏洞,从而成为攻击者发起攻击的基础。所以养成定期更新系统是个好习惯。

更新系统使用以下命令

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

使用非root用户

新购置的vps默认开通root权限,除非你的密码非常复杂,或者使用SSH key登陆,不然强烈建议使用非root用户。

创建非root用户

创建新用户组

sudo groupadd -g 344 test

344叫做 gid,可以随便取,但必须是整数。test为用户组名

0是root用户组专用gid。

另外,1000100也是很常见的内置用户组gid。如果你打算用这些用户组,可以不需要运行此命令。

创建新用户

为 test用户组创建一个用户,名字叫做 test_user

# 创建一个新用户
sudo useradd \
    -m -d /home/test_user `#自动创建用户目录`\
    -s /bin/bash `#设置默认shell`\
    -g test `#主组`\
    -G sudo `#副组`\
    test_user

或者使用下面的写法

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

删除用户(组)

# 删除用户
sudo userdel test_user

# 删除用户组
sudo groupdel test

注意,要将所有的用户删除后才可以删除用户组。

设置密码

# 设置密码
sudo passwd test_user # 假设我输入了testtest

要输入两次密码并完全一样才会生效,密码不会在屏幕上显示

New password:
Retype new password:
passwd: password updated successfully

这个密码,在调用 sudo的权限时会用到。

切换用户

su test_user # su <用户名>

如果你目前的用户级别不比 test_user高,它会要求你输入密码。这个密码就是 testtest

如果你是 root,直接就切换过去了。

显示用户

显示主机都有哪些用户

sudo less /etc/passwd

最下面应该是新的用户。按 q可以终止less命令的使用。

观察home目录

进入新用户的home目录

cd ~

看目录内的内容

ls -hl

输出 total 0,表示什么都没有。

这时,观察一下home目录的绝对路径

pwd

输出 /home/test_user

在Linux里创建新用户就完成了。

探索sudo

尝试与 root交互

cd /root

输出 bash: cd: /root: Permission denied

因为我们是普通用户,没有办法进入 root的目录。

尝试能不能使用 sudo

sudo apt-get update

输入密码后可以正常运行。

输入以下命令,观察我们的用户

id

输出如下

uid=1002(test_user) gid=344(test) groups=344(test),27(sudo)

uid是用户的id,gid是用户组的id。这里看到 test_user属于 test和 sudo两个用户组。如果 test_user不属于 sudo用户组,它将不可以使用 sudo

查看 /etc/sudoers文件

ls -hl /etc/sudoers

输出是

-r--r----- 1 root root 825 Apr 17 14:01 /etc/sudoers

在默认状态下,该文件就算是 root用户也只可以查看而不可以改动。

它控制了用户对于 root权限调用的程度。

修改该文件权限,先运行以下命令

sudo chmod +600 /etc/sudoers 

然后Vim编辑

sudo vim /etc/sudoers

输出内容类似于以下

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
# timestamp_timeout=30即有效期改成30分钟。
Defaults        env_reset, timestamp_timeout=30
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# User privilege specification
root    ALL=(ALL:ALL) ALL

...

如更新系统运行 sudo apt-get update时,你要输入密码,默认密码授权时间是5分钟。

可以修改时长,如30min。

将 Defaults env_reset来改为 Defaults env_reset, timestamp_timeout=30即可。

Vim退出 :wq后生效。如果不想改,直接 :q!退出。

将该文件权限恢复默认

sudo chmod -w /etc/sudoers && ls -hl /etc/sudoers

输出为

-r--r----- 1 root root 847 Apr 19 13:38 /etc/sudoers

即时强行结束 sudo的授权

sudo -K

此后再调用 sudo权限,就要再次输入用户密码获得授权。

禁用root使用ssh登陆

图片中通过 ssh user@ip的方式登陆VPS

VPS安全设置指南

一般情况下,主机是允许 root用户远程登陆的。而 root用户的名字一般就是 root。所以,如果攻击者知道你VPS的ip地址(ping你的域名获得)、用户名(默认root)和ssh端口号(默认22),那么保护你的VPS就只有用户密码了。如果你的密码是弱口令被破解,那你的VPS就任人鱼肉了!

所以使用非root用户可以在用户名这个层面上增强VPS的安全防护

用一个新的非root用户,然后禁root远程登陆

编辑ssh程序配置文件

sudo vim /etc/ssh/sshd_config

打开后的内容类似以下

#Port 22
#AddressFamily any
AddressFamily inet
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no  (就是这里!!)
# PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

找到 PermitRootLogin参数,把值 yes改成 no。注意去掉前面的 #号。:wq退出保存。

重启ssh服务后生效

sudo service sshd restart

注意:不要关闭旧的 Shell!新开一个 Shell,用刚刚的非root用户登陆 Shell,成功后再关闭旧的 Shell窗口。切记切记!

隐藏公网ip

获取公网ip

curl ifconfig.me

也可以在VPS控制面板中找到。

隐藏ip之前,要准备一个域名并托管在cloudflare上

登陆cloudflare的后台:Cloudflare | Web Performance & Security

VPS安全设置指南

点击托管的域名,选择 DNS

VPS安全设置指南

添加一条记录,如:

VPS安全设置指南

关掉小黄云,先 仅限DNS模式。最后保存。

回到shell中,用以下命令ping你的VPS

ping abcd.<你的泛域名> # 演示中是abcd.hwb0307.com

如果可以返回准确的ip,再回到clouldflare后台,将小黄云点开

VPS安全设置指南

保存后生效

ping abcd.<你的泛域名> # 我这个记录就是abcd.hwb0307.com

这时ip已经发生变化了。

VPS安全设置指南

真实的IP已经被cf隐藏起来了。

如果VPS上有NPM之类的反向代理服务正在反代你的个人网站(比如博客),此时访问网站会出现 ERR_TOO_MANY_REDIRECTS的报错。

cf官方是这样解释的

Cloudflare SSL/TLS 应用中的灵活 SSL 选项通过 HTTPS 加密浏览器和 Cloudflare 网络之间的流量。但是,当启用灵活SSL选项时,Cloudflare 会通过 HTTP 将请求发送到未加密的源 Web 服务器。如果您的源 Web 服务器配置为在使用灵活 SSL 选项时将所有 HTTP 请求重定向到 HTTPS,则会发生重定向循环。

解决重定向循环的方法就是:SSL/TLS 的 灵活模式 改为 完全模式

VPS安全设置指南

这时候,网站使用NPM(或者Nginx)的证书(通常是来自Let’s Encrypt的免费个人证书)而不是CF证书来保证https请求的安全性。

安装UFW防火墙

官方的帮助文档:UFW – Community Help Wiki (ubuntu.com)

检查自己的机器有没有 ufw

which ufw # /usr/sbin/ufw

如果没有运行以下命令安装

sudo apt-get install ufw

用 sudo ufw status查看防火墙状态。

如果之前没有设置过 ufw,一般是显示 Status: inactive

设置 ufw

  • 设置 ufw的默认值
sudo ufw default deny incoming # 禁止所有进站的流量
sudo ufw default allow outgoing # 允许所有出站的流量
  • 允许https/http连接
sudo ufw allow 80 # 默认http
sudo ufw allow 443 # 默认https
  • 允许新ssh端口
sudo ufw allow 1234/tcp comment 'SSH_2' # 1234换成你自定义的端口

如果你安装了宝塔或者1panel,80和443端口是由Nginx软件管理。而且宝塔面板默认关闭其他端口。

  • 开放端口
sudo ufw allow <你的端口号>/tcp comment '你想要的备注'
  • 启动ufw
sudo ufw enable # 启动ufw。重启主机后正式生效

其它常用的命令

# 查看帮助 
ufw -h

# 如果你改动了ufw规则,记得reload一下生效
sudo ufw reload

# 显示规则的数字
sudo ufw status numbered

# 删除某个规则。基于sudo ufw status numbered命令。
sudo ufw delete <数字>

更改默认ssh端口

默认的ssh端口号是 22,如果想改成 1234端口,请先在VPS后台防火墙里打开 1234端口

先运行以下命令

sudo ufw allow 1234/tcp comment 'SSH' 

修改ssh配置文件

sudo vim /etc/ssh/sshd_config

文件开头就一个 #Port 22参数。#表示注释,不生效。

将 #号去除,然后 22改为 1234

Port 1234

重启ssh服务生效

sudo service sshd restart

注意:此时不要关闭终端,新开一个窗口用新端口号、非root用户进行ssh登陆测试。如果成功,就可以关闭旧的Shell了。

禁ping

很简单,修改规则文件

sudo vim /etc/ufw/before.rules

外面到本地的访问是由 INPUT控制的,其中 echo-request就是ping所采用的类型。因此,只要找到 ok icmp codes for INPUT下面的记录

# ok icmp codes for INPUT
-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
# -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

找到 echo-request,把 ACCEPT改成 DROP。这样外面的机器就无法ping通你的VPS了。

重新加载一下 ufw以使改动生效

sudo ufw reload

如果你机器安装了1panel,在防火墙里有禁ping按钮,点击即可。

安装Fail2ban(强烈建议)

安装命令

sudo apt install fail2ban -y

运行

sudo service fail2ban start

默认配置:在通过 SSH 尝试登录 6 次失败后,该配置将禁止主机 10 分钟。

DNS和SSL证书

不要设置 DNS 直接指向源站, SSL使用泛域名证书。

发布者:木木,转载请注明出处:https://blog.mmcool.site/4511.html

Like (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
木木的头像木木
Previous 2024 年 7 月 31 日 上午7:49
Next 2024 年 7 月 31 日 上午9:42

相关推荐

发表回复

Please Login to Comment
SHARE
TOP