机房360首页 CalConv();
当前位置:首页 » 云计算资讯 » 如何使用ELK栈工具来管理系统日志

如何使用ELK栈工具来管理系统日志

来源:TechTarget中国 作者:DJ编辑 更新时间:2015-12-24 10:13:23

摘要:我们曾经介绍过如何跨越多种设备搭建一个开源的监控设备日志的环境。接下来,下一步是要搭建云服务器来发送系统日志到中央的ELK服务器,在那里日志会被收集起来并用来分析与系统相关的新信息。

  我们曾经介绍过如何跨越多种设备搭建一个开源的监控设备日志的环境。接下来,下一步是要搭建云服务器来发送系统日志到中央的ELK服务器,在那里日志会被收集起来并用来分析与系统相关的新信息。

  应用和守护进程过去常常会将日志信息写到在.log文件来通知系统管理员有某些问题或行为发生。这里最主要的问题是日志格式的不规范,从而导致了效率低下,难以管理的日志解析与分析。当系统日志出现后,这其中的很多问题都得到了解决,但安全的问题依旧被忽略了,系统日志仍然没有被集中管理。

  现在,有一些云服务可以集中管理所有的单独系统里的系统日志。一名对云系统有访问权限的攻击者可以篡改系统日志来隐藏他的存在。为了防止这种可能性,我们可以使用一个集中管理的云日志服务器,在那里所有其他云服务器的日志都可以用来分析可能的恶意行为。

  在这篇的例子里,我们将使用一个ELK栈来提供一个用于集中管理和系统日志分析的环境。ELK栈是由三部分组成:即,Elasticsearch用于存储和索引日志,Logstash用于解析日志,以及Kibana做为搜索和分析系统日志的界面。

  环境介绍

  该环境可以使用Docker容器来搭建,在这个例子中是使用由Protean Security所提供的Docker容器。使用Docker run命令来下载proteansec/elk镜像并forward几个端口。Logstash监听在TCP/UDP的5514端口上,负责接受和分析系统日志消息。Elasticsearch则监听9200/9300端口,但这些端口不需要对外曝露,因为只有Logstash和Kibana会直接使用Elasticsearch。Kibana的Web界面跑在TCP的5601端口上,可用于搜索和分析日志。

  在建立环境之后,通过Docker镜像的主机IP地址加端口5601连接到Kibana的Web界面,以搜索和分析所有收集到的日志。

  要在一个集中管理的Docker容器中收集日志,配置每台云服务器发送日志到暴露的5514端口上。这可以通过在云服务器上安装rsyslog并在rsyslog.d目录中添加另一个配置文件,指明从每个系统日志子系统发送的每条消息都应该被发送到一个Docker容器的5514端口上。你需要创建另一个文件/etc/rsyslog.d/10-logstash.conf,具体内容为:“*.* @@docker:5514”,其中Docker是一个DNS可解析的容器主机名。

  如果有好几个云系统都可以经由SSH访问,那么我们可以通过引入一个简单的Python库来自动化该过程。我们可以通过SSH发送命令来自动化部署和管理任务,进而能够在远程系统上运行指令。

  重要事件的检测

  OpenVPN应用会在用户认证成功后生成日志。在渗透测试和安全评估中,我们偶然的发现了有各种用于VPN服务器验证的证书和凭证。借由获得所有的必要文件,攻击者可以建立连到公司网络的VPN连接,并访问内部资源,这是特别危险的。为了检测这种行为,搭建一个ELK栈监控连接到服务器的VPN连接来识别用户,以及用户连接来源的IP地址。当一个用户从某个遥远的国家的未知IP连接过来,这类的事件可以被检测到并通报给一个安全专业人士,其可以验证该连接是否是恶意的。

  当用户在服务器上认证成功时,OpenVPN服务器会产生以下事件:

  [plain]<29>Aug 21 15:01:32 openvpn[9739]: 1.2.3.4:39236 [name.surname] Peer Connection Initiated with [AF_INET]1.2.3.4:39236[/plain]

  该日志消息已经被推送到ELK栈,在那里Logstash会解析它,但目前还没有相应的规则来从中提取出用户名和IP地址。要编写适当的规则,使用Grok Debugger服务,该服务接受系统日志和规则,并根据规则来解析消息。

  下面显示的是一条适当的规则将如何解析消息,其中用户名被存储在“vpnuser”变量中,主机名存在“vpnhost”变量中:

