WAF(Web Application Firewall,
Web防火墙)的贯彻有多种一手,基于regex(Regular
Expression,正则表明式),然后编译成一个大状态机是时下主流的办法。当然,阿拉云安全的主架构师讲了个ppt,直接说regex来做防火墙有不创建的地方,理由是应用regex做防火墙,其总结复杂度最高的这么些regex是百分之百序列的短板,假设那多少个regex的年华复杂度过高,攻击者完全可以行使这一点攻击WAF达到DDOS的机能。从而,他觉得regex迟早应该退出WAF的园地,而用人工智能白名单的新一代WAF才是前景WAF的主流。这位仁兄说的是有道理的,正则表明式做的WAF非常复杂,运算强度高,这么些瓶颈业内早就熟谙,将来应该属于人工智能。接下去的一定一段时间,我也真的需要思想思考下一代的WAF是切实可行怎么更好的三结合人工智能。话说回来,毕竟在可预见的年华里,基于regex的WAF如故主流。吐槽一下,正则表达式真的是一个自身不精晓该说是天才依旧该说是渣滓的翻译,让我每当写到两回就想吐槽五次。

redis是c语言开发的

  硬件的利益是很快、直接,软件的裨益是高扩大性,我们完全可以整合双方。用上位机(可能是决定的总结机,也恐怕只是里面的一个嵌入式CPU)把tcp
and dst host 192.168.218.1 and src port
22如此容易阅读的事物翻译为偏移量、bool值这样的东西,并且付诸各种bool值总结中偏移量从小到大排列,假诺基础的bool值总结只有最多8条这样的情事,那么实际上只需要FPGA内部做一个8位地址1位输出的RAM(可以设置,所以拔取RAM而非ROM)即256bits的蕴藏的RAM,上位机把RAM里面储存的持有值算出来并传给FPGA。

  1. k-v存储
  2. 列存储 Hbase
  3. 文档存储 Mongodb
  4. 图片数据库

  用RAM来测算bool表明式虽说不可能通用,因为其储存伴随着bool表明式的尺寸是乘方级的扩张,但简单、快。设计此类电路,简单就是美,对于电路的综合来说是重中之重的。并且,能够可以这么设置多条规则,但每条规则基本是独自工作。

  • keys *
  • del key
  • exists key     重回1意味着存在
  • get key
  • rename key    重命名

  比如事先,tcp and dst host
192.168.218.1 and src port
22,3个bool值映射到1个布尔值,其实只需要2^3=8bits存储,8个bits分别为0,0,0,0,0,0,0,1,这就是RAM存储的始末。


  我已经考虑过用逆波兰式去统计,但对于这种场馆似乎有无数的不便于,倒是RAM简单暴力直接。这也许会问,如何过滤规则过于复杂了如何是好,这就径直考虑不帮助,任何产品都有一个规划基准,不可以无条件的满意所有人的需要。

    save 900 1

  甚至于,软件还足以比这些更加强劲,可以设想合并多条规则,切割多条规则,其实多条规则的三个bool表明式最终也通过and或者or来连续的,最终可能还有一个not,从总体来看究竟如故一条规则。


  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址

  http://www.cnblogs.com/Colin-Cai/p/7609137.html 

  作者:窗户

  QQ:6679072

  E-mail:6679072@qq.com

 

  话题有些扯远了,越是前几日信息如此膨胀,WAF越是会偏向于用电脑来化解而非嵌入式设备,但和我要涉及的话题牵涉到的都是包过滤。在音讯膨胀的明天,百M甚至千M已经不可以满意我们的需要,主干网上万M互换机用来满意大数据量的置换。速度太快,我们实际无法完全采纳CPU来处理这总体,CPU只好当做终点配置等效能,而对于万M网络本身的决定应利用ASIC(Application
Specific Integrated
Circuit,专用集成电路),也就是为此选用特别规划一个芯片,而非用于多种场面的通用芯片。然而ASIC无法升级,若要升级只好替换。FPGA可以代表那一个,同时满意ASIC的要求和升级的要求,最近高端的FPGA的主时钟可以很快,但当然也挺昂贵。

  • lpush
  • rpush
  • lrange   后更参数index  范围
  • lpop     取出后没有
  • rpop
  • llen
  • 等等

  倘若熟习抓包工具,比如tcpdump,会想到平日的时候大家对此2~4层的抓包的确不会想WAF这样动辄regex作为判断标准,而是一堆基于固定地点(比如对于UDP包,其端口号、IP地址等在包中的偏移都是原则性的)的数值等式或不等式作为bool值连成的bool表达式。大家就以tcpdump命令的参数来表达,比如tcpdump
