服务器临时授权

admin 2024年7月11日22:09:00评论3 views字数 1211阅读4分2秒阅读模式

有一种应用场景:服务器上的业务并不想对所有人开放,只有当对方提供IP信息后才单独对相应的IP进行授权。

像这种小范围的IP授权,如果能获取到对方IP,则可以通过提前写防火墙策略,限制IP访问范围。但如果IP是动态的,比如对方的IP是互联网IP,这时就只能先等对方报自己的IP,再写放行策略。

针对这种场景,有一种特殊的端口放行机制,比如提供三个端口,要求访问者必须按指定顺序进行访问,顺序对了,真实的业务端口才会放行。一旦顺序错误则访问者的IP会被封,有点像玩探宝游戏。

这种应对策略太程序员化了,一般用户很难接受,给用户解释起来也费劲。这里使用另一种思路,提供一个登录页面,当登录成功时则放行访问者IP。

页面效果如下:

服务器临时授权

看起来是不是像钓鱼网站?这个东西的确可以当蜜罐或钓鱼网站使用,登录成功时会放行IP,登录失败时则会记录访问者的IP、账户和密码,用于反入侵日志分析。

项目地址为:

https://github.com/hyang0/ip_allow


实现原理

windows 平台使用 netsh 命令,动态添加防火墙策略。Linux 使用 ipset 和 iptables 实现IP准入。前端页面提供用户名密码的验证,后端通过操作防火墙实现放行。

项目文档:

使用步骤

$ git clone https://github.com/hyang0/ip_allow.git$ cd ./ip_allow$ pip install -r conf/requirements.txtor $ pip install flask$ python ./app.py * Serving Flask app 'app' * Debug mode: off

默认使用 80 端口作为服务端口,可以在 app.py 中修改服务端口

if __name__ == '__main__':    app.run(debug=False, host='0.0.0.0', port=80)


日志

用户的所有访问日志都存于 ./logs/app.log 中,其中登录成功的日志会单独存于 ./logs/allow.log 中, 登录失败的日志会存于 ./logs/deny.log 中。日志中存储了访问者的 IP|username|password , 可用于蜜罐、 钓鱼、 反入侵等事后分析。

默认密码

系统的默认用户密码为:

# 用户demo数据,请换成自己的用户数据源users = {    "admin": "nzDrdSKN9JS5IGhZkwxs",    "user": "HIAExuX81QWw4KyM8P3W"}

可将代码中的用户数据换成自己的用户数据或更换认证策略。

总结

通过让用户先访问“准入”页面,系统放行后再访问真实业务的场景只适合临时授权。后台应设置好防火墙定时重置策略,防止系统长时间对外暴露。因为访问者IP是动态变化的,一直处于暴露状态会对系统带来入侵风险。

为了应对恶意扫描,可以定期处理 deny 日志,将未授权IP加入黑名单。

全文完。

原文始发于微信公众号(生有可恋):服务器临时授权

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月11日22:09:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   服务器临时授权http://cn-sec.com/archives/2943228.html

发表评论

匿名网友 填写信息