深浅模式
VPS安全优化
本篇内容介绍一些VPS服务器的安全优化内容。
一、准备工作
你需要必备的内容是:
- 服务器的IP地址(本教程将以1.1.1.1举例)
- 服务器用户名(一般是root)
- 服务器密码
服务器安全第一步:请不要泄露你的VPS服务器IP地址,这属于敏感信息。
如果需要截图分享,你应该将VPS服务器的IP地址进行马赛克处理。
你还需要一个SSH客户端工具,你可以参考 怎么连接你的VPS 这一篇中的 Xterminal 。对于新手、小白更加友好。
并根据该教程,连接到你的VPS。
二、更新系统
切换到 root 用户。接下来的操作基本都基于root用户操作。
bash
sudo -i
如果你本身就是使用root用户登录的话,就不需要进行这一步的操作。
更新软件包列表信息:
bash
sudo apt update
执行成功会有以下返回内容:
信息
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
xx packages can be upgraded. Run 'apt list --upgradable' to see them.
(xx)可以是0
升级所有已经安装的软件包列表
bash
sudo apt upgrade -y
三、创建新用户并赋予管理员权限
使用root用户操作服务器非常危险,也容易被黑客攻破。
所以我们创建一个日常使用的账户,并且赋予管理员(sudo)权限。
1,创建一个新的用户
请将下方代码中的文字 用户名 ,更改为你实际想要的用户名,使用英文字母
bash
adduser 用户名
例如我想要创建一个 laopobao 的用户名,那么就是
bash
adduser laopobao
注意:adduser和用户名之间有一个空格。
会提示你输入密码,即 New Password
处。
请务必设置一个强密码!
请保管/保存好你的用户密码!
如图:
设置完密码后,会提示你输入一些其他信息,可以一直按回车跳过。
Full Name []:
、Room Number []:
、Work Phone []:
、Home Phone []:
、Other
都直接按回车跳过。
当显示输入Is the information correct? [Y/N]
时,输入 Y
,回车。
如图:
2,赋予 sudo 权限
请将下方代码中的文字 用户名 ,更改为你刚刚设置好的用户名
bash
usermod -aG sudo 用户名
这条命令将新创建的用户添加到了sudo用户组,使其能够执行管理员命令。
例如我的就是
bash
usermod -aG sudo laopobao
该操作不会返回任何内容。
现在我们尝试使用新的用户进行登录。
3,使用新的用户进行登录
对于使用Xterminal的用户,只需要 关闭当前的服务器窗口
,更改服务器配置。
点击 SSH 图标
,然后点击服务器后面的 编辑
更改配置如图:
信息
IP地址不变
端口不变(后面再改)
用户名更改为你刚刚设置的用户名
密码更改为你刚刚设置的密码
测试连接,成功后,点击保存
然后点击:连接
就可以了。
如果你是直接在终端中,使用命令行直接登录的服务器,之前可能是:
bash
ssh root@你的服务器IP地址
那么现在就需要
ssh 用户名@你的服务器IP地址
例如我的就是
ssh laopobao@1.1.1.1
执行后,输入密码,你输入的时候,密码不会直接显示出来,确定输入的没有错误的话,回车即可登录。
4,验证新用户是否可用
登录后,我们尝试执行一个需要 sudo
的命令来验证权限是否生效,例如更新软件包列表:
bash
sudo apt update
提示输入密码,我们输入新用户名的密码后按回车,看是否能够正常执行。
能够正常执行的话,就代表成功了。
之后我们仍然可以通过下方命令切换到root用户来执行命令。
bash
sudo -i
四、禁用root用户远程登录和更改SSH端口
我们已经创建了具有sudo权限的新用户,所以我们禁用root用户使用ssh登录,这样更加安全。
同时我们更改默认的SSH端口,避免22端口成为自动化扫描和攻击的首要目标。
执行下方命令:
bash
sudo sed -i 's/^#\?Port 22.*/Port 55520/g; s/^#\?PermitRootLogin yes/PermitRootLogin prohibit-password/g' /etc/ssh/sshd_config
该命令可以将/etc/ssh/sshd_config
文件中的Port 22
更改为Port 55520
,PermitRootLogin yes
更改为:PermitRootLogin prohibit-password
其中端口55520可以你更改为其他端口,你可以从1-65535中选择一个数字,建议五位数。
PermitRootLogin prohibit-password
禁用了root用户通过密码登录,但是仍然可以使用ssh密钥登录,这种方式我个人比较推荐。
命令执行后不会返回任何内容。
我们可以通过下方命令查看是否完成更改:
bash
grep -E '^Port|^PermitRootLogin' /etc/ssh/sshd_config
这会直接输出这两条设置项的内容。
确认更改了就完成了。如图:
更改完之后,我们需要重启SSH服务以使其生效。
bash
sudo systemctl restart ssh
五、配置基础防火墙
1,安装UFW
部分服务器已经安装,我们先检测一下。
ufw
回车执行后,如果返回 -bash: ufw: command not found
就是没有安装;
如果返回UFW的用法说明,就是已经安装了。
没有安装的话,我们来安装一下:
bash
sudo apt install ufw
此时再执行ufw
命令,就会显示Usage: ufw COMMAND
以及一大堆的命令了。
2,设置默认规则
我们禁止所有传入连接(无法往服务器中传入内容),允许所有传出连接。
bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
输出内容
sudo ufw default allow outgoing
Default incoming policy changed to 'deny'
(be sure to update your rules accordingly)
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
3,允许必要的连接
先允许我们更改的SSH端口(如之前改的55520
)、80端口和443端口(反代需要)。
bash
sudo ufw allow 55520/tcp
sudo ufw allow http
sudo ufw allow https
返回内容
Rules updated
Rules updated (v6)
返回这两个内容就是成功设置了
其他的设置同样如此查看
同时我们允许一些常用的端口,例如酒馆的8000,hajimi的7806
bash
sudo ufw allow 8000/tcp
sudo ufw allow 7806/tcp
【记得也要打开你的1Panel端口,如果跟着我的教程设置的话,是10086】
所以是
bash
sudo ufw allow 10086/tcp
易错问题
之后你部署了任何其他的服务,都需要打开对应的端口。否则你将连不上对应的服务。
代码是:
bash
sudo ufw allow 端口/tcp
4,启用防火墙
执行下方代码以启动防火墙。
bash
sudo ufw enable
执行后,系统会提示Command may disrupt existing ssh connections. Proceed with operation (y|n)?
这是在警告可能会中断现有连接,我们直接输入 y
按回车即可。
5,检查防火墙状态
执行下方命令检查:
bash
sudo ufw status verbose
这将显示防火墙的状态和所有的规则。
请留意Status: active
,Status为active才是正常启用。
六、安装Fail2ban工具
Fail2ban是防止后台暴力扫描的软件,通过分析系统日志中的异常行为(如多次登录失败),自动封禁可疑 IP 地址,有效抵御暴力破解攻击。推荐安装。
1,安装Fail2ban
通过下方命令安装Fail2ban
bash
sudo apt install fail2ban -y
2,配置Fail2ban
创建一个Fail2ban配置文件:
bash
sudo touch /etc/fail2ban/jail.local
复制下方代码并执行:
bash
cat << EOF | sudo tee /etc/fail2ban/jail.local
[DEFAULT]
#忽略的IP列表,不受设置限制(白名单)
ignoreip = 127.0.0.1
#允许ipv6
allowipv6 = auto
#日志修改检测机制(gamin、polling和auto这三种)
backend = systemd
#针对各服务的检查配置,如设置bantime、findtime、maxretry和全局冲突,服务优先级大于全局设置
[sshd]
#是否激活此项(true/false)
enabled = true
#过滤规则filter的名字,对应filter.d目录下的sshd.conf
filter = sshd
#ssh端口
port = ssh
#动作的相关参数
action = iptables[name=SSH, port=ssh, protocol=tcp]
#检测的系统的登陆日志文件
logpath = /var/log/secure
#屏蔽时间,单位:秒
bantime = 3600
#这个时间段内超过规定次数会被ban掉
findtime = 600
#最大尝试次数
maxretry = 5
EOF
可以通过下方代码检测是否成功写入:
bash
cat /etc/fail2ban/jail.local
如果成功输出了配置文件内容,就代表写入成功了。
如图:
3,启用Fail2ban
设置开机自动启动fail2ban
bash
sudo systemctl enable fail2ban
输出内容包含:
Executing: /lib/systemd/systemd-sysv-install enable fail2ban
重新启动fail2ban
bash
sudo systemctl restart fail2ban
无输出内容
查看fail2ban的状态
bash
sudo systemctl status fail2ban
输出内容应包含:Active: active (running)
如图:
后续操作
确认后,按键盘 ctrl
+ c
退出查看状态。
查看所有可用jail的状态