网站安全防护本地部署方案:手把手教你搭建自己的防护系统

为什么需要本地部署网站安全防护

很多个人站长或企业内部系统不想完全依赖云服务,担心数据外泄或网络延迟。比如老王开了个本地商城网站,放在公司内网服务器上,结果某天发现后台被植入了恶意脚本。查来查去才发现,没做基础防护,连最简单的访问过滤都没有。

准备环境和基础组件

先确认你的服务器是 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,也能守住自家网站的大门。