本文记录了 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
总结
服务器安全无小事,按照文中操作已经能让服务器的安全性大大提高,除非有人铁了心要搞你的服务器。