【nginx/apache】远古技术:增加网站访问密码(auth_basic)
实现这种效果,首次打开某个网页的时候要求输入账号密码
如果不输入或输入错误,会提示
Unauthorized
This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.
我知道这种授权交互这并不优雅毫无设计可言,但应用于部署在公网的内部系统缺不失为一个简陋但有效的一道安全屏障。
以下是nginx和apache的实现流程概要(centos下为例):
准备
如果是apache直接查找安装目录 bin/ 下的 htpasswd
如果是nginx 则需要额外安装
yum install httpd-tools
生成密码文件
以下命令生成密码文件
htpasswd -c /path/of/your/passwd.db useralpha
参数解读
-c 创建密码文件, 创建后往同一个密码文件追加用户不加此参数,否则会覆盖文件
/path/of/your/passwd.db 密码文件路径,文件名、后缀、存放路径自定,不建议放在 wwwroot下,避免被下载破解
useralpha 加密用户名,自定。
随后输入两次密码,创建完成。修改文件访问权限增加安全性(www是nginx守护进程身份,根据实际情况修改)
chown www:www /path/of/your/passwd.db
chmod 400 /path/of/your/passwd.db
配置服务
假设需要保护的网站在服务器上的实际路径是
/data/wwwroot/internalsystem/
弹窗显示的提示信息为:internal system demo
使用上一步我们创建的密码文件及账号密码限制访问
nginx
在配置文件的网站配置或vhost文件中的花括弧{}内添加以下规则
location ~ /internalsystem {
auth_basic "internal system demo";
auth_basic_user_file /path/of/your/passwd.db;
}
apache
在配置文件 httpd.conf (或include 的配置文件中)
<Directory /data/wwwroot/internalsystem >
AllowOverride All
Order allow,deny
Allow from all
AuthType Basic
AuthName "internal system demo"
AuthUserFile /path/of/your/passwd.db
Require user cmsuser
</Directory>
保存配置文件后重启服务
补充及扩展
增加账号密码
如上文所述,去掉参数 '-c' 则为增加用户,不会覆盖已有账号密码
htpasswd /path/of/your/passwd.db userbeta
创建后可以同时用 useralpha或userbeta 和对应的密码通过验证
修改已有账号的密码
只需要对同一个密码文件+账号执行htpasswd命令即可
htpasswd /path/of/your/passwd.db useralpha
新密码会替换旧密码,即时生效
在移动端
需要注意的是微信内建浏览器不支持basic_auth,访问网页会直接提示401错误授权失败。
手机端的浏览器基本测试过可以支持,桌面端的浏览器支持也非常良好,毕竟是有一定年份的早期基本功能。
这样就足够了吗?
当然不是一劳永逸 简单搜索 “basic auth 暴力破解” 这三个词,就足以出现数十种不同语言不同工具的攻击工具。
也不是坐以待毙,可以配合一些基础的ddos防范手段来阻止或有效增加破解者的攻击成本(至少争取到足够的时间让运维人员可以发现并干预出现的问题)
摘抄原文:
使用nginx的http_limit_conn和http_limit_req模块来防御。 ngx_http_limit_conn_module 可以限制单个IP的连接数,ngx_http_limit_req_module 可以限制单个IP每秒请求数,通过限制连接数和请求数能相对有效的防御CC攻击。
*详情见文末链接
参考链接
《Nginx中使用htpasswd配置Http认证》
https://blog.csdn.net/a_bang/article/details/72630578
《htpasswd命令》
https://man.linuxde.net/htpasswd
《nginx防止DDOS攻击配置》
https://blog.csdn.net/nohaoye/article/details/68946015
