分类 技术 下的文章

很多Linux系统管理员依赖一个集中式的远程监控系统(比如Nagios或者Cacti)来检查他们网络基础设备的健康状况。虽然集中式监控让管理员的生活更简单了,然而处理很多机器和服务时,专用的监控中心显然成为了一个单点故障,如果监控中心挂了或者因为什么原因(比如硬件或者网络故障)不可访问了,你就会失去整个网络基础设备情况的任何信息。

一个给你的监控系统增加冗余度的方法是安装独立的监控软件(作为后备),至少在网络中的关键/核心服务器上。这样在集中式监控系统挂掉的情况,你还有能力通过后备的监控方式来获取核心服务器的运行状况。

Monit是什么?

Monit是一个跨平台的用来监控Unix/linux系统(比如Linux、BSD、OSX、Solaris)的工具。Monit特别易于安装,而且非常轻量级(只有500KB大小),并且不依赖任何第三方程序、插件或者库。然而,Monit可以胜任全面监控、进程状态监控、文件系统变动监控、邮件通知和对核心服务的自定义动作等场景。易于安装、轻量级的实现以及强大的功能,让Monit成为一个理想的后备监控工具。

我已经在一些机器使用Monit几年了,而且我对它的可靠性非常满意。甚至作为全面的监控系统,对任何Linux系统管理员来说Monit也是非常有用和强大的。在这篇教程中,我会展示如何在一个本地服务器部署Monit(作为后备监控系统)来监控常见的服务。在部署过程中,我只会展示我们用到的部分。

在Linux安装Monit

Monit已经被包含在多数Linux发行版的软件仓库中了。

Debian、Ubuntu或者Linux Mint:

$ sudo aptitude install monit

Fedora或者CentOS/RHEL:

在CentOS/RHEL中,你必须首先启用EPEL或者Repoforge软件仓库.

# yum install monit

Monit自带一个文档完善的配置文件,其中包含了很多例子。主配置文件在/etc/monit.conf(Fedora/CentOS/RHEL 中),或者/etc/monit/monitrc(Debian/Ubuntu/Mint 中)。Monit配置文件有两部分:“Global”(全局)和“Services”(服务)。

Global Configuration: Web Status Page (全局配置:Web状态页面)

Monit可以使用邮件服务来发送通知,也可以使用HTTP/HTTPS页面来展示。我们先使用如下配置的web状态页面吧:

  • Monit监听1966端口。
  • 对web状态页面的访问是通过SSL加密的。
  • 使用monituser/romania作为用户名/口令登录。
  • 只允许通过localhost、myhost.mydomain.ro和在局域网内部(192.168.0.0/16)访问。
  • Monit使用pem格式的SSL证书。

之后的步骤,我会使用一个基于Red Hat的系统。在基于Debian的系统中的步骤也是类似的。

首先,在/var/cert生成一个自签名的证书(monit.pem):

# mkdir /var/certs
# cd /etc/pki/tls/certs
# ./make-dummy-cert monit.pem
# cp monit.pem /var/certs
# chmod 0400 /var/certs/monit.pem 

现在将下列代码片段放到Monit的主配置文件中。你可以创建一个空配置文件,或者基于自带的配置文件修改。

set httpd port 1966 and
     SSL ENABLE
     PEMFILE  /var/certs/monit.pem
     allow monituser:romania
     allow localhost
     allow 192.168.0.0/16
     allow myhost.mydomain.ro

Global Configuration: Email Notification (全局配置:邮件通知)

然后,我们来设置Monit的邮件通知。我们至少需要一个可用的SMTP服务器来让Monit发送邮件。这样就可以(按照你的实际情况修改):

  • 邮件服务器的机器名:smtp.monit.ro
  • Monit使用的发件人:[email protected]
  • 邮件的收件人:[email protected]
  • 邮件服务器使用的SMTP端口:587(默认是25)

有了以上信息,邮件通知就可以这样配置:

set mailserver  smtp.monit.ro port 587
set mail-format {
 from: [email protected]
 subject: $SERVICE $EVENT at $DATE on $HOST
 message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.

       Yours sincerely,
          Monit

  }

set alert [email protected]

就像你看到的,Monit会提供几个内部变量($DATE$EVENT$HOST等),你可以按照你的需求自定义邮件内容。如果你想要从Monit所在机器发送邮件,就需要一个已经安装的与sendmail兼容的程序(如postfix或者ssmtp)。

Global Configuration: Monit Daemon (全局配置:Monit守护进程)

接下来就该配置Monit守护进程了。可以将其设置成这样:

  • 在120秒后进行第一次检测。
  • 每3分钟检测一次服务。
  • 使用syslog来记录日志。

如下代码段可以满足上述需求。

set daemon 120
   with start delay 240
set logfile syslog facility log_daemon

我们必须定义“idfile”,Monit守护进程的一个独一无二的ID文件;以及“eventqueue”,当monit的邮件因为SMTP或者网络故障发不出去,邮件会暂存在这里;以及确保/var/monit路径是存在的。然后使用下边的配置就可以了。

