合 Linux服务器安全加固
Tags: LinuxOSssh安全操作系统Permission denied加固
- 简介
- 修改默认端口(推荐)
- 增加防火墙规则:开放指定端口
- 添加安全组规则
- 关闭密码登录,采用密钥登录
- 编辑hosts.allow和hosts.deny将恶意IP地址加入黑名单(推荐)
- 设置AllowUsers和DenyUsers选项,只允许特定用户登录
- 设定密码策略
- 对用户密码强度的设定
- 对用户的登录次数进行限制(推荐)
- 禁止root用户远程登录(推荐)
- 禁止使用空白密码的用户访问
- 使用 SSH 版本 2
- 设置历史命令保存条数和账户超时时间
- 设置只有指定用户组才能使用su命令切换到root用户(推荐)
- 对Linux账户进行管理
- 对重要的文件进行锁定,即使ROOT用户也无法删除
- 关闭TCP端口转发和X11转发
- 总脚本
- /etc/ssh/sshd_config配置说明
- 参考
简介
挂了公网的云服务器特别容易遭到黑客的攻击,对于端口是默认端口(22、1521、3389等端口)或密码是弱密码或密码和用户名一样的的用户来说,特别容易被入侵。
SSH 是一种广泛使用的协议,用于安全地访问 Linux 服务器。大多数用户使用默认设置的 SSH 连接来连接到远程服务器。但是,不安全的默认配置也会带来各种安全风险。具有开放 SSH 访问权限的服务器的 root 帐户可能存在风险。尤其是如果您使用的是公共 IP 地址,则破解 root 密码要容易得多。
所有服务器管理员都应该考虑数据和数据安全问题。服务器安全是一个非常敏感的问题,因为攻击的主要焦点是 Web 服务器,它们几乎包含有关系统的所有信息。由于大多数服务器都在 Linux 基础架构上运行,因此熟悉 Linux 系统和服务器管理非常重要。
SSH 安全只是保护服务器的方法之一。可以通过停止、阻挡或减缓攻击来最大程度地减少您受到的伤害。除了提供 SSH 安全性之外,您还可以实施许多不同的方法来保护您的 Linux 服务器。
修改默认端口(推荐)
默认的 SSH 连接端口是 22。当然,所有的攻击者都知道这一点,因此需要更改默认端口号以确保 SSH 安全。尽管攻击者可以通过 Nmap 扫描轻松找到新的端口号,但这里的目标是让攻击者的工作更加困难。
通过SSH密码方式远程登录云服务器。
执行以下命令,修改SSH登录的默认端口,比如修改为“5000”。
1vim /etc/ssh/sshd_config按“i”进入编辑模式,在第17行,将注释符“#”删掉,修改为“Port 5000”。
按“Esc”,输入:wq保存并退出。
在这一步之后,使用sudo systemctl restart ssh再次重启 SSH 服务。现在您可以使用刚刚定义的端口访问您的服务器。如果您使用的是防火墙,则还必须在此处进行必要的规则更改。在运行netstat -tlpn命令时,您可以看到您的 SSH 端口号已更改。
增加防火墙规则:开放指定端口
CentOS 7系列操作系统的默认防火墙是fireware,而不是iptables。因此,如果系统是默认防火墙,则不需要执行本节操作;如果安装过iptables,则要参考本节指导开放SSH登录的5000端口。
执行以下命令,检查是否安装了iptables。
service iptables status
执行以下命令增加iptables规则,开放5000端口。
1iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5000 -j ACCEPT执行以下命令查看iptables现有规则是否已包含5000端口。
1iptables -L -n
添加安全组规则
安全组中的入方向规则默认开启了22端口,当云服务器的SSH登录端口修改为5000时,需要为安全组新加一条规则。
登录管理控制台。
选择“计算 > 弹性云服务器”,进入云服务器控制台。
单击云服务器名称“ecs-f5a2”进入详情页面。
选择“安全组”页签,单击展开安全组规则详情,单击列表右上角的“更改安全组规则”。
添加一条入方向规则,如图3所示。
关闭密码登录,采用密钥登录
连接到服务器的最安全方法之一是使用 SSH 密钥。使用 SSH 密钥时,无需密码即可访问服务器。另外,您可以通过更改sshd_config文件中与密码相关的参数来完全关闭对服务器的密码访问。
创建 SSH 密钥时,有两个密钥:Public和Private。公钥将上传到您要连接的服务器,而私钥则存储在您将用来建立连接的计算机上。
在您的计算机上使用ssh-keygen命令创建 SSH 密钥。不要将密码短语字段留空并记住您在此处输入的密码。如果将其留空,您将只能使用 SSH 密钥文件访问它。但是,如果您设置了密码,则可以防止拥有密钥文件的攻击者访问它。例如,您可以使用以下命令创建 SSH 密钥:
ssh-keygen
在管理控制台创建一个密钥对,绑定至云服务器,使云服务器登录方式切换为密钥。
登录管理控制台。
选择“计算 > 弹性云服务器”,进入云服务器控制台。
参考创建密钥对创建一个密钥对,妥善保管好私钥文件。
选择“服务列表 > 安全 > 数据加密服务”,单击左侧导航中的“密钥对管理”。
选择“云服务器列表”页签,在“ecs-f5a2”所在行,单击操作列的“绑定”。按照图5进行配置,单击“确定”。
关闭密码登录,请在绑定密钥对页面勾选“关闭密码登录方式。”或编辑“sshd_config”配置文件,禁止密码登录。
登录云服务器操作系统,编辑“sshd_config”配置文件,禁止密码登录。
1vim /etc/ssh/sshd_config按“i”进入编辑模式,在最后几行按下图进行配置。
参数说明:
- PermitRootLogin:是否允许root帐户登录,配置为“yes”。
- UseDNS:是否允许DNS解析,配置为“no”。
- PasswordAuthentication:是否允许使用密码登录,配置为“no”。
说明:
在步骤5中为云服务器绑定密钥对时,已勾选了“关闭密码登录方式”,此处的“PasswordAuthentication”必为“no”,只需验证即可。
按“Esc”,输入:wq保存并退出。
完成后,重启sshd服务。
1systemctl restart sshd通过Xshell或其他SSH客户端连接云服务器,密码登录会被限制(如图5所示,密码输入项置灰),则证明配置成功。
编辑hosts.allow和hosts.deny将恶意IP地址加入黑名单(推荐)
“/etc/hosts.allow”和“/etc/hosts.deny”是控制远程访问的文件,通过配置该文件可以允许或者拒绝某个IP或者IP段的客户访问Linux云服务器的某项服务。
比如SSH服务,通常只对管理员开放,那我们就可以禁用不必要的IP,而只开放管理员可能使用到的IP段。
因为云服务器需要在不同地点登录,建议编辑“/etc/hosts.allow”允许所有IP地址登录,这样不会影响正常使用。
1 | vim /etc/hosts.allow |
在最后一行增加“sshd:ALL”。