在Debian上,如何配置Snort
杨和超
・13 分钟阅读
Snort是一个免费的网络入侵检测系统(IDS)。目前,snort有针对Fedora,CentOS,FreeBSD和基于windows的系统的包,操作系统之间的确切安装方法不同。在本教程中,我们将直接从Snort的源代码安装,本指南是为Debian编写的。
更新,升级和重新启动
在我们实际获得Snort源之前,我们需要确保我们的系统是最新的,我们可以通过以下命令来执行这个操作。
sudo apt-get update
sudo apt-get upgrade -y
sudo reboot
预安装配置
一旦你的系统重新启动,我们需要安装一些软件包,以确保我们可以安装SBPP ,
sudo apt-get install flex bison build-essential checkinstall libpcap-dev libnet1-dev libpcre3-dev libnetfilter-queue-dev iptables-dev libdumbnet-dev zlib1g-dev -y
一旦安装了所有软件包,你就需要为源文件创建一个临时目录,我将使用/usr/src/snort_src
要创建此文件夹,你需要以root
用户身份登录,或者拥有sudo
权限- root
只是让它变得更容易。
sudo mkdir /usr/src/snort_src
cd /usr/src/snort_src
安装数据采集库(DAQ )
在获取Snort源代码之前,先安装DAQ ,安装是简单的。
wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz
从归档文件中提取文件。
tar xvfz daq-2.0.6.tar.gz
更改为DAQ目录。
cd daq-2.0.6
配置和安装DAQ 。
./configure; make; sudo make install
最后一行,将首先执行./configure
,然后它将执行make
,最后,它将执行make install
,我们在这里使用较短的语法只是为了节省一点时间。
安装Snort
我们想确保我们再次在/usr/src/snort_src
目录中,所以,请确保以下列目录更改为:
cd /usr/src/snort_src
现在我们已经在源目录中了,我们将下载源代码的tar.gz
文件,在撰写本文时,Snort的最新版本是2.9.8.0
。
wget https://www.snort.org/downloads/snort/snort-2.9.8.0.tar.gz
实际安装snort的命令与用于DAQ的命令非常类似,但是它们有不同的选项。
提取Snort源文件。
tar xvfz snort-2.9.8.0.tar.gz
更改到源目录。
cd snort-2.9.8.0
配置和安装源。
./configure --enable-sourcefire; make; sudo make install
Snort安装后
安装Snort之后,我们需要确保共享库是最新的,我们可以使用以下命令执行这个操作:
sudo ldconfig
完成该操作后,测试你的Snort安装:
snort --version
如果此命令不起作用,你需要创建一个符号链接,你可以通过键入以下内容来完成这个操作:
sudo ln -s /usr/local/bin/snort /usr/sbin/snort
snort --version
生成的输出将类似于以下内容:
,,_ -*> Snort! <*-
o" )~ Version 2.9.7.5 GRE (Build 262)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
Copyright (C) 2014-2015 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using libpcap version 1.6.2
Using PCRE version: 8.35 2014-04-04
Using ZLIB version: 1.2.8
不使用root权限
现在已经安装了snort,我们不希望它作为root
运行,所以,我们需要创建snort
用户和组,要创建新的用户和组,可以使用以下两个命令:
sudo groupadd snort
sudo useradd snort -r -s /sbin/nologin -c SNORT_IDS -g snort
由于我们已经使用源安装了程序,所以,我们需要创建配置文件和snort规则。
sudo mkdir /etc/snort
sudo mkdir /etc/snort/rules
sudo mkdir /etc/snort/preproc_rules
sudo touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules /etc/snort/rules/local.rules
在创建目录和规则之后,现在需要创建日志目录。
sudo mkdir /var/log/snort
最后,我们还需要一个地方来存储动态规则,然后才能添加任何规则。
sudo mkdir /usr/local/lib/snort_dynamicrules
创建完所有以前的文件后,对它们设置适当的权限。
sudo chmod -R 5775 /etc/snort
sudo chmod -R 5775 /var/log/snort
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
sudo chown -R snort:snort /etc/snort
sudo chown -R snort:snort /var/log/snort
sudo chown -R snort:snort /usr/local/lib/snort_dynamicrules
设置配置文件
为了节省大量时间并且不必复制和粘贴所有内容,只需将所有文件复制到配置目录中即可。
sudo cp /usr/src/snort_src/snort*/etc/*.conf* /etc/snort
sudo cp /usr/src/snort_src/snort*/etc/*.map /etc/snort
现在配置文件已经存在,你可以执行以下两种操作之一:
- 你可以启用Barnyard2
- 或者你可以只保留配置文件,并有选择地启用所需的规则,
配置
在/etc/snort/snort.conf
文件中,你需要更改变量HOME_NET
,它应该设置为你的内部网络,这样它就不会记录你自己的网络尝试登录到服务器,这可能是10.0.0.0/24
或192.168.0.0/16
,在/etc/snort/snort.conf
的45行,将变量HOME_NET
更改为网络块的IP值。
在我的网络中,它看起来像这样:
ipvar HOME_NET 192.168.0.0/16
然后,你必须将EXTERNAL_NET
变量设置为:
any
它只是把EXERNAL_NET
变成你的HOME_NET
。
设置规则
在/etc/snort/snort.conf
文件中104行的某处,你应该看到"var"声明和变量RULE_PATH
,SO_RULE_PATH
,PREPROC_RULE_PATH
,WHITE_LIST_PATH
和BLACK_LIST_PATH
,它们的值应该设置为我们在Un-rooting Snort
中使用的路径。
var RULE_PATH /etc/snort/rules
var SO_RULE_PATH /etc/snort/so_rules
var PREPROC_RULE_PATH /etc/snort/preproc_rules
var WHITE_LIST_PATH /etc/snort/rules
var BLACK_LIST_PATH /etc/snort/rules
设置这些值后,从第548行开始删除或注释掉当前规则。
现在,让我们检查一下你的配置是否正确,你可以用snort
验证它。
# snort -T -c /etc/snort/snort.conf
你将看到类似于以下(为了简洁而截断)的输出。
Running in Test mode
--== Initializing Snort ==--
Initializing Output Plugins!
Initializing Preprocessors!
Initializing Plug-ins!
.....
Rule application order: activation->dynamic->pass->drop->sdrop->reject->alert->log
Verifying Preprocessor Configurations!
--== Initialization Complete ==--
,,_ -*> Snort! <*-
o" )~ Version 2.9.8.0 GRE (Build 229)
'''' By Martin Roesch & The Snort Team: http://www.snort.org/contact#team
Copyright (C) 2014-2015 Cisco and/or its affiliates. All rights reserved.
Copyright (C) 1998-2013 Sourcefire, Inc., et al.
Using libpcap version 1.7.4
Using PCRE version: 8.35 2014-04-04
Using ZLIB version: 1.2.8
Rules Engine: SF_SNORT_DETECTION_ENGINE Version 2.4 <Build 1>
Preprocessor Object: SF_IMAP Version 1.0 <Build 1>
Preprocessor Object: SF_FTPTELNET Version 1.2 <Build 13>
Preprocessor Object: SF_SIP Version 1.1 <Build 1>
Preprocessor Object: SF_REPUTATION Version 1.1 <Build 1>
Preprocessor Object: SF_POP Version 1.0 <Build 1>
Preprocessor Object: SF_DCERPC2 Version 1.0 <Build 3>
Preprocessor Object: SF_SDF Version 1.1 <Build 1>
Preprocessor Object: SF_GTP Version 1.1 <Build 1>
Preprocessor Object: SF_DNS Version 1.1 <Build 4>
Preprocessor Object: SF_SSH Version 1.1 <Build 3>
Preprocessor Object: SF_DNP3 Version 1.1 <Build 1>
Preprocessor Object: SF_SSLPP Version 1.1 <Build 4>
Preprocessor Object: SF_SMTP Version 1.1 <Build 9>
Preprocessor Object: SF_MODBUS Version 1.1 <Build 1>
Snort successfully validated the configuration!
Snort exiting
既然所有的配置都没有错误,我们就可以开始测试Snort了。
测试Snort
测试Snort最简单的方法是启用local.rules
,这是一个包含自定义规则的文件。
如果你在snort.conf
文件中注意到546行周围的某处,则此行存在:
include $RULE_PATH/local.rules
如果你没有它,请在546行前后添加它。然后,你可以使用local.rules
文件进行测试,作为基本测试,我只是让Snort跟踪ping请求(ICMP请求),你可以通过在local.rules
文件中添加以下行来做到这一点。
alert icmp any any -> $HOME_NET any (msg:"ICMP test"; sid:10000001; rev:001;)
在文件中保存之后,保存它,然后继续阅读。
运行测试
你将需要将eno1
更改为你的系统正在监听的任何网络接口。
$ sudo /usr/local/bin/snort -A console -q -u snort -g snort -c /etc/snort/snort.conf -i eno1
一旦你运行了它,ping这个计算机,你将看到如下所示的输出:
01/07−16:03:30.611173 [**] [1:10000001:0] ICMP test [**] [Priority: 0] 192.168.1.105 -> 192.168.1.104
01/07−16:03:31.612174 [**] [1:10000001:0] ICMP test [**] [Priority: 0] 192.168.1.104 -> 192.168.1.105
01/07−16:03:31.612202 [**] [1:10000001:0] ICMP test [**] [Priority: 0] 192.168.1.105 -> 192.168.1.104
^C*** Caught Int−Signal
你可以按Ctrl+C退出程序,就是这样,Snort已全部设置完毕。