set idfile /var/monit/id
set eventqueue
     basedir /var/monit

测试全局配置

现在“Global”部分就完成了。Monit配置文件看起来像这样:

#  Global Section

# status webpage and acl's
set httpd port 1966 and
     SSL ENABLE
     PEMFILE  /var/certs/monit.pem
     allow monituser:romania
     allow localhost
     allow 192.168.0.0/16
     allow myhost.mydomain.ro

# mail-server
set mailserver  smtp.monit.ro port 587
# email-format
set mail-format {
 from: [email protected]
 subject: $SERVICE $EVENT at $DATE on $HOST
 message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.

       Yours sincerely,
          Monit

  }

set alert [email protected]

# delay checks
set daemon 120
   with start delay 240
set logfile syslog facility log_daemon

# idfile and mail queue path
set idfile /var/monit/id
 set eventqueue
     basedir /var/monit

现在是时候验证我们的工作了,你可以通过运行如下命令来验证存在的配置文件(/etc/monit.conf):

# monit -t

Control file syntax OK

如果monit提示任何错误,请再检查下配置文件。幸运的是,错误/警告信息是可以帮助你发现问题的,比如:

monit: Cannot stat the SSL server PEM file '/var/certs/monit.pem' -- No such file or directory
/etc/monit/monitrc:10: Warning: hostname did not resolve 'smtp.monit.ro'

一旦你确认配置文件没问题了,可以启动monit守护进程,然后等2到3分钟:

# service monit start

如果你使用的是systemd,运行:

# systemctl start monit

现在打开一个浏览器窗口,然后访问https://<monit_host>:1966。将<monit_host>替换成Monit所在机器的机器名或者IP地址。

如果你使用的是自签名的SSL证书,你会在浏览器中看到一个警告信息。继续访问即可。

你完成登录后,就会看到这个页面。

在这个教程的其余部分,我们演示监控一个本地服务器和常见服务的方法。你会在官方wiki页面看到很多有用的例子。其中的多数是可以直接复制粘贴的!

Service Configuration: CPU/Memory Monitoring (服务配置:CPU、内存监控)

我们先来监控本地服务器的CPU、内存占用。复制如下代码段到配置文件中。

check system localhost
    if loadavg (1min) > 10 then alert
    if loadavg (5min) > 6 then alert
    if memory usage > 75% then alert
    if cpu usage (user) > 70% then alert
    if cpu usage (system) > 60% then alert
    if cpu usage (wait) > 75% then alert

你可以很容易理解上边的配置。最上边的check是指每个监控周期(全局配置里设置的120秒)都对本机进行下面的操作。如果满足了任何条件,monit守护进程就会使用邮件发送一条报警。

如果某个监控项不需要每个周期都检查,可以使用如下格式,它会每240秒检查一次平均负载。

if loadavg (1min) > 10 for 2 cycles then alert

Service Configuration: SSH Service Monitoring (服务配置:SSH服务监控)

先检查我们的sshd是否安装在/usr/sbin/sshd:

check file sshd_bin with path /usr/sbin/sshd

我们还想检查sshd的启动脚本是否存在:

check file sshd_init with path /etc/init.d/sshd

最后,我们还想检查sshd守护进程是否存活,并且在监听22端口:

check process sshd with pidfile /var/run/sshd.pid
   start program  "/etc/init.d/sshd start"
   stop program  "/etc/init.d/sshd stop"
   if failed port 22 protocol ssh then restart
   if 5 restarts within 5 cycles then timeout

我们可以这样解释上述配置:我们检查是否存在名为sshd的进程,并且有一个保存其pid的文件存在(/var/run/sshd.pid)。如果任何一个不存在,我们就使用启动脚本重启sshd。我们检查是否有进程在监听22端口,并且使用的是SSH协议。如果没有,我们还是重启sshd。如果在最近的5个监控周期(5x120秒)至少重启5次了,sshd就被认为是不能用的,我们就不再检查了。

Service Configuration: SMTP Service Monitoring (服务配置:SMTP服务监控)

现在我们来设置一个检查远程SMTP服务器(如192.168.111.102)的监控。假定SMTP服务器运行着SMTP、IMAP、SSH服务。

check host MAIL with address 192.168.111.102
   if failed icmp type echo within 10 cycles then alert
   if failed port 25  protocol smtp then alert
             else if recovered then exec "/scripts/mail-script"
   if failed port 22  protocol ssh  then alert
   if failed port 143 protocol imap then alert

我们检查远程主机是否响应ICMP协议。如果我们在10个周期内没有收到ICMP回应,就发送一条报警。如果监测到25端口上的SMTP协议是异常的,就发送一条报警。如果在一次监测失败后又监测成功了,就运行一个脚本(/scripts/mail-script)。如果检查22端口上的SSH或者143端口上的IMAP协议不正常,同样发送报警。

总结

在这个教程,我演示了如何在本地服务器设置Monit,当然这只是Monit功能的冰山一角。你可以花些时间阅读Monit的man手册(写得很好)。Monit可以为任何Linux系统管理员做很多事情,并且具有非常优美和易于理解的语法。如果你将一个集中式的远程监控系统和Monit一同使用,你会得到一个更可靠的监控系统。你感觉Monit怎么样?


