如何在CentOS 7 sysdig审核网络流量在LAMP服务器

sysdig是Linux系统的探索和故障排除工具。在这篇文章中,我们将首先介绍基本sysdig用法,然后探索网络分析sysdig,包括审计网络流量的CentOS 7 LAMP服务器上的一个例子。

介绍

sysdig是一种全新的系统级探索和故障排除工具,它将诸如strace,tcpdump和lsof等知名实用程序的优点集成到一个单一应用程序中。 并且,如果这还不够,sysdig还提供了将系统活动保存为跟踪文件以供以后分析的功能。

此外,丰富的脚本库(称为凿子 )沿,以帮助您解决常见问题或满足监控需求,从显示故障的磁盘I / O操作来发现该商品的特定进程大部分时间都在文件中提供与安装时间,和之间的一切。 您还可以编写自己的脚本,以根据您的需要进一步增强sysdig。

在本文中,我们将首先介绍基本的sysdig用法,然后使用sysdig探索网络分析,包括在CentOS 7 LAMP服务器上审核网络流量的示例。 请注意,示例中使用的VPS没有承受显着的负载,但它足以显示当前审计任务的基本信息。

先决条件

在开始之前,请确保您具有这些先决条件。

  • CentOS 7Droplet
  • 在CentOS 7 VPS上设置LAMP服务器。 请参考本文的说明
  • 此外,你应该有一个非root用户帐户sudo访问将被用于运行sysdig

安装sysdig

登录到您的服务器,然后按照下列步骤操作:

第1步 - 信任Draios GPG密钥

Draios是sysdig背后的公司。

在继续安装本身之前,yum将使用此密钥来验证您即将下载的软件包的真实性。

手动添加Draios关键看你的RPM钥匙圈,使用rpm与工具--import标志:

sudo rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public  

然后,下载Draios存储库并配置yum使用它:

sudo curl -s -o /etc/yum.repos.d/draios.repo http://download.draios.com/stable/rpm/draios.repo

第2步 - 启用EPEL存储库

用于企业级Linux(EPEL)的额外软件包是由Fedora项目维护的高质量免费和开源软件的存储库,与其分支机构(如Red Hat Enterprise Linux和CentOS)100%兼容。 需要此存储库才能下载sysdig需要的动态内核模块支持(DKMS)软件包,并下载其他依赖关系。

sudo yum -y install epel-release

第3步 - 安装内核标题

这是必要的,因为sysdig将需要建立一个定制的内核模块(名为sysdig-probe ),并用它来操作。

sudo yum -y install kernel-devel-$(uname -r)

第4步 - 安装sysdig软件包

现在我们可以安装sysdig。

sudo yum -y install sysdig

第5步 - 以非root用户身份运行sysdig

为了安全起见,最好有一个非root用户来运行sysdig。 为sysdig创建自定义组:

sudo groupadd sysdig

将一个或多个用户添加到组。 在我们的例子中,我们将添加用户sammy

sudo usermod -aG sysdig sammy

找到sysdig的二进制文件:

which sysdig  

您可能会收到类似的回复

/usr/bin/sysdig

给出的sysdig组权限所有成员运行sysdig可执行文件(且只有二进制)。 编辑/etc/sudoers有:

sudo visudo

添加以下代码行中的组部分sysdig组。 后增加新的线路%wheel部分罚款。 在系统上用sysdig的位置替换路径:

## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL

## sysdig
%sysdig ALL= /usr/bin/sysdig 

如果您需要编辑进一步澄清/etc/sudoers文件,建议你看看这篇文章

运行sysdig

您可以在两种模式下运行sysdig。

您可以查看实时服务器活动的实时流,或者可以将系统操作的记录保存到文件以供以后离线分析。

因为你很可能想使用第二个选项,这是我们将在这里覆盖。 请注意,将系统活动保存到文件时,sysdig将获取操作系统的完整快照,以便在此时间间隔内在服务器上执行的所有操作都可用于脱机分析。

注意:当您运行sysdig命令,请确保每个选项是由一个单一的短破折号前面。 复制和粘贴可能会导致如下问题:单个破折号粘贴为长破折号,因此程序无法识别。

让我们运行一个基本的sysdig命令来捕获1000行服务器活动。

为了捕捉系统活动到一个名为act1.scap ,输出限制为1000个事件,运行以下命令(省略-n 1000 ,如果要为未指定的时间段运行sysdig一部分)。 -z开关用于使跟踪文件的压缩。

sudo sysdig -w act1.scap.gz -n 1000 -z

注意:如果在上一步中省略了-n开关,可以通过按CTRL + C组合键中断sysdig的执行。

Chisels - sysdig脚本概述

凿子是sysdig脚本。 要显示可用凿子的列表,我们需要运行以下命令:

sudo sysdig -cl

