avatar

目录
Centos6.10服务器入侵->重装->恢复记录

Centos6.10服务器入侵->重装->恢复记录

  • 头些天在centos6.10服务器创建了一个git账户用来搭建私有Git仓库,账户和密码均为git,并且支持ssh密码远程连接,很快被黑客扫描到,通过ssh弱口令进到我的git账户,并操纵我的服务器扫描其他持续扫描其他服务器,被购买服务器的主机商的防火墙发现,锁定了我的服务器。也是在与客服的沟通中,他问我的服务器ssh密码是否过于简单,正是弱口令使我的服务器沦陷。病毒已经植入到我的系统中,为了彻底解决,客服建议我重装系统,尽管服务器上面的数据比较多,我还是硬着头皮备份、重装了一次系统,搞了整整一天,服务器上的功能基本恢复。

  • 上一次配置服务器还是在2年前,当时安全意识较差,认为防火墙是多余的,把防火墙直接关闭,使得服务器上可以任意向外发送数据、服务器上的任何端口都向外开放;很多程序都放到root账户下运行;为了省事,设置及其简单的密码,每当看到网络安全相关资料讲解“弱口令”时,感觉弱口令离我非常遥远,不以为然。这些做法都是极其危险的,也是一步一步使我服务器沦陷的最终原因。

一、备份WEB站点(root账户)

  • 我安装的WEB服务软件为国产的Kangle服务器,应该很少有人听说,Kangle就相当于平时我们所常见的Apache、Nginx,也是一款能够提供WEB访问控制服务的软件。

  • Kangle站点文件存放在/home/ftp下,Kangle一些相关的账户配置信息存储在/vhs/kangle/etc,首先备份这两个文件夹,然后下载压缩包到本地:

bash
1
2
3
4
cd /home/ftp
zip -r ftp.zip ftp
cd /vhs/kangle/etc/
zip -r etc.zip etc

二、备份MySQL数据库(root账户)

  • 备份MySQL可以使用Navicat以root账户的身份登陆,导出所有数据库即可(安全起见,MySQL在默认状态是不允许从外网以root账户远程连接,在备份的时候需要手动设置将localhst改成%)。

  • MySQL配置允许远程连接

bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 进入MySQL
mysql -uroot -p

# 切换到mysql库
use mysql;

# 查看用户表
SELECT `Host`,`User` FROM user;

# 更新用户表
UPDATE user SET `Host` = '%' WHERE `User` = '用户名' LIMIT 1;

# 强制刷新权限
flush privileges;

# 关闭mysql
exit;
  • 如果你安装了phpmyadmin也可以以root身份登陆管理页面,导出数据库。

  • 我在服务器上设置了定时任务,即每天01:00将整个数据库备份一次,永久保存在服务器上,恰好今天在重装系统前没有对数据库再进行修改,于是我直接使用了今天凌晨1点的全备份来恢复系统。尽管安装系统时仅格式化系统盘,但是为了安全起见,我把sql备份文件下载到了本地。

三、备份tomcat9、gitea(git账户)

  • git账户下运行着tomcat和gitea(开源git仓库面板,轻量级),将这两个相关的文件全部压缩,下载。

四、备份root账户下的frp内网穿透软件(root)

  • 第三步忘记了备份内网穿透,再次切换到root用户,找到frp的安装位置,压缩,下载:
bash
1
2
cd /usr/local
zip -r frp.zip frp

五、重装系统

  • 仍然选择centos6.10,并仅格式化系统盘,手机验证码确认,重装。大概5分钟,系统重装完成.(实际这里第一次重装系统时我选的centos7,但是装完之后发现centos7与centos6之间的操作还是存在一定差异的,用着不顺手,就又重装了一次,装回了centos6)

六、恢复服务器环境及功能

  • 由于重装系统时保留了数据盘,因此重装完毕之后。/home目录下的文件夹并没有清空。众所周知,Linux一般是一个账户对应一个/home目录下的文件夹,我们应先把这些目录清理干净,防止造成冲突。
bash
1
2
# 删除git用户
userdel git
  • 设置ssh,允许远程连接。我的服务器重装完毕后已经配置好ssh,直接连接即可。

  • 重装Kangle服务器,恢复站点数据(FTP站点及服务器参数配置文件)。

  • 重装MySQL,恢复MySQL数据:

bash
1
mysqldump -u root -p mysql > /backup/20200222.sql

  • 安装git(version >= 2.16)

卸载旧版本git

bash
1
yum remove git

安装依赖库

bash
1
2
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install gcc perl-ExtUtils-MakeMaker

下载安装libiconv

bash
1
2
3
4
5
cd /usr/local
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
tar -zxvf libiconv-1.15.tar.gz
cd libiconv-1.15
./configure --prefix=/usr/local/libiconv && make && make install

下载安装Git

bash
1
2
3
4
5
6
cd /usr/local
wget https://www.kernel.org/pub/software/scm/git/git-2.11.0.tar.gz
tar -zxvf git-2.11.0.tar.gz
cd git-2.11.0
./configure --prefix=/usr/local/git-2.11.0 --with-iconv=/usr/local/libiconv
make && make install

检查版本号

bash
1
git --version


  • 安装jdk1.8。我安装的系统位centos6.10 x64,安装jdk1.8。具体版本号为:jdk-8u201-linux-x64.tar.gz。由于已经在本地存过jdk,直接通过SSH上传到/usr/local中:
bash
1
2
tar -zxvf jdk-8u201-linux-x64.tar.gz
vi /etc/profile
  • 在profile文件中追加如下文本:
