Powered by Typecho)))
Optimized by EAimTY
今天遇到一个问题,同事问怎么来防止LVS环境下的arp欺骗,对于LVS不是太熟悉,于是到whitehat群中请教,然后自己又看了下关于 LVS的资料,做了个简单的分析,记录下。
首先了解下LVS,LVS是Linux服务器集群系统(Linux Virtual Server)的简称,其官方网址为: http://www.linuxvirtualserver.org/zh/lvs3.html,其中LVS主要采用了三种IP负载均衡技术,即:
VS/NAT 通过NAT实现虚拟服务器(Virtual Server via Network Address Translation);
VS/TUN 通过IP隧道实现虚拟服务器(Virtual Server via IP Tunneling);
VS/DR 通过直接路由实现虚拟服务器(Virtual Server via Direct Routing
具体的介绍可以到官网查看,我们这里只分析下它们的架构:
1.VS/NAT
vs-nat.jpg
上图是官网给出的架构图,VS/NAT主要有一台调度服务器和下面的一个内网组成,中间通过交换机连接。
其数据流为:用户->调度服务器->Switch/Hub->到达real服务器->Switch /Hub-->调度服务器->用户。
a.调度服务器同一交换环境下的服务器来ARP欺骗调度服务器VIP。如果ARP欺骗的话,通过调度服务器同一交换机下的服务器来欺骗调度服务器这个IP,是可以完成的,它们在同一交换环境下的。
b.如果采用调度服务器IP来欺骗同一交换环境下的其他IP,因为入侵进去的话,实际登陆的可能是调度服务器后面的内网里的某一台服务器,如果这个 session断开的话,可能就无法找到是哪一台服务器了,这是其一;当然了,由于是负载均衡吗,我们可以把内网所有的主机都控制了,然后再来实施ARP 欺骗,很显然,由于此IP在内网,我们很难欺骗调度服务器VIP相同网段的其他IP。
预防:那么直接在交换机上设置VIP和mac的绑定理论上应该就可以防止对VIP的ARP欺骗了。
2.VS/TUN
vs-tun.jpg
通过上图,可以看出,VS/TUN的架构为一台调度服务器,下面是目标服务器。
数据流为:用户->调度服务器->目标服务器->直接返回给用户.
ARP欺骗攻击
a.通过了解TUN方式的VS 可以知道调度服务器实际上和后台的目标服务器是同处一个交换环境下面的,那么我们就可以使用VIP同一交换环境下的 IP对调度服务器VIP进行攻击,由于VS的real服务器和调度服务器一个交换环境下,那么也可以对任一台进行ARP欺骗攻击,前提是得知道他们的真实 IP地址,而不是VIP地址。
b.通过VS来ARP欺骗VIP同一交换环境下的其他IP,调度服务器给我们随机分配一台目标服务器,由于目标服务器和调度服务器是在一个交换环境下,那么就可以成功的对其实施ARP欺骗攻击,当然了,也要知道调度服务器分配的真实IP地址了。
预防:理论上可以通过在交换机上设置IP地址和MAC绑定的方法来防止ARP欺骗。
3.VS/DR
vs-dr.jpg
上图为DR方式的VS,调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过高速的交换机或者HUB相连。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
sed用法
1. 是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。
2. 通过行号或正则表达式指定要改变的文本行
3. sed不与初始文件打交道,而只与它的一个拷贝打交道,如果操作结果没有重定向到一个文件,那么将输出到屏幕。
调用方式:
a. 命令行方式
b. 将sed命令插入脚本文件中,然后调用sed
c. 将sed命令插入脚本文件中,使得脚本文件为可执行。
保存sed输出
重定向到一个新文件 >
sed中定位文本的方式
x 一行号
x,y 行号范围
/pattern/ 查询包含模式的行
/pattern/pattern/ 查询包含两个模式的行
/pattern/,x 在指定行号上查询匹配模式的行
x,/pattern/ 通过行号和模式查询匹配行
x,y! 查询不包含行号x,y的行
sed编辑命令
p 打印文本
匹配元字符$前,必须使用反斜线\
= 打印行号 使用-e选项
如果既打印行号又打印匹配行,必须使用两个sed命令,并使用-e选项
附加文本
使用符号a\ ,可以指定文本一行或多行附加到指定行。若不指定文本放置位置位置,sed缺省放置在每一行后面。
创建sed脚本文件
创建脚本文件,第一行为:
#!/bin/sed -f ----注 说明sed命令解释行。脚本在这一行查找sed以运行命令,这里定位在/bin
插入文本:在指定行前面插入,它也只接受一个地址。
删除文本:d
替换命令用替换模式替换指定模式
使用sed实现的一个重要功能是在另一个系统中下载的文件中剔除控制字符。
1. 使用s/-*//g删除横线-----
2. 使用/^$s/d删除空行
3. 使用$d删除最后一行
4. 使用1d删除第一行
5. 使用awk{print $1}打印第一列
在这篇文章中,我们将浏览最常用的命令和选项,并演示它们如何工作,以及它们适于在何处使用。
替换命令
sed 实用工具以及其它任何类似的编辑器的最常用的命令之一是用一个值替换另一个值。用来实现这一目的的操作的命令部分语法是:
's/{old value}/{new value}/'
因而,下面演示了如何非常简单地将 "tiger" 修改为 "wolf":
$ echo The tiger cubs will meet on Tuesday after school | sed
's/tiger/wolf/'
The wolf cubs will meet on Tuesday after school
$
注意如果输入是源自之前的命令输出,则不需要指定文件名—同样的原则也适用于 awk、sort 和其它大多数 LinuxUNIX 命令行实用工具程序。
多次修改
如果需要对同一文件或行作多次修改,可以有三种方法来实现它。第一种是使用 "-e" 选项,它通知程序使用了多条编辑命令。例如:
$ echo The tiger cubs will meet on Tuesday after school | sed -e '
s/tiger/wolf/' -e 's/after/before/'
The wolf cubs will meet on Tuesday before school
$
这是实现它的非常复杂的方法,因此 "-e" 选项不常被大范围使用。更好的方法是用分号来分隔命令:
$ echo The tiger cubs will meet on Tuesday after school | sed '
s/tiger/wolf/; s/after/before/'
The wolf cubs will meet on Tuesday before school
$
注意分号必须是紧跟斜线之后的下一个字符。如果两者之间有一个空格,操作将不能成功完成,并返回一条错误消息。这两种方法都很好,但许多管理员更喜欢另一种方法。要注意的一个关键问题是,两个撇号 (' ') 之间的全部内容都被解释为 sed 命令。直到您输入了第二个撇号,读入这些命令的 shell 程序才会认为您完成了输入。这意味着可以在多行上输入命令—同时 Linux 将提示符从 PS1 变为一个延续提示符(通常为 ">")—直到输入了第二个撇号。一旦输入了第二个撇号,并且按下了 Enter 键,则处理就进行并产生相同的结果,如下所示:
$ echo The tiger cubs will meet on Tuesday after school | sed '
> s/tiger/wolf/
> s/after/before/'
The wolf cubs will meet on Tuesday before school
$
全局修改
vmstat是一个十分有用的Linux系统监控工具,使用vmstat命令可以得到关于进程、内存、内存分页、堵塞IO、traps及CPU活动的信息。
一、前言
很显然从名字中我们就可以知道vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,但是怎样通过vmstat来发现系统中的瓶颈呢?在回答这个问题前,还是让我们回顾一下Linux中关于虚拟内存相关内容。
二、虚拟内存运行原理
在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。
分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。
当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作 thrashing(颠簸)。