为了使用由sysdig创建的跟踪文件来审核我们的CentOS 7 LAMP服务器上的网络流量,我们将使用Net类别下可用的凿子:

Category: Net
-------------
iobytes_net         Show total network I/O bytes
spy_ip              Show the data exchanged with the given IP address
spy_port            Show the data exchanged using the given IP port number
topconns            top network connections by total bytes
topports_server     Top TCP/UDP server ports by R+W bytes
topprocs_net        Top processes by network I/O

具体凿子的进一步描述及其使用说明可以用以下内容查看:

sudo sysdig -i chisel name

例如:

sudo sysdig -i spy_ip

这输出:

Category: Net
-------------
spy_ip              Show the data exchanged with the given IP address
shows the network payloads exchanged with an IP endpoint. You can combine this chisel with the -x, -X or -A sysdig command line switches to customize the screen output
Args:
[ipv4] host_ip - the remote host IP address
[string] disable_color - Set to 'disable_colors' if you want to disable color output

Args部分表示是否需要一个参数传递给凿与否。 在的情况下spy_ip ,你需要通过一个IP地址作为参数传递给凿。

审计网络流量(实例)

让我们来看一个如何使用sysdig来分析带宽使用情况的实际示例,并查看有关网络流量的详细信息。

为了从此测试获得最佳结果,您需要在服务器上设置一个虚拟Web表单,以便生成适当的流量。 如果这是一个新的LAMP安装的服务器,则可以使这种形式在/var/www/html/index.php

<body>
<form id="loginForm" name="loginForm" method="post" action="login.php">
  <table width="300" border="0" align="center" cellpadding="2" cellspacing="0">
    <tr>
      <td width="112"><b>Username:</b></td>
      <td width="188"><input name="login" type="text" class="textfield" id="login" /></td>
    </tr>
    <tr>
      <td><b>Password:</b></td>
      <td><input name="pass" type="password" class="textfield" id="pass" /></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><br />
      <input type="submit" name="Submit" value="Login" /></td></tr>
  </table>
</form>
</body>

这不是必需的,但使一切整洁,你还可以创建/var/www/html/login.php页面:

<body>
    <p>Form submitted.</p>
</body>

警告:请删除此表,当你完成测试!

第1步 - 保存离线分析的实时数据

我们将通过发出以下命令来开始捕获数据的日志收集:

sudo sysdig -w act1.scap.gz -z -s 4096

让sysdig运行一段合理的时间。 sysdig运行时,命令提示符将挂起。

现在,在网络浏览器中访问您的服务器的域或IP地址。 您可以访问现有和不存在的网页,以产生一些流量。 如果你想这个具体的例子来工作,你应该访问主页,填写用任何你喜欢的登录信息,并提交登录表单几次 此外,随时可以对MySQL / MariaDB数据库运行查询。

生成一些流量后,按CTRL + C停止sysdig。 然后,您将准备好运行分析查询,我们将在本教程后面讨论。

在生产环境中,您可以在服务器上的繁忙时间启动sysdig数据收集。

了解过滤器:类和字段

在我们进入排序sysdig数据之前,让我们来解释一些基本的sysdig命令元素。

Sysdig提供类和字段作为过滤器。 您可以将类作为对象和字段视为属性,遵循基于面向对象编程理论的类比。

您可以通过以下方式显示类和字段的完整列表:

sudo sysdig -l

我们将使用类和字段来在分析跟踪文件时过滤输出。

第2步 - 使用跟踪文件执行脱机分析

因为我们希望网络流量审计,并从我们的LAMP服务器,我们将加载跟踪文件act1.scap.gz并执行与sysdig以下测试:

使用网络带宽显示最高进程的列表

sudo sysdig -r act1.scap.gz -c topprocs_net

你应该看到输出有点像这样:

Bytes     Process
------------------------------
331.68KB  httpd
24.14KB   sshd
4.48KB    mysqld

在这里,你可以看到,Apache是使用最带宽(在httpd进程)。

基于此输出,您可以做出明智和支持的判断呼叫,以决定是否需要增加可用带宽,以便投放您当前和未来的估计请求。 否则,您可能需要对进程可以使用的已有可用带宽的最大速率设置适当的限制。

按进程显示网络使用情况

我们还可能想知道哪些IP使用由消耗的网络带宽httpd ,如前面的例子那样。

为了这个目的,我们将使用topconns凿(这显示了总字节数顶网连接),并添加与类形成一个过滤器proc和现场name来过滤结果,只显示http连接。 换句话说,下面的命令:

sudo sysdig -r act1.scap.gz -c topconns proc.name=httpd

这将顶级的网络连接返回到服务器,包括源,其中服务请求的过程中httpd

