本文记录了 CentOS 7 云服务器上,提高服务器安全性的一些必要措施。
前言
本来我对 Linux 服务器的安全性并不是很在意,直到有一回腾讯云给我发了服务器被异地登录的消息。
虽然我的 Linux 服务器没啥重要内容,但总归还是觉得不妙,于是重装系统后果断着手提升服务器安全等级。
文中使用的是腾讯云 Linux 服务器,系统镜像为 CentOS 7.6 的版本。
文中使用的命令均为 root
用户执行。
操作步骤
此部分为具体的操作步骤,根据实际情况自行取舍。
更换 SSH 端口
为 Linux 服务器上的所有用户修改 SSH 登录端口。
- 在 Linux 服务器上编辑
/etc/ssh/sshd_config
文件vi /etc/ssh/sshd_config
- 将其中的
Port
取消注释,并修改值为其他端口号- 以下为修改后的结果示例,部分内容省略
...... # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # Port 5678 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: ......
- 以下为修改后的结果示例,部分内容省略
- 重新启动 SSH 服务
systemctl restart sshd
在此之后,使用 SSH 登录该 Linux 服务器都需要添加
-p
参数,例如:ssh dancying@192.168.45.135 -p 5678
使用 SSH 秘钥登录和禁用密码登录
为 Linux 服务器上的 dancying
用户配置秘钥登录,并禁止 dancying
用户使用密码登录。
- 在 Windows 终端执行以下命令生成用户秘钥
ssh-keygen -t ed25519
在 Windows 用户目录下的
.ssh
文件夹中会生成id_ed25519
文件和id_ed25519.pub
文件 - 以
dancying
用户的身份登录 Linux 服务器,并创建~/.ssh
文件夹mkdir ~/.ssh
- 修改
~/.ssh
文件夹权限为rwx------
,然后进入~/.ssh
文件夹chmod 700 ~/.ssh/ && cd ~/.ssh/
- 创建并编辑
authorized_keys
文件vi authorized_keys
- 将
id_ed25519.pub
文件的内容复制粘贴至authorized_keys
文件中,保存后退出
可以使用文本编辑器打开
id_ed25519.pub
文件 - 修改
authorized_keys
文件的权限为rw-------
chmod 600 authorized_keys
- 重新启动 SSH 服务
systemctl restart sshd
- 当确认
dancying
用户可以秘钥登录后,编辑/etc/ssh/sshd_config
文件vi /etc/ssh/sshd_config
- 将
PasswordAuthentication
取消注释,并修改值为no
- 以下为修改后的结果示例,部分内容省略
...... # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes #PermitEmptyPasswords no PasswordAuthentication no ......
- 以下为修改后的结果示例,部分内容省略
- 重新启动 SSH 服务
systemctl restart sshd
禁用 ROOT 远程登录
为 Linux 服务器上的 root
用户禁止 SSH 登录。
- 编辑
/etc/ssh/sshd_config
文件vi /etc/ssh/sshd_config
- 将
PermitRootLogin
取消注释,并把值改为no
- 以下为修改后的结果示例,部分内容省略
...... # Authentication: #LoginGraceTime 2m PermitRootLogin no #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 ......
- 以下为修改后的结果示例,部分内容省略
- 重新启动 SSH 服务
systemctl restart sshd
禁止
root
用户 SSH 登录后,只能通过其他用户切换至root
用户:su root
更换软件默认端口
为需要外部访问的软件更换默认端口,如数据库 MariaDB 等软件。
更换 MariaDB 默认端口
- 编辑
/etc/my.cnf.d/server.cnf
文件vi /etc/my.cnf.d/server.cnf
- 在
[mysql]
部分添加port
键和值- 以下为修改后的结果示例,部分内容省略
...... # This group is read by both MariaDB and MySQL servers [mysqld] port = 5679 ......
- 以下为修改后的结果示例,部分内容省略
- 重新启动 MariaDB
systemctl restart mariadb
启用 CentOS 7 自带的 firewall 防火墙
在 CentOS 7 系统中自带 firewall 防火墙,但是腾讯云提供的 CentOS 7 镜像中 firewall 为关闭状态。
- 开启 firewalld 防火墙服务
systemctl start firewalld
- 将 firewalld 防火墙服务加入开机自启
systemctl enable firewalld
- 开放或关闭 firewalld 防火墙端口例子
- 开放 firewalld 防火墙的
5678
端口firewall-cmd --zone=public --add-port=5678/tcp --permanent
- 关闭 firewalld 防火墙的
3306
端口firewall-cmd --zone=public --remove-port=3306/tcp --permanent
- 开放 firewalld 防火墙的
- 重新载入 firewalld 防火墙服务
systemctl reload firewalld
每次开放端口或关闭端口后都需要重新载入防火墙服务才能生效
查看 firewalld 防火墙已开放的端口可以执行以下命令:
firewall-cmd --zone=public --list-ports
总结
服务器安全无小事,按照文中操作已经能让服务器的安全性大大提高,除非有人铁了心要搞你的服务器。