via: http://xmodulo.com/server-monitoring-system-monit.html

作者:Iulian Murgulet 译者:goreliu 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

SIFT 是一个由 SANS 公司提供的基于 Ubuntu 的取证发行版。它包含许多取证工具,如 Sleuth kit/Autopsy 。但 Sleuth kit/Autopsy 可以直接在 Ubuntu 或 Fedora 发行版本上直接安装,而不必下载 SIFT 的整个发行版本。

Sleuth Kit/Autopsy 是一个开源的电子取证调查工具,它可以用于从磁盘映像中恢复丢失的文件,以及为了特殊事件进行磁盘映像分析。 Autopsy 工具是 sleuth kit 的一个网页接口,支持 sleuth kit 的所有功能。这个工具在 Windows 和 Linux 平台下都可获取到。

安装 Sleuth kit

首先,从 sleuthkit 的网站下载 Sleuth kit 软件。使用下面的命令在虚拟终端下使用 wget 命令来下载它,下图展示了这个过程。

# wget http://cznic.dl.sourceforge.net/project/sleuthkit/sleuthkit/4.1.3/sleuthkit-4.1.3.tar.gz

下载 Sleuth Kit

使用下面的命令解压 sleuthkit-4.1.3.tar.gz 并进入解压后的目录:

# tar -xvzf sleuthkit-4.1.3.tar.gz

解压过程

在安装 sleuth kit 之前,运行下面的命令来执行所需的检查:

# ./configure

configure

然后使用 Make 命令来编译 sleuth kit :

# make

make

最后,使用下面的命令将它安装到 /usr/local 目录下:

# make install

make install

安装 Autopsy 工具

Sleuth kit 已经安装完毕,现在我们将为它安装 autopsy 界面。从 sleuthkit 的 autopsy 页面下载 Autopsy 软件。使用下面的命令在虚拟终端下使用 wget 命令来下载它,下图展示了这个过程。

# wget http://kaz.dl.sourceforge.net/project/autopsy/autopsy/2.24/autopsy-2.24.tar.gz

Autpsy 的下载链接

使用下面的命令解压 autopsy-2.24.tar.gz 并进入解压后的目录:

# tar -xvzf autopsy-2.24.tar.gz

Autopsy 的解压

autopsy 的配置脚本将询问 NSRL (National Software Reference Library) 和 Evidence\_Locker 文件夹的路径。

当弹窗问及 NSRL 时,输入 "n",并在 /usr/local 目录下创建名为 EvidenceLocker 的文件夹。Autopsy 将在 EvidenceLocker 文件夹下存储配置文件,审计记录和输出文件。

# mkdir /usr/local/Evidence_Locker
# cd autopsy-2.24
# ./configure

Autopsy 配置脚本

在安装过程中添加完 Evidence\_Locker 的安装路径后, autopsy 在那里存储配置文件并展现如下的信息来运行 autopsy 程序。

启动 Autopsy

在虚拟终端中键入 ./autopsy 命令来启动 Sleuth kit 工具的图形界面:

Autopsy

在浏览器中键入下面的地址来访问 autopsy 的界面:

http://localhost:9999/autopsy

下图展现了 autopsy 插件的主页面:

主页

在 autopsy 工具中,点击 新案例 按钮来开始进行分析。键入案例名称,此次调查的描述和检查人的姓名,下图有具体的展示:

创建新事件

在接下来的网页中,将展示在上一个的网页中键入的详细信息。接着点击 增加主机 按钮来添加有关要分析的机器的详细信息。

增加主机

在下一个网页中键入主机名,相关的描述和要分析的机器的时区设置。

添加主机的详细信息

添加主机后,点击 增加映像 按钮来为取证分析添加映像文件。

添加映像

在接下来的网页中点击 增加映像文件 按钮。它将打开一个新的网页,来询问映像文件的路径和选择映像的类型以及导入的方法。

添加映像文件

正如下图中展示的那样,我们已经键入了 Linux 映像文件的路径。在我们这个例子中,映像文件类型是磁盘分区。

添加映像分区

点击“下一步”按钮并在下一页中选择 计算散列值 的选项,这在下图中有展示。它也将检测所给映像的文件系统类型。

映像和文件系统详情

下面的图片展示了静态分析之前映像文件的 MD5 散列值。

散列值

在下一个网页中, autopsy 展现了有关映像文件的如下信息:

  • 映像的挂载点
  • 映像的名称
  • 所给映像的文件系统类型

点击 详情 按钮来获取更多有关所给映像文件的信息。它还提供了从映像文件的卷中导出未分配的片段和字符串的数据信息,这在下图中有展现。

映像的详细信息

在下图中那样,点击 分析 按钮来开始分析所给映像。它将开启另一个页面,其中包含了映像分析的多个选项。

分析

在映像分析过程中,Autopsy 提供了如下的功能:

  • 文件分析
  • 关键字搜索
  • 文件类型
  • 映像详情
  • 数据单元