Bytes     Proto     Conn     
------------------------------
56.24KB   tcp       111.111.111.111:12574->your_server_ip:80
51.94KB   tcp       111.111.111.111:15249->your_server_ip:80
51.57KB   tcp       111.111.111.111:27832->your_server_ip:80
51.26KB   tcp       111.111.222.222:42487->your_server_ip:80
48.20KB   tcp       111.111.222.222:42483->your_server_ip:80
48.20KB   tcp       111.111.222.222:42493->your_server_ip:80
4.17KB    tcp       111.111.111.111:13879->your_server_ip:80
3.14KB    tcp       111.111.111.111:27873->your_server_ip:80
3.06KB    tcp       111.111.222.222:42484->your_server_ip:80
3.06KB    tcp       111.111.222.222:42494->your_server_ip:80

请注意,出于隐私原因,原始源和目标IP地址已被隐藏。

此类型的查询可以帮助您找到向您的服务器发送流量的最大带宽用户。

看看上面的输出后,你可能认为源IP地址后面的数字代表端口。 然而,情况并非如此。 这些数字表示由sysdig记录的事件编号。

第3步 - 分析在特定IP和Apache之间交换的数据

现在我们将更详细地检查特定IP地址和Apache之间的连接。

所述echo_fds凿允许我们显示已读取和处理写入的数据。 当与一个特定的进程名称和(如客户端IP组合proc.name=httpd and fd.cip=111.111.111.111在这种情况下),此凿将显示被我们的LAMP服务器以及该客户端的IP地址之间交换的数据。

此外,使用以下开关有助于我们以更友好和准确的方式显示结果:

  • -s 4096 :对于每个事件,念起来从其缓冲区4096个字节(此标志也可用于指定保存实时数据进行离线分析跟踪文件时,如何每个数据缓冲区的字节数应保存到磁盘)

  • -A :打印数据缓冲区的回波尾线仅文本部分,和(我们希望只显示人类可读的数据)

这是命令。 一定要替换111.111.111.111与以前输出的客户端的IP地址。

sudo sysdig -r act1.scap.gz -s 4096 -A -c echo_fds fd.cip=111.111.111.111 and proc.name=httpd

你应该看到相当多的输出,取决于该IP地址做出的连接数。 以下是显示404错误的示例:

GET /hi HTTP/1.1
Host: your_server_ip
Connection: keep-alive
Cache-Control: m

------ Write 426B to 111.111.111.111:39003->your_server_ip:80

HTTP/1.1 404 Not Found
Date: Tue, 02 Dec 2014 19:38:16 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
Content-Length: 200
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /hi was not found on this server.</p>
</body></html>

此类型的查询可以帮助您确定什么类型的连接是由顶部使用带宽的IP地址进行的。 例如,如果您发现IP地址非常频繁地到达某个页面,您可以使该页面的资源尽可能小,以减少带宽使用。 或者,如果交通似乎不合法,你可以创建一个新的防火墙规则来阻止占用带宽的IP地址。

第4步 - 使用关键字检查与IP地址交换的数据

根据捕获间隔期间的服务器活动,跟踪文件可能包含相当多的事件和信息。 因此,用手经过前面部分中的命令的结果可能需要不切实际的时间量。 因此,我们可以在事件缓冲区中寻找特定的字。

假设我们有一组Web应用程序在我们的Web服务器上运行,并且我们希望确保登录凭据不会作为纯文本通过表单传递。

让我们给上面的例子中使用的命令添加几个标志:

sudo sysdig -r act1.scap.gz -A -c echo_fds fd.ip=111.111.111.111 and proc.name=httpd and evt.is_io_read=true and evt.buffer contains form

此处的类evt与现场沿is_io_read ,让我们仅检查读取事件(从服务器的角度来看)。 此外, evt.buffer允许我们要搜索的事件缓冲区内的特定字(该字是form在这种情况下)。 您可以将搜索关键字更改为对您自己的应用程序有意义的关键字。

以下输出显示用户名和密码以纯文本形式从客户端传递到服务器(从而成为具有足够专业知识的任何人可读的):

------ Read 551B from 111.111.111.111:41135->your_server_ip:80

POST /login.php HTTP/1.1
Host: your_server_ip
Connection: keep-alive
Content-Length: 35
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://104.236.40.111
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://104.236.40.111/
Accept-Encoding: gzip,deflate
Accept-Language: en-US,en;q=0.8

login=sammy&pass=password&Submit=Login

如果您发现类似的安全漏洞,请立即通知开发人员。

结论

在LAMP服务器上审计网络流量时可以使用sysdig完成的工作主要受限于人们的想象和应用程序请求。 我们了解了如何找到最佳带宽用户,检查来自特定IP的流量,以及根据应用程序的请求通过关键字对连接进行排序。

如果您对本文有任何其他问题,或者想了解如何在当前LAMP环境中使用sysdig,请使用以下表单提交您的评论。