【危害描述】
多年前的一天,我购买了一台阿里云服务器,多年以来在我的喋血下在服务器上放了几个自己写的网站和一堆的资料。
终于,在这某一天,手一哆嗦运行了rm -rf /*,瞬间整个人面前一片恍惚,正当我连忙CTRL+Z的时候,已经运行结束了。
我的个心,颤抖的手,竟然丝毫不给我一点机会,随机马上联系了GPT帮我出出主意,奈何这小子这时也不中用。无奈,四处寻医问药。
然而,这是先天的疑难杂症,对于捉襟见肘的我来说只能任其摆布。随即静下心来,冷静分析,看能否先把一些资料抢救回来。
删完后,已经无法在通过ssh连接了,阿里云上面一通捯饬看到有数据恢复,但是由于硬伤的问题,无奈放弃。好在发现网站还可以访问,
应该是缓存的原因,虽然数据没了,但是缓存还在,不过只要部分前端文件做了缓存,其他落地文件访问已经是404了,好在大部分资料都有
网盘备份,只是稍显麻烦,唯一的问题是服务器的各种环境配置已经丢了,重新配置有浪费时间。
【救急过程】
由于之前了解过网站克隆,遂gpt询问克隆的方法,遂给了我一串命令,使来感觉好不错,比kali里面的httrack好多了。
wget --mirror --convert-links --adjust-extension --page-requisites --no-parent http://www.example.com
经过无数个小时痛苦的等待,终于是克隆完了所有的页面。
克隆完后,阿里云控制台停止实例,初始化磁盘,选择更换操作系统,时隔多年也该换换了,完成后进入阿里云控制台配置ssh。
以下是配置过程:
开启ssh远程登录
sudo apt update
sudo apt install openssh-server
systemctl status sshd
开启防火墙
ufw status
ufw enable
ufw allow 2222
在Ubuntu上创建一个用户,允许该用户以root权限执行命令,但需要输入密码才能切换到root用户
设置用户
adduser 用户名
安装sudo软件包
sudo apt update
sudo apt install sudo
新用户添加到sudo组
sudo usermod -aG sudo newuser
编辑sudoers文件
sudo visudo
在末尾添加
newuser ALL=(ALL) PASSWD: ALL
本行允许用户
newuser以root权限执行命令,但在切换到root用户时需要输入密码
添加完后可以使用cat /etc/sudoers查看
现在,新用户可以使用sudo命令以root权限执行命令,但是在切换到root用户时需要输入root的密码。请设置不同的密码以提供安全性。但是现在可以通过sudo su直接切换到root用户,很不安全,修改sudoers文件禁止。sudo visudo(直接使用vim /etc/sudoers不行,显示只读)
最后添加
Defaults rootpw
这样sudo su后需要输入root用户的密码才能进入root
设置用户远程登录
修改配置文件/etc/ssh/sshd_config
Port 2222(更换默认端口)
PermitRootLogin no(禁止root远程登录)
AllowUser newuser(设置新用户远程登录)
设置好后就可以使用远程连接工具连接了。
【安全配置】
防止被暴力破解
1.配置文件/etc/ssh/sshd_config设置最大身份验证尝试次数:
MaxAuthTries 5
systemctl reload sshd(重新加载ssh服务)
2.fail2ban工具监控服务器日志文件并自动屏蔽攻击者IP地址
apt-get install fail2ban(安装fail2ban)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local(备份主配置文件)
jail.local文件与jail.conf文件在Fail2ban中具有相同的作用,但是jail.local文件会覆盖
jail.conf文件中的设置。
编辑jail.local
[sshd]
enabled = true
port = 22
maxretry = 5
bantime = 3600
sudo systemctl restart fail2ban
Fail2ban会监视SSH日志文件,并自动屏蔽试图进行暴力破解攻击的IP地址。Fail2ban会将被屏蔽的IP地址添加到iptables规则中,以防止它们再次访问您的服务器
3.可以使用iptables或者ufw限制国外ip访问
sudo apt-get install geoip-database
jail.local文件中
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
banaction = ufw-geoip
ufw-geoip-destination = CN
修改文件,没有就创建一个新的Filter配置文件,
/etc/fail2ban/filter.d/sshd.conf
[Definition]
failregex = .*authentication failure.*<HOST>.*
重启Fail2ban服务
sudo systemctl restart fail2ban
第一种方式可能会失败,采用第二种
sudo apt-get install libgeoip-dev geoip-bin
sudo mkdir /usr/local/share/GeoIP
cd /usr/local/share/GeoIP
sudo wget http://www.ipdeny.com/ipblocks/data/countries/cn.zone
这个cn.zone
文件包含了所有中国IP地址的列表。
创建一个新的防火墙规则文件
nano /etc/ufw/before.rules
添加以下内容到before.rules文件中,注意修改端口:
# Block all traffic by default
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
:ufw-user-input - [0:0]
:ufw-user-output - [0:0]
:ufw-user-forward - [0:0]
# Limit incoming SSH traffic to China only
-A ufw-before-input -p tcp --dport 22 -m geoip --src-cc CN -j ACCEPT
-A ufw-before-input -p tcp --dport 22 -j DROP
# Allow all outgoing traffic
-A ufw-before-output -j ACCEPT
# Allow all forwarding traffic
-A ufw-before-forward -j ACCEPT
# Allow all traffic from localhost
-A ufw-not-local -m addrtype --dst-type LOCAL -j ACCEPT
# Allow all traffic from LAN
-A ufw-not-local -m iprange --src-range 192.168.0.0/16 -j ACCEPT
-A ufw-not-local -m iprange --src-range 10.0.0.0/8 -j ACCEPT
-A ufw-not-local -m iprange --src-range 172.16.0.0/12 -j ACCEPT
# Reject all other incoming traffic
-A ufw-before-input -j DROP
COMMIT
这里,我们添加了一个新的防火墙规则,限制了SSH流量只能来自中国。如果流量来自其他国家,则将被阻止。请注意,此规则应该添加在*filter
段落的顶部。
重启防火墙
sudo ufw disable
sudo ufw enable
下一章对服务器进行配置,安装nginx,apache,mysql等环境,并对其进行安全配置。