Linux 服务器安全加固方案

背景

去年买了台云主机玩玩,一开始以为网络安全这个领域对我来说还太远了,黑客根本不可能攻击我的主机,但是没过多久我的主机就被黑客无情攻击了,直到收到一条云主机服务商发的短信告诉我主机被植入了挖矿程序,一脸懵逼的我以为杀掉这个挖矿进程,然后再删掉这个挖矿程序文件就可以了,结果现实打脸的比较快,不到5分钟,挖矿程序再次启动,cpu 继续打满 100%,被删掉的挖矿程序文件再次出现在同样的目录,之后也排查过 crontab 定时任务,也没发现什么问题,最终通过请教大神,把挖矿文件内容清空,然后通过 chattr +i 命令给这个文件加锁,之后这个挖矿程序就再也没有启动了。我以为这个问题解决了,但事实上之后 nginx 总是会莫名其妙的被杀掉,这时候让我对 Linux 系统安全引起了重视和兴趣,我决定把 Linux 系统安全加入到我的学习计划中,通过总结和请教,写下了这篇 linux 安全加固方案。

分析

上面说到我的主机被攻击,通过事后分析,我也总结了几点原因:
1.端口开放比较随意,redis、zookeeper、tomcat都是使用默认的端口,而且入方向规则是所有地址均可访问。
2.开放了 root 远程登录的权限。
3.使用 sshd V1 版本的协议(推荐使用 V2 版本,因为 V1 有bug)。
其实我的主机问题包括但不限于以上问题,列出来的是比较低级的问题。

方案

1.创建用于登录的用户 admin
因为接下来我们要将 root 远程登录权限给卸掉,但有时又需要使用 root 权限,这时候就应该用一个低权限普通账户登录,然后再 su root 来使用,所以先创建一个 admin 的普通用户,并将其添加至 wheel 组。

[root@kilobytech ~]$ useradd admin -g wheel
[root@kilobytech ~]$ passwd admin 回车下一步
输入密码******回车确认
再次输入密码******回车确认

2.限制 su 命令使用的条件

[root@kilobytech ~]$ vim /etc/pam.d/su

添加下面两行,其中 auth 后面是两个 tab 键,sufficient 和 required 后面是一个 tab 键

auth            sufficient      pam_rootok.so
auth            required        pam_wheel.so use_uid

限定非 wheel 组内用户不得使用 su 命令

[root@kilobytech ~]$ vim /etc/login.defs

在文件末尾添加 SU_WHEEL_ONLY yes 保存文件,这一步是为了配置只允许特定的 wheel 组内用户 su 到 root。

SU_WHEEL_ONLY yes

3.配置 sshd 服务安全加固

[root@kilobytech ~]$ vim /etc/ssh/sshd_config

修改以下配置项

# 禁止 root 远程登陆,若需要使用 root 权限,必须使用低权限普通账户登录主机后 su 切换到 root
PermitRootLogin no
# ssh 修改默认的登陆端口 22,记得需要在安全组规则里配置修改后端口入方向权限,并删除原 22 端口的规则
Port 7722
# 禁止空密码登录
PermitEmptyPasswords no
# 允许三次尝试
MaxAuthTries 3
# 在20秒内不能完成登录,则断开连接
LoginGraceTime 20
# 600秒后无动作就自动断开连接
ClientAliveInterval 600
# 闲置会话最多3个
ClientAliveCountMax 3
# 确保SSH LogLevel设置为INFO,记录登录和注销活动
LogLevel INFO
# SSHD强制使用V2安全协议
Protocol 2
# 重启 ssh 服务
[root@kilobytech ~]$ systemctl restart sshd.service

4.调整和关闭非必须的服务

# 关闭 postfix 服务。如无必要,禁止该服务。
[root@kilobytech ~]$ systemctl disable postfix
# 服务器禁 ping
[root@kilobytech ~]$ vim /etc/sysctl.conf
在最后一行追加  net.ipv4.icmp_echo_ignore_all = 1
# 执行命令 (配置文件才能生效):sysctl -p
[root@kilobytech ~]$ sysctl -p

5.将进程的内存空间地址随机化

# 增大入侵者预测目的地址难度,从而降低进程被成功入侵的风险
[root@kilobytech ~]$ sysctl -w kernel.randomize_va_space=2

6.修改历史命令保留数目为 5

[root@kilobytech ~]$ sed -i 's/^HISTSIZE=1000/HISTSIZE=5/' /etc/profile
# 当然也可以追加一个好看的日志输出格式变量
[root@kilobytech ~]$ export HISTTIMEFORMAT="%F %T"
[root@kilobytech ~]$ source /etc/profile

7.安装检测工具 chkrootkit 和 rkhunter
chkrootkit 安装&使用

[root@kilobytech ~]$ yum install -y gcc
[root@kilobytech ~]$ yum install -y gcc-c++
[root@kilobytech ~]$ yum install -y make
[root@kilobytech ~]$ yum install -y glibc-static
[root@kilobytech ~]$ mkdir /usr/local/etc/chrootkit
[root@kilobytech ~]$ cd /usr/local/etc/chrootkit/
[root@kilobytech ~]$ wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz
[root@kilobytech ~]$ tar zxvf chkrootkit.tar.gz 
[root@kilobytech ~]$ cd chkrootkit-0.53/
[root@kilobytech ~]$ make sense       #编译
[root@kilobytech ~]$ ./chkrootkit     #检测命令,若出现INFECTED那就要小心了(./chkrootkit | grep INFECTED)

chkrootkit 在检查 rootkit 的过程中使用了部分系统命令,因此,如果服务器被黑客入侵,那么依赖的系统命令可能也已经被入侵者替换,此时 chkrootkit 的检测结果将变得完全不可信。为了避免 chkrootkit 的这个问题,可以在服务器对外开放前,事先将 chkrootkit 使用的系统命令进行备份,在需要的时候使用备份的原始系统命令让 chkrootkit 对 rootkit 进行检测。这个过程可以通过下面的操作实现:

[root@kilobytech ~]$ mkdir /usr/share/.commands
[root@kilobytech ~]$ cp `which --skip-alias awk cut echo find egrep id head ls netstat ps strings sed uname` /usr/share/.commands
# 使用备份过的命令来检测
[root@kilobytech ~]$ /usr/local/etc/chrootkit/chkrootkit-0.53/chkrootkit -p /usr/share/.commands/ | grep INFECTED
[root@kilobytech ~]$ cd /usr/share/
# 打压缩包备份命令更稳妥
[root@kilobytech ~]$ tar zcvf commands.tar.gz .commands

rkhunter 安装&使用

# 官网下载 https://sourceforge.net/projects/rkhunter/files/
[root@kilobytech ~]$ mkdir /usr/local/etc/rkhunter/
# 把文件下载到 /usr/local/etc/rkhunter/ 
# 解压
[root@kilobytech ~]$ tar xfz rkhunter-1.4.6.tar.gz
# 安装
[root@kilobytech ~]$ cd /usr/local/etc/rkhunter/rkhunter-1.4.6
[root@kilobytech ~]$ ./installer.sh --layout default --install
# 开始检测
[root@kilobytech ~]$ rkhunter -c
# 检测结果绿色的代表安全,红色的需要引起注意

最后,对所有重要文件进行锁定,不解锁的情况下 root 都无法删除修改

[root@kilobytech ~]$ chattr +i  /etc/passwd  /etc/group  /etc/shadow /etc/gshadow /etc/inittab /etc/pam.d/su /etc/sudoers /etc/login.defs /etc/ssh/sshd_config /usr/share/commands.tar.gz

各位有好的建议可以在评论区补充

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值