下图展示的是在给定的 Linux 分区映像上进行文件分析:

映像的分析

它将从所给映像中提取所有的文件和文件夹。在下图中也展示了已被删除的文件的提取:

已被删除的文件

结论

希望这篇文章能够给那些进入磁盘映像静态分析领域的新手提供帮助。Autopsy 是 sleuth kit 的网页界面,提供了在 Windows 和 Linux 磁盘映像中进行诸如字符串提取,恢复被删文件,时间线分析,网络浏览历史,关键字搜索和邮件分析等功能。


via: http://linoxide.com/ubuntu-how-to/autopsy-sleuth-kit-installation-ubuntu/

作者:nido 译者:FSSlc 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

在前面我们系列报道的两篇文章中,我们已经涵盖了关于‘ls’命令的绝大多数内容。本文时‘ls命令’系列的最后一部分。如果你还没有读过该系列的其它两篇文章,你可以访问下面的链接。

7 Quirky ls Command Tricks

7个ls命令独特技巧

1. 以各种时间格式附带时间戳列出目录中的内容

要以时间格式列出目录内容,我们需要选择以下两种方法中的任何一种。

# ls -l –time-style=[STYLE]               (方法 A)

注意 - 上面的开关--time的格式必须和-l开关同时使用,否则达不到目的。

# ls -full-time                           (方法 B)

可以用以下任何一个选项替换[STYLE]

full-iso
long-iso
iso
locale
+%H:%M:%S:%D

注意 - 在上面行中,H(时),M(分),S(秒),D(日)的顺序可以任意调整。此外,你只需选择那些相关的选项,而不是所有选项。例如,ls -l --time-style=+%H将只显示小时。ls -l --time-style=+%H:%M:%D将显示小时、分钟和日。

# ls -l --time-style=full-iso

ls Command Full Time Style

ls命令的完整 ISO时间格式

# ls -l --time-style=long-iso

Long Time Style Listing

长时间格式列表

# ls -l --time-style=iso

Time Style Listing

时间格式列表

# ls -l --time-style=locale

Locale Time Style Listing

本地时间格式列表

# ls -l --time-style=+%H:%M:%S:%D

Date and Time Style Listing

日期和时间格式列表

# ls --full-time

Full Style Time Listing

完整格式时间列表

2. 以多种格式列出目录内容,如以逗号分隔、水平格式、长格式、垂直格式、交叉格式等列出。

目录内容可以用以下建议的ls命令各种格式列出:

# ls --format=across        # 交叉
# ls --format=comma         # 逗号
# ls --format=horizontal    # 水平
# ls --format=long          # 长格式
# ls --format=single-column # 单栏
# ls --format=verbose       # 详情
# ls --format=vertical      # 垂直

Listing Formats of ls Command

ls命令的列出格式

3. 使用ls命令为目录内容输出结果添加像(/=@|)这样的指示符。

带有-F选项的ls命令将实现该目的。它会根据文件类型添加上面这些指示符其中之一。

# ls -F

Append Indicators to Content

添加指示符到内容

4. 根据扩展名、大小、时间和版本对目录内容排序。

我们可以使用--extension选项来按照扩展名对输出结果排序,--size扩展选项按照大小排序,-t扩展选项按照时间排序,-v扩展选项对版本排序。

我们也可以使用--none选项,它会以常规方式输出结果而不会进行排序。

# ls --sort=extension
# ls --sort=size
# ls --sort=time
# ls --sort=version
# ls --sort=none

Sort Listing of Content by Options

通过选项对内容排序列出

5. 使用ls命令打印目录中各个项的数字UID和GID。

上面的环境可以通过使用带有-n标识的ls命令来实现。

# ls -n

Print Listing of Content by UID and GID

通过UID和GID对打印内容列表

6. 标准输出结果中打印目录内容中比默认指定的更多栏目。

好吧,ls命令根据屏幕大小自动输出目录内容。

然而,我们可以手动分配屏幕宽度的值和出现的栏目的控制数。这可以通过使用‘--width’开关实现。

# ls --width 80
# ls --width 100
# ls --width 150

List Content Based on Window Sizes

根据窗口大小列出内容

注意: 你可以试验你可以给width标识传递什么值。

7. 通过ls命令为列出的目录内容手动指定的制表符大小而不是默认的8。

# ls --tabsize=[value]

List Content by Table Size

按表尺寸列出内容

注意: 指定[Value]的数值。

到目前为止,都讲完了。保持连线,我们会推出下一篇文章。别忘了在下面的评论中为我们提供有价值的反馈。为我们点赞并分享,帮我们推广。


via: http://www.tecmint.com/linux-ls-command-tricks/

作者:Avishek Kumar 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

BGP协议运行于TCP之上,因而,它也继承了TCP连接的所有漏洞。例如,在一个BGP会话内,攻击者可以冒充一个合法的BGP邻居,然后说服另一端的BGP路由器共享路由信息给攻击者。在攻击者通告并向邻居路由注入伪造的路由时,就会发生这个问题。毫无戒备的邻居路由器就会开始向攻击者发送通信实况,实际上这些信息并没有去向任何地方,仅仅只是被丢弃了。回到2008年,YouTube实际上也受害于这样的BGP路由中毒,并遭受了长达一个小时的视频服务大量中断。一个更加糟糕的情况是,如果攻击者是个足够懂行的人,他们可以伪装成一台透明路由器,然后嗅探经过的通信以获取敏感数据。你可以想象,这会造成深远的影响。

