Linux服务器安全加固

0    622    10

Tags:

👉 本文共约6396个字,系统预计阅读时间或需25分钟。

挂了公网的云服务器特别容易遭到黑客的攻击,对于端口是默认端口(22、1521、3389等端口)或密码是弱密码密码和用户名一样的的用户来说,特别容易被入侵。

SSH 是一种广泛使用的协议,用于安全地访问 Linux 服务器。大多数用户使用默认设置的 SSH 连接来连接到远程服务器。但是,不安全的默认配置也会带来各种安全风险。具有开放 SSH 访问权限的服务器的 root 帐户可能存在风险。尤其是如果您使用的是公共 IP 地址,则破解 root 密码要容易得多。

所有服务器管理员都应该考虑数据和数据安全问题。服务器安全是一个非常敏感的问题,因为攻击的主要焦点是 Web 服务器,它们几乎包含有关系统的所有信息。由于大多数服务器都在 Linux 基础架构上运行,因此熟悉 Linux 系统和服务器管理非常重要。

SSH 安全只是保护服务器的方法之一。可以通过停止、阻挡或减缓攻击来最大程度地减少您受到的伤害。除了提供 SSH 安全性之外,您还可以实施许多不同的方法来保护您的 Linux 服务器。

修改默认端口(推荐)

默认的 SSH 连接端口是 22。当然,所有的攻击者都知道这一点,因此需要更改默认端口号以确保 SSH 安全。尽管攻击者可以通过 Nmap 扫描轻松找到新的端口号,但这里的目标是让攻击者的工作更加困难。

  1. 通过SSH密码方式远程登录云服务器。

  2. 执行以下命令,修改SSH登录的默认端口,比如修改为“5000”。

    按“i”进入编辑模式,在第17行,将注释符“#”删掉,修改为“Port 5000”。

    图1 修改前
    Linux服务器安全加固

    图2 修改后
    Linux服务器安全加固

  3. 按“Esc”,输入:wq保存并退出。

在这一步之后,使用sudo systemctl restart ssh再次重启 SSH 服务。现在您可以使用刚刚定义的端口访问您的服务器。如果您使用的是防火墙,则还必须在此处进行必要的规则更改。在运行netstat -tlpn命令时,您可以看到您的 SSH 端口号已更改。

增加防火墙规则:开放指定端口

CentOS 7系列操作系统的默认防火墙是fireware,而不是iptables。因此,如果系统是默认防火墙,则不需要执行本节操作;如果安装过iptables,则要参考本节指导开放SSH登录的5000端口。

  1. 执行以下命令,检查是否安装了iptables。

    service iptables status

    • 如果提示如下类似信息,表示未安装iptables,跳过本节,继续添加安全组规则操作。

      Linux服务器安全加固

    • 如果提示如下类似信息,表示安装了iptables,并且为“active”状态。继续执行步骤。

      Linux服务器安全加固

  2. 执行以下命令增加iptables规则,开放5000端口。

  3. 执行以下命令查看iptables现有规则是否已包含5000端口。

    Linux服务器安全加固

添加安全组规则

安全组中的入方向规则默认开启了22端口,当云服务器的SSH登录端口修改为5000时,需要为安全组新加一条规则。

  1. 登录管理控制台。

  2. 选择“计算 > 弹性云服务器”,进入云服务器控制台。

  3. 单击云服务器名称“ecs-f5a2”进入详情页面。

  4. 选择“安全组”页签,单击展开安全组规则详情,单击列表右上角的“更改安全组规则”。

  5. 添加一条入方向规则,如图3所示。

    图3 安全组规则
    Linux服务器安全加固

关闭密码登录,采用密钥登录

连接到服务器的最安全方法之一是使用 SSH 密钥。使用 SSH 密钥时,无需密码即可访问服务器。另外,您可以通过更改sshd_config文件中与密码相关的参数来完全关闭对服务器的密码访问。

创建 SSH 密钥时,有两个密钥:Public和Private。公钥将上传到您要连接的服务器,而私钥则存储在您将用来建立连接的计算机上。

在您的计算机上使用ssh-keygen命令创建 SSH 密钥。不要将密码短语字段留空并记住您在此处输入的密码。如果将其留空,您将只能使用 SSH 密钥文件访问它。但是,如果您设置了密码,则可以防止拥有密钥文件的攻击者访问它。例如,您可以使用以下命令创建 SSH 密钥:ssh-keygen

