服务器安全加强攻略(linux)

系统环境

  • cento7

故障现象

这几天同事找到我,说服务器好像被挂马了,让我去检查一下

ssh到服务器之后,输入lastb命令看了一下,出来出来一大堆的ip正在尝试破解服务器的密码

完全没有运维的服务器,是多么的脆弱,为了避免被对方用字典暴力破解了服务器

那么接下来就要对服务器的安全性进行加强了

解决过程

因为字典暴力破解都是猜用户名,然后用生成好的字典不断的对服务器进行尝试,然后获得shell权限

而且linux大多数服务器都有root用户,所以root用户的尝试次数必定是最多的,

为了增加对方的攻击成本,那么我们首先要做这样设置

  1. 创建普通用户

  2. 设置普通用户的sudoer权限

  3. 禁止root账户远程ssh登录

用普通用户来远程登录,并且sudo已经可以解决大多数问题了,实在需要root来执行某些任务的时候,再使用su root来切换到root执行,这样做的话,对方就需要猜测用户名,然后再猜测密码,攻击难度瞬间就提升了一大截

  • 创建普通用户并设置密码
useradd someuser && passwd someuser
  • 设置sudoer权限

打开/etc/sudoers

chmod u+w /etc/sudoers 
vim /etc/sudoers 

找到root ALL=(ALL) ALL 然后加上新创建的普通用户

root    ALL=(ALL)       ALL
someuser  ALL=(ALL)       ALL
  • 禁止root账户远程登录

打开ssh的配置文件 /etc/ssh/sshd_config

vim /etc/ssh/sshd_config  

找到 PermitRootLogin改成no,如果没有找到 那么添加一行

 PermitRootLogin no

接着重启sshd服务

/bin/systemctl restart sshd.service

如果不是centos服务器,使用的命令一般是service sshd restart

这样做就提高了很大的安全性了,但是这只是一个简单的隐藏而已,并不能真正的解决根本性的问题,只要给对方时间,猜测到账户和密码还是有可能的,为了一劳永逸,我们还需要把这些恶意的ip全都封掉,但是手动封肯定是不现实的,所以我们需要一个自动化的脚本,这个脚本的作用如下

检测10分钟内,尝试失败登录次数超过5次的ip,然后使用iptables把这些ip地址全都禁掉,然后把这个脚本设置为每十分钟执行一次 就可以自动的封禁这些ip了,至于这个脚本怎么写就很随意了,你可以用php python bash等任何一种脚本语言来实现这个过程,这里是我用bash写的一个简单的例子

#!/bin/bash

now=`date +'%H%M'`
start=`date +'%H%M' -d '-10min'`
lines=100000
iptables=/sbin/iptables
blacklist=./blacklist
limitnum=5
ipList=`lastb |   head -n ${lines} |  awk '{ gsub(/:/,"",$7); if($7>='${start}' && $7<='${now}') { tmpData[$3]++} } END{ for(i in tmpData){if(tmpData[i]>=7){print i}} }'`

if [ ! -f ${blacklist} ];then 
    echo ""  > ${blacklist}
fi

for ip in  ${ipList};do
    if [  `cat ${blacklist} | grep ${ip} | wc -l`  -eq 0 ];then
        echo ${ip} >> ${blacklist}
        ${iptables} -D INPUT -s  ${ip} -p tcp --dport 22 -j DROP
    fi
done

尾语

我发现很多公司基本都不注重linux服务器的安全性,我大概看了一下攻击我方服务器的大部分ip,基本上都是别人的肉鸡,而且都是自动化批量式的扫描。像这种扫描,一旦你的服务器被命中并且破解成功,就变成一台新的肉鸡了,然后就会继续去感染其他的机器,如此这样反复的感染下去,最后被感染的机器就越来越多,整个网络里都充满了无用的数据包。所以为了整个网络环境的安全性,我希望所有使用linux服务器的人,都应该掌握一点点基本的linux的防范,不要让自己珍爱的服务器变成了其他人手中的武器。

发表评论

电子邮件地址不会被公开。