要保护活跃的BGP会话不受攻击,许多服务提供商在BGP会话中使用MD5校验和及预共享密钥。在受保护的BGP会话中,一台发送包的BGP路由器通过使用预共享的密钥生成MD5散列值、部分IP和TCP头以及有效载荷。然后,MD5散列作为一个TCP选项字段存储。在收到包后,接受路由器用同样的方法使用预共享密钥生成它的MD5版本。它会将它的MD5散列和接收到的某个包的值进行对比,以决定是否接受该包。对于一个攻击者而言,几乎不可能猜测到校验和或其密钥。对于BGP路由器而言,它们能在使用包的内容前确保每个包的合法性。

在本教程中,我们将为大家演示如何使用MD5校验和以及预共享密钥来加固两个邻居间的BGP会话的安全。

准备

加固BGP会话安全是相当简单而直截了当的,我们会使用以下路由器。

路由器名称AS 号IP地址
router-A10010.10.12.1/30
router-B20010.10.12.2/30

常用的Linux内核原生支持IPv4和IPv6的TCP MD5选项。因此,如果你从全新的Linux机器构建了一台Quagga路由器,TCP的MD5功能会自动启用。剩下来的事情,仅仅是配置Quagga以使用它的功能。但是,如果你使用的是FreeBSD机器或者为Quagga构建了一个自定义内核,请确保内核开启了TCP的MD5支持(如,Linux中的CONFIGTCPMD5SIG选项)。

配置Router-A验证功能

我们将使用Quagga的CLI Shell来配置路由器,我们将使用的唯一的一个新命令是‘password’。

[root@router-a ~]# vtysh
router-a# conf t
router-a(config)# router bgp 100
router-a(config-router)# network 192.168.100.0/24
router-a(config-router)# neighbor 10.10.12.2 remote-as 200
router-a(config-router)# neighbor 10.10.12.2 password xmodulo

本例中使用的预共享密钥是‘xmodulo’。很明显,在生产环境中,你需要选择一个更健壮的密钥。

注意: 在Quagga中,‘service password-encryption’命令被用做加密配置文件中所有明文密码(如,登录密码)。然而,当我使用该命令时,我注意到BGP配置中的预共享密钥仍然是明文的。我不确定这是否是Quagga的限制,还是版本自身的问题。

配置Router-B验证功能

我们将以类似的方式配置router-B。

[root@router-b ~]# vtysh
router-b# conf t
router-b(config)# router bgp 200
router-b(config-router)# network 192.168.200.0/24
router-b(config-router)# neighbor 10.10.12.1 remote-as 100
router-b(config-router)# neighbor 10.10.12.1 password xmodulo

验证BGP会话

如果一切配置正确,那么BGP会话就应该起来了,两台路由器应该能交换路由表。这时候,TCP会话中的所有流出包都会携带一个MD5摘要的包内容和一个密钥,而摘要信息会被另一端自动验证。

我们可以像平时一样通过查看BGP的概要来验证活跃的BGP会话。MD5校验和的验证在Quagga内部是透明的,因此,你在BGP级别是无法看到的。

如果你想要测试BGP验证,你可以配置一个邻居路由,设置其密码为空,或者故意使用错误的预共享密钥,然后查看发生了什么。你也可以使用包嗅探器,像tcpdump或者Wireshark等,来分析通过BGP会话的包。例如,带有“-M ”选项的tcpdump将验证TCP选项字段的MD5摘要。

小结

在本教程中,我们演示了怎样简单地加固两台路由间的BGP会话安全。相对于其它协议而言,配置过程非常简明。强烈推荐你加固BGP会话安全,尤其是当你用另一个AS配置BGP会话的时候。预共享密钥也应该安全地保存。


via: http://xmodulo.com/bgp-authentication-quagga.html

作者:Sarmed Rahman 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

有没有遇到过系统中的某个应用程序独占了你所有的网络带宽的情形?如果你有过这样的遭遇,那么你就会感受到Trickle这种带宽调整应用的价值。不管你是一个系统管理员还只是普通Linux用户,都需要学习如何控制应用程序的上下行速度,来确保你的网络带宽不会被某个程序霸占。

Install Trickle Bandwidth Limit in Linux

在 Linux 上安装 Trickle 带宽限制

什么是 Trickle?

Trickle是一个网络带宽调整工具,可以让我们管理应用程序的网络上下行速度,使得可以避免其中的某个应用程序霸占了全部或大部分可用的带宽。换句话说,Trickle可以让你基于单个应用程序来控制网络流量速率,而不是仅仅针对与单个用户——这是在客户端网络环境中经典的带宽调整情况。

Trickle 是如何工作的?