tcp and dst host 192.168.218.1 and src port 22,其中tcp、 dst host
192.168.1.1、src port
23就是三个例外的bool值。倘若熟稔tcpdump和TCP/IP,对照资料,大家可以另行修改上述规则,把tcp、dst
host、src
port解析为偏移,从而整个规则写作偏移的花样。在大多数的行使下,一条过滤里面这么独立的bool值不超越8个。

from:http://www.imooc.com/learn/839

  想起大约十年往日,我们选择FPGA处理NGN信令,涉及到网络包的过滤、总计等。当时,我们对此包的过滤是半定死的,比如UDP如故TCP、端口需要不需要过滤、假使急需端口过滤端口多少、IP需要补需要过滤、如需要IP过滤IP咋样过滤,如此设计是因为对此当下的施用来说也早已丰盛。

  优势:

  随着FPGA收包的经过,依次匹配规则中的偏移量,总计出各种bool值,从而最终拼出查RAM的地方,从而查出该包是因而或者拦截。

Redis 持久化:

 

图片 1

  • sadd  key     添加 
  • srem  key     删除
  • smembers key   查看成员值
  • scard key     再次回到成员个数
  • 等等

  进入appendonly.aof文件删除最后的一声令下就足以达到撤除的目标

存储Set:

修改配置文件来后台运行   

Nosql  == not only sql


防火墙 6379 的端口打开

Jedis   java的连接redis的一个jar包

redis应用场景:

存储Sorted-Set

  配置:

    dbfilename dump.rdb  保存文件名

对比图:

redis的安装: 百度

储存String常用命令:


Redis特性:

  • RDB形式  可以指定多少秒写入磁盘两次
  • AOF方式 读取log
  • 无持久化
  • 同时RDB和AOF

  劣势:

Nosql 特性:

  劣势:

  1. 易扩展
  2. 灵活的数据模型
  3. 运气据量高性能,高可用
  • set                建立
  • get                查看
  • getset          再次回到一个字符串,也就是键的旧值。
    假设键不设有,则赶回nil
  • del               删除
  • incr             数字有增无减1
  • decr            数字压缩1
  • incrby         数字有增无减自定义
  • decrby       数字裁减自定义
  • append      再次来到一个整数,在增多操作后的字符串的长度。

  配置:


 

    #appendfsync everysec  每秒同步三回

与list不同,不允许出现重复的因素

图片 2


 

Redis的数据结构:

 ps -ef | grep redis    
查看redis服务是否起来

图片 3

    #appendfsync always  每修改一次就联手五回

 

  multi  事务块

也得以用  ./bin/redis-cli
shutdown  来关闭redis

  • zadd myset 50 p 60 j 70 x     添加有序的set
  • zadd 100 p        虽然value相同,分数会覆盖
  • zscore myset p     查询p的分数
  • zcard myset      查询长度
  • zrem  myset  p   删除p
  • 等等

 

  1. High performance   高并发读写
  2. Huge storage   海量数据的高效用存储和走访
  3. High scalability & High availability 高可扩张性和高可用性
  1. 字符串             String
  2. 字符串列表      list
  3. 哈希                 hash
  4. 字符串集合      set
  5. 不变字符串      sorted-set

解决:

存储Hash:

    #appendfsync no    不同步

Redis   key的通用操作

./bin/redis-server
./redis.conf      用配置文件启动redis服务

redis默认是RDB方式:

 

  • hset key key_name values           
  • hset key key_name1 values1        建立hash,赋值单个
  • hmset key key_name value key_name1 value1       建立hash,赋值六个
  • hget key key_name             拿到单个值
  • hmget key key_name key_name1     得到两个值
  • hgetall key       得到全套的key,value
  • hlen     得到长度
  • hkeys   获得键
  • hvals   获得值

  优势:

kill -9 <进程号>       
杀死进程来关闭redis-server

图片 4

连接池

存储List:

图片 5

 

  discard 撤消事务

图片 6

连接redis的例证,创设连接池的例证

    dir ./  在当前目录保存

安装好redis之后(linux)

Nosql数据库的四大分类:

    appendonly no/yes  是否启用

    save 300 10

 

AOF方式:

    save 60 10000


  • 做缓存
  • 职责队列
  • 网站访问总括
  • 接纳名次榜
  • 数量过期处理
  • 等等

 

  exec 执行工作

图片 7

非关系型数据库    redis 和 mongodb