多维度架构之应用防火墙
什么是应用防火墙
应用防火墙用于保护应用及服务不受恶意访问和攻击。
应用防火墙有别于网络防火墙,防火墙防火墙偏重对IP地址和端口端访问控制。
应用防火墙有有别于7层防火墙,7层防火墙虽然能实现拆包,根据协议,做出访问控制。
应用防火墙的核心功能除了局别7层防火墙的特点,颗粒度可以做到更细。
例如开发过程中我们有很多需求,直接在功能模块中实现。所谓应用防火墙就是将这些功能做成一个独立模块,实现共享和复用。
功能需求
计数器
计数器的需求很常见,功能简单,就是记录访问数量,计数器也是水军主要战场。
计数器需求:
- 阅读量
- 点赞
- 喜欢
- 回复数
- 转发
- 完播
对于网防火墙可以通过IP访问策略进行封杀,但是我国由于IP地址有限,主要的上网方式是NAT(网络地址转换),例如一个公司的办公室内所有电脑都是通过一个IP地址出去的。封杀IP地址容易误伤。
使用应用防火墙就容易很多,可以使用用户+COOKIE+IP地址的方案。
访问控制列表 ACL
访问控制即“通过”,“拒绝”
-
黑名单
-
白名单
用户认证
用户认证模块化,通过插件可以支持多种用户认证
-
AAA
-
LDAP
-
MySQL
协议
应用防火墙无需拆包,因为我们是直接调用他的API。
-
IP地址,端口号
-
URL(GET)
-
POST
-
Cookie
-
HTTP Header
-
协议(HTTP,JASON,AJAX,SOAP,XML-RPM...)
简单实现
应用防火墙我提供了一个思路,不便提供代码。
下面的代码是10年前写的,没有100%实现,因为该代码不会影响竞业,供大家参考。
<?php /* * ===================================== * Website: http://netkiller.github.com * Author: neo <netkiller@msn.com> * Email: netkiller@msn.com * ===================================== */ class Logging { protected $file; public function __construct($logfile = "/tmp/debug.log"){ $this->file = fopen($logfile,"a+"); } public function __destruct() { //fclose($this->file); } public function close() { fclose($this->file);