Linux 系统调优之安全防护1



文章目录

  • 前言
    • 1、系统命令审计
    • 2、公网防护
    • 3、服务器使用秘钥登录
    • 4、默认账户及口令文件的防护
    • 5、其他配置
  • 总结


前言

  Linux系统以其开放性和强大的功能成为众多企业和开发者的首选。然而,开放性也带来了安全风险。本文将探讨Linux系统调优中的安全防护策略,分享并提供一系列实用的优化措施,确保系统在高效运行的同时,也能抵御潜在的网络威胁,减少日常使用的安全隐患。


  大家好,我是技术界的小萌新,今天要和大家分享一些干货。在阅读之前请先点赞,给我一点鼓励吧!这对我来说很重要 (*^▽^*)

1、系统命令审计

  系统 命令审计 是日常运维工作中的一个增加 Linux 安全性的一个环节,它不仅关乎系统操作的合规性,更是防范 未授权访问 和潜在威胁的重要手段。随着系统复杂性的增加,对命令的细致审计变得尤为必要,它能够帮助我们识别和阻止恶意行为,保护系统免受损害。
  其中开始 历史命令时间戳 并增加历史命令记录量是一个简单的方式,用于记录日常运维工作中的命令使用记录,方便遇到问题时进行 排错 解决,并记录其他用户使用的命令,方法如下:

[root@ECS-PROXY ~] vim /etc/profile.d/history.sh     
# 在全局环境变量配置目录中写脚本,方便开机自启

export HISTSIZE=10000                                 
export HISTTIMEFORMAT="%F %T `whoami` "
# 设置历史命令记录为 1w 个               
# 开启历史命令时间戳,%F %T 分别显示 年份 月份,'whoami' 执行该命令,显示当前命令执行用户

"/etc/profile.d/history.sh" 2L, 62C 

  修改完毕,我们执行 history 命令可以查看如下效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0pdl8WA1-1721030775069)(https://i-blog.csdnimg.cn/direct/75acb5e3019349e19034130e68b380e7.png#pic_center =80%x)]

  这里有聪明的小伙伴就要想了,可不可以用 $USER 环境变量显示用户,不执行命令?
  其实 whoami 的输出稳定性是更好的,这是因为 USER 是一个 环境变 量,反映当前用户身份,可被脚本或程序 更改 ,用户身份会随 su 或 sudo 切换用户 而改变。
  而 whoami 是一个命令行实用程序,显示当前 有效 的用户名称,与 USER 变量不同,whoami 会根据当前有效的用户 ID (EUID)来确定并显示用户名,这意味着即时通过 su 或 sudo 切换了用户,whoami 也会反映出当前实际的用户身份。

  最后如果是对系统命令审计 精细度 有更高的要求,还可以使用更 高效 的方式,rsyslog + elasticsearch 建立日常命令的日志,并实时交给 ELK 日志平台 统计处理,详细可见如下博客。
  参考:《用 Shell 搞定 Linux 命令审计》

2、公网防护

  Linux 公网防护 是确保服务器安全的重要环节,众所周知,一旦你的服务器暴露在公网的环境下,总有无聊的一些破解 SSH 密码的行为出现,这个时候就可以使用一个简单的脚本来进行预防可能 的 SSH 撞库攻击 ,将一些试错 SSH 密码超过一定次数的 IP 放入防火墙,拒绝接下来的所有行为,提高服务器一定的安全性,脚本如下:

#!/bin/bash
# 使用awk统计ssh连接失败IP的次数,超过十次,放入防火墙iptables中,禁止 IP 访问。
awk '/Failed password/{                                   
# 匹配 secure 日志中显示错误 ssh 密码连接的行,包含来访者 IP
    if (match($11,/((25[0-5]|2[0-4]\d|1?\d?\d).?){4}/))  
# 利用 awk 中内置正则匹配函数 match 匹配第 11 列 IP ,或者 13 列也会出现 IP,
# $11,13 是位置函数,代表默认以空格区分的 awk 匹配行的该列内容。
        {ip[$11]++}
# 使用 ip 数组,数组下标为 IP ,匹配到该 IP 则次数+1,
    else 
        {ip[$13]++}
    };
    END{
        for (i in ip){
            if (ip[i] `** = 10){
                print i
# 循环打印 IP 数组中记录的 SSH 密码错误连接超过 10 次的 IP
            }
        }
    }' /var/log/secure `**  ~/tmp.txt
# secure 日志文件记录了系统的安全日志,最后打印的 IP 写入临时文件中

for i in $(cat ~/tmp.txt)
# 循环此 IP 列表
do
    if ! iptables -nL | grep $i;then
        iptables -I INPUT -s $i -j REJECT
# 判断此 IP 是否被加入防火墙,没有则加入到防火墙,拒绝并警告 INPUT 链数据包为此源 IP 的访问
    fi
done
rm -rf ~/tmp.txt
# 删除临时文件

  最后将此脚本放入 cron 计划任务 ,可每分钟执行一次,且为了以防万一,在每晚的 0 点清除防火墙规则,给自己留下后门。

[root@ECS-PROXY ~] crontab -e -u root
*/1 * * * *    /root/shell/prevent_ssh.sh
0 0 * * *      iptables -F
# iptables 的 -F 选项用于清除防火墙所有规则

  完成上述操作后,等待脚本运行后,使用 iptables -nL 查看防火墙,可看到要求已满足。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K8juqYLF-1721030775072)(https://i-blog.csdnimg.cn/direct/2ba27204202b401081f661e1c88f5f6f.png#pic_center =80%x)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iCeC9L6S-1721030775073)(https://i-blog.csdnimg.cn/direct/a806ca08355040b981d79b262ca435c4.png#pic_center =80%x)]

3、服务器使用秘钥登录

  为了加强服务器的安全策略,可以取消 SSH 的 明文密码登录 ,只使用秘钥登录。可以进行以下操作完成这一目的:
1)客户端生成秘钥
  运用 ssh-keygen 命令生成公钥和私钥,存放于 ~/.ssh/ 下的 is_rsa (私钥),id_rsa.pub (公钥)

[root@ECS-PROXY ~] ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Kgul1K94kpHFTA2g6kTa3kYEB96DgpsHWqxGoLkVO5Y root@ECS-PROXY
The key's randomart image is:
+---[RSA 3072]----+
|. =ooo           |
|+= O. .          |
|BoE++            |
|*% ++.           |
|Oo+o+   S        |
|++o= . .         |
| .+o+ o          |
|  o+.+           |
|  .oo            |
+----[SHA256]-----+
[root@ECS-PROXY ~]# 

2)公钥传给服务器
  传输公钥给服务器用 ssh-copy-id 服务器IP 来完成。

[root@ECS-PROXY ~] ssh-copy-id 192.168.1.31
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '192.168.1.31'"
and check to make sure that only the key(s) you wanted were added.

3)配置服务端 SSH 禁止密码登录
  在服务端的 sshd_config 文件中添加 PasswordAuthentication no禁用 密码登录,添加 PubkeyAuthentication yes 来启动秘钥登录,最后重启 sshd 服务。

