网站运维安全:用nginx限制非指定IP访问网站管理后台的方法
今天和Discuz的官方工作人员在群里面聊,我向维护人员 @老周部落 提了一个建议,是这样说的:
@老周部落 老周,有个建议。就是全局-访问控制,允许访问管理中心的IP列表,看这个列表能不能不写进数据库,而写在config文件里面?因为本地IP变化之后,自己登录不了后台,而改数据库操作起来又比较麻烦..
我表示,也可以在后台修改呀,只是不写数据库,改成写文件了。
popcorner继续表示:不可能为了一个这个开编辑config的先例。
然后我又仔细描述了一下相关场景:
嗯。现在的应用场景是:后台设好限制IP,黑客登录不了,非常耐思。但某一天本地电信IP改变了,管理员自己也登录不了后台,无法更改限制IP,只得登录数据库进行操作,时间长不说,还有可能数据库误操作,网站直接崩溃。
我设想的场景是,后台设好限制IP,黑客登录不了,非常耐思。但某一天本地电信IP改变了,管理员自己也登录不了后台,无法更改限制IP,登录一下服务器,找到文件更新一下允许登录的IP列表,就OK了,很便捷,不操作数据库,风险也低。
我说,第2个方法很耐斯。
这时候,popcorner又说:想改文件的话,其实更好的办法是在服务器端操作,对admin.php路径设置ip过滤即可,这样做可以让黑客连页面都碰不到,最安全。
他的这个想法启发了我。我以前一直想从应用程序方面防备入侵,如果从服务端方面下手,可能真的会简单很多。于是,我就网上搜索了一下相关的解决方案,果然,一百度发现有现成的nginx配置代码,稍微修改一下就可以直接应用到自己服务器上,测试一下效果相当好。代码如下:
- #限制后台访问IP开始 location ~ .*admin.* { allow 118.118.0.0/16; #你的IP,可以是具体IP,也可以是IP区间 deny all; location ~ \.php$ { root /website/www; #网站所在的目录 try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }#限制后台访问IP结束
- location ~ \.php$ {...
特地记录下本次交流内容,分享给需要的朋友们。