对云服务器做安全加固,使用SSH密钥登录,关闭密码登录;配置两层防火墙;部署fail2ban抵御暴力破解。 记住三条运维习惯:私钥永不外传;修改配置要留后路;先验证,再收口。 VNC是紧急救命通道,不受SSH配置与安全组限制。
~/.ssh/authorized_keys,可以公开.ssh → 700;文件 authorized_keys → 600,权限不对SSH拒绝密钥登录#生成密钥对
ssh-keygen -t ed25519 -C "study服务器"
#服务器密钥目录
mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
#teacher巡检账号免密sudo
echo "teacher ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/teacher
sudo chmod 440 /etc/sudoers.d/teacher
sudo visudo -c
#sshd配置检查重载
sudo sshd -t
sudo systemctl reload sshd
#防火墙放行ssh
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
#安装fail2ban
sudo dnf install -y epel-release
sudo dnf install -y fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
#查看登录失败日志
sudo journalctl -u sshd | grep -i "failed" | tail -30
#查看监听端口
sudo ss -tlnp
PubkeyAuthentication yes 开启公钥认证PasswordAuthentication no 禁用密码登录PermitRootLogin no 禁止root远程SSH登录AllowUsers study teacher SSH白名单,只允许这两个账号登录DNS把域名翻译成IP;阿里云安全组+firewalld两层放行80端口;安装Nginx,使用conf.d下放独立站点配置文件。 Nginx依靠请求头Host区分不同域名;网页目录权限755,网页文件权限644;403大多是权限不足,优先查看错误日志。 网站首页底部必须放置ICP备案号。
#解析测试
nslookup 你的域名
nslookup www.你的域名
#安装启动nginx
sudo dnf install -y nginx
sudo systemctl enable --now nginx
systemctl status nginx
nginx -v
#创建网站目录
sudo mkdir -p /var/www/mysite
sudo chown -R study:study /var/www/mysite
sudo chmod 755 /var/www/mysite
ls -ld /var/www/mysite
#编辑站点配置
sudo vi /etc/nginx/conf.d/mysite.conf
#检查重载nginx
sudo nginx -t
sudo systemctl reload nginx
#防火墙放行http(80)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
sudo firewall-cmd --list-services
#实时看访问日志 Ctrl+C退出
sudo tail -f /var/log/nginx/mysite_access.log
#curl模拟访问
curl -H "Host:你的域名" http://127.0.0.1
curl http://127.0.0.1 | head -5
listen 80; 监听80端口server_name 匹配访问域名root 网页文件存放目录index index.html 默认首页try_files $uri $uri/ =404; 文件找不到返回404HTTP明文传输会被窃听;HTTPS=HTTP+TLS加密,加密传输内容同时验证服务器身份。 Let’s Encrypt证书有效期90天,必须配置自动续期,不能关闭80端口(用于跳转和证书验证)。 使用certbot申请证书;80端口负责验证与跳转,443端口处理加密网页访问;续期成功执行钩子脚本重载Nginx。
#防火墙放行https(443)
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-services
#安装certbot
sudo dnf install -y certbot
certbot --version
#演练申请证书
sudo certbot certonly --webroot -w /var/www/mysite \
-d example.com -d www.example.com \
-m 邮箱 --agree-tos --no-eff-email --dry-run
#正式申请去掉--dry-run
sudo certbot certonly --webroot -w /var/www/mysite \
-d example.com -d www.example.com \
-m 邮箱 --agree-tos --no-eff-email
#查看证书
sudo certbot certificates
sudo ls -l /etc/letsencrypt/live/example.com/
#启用自动续期定时器
sudo systemctl enable --now certbot-renew.timer
systemctl list-timers 'certbot*'
#钩子脚本 reload‑nginx.sh
#!/bin/bash
systemctl reload nginx
#给钩子执行权限并测试
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
sudo /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
#模拟续期
sudo certbot renew --dry-run
#抓包80明文
sudo tcpdump -i any -A -nn 'tcp port 80'
#抓包443加密
sudo tcpdump -i any -A -nn -c 40 'tcp port 443'
ssl_certificate 使用fullchain.pem;ssl_certificate_key 使用privkey.pem,私钥不可泄露ssl_protocols TLSv1.2 TLSv1.3; 使用安全加密协议