另外,trickle 可以帮助我们基于应用来定义优先级,所以当对整个系统进行了全局限制设定,高优先级的应用依然会自动地获取更多的带宽。为了实现这个目标,trickle 对 TCP 连接上的套接字的数据发送、接收设置流量限制。我们必须注意到,除了影响传输速率之外,在这个过程中,trickle任何时候都不会以任何方式来改变其中的数据。

Trickle不能做什么?

这么说吧,唯一的限制就是,trickle不支持静态链接的应用程序或者具有SUID或SGID位设置的二进制程序,因为它使用动态链接的方式将其载入到需要调整的进程和其关联的网络套接字之间。 Trickle此时会在这两种软件组件之间扮演代理的角色。

由于trickle并不需要超级用户的权限来运行,所以用户可以设置他们自己的流量限制。可能这并不是你想要的,我们会探索如何使用全局设定来限制系统中的所有用户的流量限制。也即是说,此时系统中的每个用户具有管理各自的流量速率,但是无论如何,都会受到系统管理员给他们设置的总体限制。

在这篇文章中,我们会描述如何通过trickle在linux平台上管理应用程序使用的网络带宽。为了生成所需的流量,在此会在客户端(CentOS 7 server – dev1: 192.168.0.17)上使用 ncftpput 和 ncftpget, 在服务器(Debian Wheezy 7.5 – dev2: 192.168.0.15)上使用vsftpd 来进行演示。 相同的指令也可以在RedHat,Fedora和Ubuntu等系统使用。

前提条件

  1. 对于 RHEL/CentOS 7/6, 开启EPEL仓库。这些用于企业版 Linux 的额外软件包是一个由Fedora项目维护的高质量、开源的软件仓库,而且百分之百与其衍生产品相兼容,如企业版本Linux和CentOS。 在这个仓库中trickle和ncftp两者都是可用的。
  2. 按照如下方式安装ncftp:
# yum update && sudo yum install ncftp      [基于 RedHat 的系统]
# aptitude update && aptitude install ncftp [基于 Debian 的系统]
  1. 在单独的服务器上设置一个FTP服务器。需要注意的是,尽管FTP天生就不安全,但是仍然被广泛应用在安全性无关紧要的文件上传下载中。 在这篇文章中我们使用它来演示trickle的优点,同时它也会在客户端的标准输出流中显示传输速率。我们将是否在其它时间使用它放在一边讨论。
# yum update && yum install vsftpd      [基于 RedHat 的系统]
# aptitude update && aptitude install vsftpd        [基于 Debian 的系统]

现在,在FTP服务器上按照以下方式编辑 /etc/vsftpd/vsftpd.conf 文件。

anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES

在此之后,确保在你的当前会话中启动了vsftpd,并在之后的启动中让其自动启动。

# systemctl start vsftpd        [基于 systemd 的系统]
# systemctl enable vsftpd
# service vsftpd start          [基于 init 的系统]
# chkconfig vsftpd on
  1. 如果你选择在一个使用 SSH 密钥进行远程访问的 CentOS/RHEL 7中搭建FTP服务器,你需要一个密码受保护的用户账户,它能访问root目录之外的某个目录,并有能在其中上传和下载文件的权限。

你可以通过在你的浏览器中输入以下的URL来浏览你的家目录。一个登录窗口会弹出来提示你输入FTP服务器中的有效的用户名和密码。

ftp://192.168.0.15

如果验证成功,你就会看到你的家目录中的内容。该教程的稍后部分中,你将可以刷新页面来显示在你之前上传过的文件。

FTP Directory Tree

FTP 目录树

如何在Linux中安装 trickle

  1. 通过yum或aptitude来安装trickle.

为了确保能够成功安装,最好在安装工具之前,保证当前的安装包是最新的版本。

# yum -y update && yum install trickle              [基于 RedHat 的系统]
# aptitude -y update && aptitude install trickle        [基于 Debian 的系统]
  1. 确认trickle是否对特定的二进制包有用。

之前我们解释过,trickle只对使用动态或共享的库的二进制包有用。为了确认我们是否可以对某个特定的应用使用trickle,我们可以使用著名的ldd(列出动态依赖)工具。 特别地,我们会查看任何给定程序的动态依赖中其当前使用的glibc,因为其准确地定义了通过套接字通讯所使用的系统调用。

对一个给定的二进制包执行以下命令来查看是否能对其使用trickle进行带宽调整:

# ldd $(which [binary]) | grep libc.so

例如,

# ldd $(which ncftp) | grep libc.so

其输出是:

# libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)

输出中的括号中的字符可能在不同的系统平台有所不同,甚至相同的命令在不同的时候运行也会不同,因为其代表包加载到物理内存中的地址。

如果上面的命令没有返回任何的结果,就说明这个二进制包没有使用libc包,因此trickle对其不能起到带宽调整的作用。

学习如何使用Trickle

最基本的用法就是使用其独立模式,通过这种方式,trickle用来显式地定义给定应用程序的上传下载速率。如前所述,为了简单,我们会使用相同的应用来进行上传下载测试。

在独立模式下运行trickle

