分析存储技术的现状

分析存储技术的现状,第1张

OSSIM的Session存储问题研究

OSSIM的会话存储研究


1。多Web服务共享会话数据
最初我们开发OSSIM的时候,为了让用户登录多个集成工具的Web接口,比如在OSSIM下,有四个B/S架构的应用:
https://1.2.3.4/Nagios
https/1.2.3.4/OCS
https://1.2.3.4/ntop登录OSSIM系统的用户是统一的,即一套用户名和密码可以登录并在整个网站的所有模块中使用。在所有服务器之间共享用户数据很容易。只需要在后端设置一个数据库服务,所有服务器(Ntop、Nagios、OpenVas)通过统一接口访问用户数据。登录本服务器后,用户进入另一台服务器的其他模块时,仍需重新登录。这叫一次性登录,所有访问的问题,映射到技术上,其实就是服务器之间如何共享会话数据的问题。

2。Session原理
OSSIM前端主要用PHP和Python开发。在解决问题之前,我们先来了解一下PHPSESSION的工作原理。当一个客户端(比如浏览器)登录到一个网站时,被访问的PHP页面可以使用SESSION_start()来打开会话,这将生成客户端的唯一标识符SESSIONID。会话ID可以以两种方式保存在客户端,自动添加到GET的URL或POST的形式。默认情况下,变量名为PHPSESSID;另一种是通过COOKIE将会话ID保存在COOKIE中。默认情况下,这个COOKIE的名称是PHPSESSID。这里主要用COOKIE来解释。
会话的数据保存在哪里?当然是在服务器端,但不是在内存中,而是在文件或数据库中。默认情况下,php.ini(位于/etc/php5/apache2/php.ini)中的会话集保存为文件(SESSION.save_handler=files),也就是说,会话数据是通过读写文件来保存的。而保存会话文件的目录由session.save_path指定,文件名前缀为sess_,后跟会话ID,如:sess_c72665af28a8b14c0Fe11aFe3b59b51b。OSSIM数据库使用“alienvault.sessions”来存储会话的内容。
如果访问量很大,可能会生成更多的会话文件。这时候可以设置一个分层目录来保存会话文件,这样会提高效率。设置方式为:session.save_path="N;/path”,n是层次级数,save_path是起始目录。PHP在写会话数据的时候会获取客户端的SESSION_ID,然后根据这个SESSIONID在指定的会话文件保存目录中找到对应的会话文件。如果不存在,就创建它,最后序列化数据并写入文件。读取会话数据是类似的 *** 作过程,需要为读取的数据生成相应的会话变量。

3。判断用户权限
OSSIM多用户的权限控制是通过会话实现的,通过会话判断用户权限是最简单的权限判断处理方式。用户成功登录后,信息存储在$_SESSION[“用户”]中。在页面上,判断$_SESSION[“用户”]中是否有用户信息,如果有保存在SESSION中的用户信息,则在页面上显示该用户信息。

4。共享会话的实现方案
通过介绍SESSION的工作原理,我们发现默认情况下,每个服务都会为同一个客户端生成会话ID,例如,对于同一个用户浏览器,假设Ntop服务器生成的会话ID为rohq43bpasoibp7g87knfm6er0,而Nagios服务器生成的会话ID为a72665af28a8b14c0Fe11aFe3b59b51b。此外,PHP的会话数据存储在该服务器的文件系统中。
一旦你发现了问题,你就可以开始解决它。如果要共享会话数据,必须达到两个目标:一个是每台服务器为同一个客户端生成的会话ID必须相同,并且可以通过同一个cookie传递,也就是说每台服务器必须能够读取同一个名为PHPSESSID的cookie;另一个是会话数据的存储方式/位置必须保证所有服务器都能访问。
第一个目标的实现其实很简单。你只需要专门设置COOKIE的域。默认情况下,cookie的域是当前服务器的域名/IP地址。
从外部看,管理员只用一个用户名和密码登录OSSIM系统,但是系统内部有很多Web服务器。因为里面有相关的引擎,所以需要频繁调用各个Web系统的数据,这样会话的读写会更加频繁。如果没有好的解决方案,系统性能会降低。传统的方法是使用基于文件的会话访问。这种方式的缺点是瓶颈可能都在磁盘IO *** 作上,所以处理小数据的会话没有问题(对于OSSIM3.1之前的系统,数据量小)。Memcache用于存储会话数据,同时也用作数据库缓存,直接通过内存。但是,缺点是停机后数据会丢失。
但是OSSIM4.3及以上系统会有一个数据量很大的会话,可能无法胜任。这时候考虑安装redis。例如,当存储会话的服务重新启动时,所有用户都必须重新获得会话...瞬时数据库压力会很大,但redis不会...
OSSIM的Web系统设计为超时15分钟后注销,也是通过Session实现的。Session如何判断客户端用户?它判断会话ID是由会话ID随机生成的,因此可以保证唯一性和随机性,保证会话的安全性。通常,如果未设置会话的生命周期,会话ID将存储在内存中。关闭浏览器后,ID会自动注销。重新请求页面后,将重新注册一个会话ID。