[root@docker-01 ~] vim /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes


"/etc/ssh/sshd_config" 147L, 4301C

[root@docker-01 ~] systemctl restart sshd

  测试连接远程服务器,发现无法输入密码,工作完成。
  最后注意 保护 好客户端的公钥、私钥,做上 备份
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-joc85RWo-1721030775074)(https://i-blog.csdnimg.cn/direct/bc6aec6a543848e7a87c38db25474cc6.png#pic_center =80%x)]

4、默认账户及口令文件的防护

   账户保护 对于个人和企业用户都至关重要。随着网络攻击的日益增多,包括 钓鱼 、密码破解和 社会工程学 等手段,账户安全面临着严峻挑战。账户一旦被 入侵 ,可能导致敏感数据 泄露 、财务损失甚至企业声誉受损。
  Linux 通常提供了不少 默认账户 或账户组,这些账户的密码可能已经远近闻名了,当我们第一次装上 Linux 系统就应该意识到这一点,从而减少不使用的不必要的默认账户,通过 userdelgroupdel 命令即可。
   chattr命令可以给下面的文件加上 不可更改 属性,从而防止非授权用户获得权限。我们可以进行以下操作:

[root@docker-01 ~] chattr +i /etc/passwd
[root@docker-01 ~] chattr +i /etc/shadow
[root@docker-01 ~] chattr +i /etc/group
[root@docker-01 ~] chattr +i /etc/gshadow

  这个命令会给指定的文件名(filename)添加 i(immutable)属性。 Immutable 意味着“不可变的”,一旦设置了这个属性,文件不能被 修改 、删除,也不能被重命名或链接。

5、其他配置

  我们可以关闭无关端口,禁止不必要的服务,这样不仅可以提高系统运行速度,而且可以防止出现软件方面的 漏洞 ,进而防范了黑客攻击,最后 限制 用户权限最小授权,加强密码策略,也是进行安全方面 系统调优 的重要步骤。


总结

  本文详细介绍了 Linux 系统安全防护的多个方面,包括系统命令审计、公网防护、服务器使用秘钥登录、默认账户及口令文件的防护,以及其他安全配置措施。通过这些方法,可以有效提高 Linux 系统的安全性,抵御 潜在的 网络威胁和攻击。

  文章到这里就结束了,希望我的分享能为你的技术之旅增添一抹亮色。如果你喜欢这篇文章,请点赞收藏支持我,给予我前行的动力!



你可能感兴趣的:(Linux,系统,Shell,脚本,linux,安全,网络,服务器,运维)