我们会比较在有无trickle的情况下的上传下载速率, ‘-d’选项指示下载速率(KB/s单位),而'-u'选项指示相同单位的上传速率。另外我们会使用到‘-s’选项来指定trickle应该以独立模式运行。

以独立模式运行trickle的基本语法如下:

# trickle -s -d [下载速率,KB/s] -u [上传速率,KB/s]

为了能够让你自己运行以下样例,确保你在自己的客户端安装了trickle和ncftp(我的是192.168.0.17)。

样例1:在有无trickle的情况下上传一个2.8 MB的PDF文件。

我们使用一个自由发布的LInux基础知识PDF文件来进行下面的测试。

你可以首先使用下面的命令将这个文件下载到你当前的工作目录中:

# wget http://linux-training.be/files/books/LinuxFun.pdf

下面是在没有trickle的情况下将一个文件上传到我们的FTP服务器的语法:

# ncftpput -u username -p password 192.168.0.15  /remote_directory local-filename

其中的 /remote\_directory 是相对于该用户的家目录的上传路径,而local-filename是一个你当前工作目录中的文件。

特别的是,在没有trickle的情形下,我们可以得到上传峰值速率52.02MB/s(请注意,这个不是真正的平均上传速率,而是峰值开始的瞬时值),而且这个文件几乎在瞬间就完成了上传。

# ncftpput -u username -p password 192.168.0.15  /testdir LinuxFun.pdf

输出:

LinuxFun.pdf:                                           2.79 MB   52.02 MB/s

在使用trickle的情况下,我们会限制上传速率在5KB/s。在第二次上传文件之前,我们需要在目标目录中删除这个文件,否则ncftp就会通知我们在目标目录中已经存在了与上传文件相同的文件,从而不会执行文件的传输:

# rm /absolute/path/to/destination/directory/LinuxFun.pdf

然后:

# trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf

输出:

LinuxFun.pdf:                                           2.79 MB 4.94 kB/s

在上面的样例中,我们看到平均的上传速率下降到了5KB/s。

样例2:在有无trickle的情况下下载相同的2.8MB的PDF文件

首先,记得从原来的源目录中删除这个PDF:

# rm /absolute/path/to/source/directory/LinuxFun.pdf

请注意,下面的样例中将远程的文件下载到客户端机器的当前目录下,这是由FTP服务器的IP地址后面的“.”决定的。

没有trickle的情况下:

# ncftpget -u username -p  password 111.111.111.111 . /testdir/LinuxFun.pdf

输出:

LinuxFun.pdf:                                           2.79 MB  260.53 MB/s

在有trickle的情况下,限制下载速率在20KB/s:

# trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf

输出:

LinuxFun.pdf:                                           2.79 MB   17.76 kB/s

在监督[非托管]模式下运行Trickle

trickle也可以按照/etc/trickled.conf文件中定义的一系列参数运行在非托管模式下。 这个文件定义了守护线程 trickled的行为以及如何管理trickle。

另外,如果你想要全局设置被所有的应用程序使用的话,我们就会需要使用trickle命令。 这个命令运行守护进程,并允许我们通过trickle定义所有应用程序共享的上传下载限制,不需要我们每次来进行指定。

例如,运行:

# trickled -d 50 -u 10

会导致任何通过trickle运行的应用程序的上传下载速率分别限制在30kb/s和10kb/s。

请注意,你可以在任何时间都能确认守护线程trickled是否正在运行以及其运行参数:

# ps -ef | grep trickled | grep -v grep

输出:

root    16475   1  0 Dec24 ?        00:00:04 trickled -d 50 -u 10

样例3:在使用/不使用trickle的情形下上传一个 19MB 的mp4文件到我们的FTP服务器。

在这个样例中,我们会使用“He is the gift”的自由分发视频,可以通过这个链接下载。

我们将会在开始时通过以下的命令将这个文件下载到你的当前工作目录中:

# wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4

首先,我们会使用之前列出的命令来开启守护进程trickled:

# trickled -d 30 -u 10

在不使用trickle时:

# ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB   36.31 MB/s

在使用trickle时:

# trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB    9.51 kB/s

我们可以看到上面的输出,上传的速率下降到了约 10KB/s。

** 样例4:在使用/不使用trickle的情形下下载这个相同的视频 **

与样例2一样,我们会将该文件下载到当前工作目录中。

在没有trickle时:

# ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB  108.34 MB/s

有trickle的时:

# trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4

输出:

2014-00-1460-he-is-the-gift-360p-eng.mp4:               18.53 MB   29.28 kB/s

上面的结果与我们之前设置的下载限速相对应(30KB/s)。

注意: 一旦守护进程开启之后,就没有必要使用trickle来为每个应用程序来单独设置限制。

如前所述,人们可以进一步地通过trickled.conf来客制化trickle的带宽速率调整,该文件的一个典型的分段有以下部分组成:

[service]
Priority = <value>
Time-Smoothing = <value>
Length-Smoothing = <value>

