博客前段时间从腾讯云迁移到了国外某云上,至于原因嘛,主要还是性价比,在这期间大致写了一些脚本,对博客本身和Linux服务器做了一些策略和调整,下面简要介绍一下。
不多哔哔,看表格:
显而易见吧,虽然总费用国外某云高点,但是配置很香啊,博客访问也比之前快很多,而且国外的服务器,可以用sxxxx,懂的都懂
这个每个云服务厂商都会提供的安全组功能,建议设置的安全组
黑客攻破任何服务器,都是从最常见的端口开始的(windows也不例外),网络攻击无处不在,互联网上有很多自动化的东西在不停的在扫描公网服务器,所以要想减少被发现的几率,先从修改ssh端口号开始
vim /etc/ssh/sshd_config
# 更换端口号
Port 1234
# 禁用root密码登录
PermitRootLogin without-password
# 禁用所有账户的密码登录,只允许ssh私钥
PasswordAuthentication no
改完之后别忘了systemctl restart sshd
更换完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
里让其开机自启.
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
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云服务器安全加固