美文网首页运维
做好这两点,避免服务器成为肉鸡(傀儡)

做好这两点,避免服务器成为肉鸡(傀儡)

作者: 代码狂魔 | 来源:发表于2019-02-16 12:07 被阅读67次

    在公网中每时每刻都有人通过密码字典暴力破解试图登陆你的服务器,不信请看该日志文件大小du -sh `ls /var/log | grep btmp,该文件存储了ssh失败登陆的记录。文件越大/增长越快,说明你的服务器处于被别人暴力破解的危险中!为了避免这种危险,必须做好两点:1. 修改SSH默认端口,2. 使用强口令密码,不想看胡扯的请直接跳到后面。

    整个网络空间中其实存在着很多弱口令服务器,假设弱口令服务器的用户名都为root、密码都为123456、SSH登陆端口都为默认的22。我有一台服务器在不停的用密码字典登陆这些弱口令机器,成功登陆的机器作为肉鸡(傀儡)继续登陆别的机器,假设一台服务器以2台/天的速度进行登陆,那么第一天我就有三台机器(包括自己的那台),第二天就是6+3=3^2=9台,第三天就是18+9=3^3=27台,第N天就是3^N台。

    看到没有,肉鸡/傀儡服务器是以指数级别在增加的!

    为什么有人不停登陆别人的机器,获得肉鸡?如果我手上有来自全世界的肉鸡,并且数量很多,那玩儿法可就多了:

    1. 看不惯哪个网站?操纵这些傀儡机器不停的请求该网站,让别人没法用,服务瘫痪,这就是传说中的DDoS攻击(分布式拒绝服务攻击)。
    2. 想赚点小钱,偷偷挖矿是你不二的选择,这么多肉鸡,虽然每一台计算能力不怎么样,但是联合起来也不容小。这种肉鸡俗称挖掘鸡(笑
    3. 肉鸡做代理?这个话题我就不深说了,大陆敏感话题... ...
    4. 窥探肉鸡主人数据... 满足窥探欲
    5. 这么多肉鸡代表你有这么多IP,有大量IP能干什么?这又是另外一个庞大的话题了... ...

    以上纯属瞎扯,如有不对,你打我啊!

    基础知识

    • /var/log/wtmp 用于记录登录成功的用户的信息,是一个二进制文件,只能通过 last 命令来查看
    root     pts/0        100.87.41.98     Sat Feb 16 01:28   still logged in   
    root     pts/2        100.87.41.98     Fri Feb 15 11:38 - down   (01:35)    
    root     pts/1        100.87.41.98     Fri Feb 15 11:38 - down   (01:35)    
    root     pts/0        100.87.41.98     Fri Feb 15 11:38 - down   (01:35)
    

    查看尝试恶意登陆的前十个IP:
    sudo lastb | awk '{ print $3}' | awk '{++S[$NF]} END {for(a in S) print a, S[a]}' | sort -rk2 |head
    查看恶意IP尝试登陆次数:
    lastb | awk '{ print $3}' | sort | uniq -c | sort -n
    当然,如果你要清理这个日志,删除在创建之

    rm -rf /var/log/btmp
    touch /var/log/btmp
    
    • /var/log/btmp 用于记录登录失败的用户的信息,是一个二进制文件,只能通过 lastb 命令来查看
    ejabberd ssh:notty    123.207.233.84   Sat Feb 16 02:08 - 02:08  (00:00)    
    rsync    ssh:notty    157.230.102.166  Sat Feb 16 02:08 - 02:08  (00:00)    
    ejabberd ssh:notty    123.207.233.84   Sat Feb 16 02:08 - 02:08  (00:00)    
    rsync    ssh:notty    157.230.102.166  Sat Feb 16 02:08 - 02:08  (00:00)
    
    • /var/log/lastlog 用于记录用户的历史登录情况,是一个二进制文件,只能通过 lastlog 命令来查看
    Username         Port     From             Latest
    root             pts/0    100.87.41.98     Sat Feb 16 01:28:34 +0000 2019
    bin                                        **Never logged in**
    daemon                                     **Never logged in**
    adm                                        **Never logged in**
    
    • /var/run/utmp 用于记录当前登录的用户的信息,是一个二进制文件,只能通过 who 命令来查看
    root     pts/0        2019-02-16 01:28 (100.87.41.98)
    

    修改SSH默认端口

    环境:CentOS 7
    步骤:新增SSH端口-->>重启sshd服务-->>添加防火墙规则-->>尝试新端口登陆-->>关闭原先的22端口

    1. 新增SSH端口(列:1000)
    vi /etc/ssh/sshd_config
    # 找到Port 22这行,将前面的注释去掉,再加一行Port 1000,如下,这样做的目的是防止新端口登陆不上,老端口也不能用!
    Port 22
    Port 1024
    #AddressFamily any
    #ListenAddress 0.0.0.0
    #ListenAddress ::
    
    1. 重启sshd服务
      如果是CentOS 7使用systemctl restart sshd,查看端口是否生效可以用systemctl status sshd
      如果是CentOS 7以前的系统,使用/etc/init.d/sshd restart或者service sshd restart
      重启以后可以本地测试一下端口通没通,telnet 127.0.0.1 1000

    2. 添加防火墙规则
      如果是iptables防火墙,执行下面命令添加规则

    # iptables配置文件位置/etc/sysconfig/iptables
    # 添加1000端口规则
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1000 -j ACCEPT
    # 保存规则
    service iptables save
    # 重启服务
    service iptables restart
    

    如果防火墙是Firewall,参照下面步骤(未经测试)

    # 首先检测防火墙是否已经启用,启用返回值runing,反之,为not running
    firewall-cmd --state
    
    #若没有启用,需要启用
    systemctl start firewalld
    systemctl enable firewalld
    
    # 若已经启用,则进行下一步
    # 查看防火墙的默认、活跃区域(zones)
    #看两条命令的返回值是否含有public,有则为正确。
    firewall-cmd --get-default-zone
    firewall-cmd --get-active-zones
    
    
    # 端口永久开放
    # 为了防止出错,22端口一同开放
    # 与临时开放的区别在于多了permanent
    firewall-cmd --permanent --zone=public --add-port=22/tcp
    firewall-cmd --permanent --zone=public --add-port=1000/tcp
    
    # 防火墙重载
    firewall-cmd --reload
    
    # 查看已暴露端口
    firewall-cmd --permanent --list-port
    firewall-cmd --zone=public --list-all
    
    1. 尝试新端口登陆
      尝试用1000端口进行登陆,看是否成功!

    2. 关闭原先的22端口
      参考上面的操作,首先在ssh的配置文件去掉22端口,重启sshd服务,然后在防火墙配置里面去除22端口,重启防火墙!这里不再赘述。

    修改弱口令为强口令

    如果你忘记了密码或者现在登陆不上服务器,你可以参考这篇文章:http://1024.services/archives/3.html

    # 输入修改密码命令
    passwd
    
    #此时系统提示
    Changing password for user root.
    New password:
    
    # 输入两次密码并回车,注意输入密码时不会显示的
    Retype new password: 
    passwd: all authentication tokens updated successfully.
    

    推荐:

    # 生成随机密码 ($1 位数)
    # echo $(getRandomPwd 10)
    # echo $(getRandomPwd)
    getRandomPwd(){
        num=32
        if [ $# == 1 ];then
            num=$1
        fi
        echo "$(date +%s)$(shuf -i 10000-65536 -n 1)" | sha256sum | base64 | head -c $num ; echo
    }
    

    扩展

    虽然上面修改端口和口令能够大大提升安全性,但是在某些情况下不能修改端口或口令,此时可以推荐 DenyHosts或者fail2ban,它可以禁止大量尝试登陆的IP。
    或者可以用最简单的办法,查看尝试恶意登陆的前十个IP然后用防火墙禁止它,这里只提供思路,具体操作谷歌百度。

    参考

    https://serverfault.com/questions/119299/my-var-log-btmp-file-is-huge-what-should-i-do
    http://blog.chinaunix.net/uid-20329764-id-5016539.html
    https://www.cnblogs.com/pzk7788/p/10189560.html
    https://www.ktanx.com/blog/p/336
    https://zhuanlan.zhihu.com/p/35335800

    相关文章

      网友评论

        本文标题:做好这两点,避免服务器成为肉鸡(傀儡)

        本文链接:https://www.haomeiwen.com/subject/rhcbeqtx.html