其中,

  • [service] 用来指示我们想要对其进行带宽使用调整的应用程序名称
  • Priority 用来让我们为某个服务制定一个相对于其他服务高的优先级,这样就不允许守护进程管理中的一个单独的应用程序来占用所有的带宽。越小的数字代表更高的优先级。
  • Time-Smoothing [以秒计]: 定义了trickled让各个应用程序传输或接收数据的时间间隔。小的间隔值(0.1-1秒)对于交互式应用程序是理想的,因为这样会具有一个更加平滑的会话体验,而一个相对较大的时间间隔值(1-10秒)对于需要批量传输应用程序就会显得更好。如果没有指定该值,默认是5秒。
  • Length-smoothing [KB 单位]: 该想法与Time-Smoothing如出一辙,但是是基于I/O操作而言。如果没有指定值,会使用默认的10KB。

上述平滑值(Time-Smoothing、 Length-smoothing)的改变会被翻译为将指定的服务的使用一个间隔值而不是一个固定值。不幸的是,没有一个特定的公式来计算间隔值的上下限,主要依赖于特定的应用场景。

下面是一个在CentOS 7 客户端中的trickled.conf 样例文件(192.168.0.17):

[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2

[ftp]
Priority = 2
Time-Smoothing = 1
Length-Smoothing = 3

使用该设置,trickled会为SSH赋予比FTP较高的传输优先级。值得注意的是,一个交互进程,例如SSH,使用了一个较小的时间间隔值,然而一个处理批量数据传输的服务如FTP,则使用一个较大的时间间隔来控制之前的样例中的上传下载速率,尽管不是百分百的由trickled指定的值,但是也已经非常接近了。

总结

在该文章中,我们探索了使用trickle在基于Fedora发行版和Debian衍生版平台上来限制应用程序的带宽使用。也包含了其他的可能用法,但是不对以下情形进行限制:

  • 限制系统工具的下载速度,例如wget,或 BT客户端.
  • 限制你的系统的包管理工具yum更新的速度 (如果是基于Debian系统的话,其包管理工具为aptitude)。
  • 如果你的服务器是在一个代理或防火墙后面(或者其本身即是代理或防火墙的话),你可以使用trickle来同时设定下载和上传速率,或者客户端或外部通讯的速率。

欢迎提问或留言。


via: http://www.tecmint.com/manage-and-limit-downloadupload-bandwidth-with-trickle-in-linux/

作者:Gabriel Cánepa 译者:theo-l 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

新出现在Ubuntu 15.04中的一个软件包解决了我对Unity 欢迎屏的微词:像Cinnamon这样的其它Linux桌面会话没有徽章图标。

我知道这有点吹毛求疵了;这只是对大多数人而言几乎毫无影响的视觉瑕疵罢了。但是这种不一致性时时刻刻缠绕着我,让我不胜其烦,因为Ubuntu的一些会话带有徽章图标,包括Unity、GNOME和KDE。而剩下的其它桌面环境,包括它自己的一些旁系产品,像Xubuntu,只会在会话切换列表和主用户界面显示了一个不能再简单的白点。

这些点点们造成的这种不一致性刺激着我的神经,即使它只是稍纵即逝,但这种刺激不仅仅来自设计,也来自可用性方面。标牌式的标志符号对于让我们知道我们即将登陆到哪个会话很有帮助。

例如,你能告诉我们这个是个什么会话呢?

Budgie? 也许是 MATE? 也能是 Cinnamon……我必须点开它才能知道。

没有必要这样做啊。构建Unity Greeter,就是为了让桌面环境开发者能够部署徽章到欢迎屏幕中(有些确实这样做了)。但在许多情况下,像MATE,它的包来自上游的Debian,想要移植一个“Ubuntu专用的补丁包”不太可取,也不太可能。

一个解决方案出炉了

一位有经验的Debian维护者Doug Torrance有了修复该可用性瑕疵的解决方案。与其依赖桌面制造者自己来添加品牌式徽章到他们的包中,与其给Ubuntu增加维护它的责任重担,Torrance还不如自己创建了一个独立的‘unity-greeter-badges’包来收容它们。

承担起了直接提供会话标志的假定责任后,该包确保能同时迎合新旧窗口管理器、会话和桌面。

在30个左右的桌面环境列表中,它为以下桌面捆绑了新的会话徽章:

  • Xubuntu
  • Cinnamon
  • MATE
  • Cairo-Dock
  • Xmonad
  • Awesome
  • OpenBox
  • Pantheon

最重要的是,‘Unity-Greeter-Badges’已经被Ubuntu 15.04收录进去。这就意味着Torrance的包将可以直接安装,不需要PPA,也不需要下载。没有像Unity Greeter一样成为核心包的一部分,它可以以更高效和更及时的方式更新新的图标。

如果你真运行着Ubuntu 15.04,在不久的将来,你就可以从软件中心获取并安装该包了。

不想等到15.04?Torrance已经为Ubuntu 14.04和Ubuntu 14.10用户做了个.deb安装器。


via: http://www.omgubuntu.co.uk/2015/01/unity-greeter-badges-brings-missing-session-icons-ubuntu-login-screen

作者:Joey-Elijah Sneddon 译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出