Leif160519的blog Leif160519的blog

——————

目录
记一次Linux云服务器安全加固
/    

记一次Linux云服务器安全加固

一、背景

博客前段时间从腾讯云迁移到了国外某云上,至于原因嘛,主要还是性价比,在这期间大致写了一些脚本,对博客本身和Linux服务器做了一些策略和调整,下面简要介绍一下。

二、我为什么把云服务器从腾讯云迁移到国外某云上?

不多哔哔,看表格:
image.png

显而易见吧,虽然总费用国外某云高点,但是配置很香啊,博客访问也比之前快很多,而且国外的服务器,可以用sxxxx,懂的都懂

三、服务器安全加固措施

1.设置安全组

这个每个云服务厂商都会提供的安全组功能,建议设置的安全组
image.png

2.SSH配置

黑客攻破任何服务器,都是从最常见的端口开始的(windows也不例外),网络攻击无处不在,互联网上有很多自动化的东西在不停的在扫描公网服务器,所以要想减少被发现的几率,先从修改ssh端口号开始

vim /etc/ssh/sshd_config

# 更换端口号
Port 1234
# 禁用root密码登录
PermitRootLogin without-password
# 禁用所有账户的密码登录,只允许ssh私钥
PasswordAuthentication no

改完之后别忘了systemctl restart sshd

3.脚本自动禁用恶意的尝试ssh登录服务器的ip

更换完ssh端口号之后确实可以发现网络上那些尝试ssh自己服务器的行为少了很多,但是这样就够了吗,我们可以做的更狠一点,让这些频繁登录的ip永远的被我们拉黑,哪怕他换了一批IP,我们也能做到神挡s神,佛挡s佛:
查看所有ssh登录失败的记录lastb

renaldo  ssh:notty    187.75.209.161   Sun May 23 07:31 - 07:31  (00:00)
renaldo  ssh:notty    187.75.209.161   Sun May 23 07:31 - 07:31  (00:00)
serverpi ssh:notty    177.200.82.126   Sun May 23 07:31 - 07:31  (00:00)
serverpi ssh:notty    177.200.82.126   Sun May 23 07:31 - 07:31  (00:00)
user6    ssh:notty    187.75.209.161   Sun May 23 07:29 - 07:29  (00:00)
user6    ssh:notty    187.75.209.161   Sun May 23 07:29 - 07:29  (00:00)
wangxx   ssh:notty    187.75.209.161   Sun May 23 07:28 - 07:28  (00:00)
wangxx   ssh:notty    187.75.209.161   Sun May 23 07:28 - 07:28  (00:00)

脚本奉上ipblock.sh

#!/bin/bash
# 检测那些尝试登录服务器的那些ip地址并禁用它们

# 白名单ip
array=(
    1.2.3.4
    5.6.7.8
)
function check_ip() {
    IPADDR=$1
    regex="\b(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])\b"
    ckStep2=`echo $1 | egrep $regex | wc -l`
    if [ ${ckStep2} -eq 0 ]
    then
        echo "The string ${IPADDR} is not a correct ipaddr!!!"
        return 1
    else
        echo $1 > /dev/null
        return 0
    fi
}

while true;
do
    sleep 1
    current_login_username=$(/usr/bin/lastb | head -1 | grep -v root | awk '{print $1}')
    current_login_ip=$(/usr/bin/lastb | head -1 | grep -v root | awk '{print $3}')
    hosts_deny_ip=$(grep -c "${current_login_ip}" /etc/hosts.deny)
    check_ip ${current_login_ip}
    if [ $? -ne 0 ];then
        echo "${current_login_ip}非常规ip"
    else
        # 判断白名单
        if [[ ${current_login_ip} =~ ${array[@]} ]];then
            echo "${current_login_ip}是白名单ip,不禁用"
        else
            if [[ ${hosts_deny_ip} == 0 ]];then
                # 此IP没有出现过,ban掉它
                echo "${current_login_ip} 尝试以${current_login_username}登录失败"
                echo "ALL:${current_login_ip}" >> /etc/hosts.deny
            else
               echo "${current_login_ip}已经被禁"
            fi
        fi
    fi
done

上面的脚本可以放在supervisor或者systemd里让其开机自启.

四、博客相关措施

1.定时检查更新

solo官方提供的是shell脚本的方式run了一个docker容器,我这里把它改成了docker-compose,这样方便些docker-compose.yml

version: "3"
services:
  solo:
    image: b3log/solo:latest
    restart: always
    container_name: solo
    environment:
      - "RUNTIME_DB=MYSQL"
      - "JDBC_USERNAME=root"
      - "JDBC_PASSWORD=1234567890"
      - "JDBC_DRIVER=com.mysql.cj.jdbc.Driver"
      - "JDBC_URL=jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"
    network_mode: host
    command: >
        --listen_port=8080
        --server_scheme=https
        --server_host=github.icu
        --server_port=
        --static_server_scheme=https
        --static_server_host=cdn.jsdelivr.net
        --static_path=/gh/88250/solo/src/main/resources

定时更新脚本solo_update.sh

#!/bin/bash

#
# Solo docker 更新重启脚本
#
# 1. 请注意修改参数
# 2. 可将该脚本加入 crontab,每日凌晨运行来实现自动更新
#
local_time=$(date "+%Y-%m-%d %H:%M:%S")
isUpdate=$(docker pull b3log/solo | grep -i downloaded)
if [ -z ${isUpdate} ];then
    echo "${local_time} Solo is the latest version"
else
    docker stop solo
    docker rm solo
    docker rmi b3log/solo
    docker pull b3log/solo
    docker-compose up -d
    echo "${local_time} Update solo success!"
fi

使用crontab每天凌晨2点进行定时检查更新

0 2 * * *  /data/workspace/github/solo-data/scripts/update_solo.sh >> /var/log/solo_update.log 2>&1

2.定时备份博客数据库数据

solo_backup.sh

#!/bin/sh
backup_dir=/data/mysql/backup
/usr/local/bin/mysqldump -u root -p1234567890 --default-character-set=utf8 -q --lock-all-tables --flush-logs -E -R --triggers  --databases solo > ${backup_dir}/solo.sql

使用crontab每天凌晨1点进行备份

0 1 * * *  /data/workspace/github/solo-data/mysql/mysql_backup.sh

如果害怕服务器崩了或者什么意外情况,可以将sql文件提交到github上,把仓库设置成私有即可。

五、总结

网络攻击无处不在,如何不让自己的服务器成为肉鸡成为很多不熟悉服务器系统的人头疼的问题,其实,只要把好服务器的大门,黑客就很难进来,上面介绍的都是一些较为基本的加固方式,肯定也有更加安全和高效的工具也能实现类似效果,如果有大佬看到了这边文章,欢迎在下方留言交流学习。


“The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.” – Tom Cargill

标  题记一次Linux云服务器安全加固
作  者Leif160519
出  处https://github.icu/articles/2021/05/30/1622389160141.html
关于博主:坐标南京,运维工程师,如有问题探讨可以直接下方留言。
声援博主:如果您觉得文章对您有帮助,可以评论、订阅、收藏。您的鼓励是博主的最大动力!