bash
1
2
3
4
5
# jdk8 env
JAVA_HOME=/usr/local/dev/jdk1.8.0_201
CLASSPATH=.:$JAVA_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
  • 保存退出,使环境变量生效:
bash
1
source /etc/profile

  • 升级内核。centos6.10的默认内核版本是2.x,但是gitea内核版本要求在3.x,所以需要升级内核。

  • 查看当前内核版本

bash
1
uname -r
  • 查看当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
bash
1
uname -a
  • 导入public key
bash
1
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
bash
1
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
  • 安装 kernel-lt(lt=long-term)
bash
1
yum --enablerepo=elrepo-kernel install kernel-lt -y
  • 编辑grub.conf文件,修改Grub引导顺序
bash
1
vi /etc/grub.conf

  • 因为一般新安装的内核在第一个位置,所以设置default=0,表示启动新内核

  • 重启系统

bash
1
shutdown -r now
  • 再次查看内核版本,已经升级成4.4.214-1.el6.elrepo.x86_64

  • 创建git账户,在git账户中恢复tomcat、frp、gitea服务。为了增强密码安全性,我使用KeePass软件生成了一个128位的密码。在git账户中上传备份过的tomcat9、frp、gitea,解压并配置相关文件,启动tomcat、frp、gitea并保持在后台运行。

  • 添加MySQL自动完整备份

  • 在/home/backup/创建autobackupmysql.sh,编辑:

bash
1
2
filename=`date +%Y%m%d`
mysqldump -uroot -p密码 --all-databases >/home/backup/$filename.sql
  • 添加cron
bash
1
2
crontab -e
0 1 * * * /home/backup/autobackupmysql.sh

七、服务器安全性增强设置

  • 主要从以下两方面入手:
  1. 禁止使用ssh密码方式连接,改为ssh证书连接。
  2. 配置安全策略较强的iptables策略,将iptables的INPUT,FORWARD,OUTPUT策略全部设置为DROP,即出现在所有进出站服务都要在iptables的INPUT和OUTPUT上添加记录,否则无法访问服务。
  • 1.修改ssh连接方式,由于我有root和git两个账户,因此需要分别生成私钥。
Code
1
2
3
su root
ssh-keygen -t rsa
cd ~/.ssh
  • 将公钥设置为服务器的登录公钥
bash
1
mv id_rsa.pub authorized_keys
  • 查看私钥并保存到本地
bash
1
cat id_rsa
  • 设置ssh,禁止密码登录,改用私钥登录
bash
1
vi /etc/ssh/sshd_config
  • 修改PasswordAuthentication 改为 no,然后重启sshd服务
bash
1
service sshd restart
  • 再次连接使用ssh私钥即可直接登陆。其他账户的操作方法同root账户。

  • 2.iptable安全策略,首先将INPUT,FORWARD,OUTPUT策略全部设置为DROP(即白名单模式,不设置默认黑名单)
bash
1
2
3
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
  • 注意,上面的命令,当你执行第一条iptables -P INPUT DROP时,会发现你的ssh连接断开,这就说明第一条配置生效了,剩下的配置需要到主机商后台管理页面使用VNC进行连接操作。

  • 首先开启22端口,允许其出站入站

bash
1
2
3
4
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
service iptables save
service iptables status
  • 查看iptables状态,若22端口已添加,那么断开VNC,再到我们的ssh连接软件去操作(ssh终端可以复制粘贴,VNC不能,所以尽快配置好22端口)

  • 首先需要开放本机回环地址(127.0.0.1),即允许本机内互相访问

bash
1
2
3
4
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
service iptables save
service iptables status
  • 添加完毕后,我的服务器还需要陆续开放WEB服务所需的80、443s端口、3306数据库端口、允许ICMP包通过(ping)等等
bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 3306 -j ACCEPT

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

service iptables save
service iptables status
  • 配置完毕后,重启防火墙
bash
1
service iptables restart
  • 我的服务器上运行的tomcat、gitea等服务,使用Kangle服务器提供的反向代理进行使用,即代理到127.0.0.1:port,这样更加安全,避免没必要的端口暴露。

  • 这是我的防火墙配置

到这里,服务器重装及环境的恢复总算基本完成,下一步就是进行各项功能的测试。这一次的攻击事件也使我加强了对网络安全的认识,计算机网络中无时无刻都在进行这各种扫描、嗅探、入侵,只有我们防护好自己的服务器,滴水不漏,才能保证服务器和数据服务的安全可靠。



常用路径及命令

  • redis官方下载地址:http://download.redis.io/releases/
  • redis安装——进入到安装目录,直接运行make,然后启动即可
  • redis安装目录:/usr/local/dev/redis-3.0.5
  • redis启动 nohup /usr/local/dev/redis-3.0.5/bin/redis-server /usr/local/dev/redis-3.0.5/redis.conf &
  • redis测试 /usr/local/dev/redis-3.0.5/bin/redis-cli
  • centos6.10添加开机自启,vi /etc/rc.d/rc.local
  • 环境变量文件vi /etc/profile,source /etc/profile
  • 如果上面的环境变量文件配置了不生效,则配置vi /etc/bashrc,source /etc/bashrc
  • jdk环境配置,下载压缩包,解压到某一路径,配置profile,保存,使profile生效
  • springboot部署命令:java -jar -Dspring.profiles.active=test demo-0.0.1-SNAPSHOT.jar
文章作者: Bill
文章链接: http://blog.webpro.ltd/2020/02/22/My-Server-Attacked-by-Scanner/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Bill's blog

评论