5。Memcache与MySQL
并肩工作memcache是一个高性能的分布式内存对象缓存系统。通过在内存中维护一个统一的巨大哈希表,可以用来存储sessiono。当系统需要从内存中读取时,读取速度大大提高。在OS4.1以后的所有系统中,动态Web应用都使用Memcached这种高性能内存对象缓存系统,主要缓存OSSIM各个数据库的读写,以减轻MySQL数据库的负载。配置文件请参考/usr/share/ossim/include/ossim_db.Inc,/usr/share/ossim/include/PHP-ids.ini。这种方式也是OSSIM的缓存方案之一。读者可能会有疑问。MySQL本身同时具有table_cache和query_cache机制。我们使用以下命令在数据库中进行检查:
MySQL>;显示类似“%query_cache%”的变量;
在查询频繁变化,表内容频繁变化的场景下(OSSIM的存储和查询就是这样一种状态),这样简单的缓存系统根本无法达到有效缓解数据库压力的目的。就像Apache中提供的mod_disk_cache和mod_mem_cache并不能真正为Web服务器提供缓存样本,需要后期的缓存工具如Squid。
memcache通过在内存中缓存数据和对象来减少读取数据库的次数,所以为OSSIM系统提供更多的内存有助于发挥memcache的作用,从而提高整体性能。另外,为了直观地观察缓存效果,可以使用memadmin工具来查看。
配置memcached:
/etc/default/memcached//controlon
/etc/memcached.conf//配置memcached参数
Ossim调用memcache,端口11211的配置文件/usr/share/Ossim/www/forensics/includes/base_db.inc.php
/usr/share/PHP/adodb/adodb.Inc.PHP
/usr/share/PHP/adodb/adodb

6检查memcache状态
接下来,我们使用telnet命令来测试memcache的工作状态。首先输入以下命令:
#telnet127.0.0.111211
注意,OssimServer默认没有telnet自行安装,后面跟着“11211”
然后,直接输入“stats”命令获取当前memcache状态。

表1-内存缓存状态信息

pid

Memcache服务器进程ID,1416

正常运行时间

服务器已经运行的秒数,12898

时间

服务器的当前unix时间戳,1423550546

版本

Memcache版本1.4.5

pointer_size

当前 *** 作系统的指针大小,64

rusage_user

流程的累计用户时间,0.220013

rusage_system

进程的累计系统时间,0.144009

curr_connections

当前打开的连接数,6

total_connections

自服务器启动以来已打开的连接数,115

连接结构

服务器分配的连接构造数,14

cmd_get

Get(get)请求总数,1402

cmd_set

设置(保存)请求总数,778

get_hits

总点击量,829

get_miss

未命中总数,573

limit_maxbytes

分配给memcache的内存大小(字节),13421778

如果您需要将缓存重置为干净状态,请输入“flush_all”命令。

7。用memcache存储Session
PHPSession[/S2/]
Apache服务器给Memcached,这样无论你把IP连接分配给哪个Web服务器都不会有问题。配置方法很简单,在PHP的配置文件中添加一条语句即可。但是如果需要安装memcache模块,使用memcache存储会话的读写速度会比文件快很多,在多台服务器需要共享会话时会更方便。您可以将所有这些服务器配置为使用同一套memcached服务器,从而减少额外的工作量。缺点是会话数据都存储在内存中,缺乏持久性,但对于会话数据来说问题不大。
注意,OSSIM系统采用memcache的目的是为了提高访问速度,减轻MySQL数据库的压力。在/etc/default/memcached配置文件中更改ENABLE_MEMCACHED=yes/no来控制其开关。

关于OSSIM的详细内容,可以参考畅销书《Unix/Linux的网络日志分析和流量监控》。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/782381.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-04
下一篇 2022-05-04

发表评论

登录后才能评论

评论列表(0条)

保存