Skip to content

🔒 网络安全 ​


CSRF vs SSRF 区别 ​

CSRF(跨站请求伪造) ​

  • 攻击目标:服务端 — 让服务器误以为是用户本人发的请求
  • 用户已登录网站 A,攻击者诱导用户访问恶意网站 B,网站 B 偷偷向网站 A 发请求,浏览器自动带上 cookie
  • 典型场景:已登录银行时点恶意链接 → 转账
  • 防御: CSRF Token、SameSite Cookie、检查 Referer/Origin

SSRF(服务器端请求伪造) ​

  • 攻击目标:内网/本地服务 — 让服务器去访问攻击者指定的内部资源
  • 服务器本身可以访问内网资源,攻击者通过输入框(URL 上传、webhook)让服务器发起请求
  • 典型场景:上传图片时 fetch URL,填 http://169.254.169.254 读取云元数据密钥
  • 防御: 禁止访问内网 IP(白名单)、禁用 file:// 等协议、内网服务加认证

一句话对比 ​

  • CSRF = "借你的手做事"(借用浏览器身份)
  • SSRF = "让服务器当跳板"(服务器被诱导访问内网)

fail2ban 入侵防御系统 ​

核心机制 ​

  • 本质:日志监控 + 动态防火墙规则系统
  • 工作流:监控日志 → 正则匹配 → 触发封禁 → 自动解封
  • 架构:server(核心进程)→ filter(正则过滤)→ action(封禁动作)→ jail(策略容器)

关键参数 ​

  • maxretry:允许的最大失败次数
  • findtime:滑动窗口统计时间(默认600秒)
  • bantime:封禁时长(默认3600秒,负值=永久)
  • ignoreip:白名单(永不封禁的IP/网段)

目录结构 ​

  • /etc/fail2ban/jail.conf — 默认模板(不要直接改)
  • /etc/fail2ban/jail.local — 自定义配置写这里
  • /etc/fail2ban/filter.d/ — 正则过滤器库
  • /etc/fail2ban/action.d/ — 动作定义库

安装要点 ​

  • Debian/Ubuntu:apt install fail2ban
  • RHEL/CentOS:需先装 EPEL,再 dnf install fail2ban
  • 铁律:自定义配置写在 jail.local 或 jail.d/,不要改 jail.conf

部署步骤(实际操作) ​

1. 安装 fail2ban ​

bash
apt install fail2ban -y

2. 创建自定义配置文件 ​

bash
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

⚠️ 铁律:不要直接改 jail.conf,自定义配置写 jail.local

3. 编辑 jail.local 配置 SSH 防护 ​

ini
[sshd]
enabled = true
port    = ssh
filter  = sshd
backend = systemd    # 用 systemd 日志后端,不用 logpath
maxretry = 3         # 失败3次就封(默认5次太宽松)
bantime  = 86400     # 封禁24小时(默认1小时太短)

其他默认值保持:

  • ignoreip = 127.0.0.1/8 ::1(白名单本机)
  • findtime = 600(10分钟滑动窗口)
  • banaction = iptables-multiport

4. 语法检查 + 启动 ​

bash
fail2ban-client -t          # 语法检查
systemctl enable fail2ban   # 开机自启
systemctl start fail2ban    # 启动服务

5. 验证状态 ​

bash
fail2ban-client status      # 查看总体状态
fail2ban-client status sshd  # 查看 sshd jail 详情

高级策略 ​

  • recidive jail:对惯犯加码(被封3次以上 → 封7天)
  • 递增封禁:bantime 逐次翻倍
  • 防火墙兼容:iptables → iptables-multiport,firewalld → firewallcmd-ipset

管理命令速查 ​

bash
fail2ban-client status                    # 总状态
fail2ban-client status sshd               # sshd jail 详情
fail2ban-client set sshd unbanip <IP>     # 手动解封
fail2ban-client set sshd banip <IP>       # 手动封禁
fail2ban-client reload                    # 重载配置
journalctl -u fail2ban -f                 # 实时日志

最佳实践 ​

  1. 先测后上,用 -t 和 -n 干跑模式
  2. 白名单别漏(内网、监控、VPN出口)
  3. 日志路径要对(Debian=auth.log,RHEL=secure)
  4. 配合防火墙静态规则使用
  5. 定期检查 /var/log/fail2ban.log 防误杀

1Panel 防火墙兼容方案 ​

  • 1Panel 底层:Debian 用 UFW,RHEL 用 firewalld
  • fail2ban action:Debian 系配 banaction = ufw,RHEL 系配 banaction = firewallcmd-ipset
  • 两者并存:1Panel 管端口静态规则,fail2ban 管 IP 动态封禁,互不干扰
  • 配置关键:jail.local 中 banaction = ufw(Debian 系)

容器公网暴露的安全评估 ​

场景 ​

Docker 容器把 0.0.0.0:8765:80 暴露在公网,PID 1 跑的是 busybox httpd,根目录 /public/,全是 SVG 静态资源(光伏空调模拟器元件图一类)。

真实风险等级 ​

对服务器/容器本身被攻陷:基本为 0。原因:

  • 纯静态文件服务,没有 CGI / FastCGI / 反代 / 数据库 / 接口可注入
  • 容器没挂载、无环境变量(连 API key 都没有),容器受损也污染不到宿主
  • 用的是 busybox httpd,没有 CGI、没有 SSI、连 directory listing 都没开,攻击面极小
  • 容器在 default bridge 网段(172.17.0.2),其他容器要隔离还得靠网络策略

仍然存在的"软风险" ​

  1. SVG 内嵌 <script> —— SVG 文件本身支持 JS,公开文件如果哪天被替换了内容,访问者浏览器会被钓鱼/挖矿
  2. 被爬虫镜像抓走 —— 公开资源站常被卷带宽、内容,对个人项目影响小,对核心资源就是泄漏
  3. 招来扫描器 —— 1panel 防火墙里已经有公网 IP 被 REJECT,说明这台机长期被全网扫;多开一个端口等于告诉"这有货",增加攻击面感知
  4. 无访问控制 / 无水印 —— 别人能直接抓你的 SVG 资源、复用、调接口(如果有的话)

判定套路(以后遇到类似问题的快速判断) ​

  • 看 PID 1 的进程类别:busybox httpd / nginx static / python3 -m http.server → 静态风险最低
  • 看挂载/环境变量:没挂载 + 没 env → 容器翻车污染不到宿主机
  • 看端口有没有可注入面:开放 CGI / PHP-FPM / FastCGI / 反代到内网 → 风险高
  • 看扫描器流量:INPUT 链 DROP 计数非 0 → 机器已经在被扫,开放端口会放大被人扫的概率

行动建议 ​

  • 公开/作品集 → 留着 0.0.0.0 暴露,但配合 fail2ban 日志盯异常
  • 学习/内部项目 → 改 127.0.0.1:8765:80 + 1panel 反代 + Basic Auth,不走公网直连
  • 任何容器:挂载只能给不得不给的,环境变量不要带 secret,PID 1 别用 root 跑复杂进程

小弟二号打造的知识体系