在管理控制台创建一个密钥对,绑定至云服务器,使云服务器登录方式切换为密钥。

  1. 登录管理控制台。

  2. 选择“计算 > 弹性云服务器”,进入云服务器控制台。

  3. 参考创建密钥对创建一个密钥对,妥善保管好私钥文件。

  4. 选择“服务列表 > 安全 > 数据加密服务”,单击左侧导航中的“密钥对管理”。

  5. 选择“云服务器列表”页签,在“ecs-f5a2”所在行,单击操作列的“绑定”。按照图5进行配置,单击“确定”。

    关闭密码登录,请在绑定密钥对页面勾选“关闭密码登录方式。”或编辑“sshd_config”配置文件,禁止密码登录。

    图4 绑定密钥对
    Linux服务器安全加固

  6. 登录云服务器操作系统,编辑“sshd_config”配置文件,禁止密码登录。

    按“i”进入编辑模式,在最后几行按下图进行配置。

    Linux服务器安全加固

    参数说明:

    • PermitRootLogin:是否允许root帐户登录,配置为“yes”。
    • UseDNS:是否允许DNS解析,配置为“no”。
    • PasswordAuthentication:是否允许使用密码登录,配置为“no”。

    Linux服务器安全加固说明:

    在步骤5中为云服务器绑定密钥对时,已勾选了“关闭密码登录方式”,此处的“PasswordAuthentication”必为“no”,只需验证即可。

    按“Esc”,输入:wq保存并退出。

  7. 完成后,重启sshd服务。

  8. 通过Xshell或其他SSH客户端连接云服务器,密码登录会被限制(如图5所示,密码输入项置灰),则证明配置成功。

    图5 Xshell登录云服务器
    Linux服务器安全加固

编辑hosts.allow和hosts.deny将恶意IP地址加入黑名单(推荐)

“/etc/hosts.allow”和“/etc/hosts.deny”是控制远程访问的文件,通过配置该文件可以允许或者拒绝某个IP或者IP段的客户访问Linux云服务器的某项服务。

比如SSH服务,通常只对管理员开放,那我们就可以禁用不必要的IP,而只开放管理员可能使用到的IP段。

因为云服务器需要在不同地点登录,建议编辑“/etc/hosts.allow”允许所有IP地址登录,这样不会影响正常使用。

在最后一行增加“sshd:ALL”。

Linux服务器安全加固

我们可以通过一些方法识别云服务器的安全风险,比如检查SSH状态,查看疑似恶意登录的IP,然后在“/etc/hosts.deny”中将这些地址禁止。

使用如下代码,可以将登陆失败次数大于20的IP地址加入到黑名单中:

优化后的代码:

设定密码策略

修改 /etc/login.defs 配置文件

Linux服务器安全加固

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

脚本实现设定密码策略

bash test.sh即可。

对用户密码强度的设定

打开 /etc/pam.d/sysetm-auth 文件 ,修改如下。我们设置新密码不能和旧密码相同,同时新密码至少8位,还要同时包含大字母、小写字母和数字

difok= :此选项用来定义新密码中必须要有几个字符和旧密码不同
minlen=:此选项用来设置新密码的最小长度
ucredit= :此选项用来设定新密码中可以包含的大写字母的最大数目。-1 至少一个
lcredit=:此选项用来设定新密码中可以包含的小写字母的最大数目
dcredit=:此选项用来设定新密码中可以包含的数字的最大数目

:这个密码强度的设定只对普通用户有限制作用,root用户无论修改自己的密码还是修改普通用户的时候,不符合强度设置依然可以设置成功

脚本实现对用户密码强度的设定:

对用户的登录次数进行限制(推荐)

有一些攻击性的软件是专门采用暴力破解密码的形式反复进行登录尝试,对于这种情况,我们可以调整用户登录次数限制,使其密码输入3次后自动锁定,并且设置锁定时间,在锁定时间内即使密码输入正确也无法登录

打开 /etc/pam.d/sshd 文件,在 #%PAM-1.0 的下面,加入下面的内容,表示当密码输入错误达到3次,就锁定用户150秒,如果root用户输入密码错误达到3次,锁定300秒。锁定的意思是即使密码正确了也登录不了:

