为什么需要本地部署网站安全防护
很多个人站长或企业内部系统不想完全依赖云服务,担心数据外泄或网络延迟。比如老王开了个本地商城网站,放在公司内网服务器上,结果某天发现后台被植入了恶意脚本。查来查去才发现,没做基础防护,连最简单的访问过滤都没有。
准备环境和基础组件
先确认你的服务器是 Linux 系统(推荐 Ubuntu 20.04 或 CentOS 7),有 root 权限,能安装软件包。我们需要几个核心工具:Nginx 做反向代理,fail2ban 拦截暴力请求,ModSecurity 配合 Nginx 做应用层过滤。
安装 Nginx 和 ModSecurity
以 Ubuntu 为例,打开终端一步步操作:
sudo apt update
sudo apt install nginx libnginx-mod-security3 -y
接着下载 ModSecurity 的规则集,也就是 OWASP 提供的防护规则:
cd /etc/nginx
sudo git clone https://github.com/coreruleset/coreruleset.git
重命名配置文件:
cd coreruleset
sudo cp crs-setup.conf.example crs-setup.conf
配置 Nginx 启用安全模块
编辑 Nginx 主配置文件:
sudo nano /etc/nginx/nginx.conf
在 http 块中加入以下内容:
load_module modules/ngx_http_modsecurity_module.so;
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
创建 modsec 目录并写入主规则文件:
sudo mkdir /etc/nginx/modsec
sudo nano /etc/nginx/modsec/main.conf
把下面这些基础规则贴进去:
<IfModule mod_security3_module>
SecRuleEngine On
Include /etc/nginx/coreruleset/crs-setup.conf
Include /etc/nginx/coreruleset/rules/*.conf
</IfModule>
测试配置是否生效
保存后检查语法:
sudo nginx -t
如果显示 “successful” 就可以重启 Nginx:
sudo systemctl restart nginx
这时候访问你的网站,试着在 URL 后面加个 <script>alert(1)</script>,正常情况下会被拦截,返回 403 错误。
用 fail2ban 防止暴力攻击
很多人忽视登录接口的安全。比如 WordPress 后台、phpMyAdmin 登录页,容易被机器人撞库。装个 fail2ban 能自动封 IP。
安装命令:
sudo apt install fail2ban -y
新建一个 jail 配置:
sudo nano /etc/fail2ban/jail.local
写入以下内容:
[nginx-login]
enabled = true
filter = nginx-login
logpath = /var/log/nginx/access.log
maxretry = 3
bantime = 86400
意思是:同一个 IP 登录失败 3 次,直接封一天。
定期更新规则更安心
安全不是一劳永逸的事。OWASP 规则集会更新,建议每月手动拉一次最新规则:
cd /etc/nginx/coreruleset
sudo git pull
顺便重启下 Nginx 让新规则加载:
sudo systemctl restart nginx
这样一套本地部署的网站防护体系就跑起来了。不靠云 WAF,也能守住自家网站的大门。