1

  在Kibana界面中,经过解析的消息包含了字段vpnhost(远程用户的IP地址),vpnport,或远程用户端口,以及vpnuser(授权用户的ID),如下图所示:

2

  要在消息中增加地理信息,可以在Logstash中启用GeoIP。这会自动在每一条包含vpnhost IP地址的消息中添加经纬度。一些额外的地理信息字段将被加到适当的消息中,用以识别VPN会话建立的国家。

  我们还可以很容易地新建一个地图来显示所有连接的VPN用户的IP地址,并在Kibana中呈现出来。下图显示了一个来自斯洛文尼亚的IP,在该图中任何新增加的VPN会话的IP会很容易分辨出来:

3

  集中控制的日志管理系统:企业安全必备

  在任何时候,每个系统都会生成一些事件来反应当前正在进行的操作的一些信息。系统日志用于将某些相关操作的信息传达给系统管理员。

  妥善处理用户认证时生成的OpenVPN系统日志信息很重要。需要写入适当的Logstash规则来解析消息以提取敏感信息-例如用户名,以及用户连接来源的IP地址。IP地址可进一步用于检测VPN连接建立的来源国。

  如果事件发生时员工是在另一个国家,安全警报会被触发通知安全专业人士这是一次可能的攻击。这样的事件可能发生在两种情况下。第一种用例是,用户从一次会议或在度假时连接到VPN,这不应该被视为安全问题。第二种情况涉及到黑客获得该用户的私钥和密码凭证连接到企业VPN服务器,这对公司来说可能是毁灭性的,因为它难以检测,但用上述的工具和技术则有可能做到。

  为了将所有的系统日志都存放到一个地方,拥有一个集中控制的日志管理系统对于每一个现代企业来说是必须的。这对于发现可能的异常和威胁是必要的,否则这些异常和威胁可能几周甚至几个月都不会有人注意到。

  责任编辑:DJ编辑

机房360微信公众号订阅
扫一扫,订阅更多数据中心资讯

本文地址:http://www.jifang360.com/news/20151224/n210276150.html 网友评论: pubajax('/comment.aspx','id=623406192944&commCount=1&ChID=0&Today=0','gCount6234061929443870');条 阅读次数:pubajax('/click.aspx','id=623406192944','click_623406192944');
版权声明:凡本站原创文章,未经授权,禁止转载,否则追究法律责任。
相关评论
正在加载评论列表...
function GetCommentList(page) { var Action='id=623406192944&ChID=0&CommentType=GetCommentList&page='+page; var options={ method:'get', parameters:Action, onComplete:function(transport) { var returnvalue=transport.responseText; if (returnvalue.indexOf("??")>-1) document.getElementById("Div_CommentList").innerHTML='加载评论列表失败'; else document.getElementById("Div_CommentList").innerHTML=returnvalue; } }; new Ajax.Request('/comment.aspx?no-cache='+Math.random(),options); } GetCommentList(1);
评论表单加载中...
function GetAddCommentForm() { var Action='id=623406192944&ChID=0&CommentType=GetAddCommentForm'; var options={ method:'get', parameters:Action, onComplete:function(transport) { var returnvalue=transport.responseText; var arrreturnvalue=returnvalue.split('$$$'); if (arrreturnvalue[0]=="ERR") document.getElementById("Div_CommentForm").innerHTML='加载评论表单失败!'; else document.getElementById("Div_CommentForm").innerHTML=arrreturnvalue[1]; } }; new Ajax.Request('/comment.aspx?no-cache='+Math.random(),options); } GetAddCommentForm(); function CommandSubmit(obj) { if(obj.UserNum.value=="") { obj.UserNum.value="Guest"; } if(obj.Content.value=="") { alert('评论内容不能为空'); return false; } var r = obj.commtype; var commtypevalue = '2'; for(var i=0;i
推荐图片