Linux服务器安全加固

脚本设置对用户的登录次数做限制:

另外:默认情况下,您可以根据需要尝试多次输入密码来访问服务器。但是,攻击者可以利用此漏洞对服务器进行暴力破解。通过指定允许的密码尝试次数,您可以在尝试一定次数后自动终止SSH 连接。为此,请更改/etc/ssh/sshd_config文件中的MaxAuthTries值。

禁止root用户远程登录(推荐)

禁止root用户远程登录 。打开 /etc/ssh/sshd_config ,修改PermitRootLogin为no

脚本设置禁止ROOT用户远程登录

禁止使用空白密码的用户访问

在您的系统上可能有您不小心创建的没有密码的用户。要防止此类用户访问服务器,您可以将sshd_config文件中的PermitEmptyPasswords行值设置为no。

打开 /etc/ssh/sshd_config

使用 SSH 版本 2

SSH 的第二个版本发布是因为第一个版本中存在许多漏洞。默认情况下,您可以通过将Protocol参数添加到/etc/ssh/sshd_config文件来启用服务器使用第二个版本。这样,您未来的所有连接都将使用第二个版本的 SSH。

设置历史命令保存条数和账户超时时间

设置账户保存历史命令条数,超时时间 。打开 /etc/profile ,修改如下

使用脚本修改配置文件

设置只有指定用户组才能使用su命令切换到root用户(推荐)

在linux中,有一个默认的管理组 wheel。在实际生产环境中,即使我们有系统管理员root的权限,也不推荐用root用户登录。一般情况下用普通用户登录就可以了,在需要root权限执行一些操作时,再su登录成为root用户。但是,任何人只要知道了root的密码,就都可以通过su命令来登录为root用户,这无疑为系统带来了安全隐患。所以,将普通用户加入到wheel组,被加入的这个普通用户就成了管理员组内的用户。然后设置只有wheel组内的成员可以使用su命令切换到root用户。

比如,我们将普通用户lhr加入wheel组。

然后,我们修改配置文件 /etc/pam.d/su ,将这行的注释给去掉

Linux服务器安全加固

然后去 /etc/login.defs 末尾加入 SU_WHEEL_ONLY yes 即可。

Linux服务器安全加固

使用脚本设置配置文件

对Linux账户进行管理

使用脚本对账户进行管理

对重要的文件进行锁定,即使ROOT用户也无法删除

Linux服务器安全加固

使用脚本对重要文件进行锁定

关闭TCP端口转发和X11转发

攻击者可以尝试通过 SSH 连接的端口转发来访问您的其他系统。为了防止这种情况,您可以在sshd_config文件中关闭AllowTcpForwarding和X11Forwarding功能。

总脚本

/etc/ssh/sshd_config配置说明

服务器配置文件重要参数以及作用

参数作用
Port 22端口号,默认为TCP的22号端口,修改端口时,取消注释,直接修改,或复制本行后修改
Protocol 2ssh安全传输协议,目前默认使用的是第二版协议
ListenAddress 0.0.0.0监听的地址段
PermitRootLogin yes/on是否允许用户在发起ssh请求的时候,以root的身份直连本地主机,no表示启用,不允许root登
PermitEmptyPasswords yes/on是否允许空密码登陆
LoginGraceTimessh登陆时,密码验证的超时时间,默认为2分钟
MaxAuthTries 6ssh输入密码的最大尝试次数,默认为6次
MaxSessions 10最大终端数
PasswordAuthentication yes/on是否启用密码身份验证
PubkeyAuthentication是否启用公私钥对进行身份认证
AuthorizedKeysFile指定ssh远程连接的公钥存放路径
Banner显示软件版本等相关信息
StricModes yes当远程用户的私钥改变时直接拒绝连接
HostKey /tc/ssh/ssh_host_keySSH协议版本为1时,DES私钥存放的位置
HostKey /etc/ssh/ssh_host_rsa_keySSH协议版本为2时,RSA私钥存放的位置
HostKey /etc/ssh/ssh_host_dsa_keySSH协议版本为2时,DSA私钥存放的位置

参考

https://support.huaweicloud.com/bestpractice-ecs/zh-cn_topic_0165501097.html

https://mp.weixin.qq.com/s/lUBVJpMwpDmYOGxOyTf5cA

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部