本文是一篇关于 Debian 中安装和配置 tripewire 的文章。它是 Linux 环境下基于主机的入侵检测系统（IDS）。tripwire 的高级功能可以检测并报告任何 Linux 中未授权的（文件和目录）的更改。tripewire 安装之后，会先创建一个基本的数据库，tripewire 监控并检测新文件的创建修改和谁修改了它等等。如果修改是合法的，你可以接受修改并更新 tripwire 的数据库。安装和配置tripwire 在 Debian VM 中的安装如下。# apt-get install tripwire 安装中，tripwire 会有下面的配置提示。站点密钥创建tripwire 需要一个站点口令（site passphrase）来加密 tripwire 的配置文件 tw.cfg 和策略文件 tw.pol。tripewire 使用指定的密码加密两个文件。一个 tripewire 实例必须指定站点口令。本地密钥口令本地口令用来保护 tripwire 数据库和报告文件。本地密钥用于阻止非授权的 tripewire 数据库修改。tripwire 配置路径tripewire 配置存储在 /etc/tripwire/twcfg.txt。它用于生成加密的配置文件 tw.cfg。tripwire 策略路径tripwire 在 /etc/tripwire/twpol.txt 中保存策略文件。它用于生成加密的策略文件 tw.pol。安装完成后如下图所示。tripwire 配置文件 (twcfg.txt)tripewire 配置文件（twcfg.txt）细节如下图所示。加密策略文件（tw.pol）、站点密钥（site.key）和本地密钥（hostname-local.key）在后面展示。ROOT =/usr/sbin POLFILE =/etc/tripwire/tw.pol DBFILE =/var/lib/tripwire/$(HOSTNAME).twd REPORTFILE =/var/lib/tripwire/report/$(HOSTNAME)-$(DATE).twr SITEKEYFILE =/etc/tripwire/site.key LOCALKEYFILE =/etc/tripwire/$(HOSTNAME)-local.key EDITOR =/usr/bin/editor LATEPROMPTING =false LOOSEDIRECTORYCHECKING =false MAILNOVIOLATIONS =true EMAILREPORTLEVEL =3 REPORTLEVEL =3 SYSLOGREPORTING =true MAILMETHOD =SMTP SMTPHOST =localhost SMTPPORT =25 TEMPDIRECTORY =/tmp tripwire 策略配置在生成基础数据库之前先配置 tripwire 配置。有必要经用一些策略如 /dev、 /proc 、/root/mail 等。详细的 twpol.txt 策略文件如下所示。@@section GLOBAL TWBIN = /usr/sbin; TWETC = /etc/tripwire; TWVAR = /var/lib/tripwire; # # File System Definitions # @@section FS # # First, some variables to make configuration easier # SEC_CRIT = $(IgnoreNone)-SHa ; # Critical files that cannot change SEC_BIN = $(ReadOnly) ; # Binaries that should not change SEC_CONFIG = $(Dynamic) ; # Config files that are changed # infrequently but accessed # often SEC_LOG = $(Growing) ; # Files that grow, but that # should never change ownership SEC_INVARIANT = +tpug ; # Directories that should never # change permission or ownership SIG_LOW = 33 ; # Non-critical files that are of # minimal security impact SIG_MED = 66 ; # Non-critical files that are of # significant security impact SIG_HI = 100 ; # Critical files that are # significant points of # vulnerability # # tripwire Binaries # ( rulename = "tripwire Binaries", severity = $(SIG_HI) ) { $(TWBIN)/siggen -> $(SEC_BIN) ; $(TWBIN)/tripwire -> $(SEC_BIN) ; $(TWBIN)/twadmin -> $(SEC_BIN) ; $(TWBIN)/twprint -> $(SEC_BIN) ; } { /boot -> $(SEC_CRIT) ; /lib/modules -> $(SEC_CRIT) ; } ( rulename = "Boot Scripts", severity = $(SIG_HI) ) { /etc/init.d -> $(SEC_BIN) ; #/etc/rc.boot -> $(SEC_BIN) ; /etc/rcS.d -> $(SEC_BIN) ; /etc/rc0.d -> $(SEC_BIN) ; /etc/rc1.d -> $(SEC_BIN) ; /etc/rc2.d -> $(SEC_BIN) ; /etc/rc3.d -> $(SEC_BIN) ; /etc/rc4.d -> $(SEC_BIN) ; /etc/rc5.d -> $(SEC_BIN) ; /etc/rc6.d -> $(SEC_BIN) ; } ( rulename = "Root file-system executables", severity = $(SIG_HI) ) { /bin -> $(SEC_BIN) ; /sbin -> $(SEC_BIN) ; } # # Critical Libraries # ( rulename = "Root file-system libraries", severity = $(SIG_HI) ) { /lib -> $(SEC_BIN) ; } # # Login and Privilege Raising Programs # ( rulename = "Security Control", severity = $(SIG_MED) ) { /etc/passwd -> $(SEC_CONFIG) ; /etc/shadow -> $(SEC_CONFIG) ; } { #/var/lock -> $(SEC_CONFIG) ; #/var/run -> $(SEC_CONFIG) ; # daemon PIDs /var/log -> $(SEC_CONFIG) ; } # These files change the behavior of the root account ( rulename = "Root config files", severity = 100 ) { /root -> $(SEC_CRIT) ; # Catch all additions to /root #/root/mail -> $(SEC_CONFIG) ; #/root/Mail -> $(SEC_CONFIG) ; /root/.xsession-errors -> $(SEC_CONFIG) ; #/root/.xauth -> $(SEC_CONFIG) ; #/root/.tcshrc -> $(SEC_CONFIG) ; #/root/.sawfish -> $(SEC_CONFIG) ; #/root/.pinerc -> $(SEC_CONFIG) ; #/root/.mc -> $(SEC_CONFIG) ; #/root/.gnome_private -> $(SEC_CONFIG) ; #/root/.gnome-desktop -> $(SEC_CONFIG) ; #/root/.gnome -> $(SEC_CONFIG) ; #/root/.esd_auth -> $(SEC_CONFIG) ; # /root/.elm -> $(SEC_CONFIG) ; #/root/.cshrc -> $(SEC_CONFIG) ; #/root/.bashrc -> $(SEC_CONFIG) ; #/root/.bash_profile -> $(SEC_CONFIG) ; # /root/.bash_logout -> $(SEC_CONFIG) ; #/root/.bash_history -> $(SEC_CONFIG) ; #/root/.amandahosts -> $(SEC_CONFIG) ; #/root/.addressbook.lu -> $(SEC_CONFIG) ; #/root/.addressbook -> $(SEC_CONFIG) ; #/root/.Xresources -> $(SEC_CONFIG) ; #/root/.Xauthority -> $(SEC_CONFIG) -i ; # Changes Inode number on login /root/.ICEauthority -> $(SEC_CONFIG) ; } # # Critical devices # ( rulename = "Devices & Kernel information", severity = $(SIG_HI), ) { #/dev -> $(Device) ; #/proc -> $(Device) ; } tripwire 报告tripwire-check 命令检查 twpol.txt 文件并基于此文件生成 tripwire 报告如下。如果 twpol.txt 中有任何错误，tripwire 不会生成报告。文本形式报告root@VMdebian:/home/labadmin# tripwire --check Parsing policy file: /etc/tripwire/tw.pol *** Processing Unix File System *** Performing integrity check... Wrote report file: /var/lib/tripwire/report/VMdebian-20151024-122322.twr Open Source tripwire(R) 2.4.2.2 Integrity Check Report Report generated by: root Report created on: Sat Oct 24 12:23:22 2015 Database last updated on: Never Report Summary: ========================================================= Host name: VMdebian Host IP address: 127.0.1.1 Host ID: None Policy file used: /etc/tripwire/tw.pol Configuration file used: /etc/tripwire/tw.cfg Database file used: /var/lib/tripwire/VMdebian.twd Command line used: tripwire --check ========================================================= Rule Summary: ========================================================= ------------------------------------------------------------------------------- Section: Unix File System ------------------------------------------------------------------------------- Rule Name Severity Level Added Removed Modified --------- -------------- ----- ------- -------- Other binaries 66 0 0 0 tripwire Binaries 100 0 0 0 Other libraries 66 0 0 0 Root file-system executables 100 0 0 0 tripwire Data Files 100 0 0 0 System boot changes 100 0 0 0 (/var/log) Root file-system libraries 100 0 0 0 (/lib) Critical system boot files 100 0 0 0 Other configuration files 66 0 0 0 (/etc) Boot Scripts 100 0 0 0 Security Control 66 0 0 0 Root config files 100 0 0 0 Invariant Directories 66 0 0 0 Total objects scanned: 25943 Total violations found: 0 =========================Object Summary:================================ ------------------------------------------------------------------------------- # Section: Unix File System ------------------------------------------------------------------------------- No violations. ===========================Error Report:===================================== No Errors ------------------------------------------------------------------------------- *** End of report *** Open Source tripwire 2.4 Portions copyright 2000 tripwire, Inc. tripwire is a registered trademark of tripwire, Inc. This software comes with ABSOLUTELY NO WARRANTY; for details use --version. This is free software which may be redistributed or modified only under certain conditions; see COPYING for details. All rights reserved. Integrity check complete. 总结本篇中，我们学习安装配置开源入侵检测软件 tripwire。首先生成基础数据库并通过比较检测出任何改动（文件/文件夹）。然而，tripwire 并不是实时监测的 IDS。via: http://linoxide.com/security/configure-tripwire-ids-debian/作者：nido 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
对于网络安全而言入侵检测是一件非常重要的事。入侵检测系统（IDS）用于检测网络中非法与恶意的请求。Snort是一款知名的开源的入侵检测系统。其 Web界面（Snorby）可以用于更好地分析警告。Snort使用iptables/pf防火墙来作为入侵检测系统。本篇中，我们会安装并配置一个开源的入侵检测系统snort。Snort 安装要求snort所使用的数据采集库（DAQ）用于一个调用包捕获库的抽象层。这个在snort上就有。下载过程如下截图所示。解压并运行./configure、make、make install来安装DAQ。然而，DAQ要求其他的工具，因此，./configure脚本会生成下面的错误。flex和bison错误libpcap错误因此在安装DAQ之前先安装flex/bison和libcap。如下所示安装libpcap开发库安装完必要的工具后，再次运行./configure脚本，将会显示下面的输出。make和make install 命令的结果如下所示。成功安装DAQ之后，我们现在安装snort。如下图使用wget下载它。使用下面的命令解压安装包。#tar -xvzf snort-2.9.7.3.tar.gz 创建安装目录并在脚本中设置prefix参数。同样也建议启用包性能监控（PPM）的sourcefire标志。#mkdir /usr/local/snort #./configure --prefix=/usr/local/snort/ --enable-sourcefire 配置脚本会由于缺少libpcre-dev、libdumbnet-dev 和zlib开发库而报错。配置脚本由于缺少libpcre库报错。配置脚本由于缺少dnet（libdumbnet）库而报错。配置脚本由于缺少zlib库而报错如下所示，安装所有需要的开发库。# aptitude install libpcre3-dev # aptitude install libdumbnet-dev # aptitude install zlib1g-dev 安装完snort需要的库之后，再次运行配置脚本就不会报错了。运行make和make install命令在/usr/local/snort目录下完成安装。# make # make install 最后，从/usr/local/snort/bin中运行snort。现在它对eth0的所有流量都处在promisc模式（包转储模式）。如下图所示snort转储流量。Snort的规则和配置从源码安装的snort还需要设置规则和配置，因此我们需要复制规则和配置到/etc/snort下面。我们已经创建了单独的bash脚本来用于设置规则和配置。它会设置下面这些snort设置。在linux中创建用于snort IDS服务的snort用户。在/etc下面创建snort的配置文件和文件夹。权限设置并从源代码的etc目录中复制数据。从snort文件中移除规则中的#(注释符号)。#!/bin/bash# # snort源代码的路径 snort_src="/home/test/Downloads/snort-2.9.7.3" echo "adding group and user for snort..." groupadd snort &> /dev/null useradd snort -r -s /sbin/nologin -d /var/log/snort -c snort_idps -g snort &> /dev/null#snort configuration echo "Configuring snort..."mkdir -p /etc/snort mkdir -p /etc/snort/rules touch /etc/snort/rules/black_list.rules touch /etc/snort/rules/white_list.rules touch /etc/snort/rules/local.rules mkdir /etc/snort/preproc_rules mkdir /var/log/snort mkdir -p /usr/local/lib/snort_dynamicrules chmod -R 775 /etc/snort chmod -R 775 /var/log/snort chmod -R 775 /usr/local/lib/snort_dynamicrules chown -R snort:snort /etc/snort chown -R snort:snort /var/log/snort chown -R snort:snort /usr/local/lib/snort_dynamicrules ###copy configuration and rules from etc directory under source code of snort echo "copying from snort source to /etc/snort ....." echo $snort_src echo "-------------" cp $snort_src/etc/*.conf* /etc/snort cp $snort_src/etc/*.map /etc/snort##enable rules sed -i 's/include \$RULE\_PATH/#include \$RULE\_PATH/' /etc/snort/snort.conf echo "---DONE---" 改变脚本中的snort源目录路径并运行。下面是成功的输出。上面的脚本从snort源中复制下面的文件和文件夹到/etc/snort配置文件中snort的配置非常复杂，要让IDS能正常工作需要进行下面必要的修改。ipvar HOME_NET 192.168.1.0/24 # LAN side ipvar EXTERNAL_NET !$HOME_NET # WAN side var RULE_PATH /etc/snort/rules # snort signature path var SO_RULE_PATH /etc/snort/so_rules #rules in shared libraries var PREPROC_RULE_PATH /etc/snort/preproc_rules # Preproces path var WHITE_LIST_PATH /etc/snort/rules # dont scan var BLACK_LIST_PATH /etc/snort/rules # Must scan include $RULE_PATH/local.rules # file for custom rules 移除ftp.rules、exploit.rules前面的注释符号(#)。现在下载社区规则并解压到/etc/snort/rules。启用snort.conf中的社区及紧急威胁规则。进行了上面的更改后，运行下面的命令来检验配置文件。# snort -T -c /etc/snort/snort.conf 总结本篇中，我们关注了开源IDPS系统snort在Ubuntu上的安装和配置。通常它用于监控事件，然而它可以被配置成用于网络保护的在线模式。snort规则可以在离线模式中可以使用pcap捕获文件进行测试和分析via: http://linoxide.com/security/install-snort-usage-ubuntu-15-04/作者：nido 译者：geekpi 校对：wxy本文由 LCTT 原创翻译，Linux中国 荣誉推出
Sleuth Kit：一个用来分析磁盘映像和恢复文件的开源取证工具
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 使用下面的命令解压 sleuthkit-4.1.3.tar.gz 并进入解压后的目录：# tar -xvzf sleuthkit-4.1.3.tar.gz 在安装 sleuth kit 之前，运行下面的命令来执行所需的检查：# ./configure 然后使用 Make 命令来编译 sleuth kit ：# make 最后，使用下面的命令将它安装到 /usr/local 目录下：# 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 使用下面的命令解压 autopsy-2.24.tar.gz 并进入解压后的目录：# tar -xvzf autopsy-2.24.tar.gz 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 在安装过程中添加完 Evidence\_Locker 的安装路径后， autopsy 在那里存储配置文件并展现如下的信息来运行 autopsy 程序。在虚拟终端中键入 ./autopsy 命令来启动 Sleuth kit 工具的图形界面：在浏览器中键入下面的地址来访问 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中国 荣誉推出
这是一款提取网站数据的开源工具。Scrapy框架用Python开发而成，它使抓取工作又快又简单，且可扩展。我们已经在virtual box中创建一台虚拟机（VM）并且在上面安装了Ubuntu 14.04 LTS。安装 ScrapyScrapy依赖于Python、开发库和pip。Python最新的版本已经在Ubuntu上预装了。因此我们在安装Scrapy之前只需安装pip和python开发库就可以了。pip是作为python包索引器easy\_install的替代品，用于安装和管理Python包。pip包的安装可见图 1。sudo apt-get install python-pip 图:1 pip安装我们必须要用下面的命令安装python开发库。如果包没有安装那么就会在安装scrapy框架的时候报关于python.h头文件的错误。sudo apt-get install python-dev 图:2 Python 开发库scrapy框架既可从deb包安装也可以从源码安装。在图3中我们用pip（Python 包管理器）安装了deb包了。sudo pip install scrapy 图:3 Scrapy 安装图4中scrapy的成功安装需要一些时间。图:4 成功安装Scrapy框架使用scrapy框架提取数据基础教程我们将用scrapy从fatwallet.com上提取商店名称（卖卡的店）。首先，我们使用下面的命令新建一个scrapy项目“store name”， 见图5。$sudo scrapy startproject store_name 图:5 Scrapy框架新建项目上面的命令在当前路径创建了一个“store\_name”的目录。项目主目录下包含的文件/文件夹见图6。$sudo ls –lR store_name 图:6 store\_name项目的内容每个文件/文件夹的概要如下：scrapy.cfg 是项目配置文件store\_name/ 主目录下的另一个文件夹。 这个目录包含了项目的python代码store\_name/items.py 包含了将由蜘蛛爬取的项目store\_name/pipelines.py 是管道文件store\_name/settings.py 是项目的配置文件store\_name/spiders/， 包含了用于爬取的蜘蛛由于我们要从fatwallet.com上如提取店名，因此我们如下修改文件（LCTT 译注：这里没说明是哪个文件，译者认为应该是 items.py）。import scrapy class StoreNameItem(scrapy.Item): name = scrapy.Field() # 取出卡片商店的名称 之后我们要在项目的store\_name/spiders/文件夹下写一个新的蜘蛛。蜘蛛是一个python类，它包含了下面几个必须的属性：蜘蛛名 (name )爬取起点url (start\_urls)包含了从响应中提取需要内容相应的正则表达式的解析方法。解析方法对爬虫而言很重要。我们在storename/spiders/目录下创建了“storename.py”爬虫，并添加如下的代码来从fatwallet.com上提取店名。爬虫的输出写到文件（StoreName.txt）中，见图7。from scrapy.selector import Selector from scrapy.spider import BaseSpider from scrapy.http import Request from scrapy.http import FormRequest import re class StoreNameItem(BaseSpider): name = "storename" allowed_domains = ["fatwallet.com"] start_urls = ["http://fatwallet.com/cash-back-shopping/"] def parse(self,response): output = open('StoreName.txt','w') resp = Selector(response) tags = resp.xpath('//tr[@class="storeListRow"]|\ //tr[@class="storeListRow even"]|\ //tr[@class="storeListRow even last"]|\ //tr[@class="storeListRow last"]').extract() for i in tags: i = i.encode('utf-8', 'ignore').strip() store_name = '' if re.search(r"class=\"storeListStoreName\">.*?<",i,re.I|re.S): store_name = re.search(r"class=\"storeListStoreName\">.*?<",i,re.I|re.S).group() store_name = re.search(r">.*?<",store_name,re.I|re.S).group() store_name = re.sub(r'>',"",re.sub(r'<',"",store_name,re.I)) store_name = re.sub(r'&',"&",re.sub(r'&',"&",store_name,re.I)) #print store_name output.write(store_name+""+"\n") 图:7 爬虫的输出注意: 本教程的目的仅用于理解scrapy框架via: http://linoxide.com/ubuntu-how-to/scrapy-install-ubuntu/作者：nido 译者：geekpi 校对：wxy本文由 LCTT 原创翻译，Linux中国 荣誉推出