执行如下命令:
apt-get update
apt-get upgrade
apt-get dist-upgrade
apt-get clean
2安装入侵检测系统Snort
2.1安装daq依赖程序
执行如下命令:
sudo apt-get install flex
sudo apt-get install bison
sudo apt install aptitude
sudo aptitude install libpcap-dev
2.2安装daq
执行如下命令:
wget https://www.snort.org/downloads/snort/daq-2.0.7.tar.gz
tar xvfz daq-2.0.7.tar.gz
cd daq-2.0.7
./configure && make && sudo make install
make
2.3安装snort的依赖程序
执行如下命令:
sudo su
aptitude install libpcre3-dev
aptitude install libdumbnet-dev
aptitude install zlib1g-dev
apt install openssl
apt-get install libssl-dev
安装LuaJIT:
sudo wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
sudo tar -zxvf LuaJIT-2.0.5.tar.gz
cd LuaJIT-2.0.5/
sudo make && sudo make install
LuaJIT-2.0.5安装完成:
2.4安装Snort
执行如下命令:
wget https://www.snort.org/downloads/snort/snort-2.9.20.tar.gz
tar xvfz snort-2.9.20.tar.gz
cd snort-2.9.20
./configure --enable-sourcefire && make && sudo make install
报错:fatal error: rpc/types.h: No such file or directory
执行如下命令:
sudo apt-get install -y libtirpc-dev
sudo ln -s /usr/include/tirpc/rpc/* /usr/include/rpc
报错:fatal error: netconfig.h: No such file or directory
执行如下命令:
sudo ln -s /usr/include/tirpc/netconfig.h /usr/include
执行如下命令:
snort
已成功安装
3对Snort进行配置
3.1创建一些必要的文件夹
#Snort的安装目录
sudo mkdir -p /etc/snort/rules/iplists
sudo mkdir -p /etc/snort/preproc_rules
sudo mkdir /usr/local/lib/snort_dynamicrules
sudo mkdir /etc/snort/so_rules
#存储过滤规则和服务器黑白名单
sudo touch /etc/snort/rules/iplists/default.blacklist
sudo touch /etc/snort/rules/iplists/default.whitelist
sudo touch /etc/snort/rules/so_rules
#创建日志目录
sudo mkdir /var/log/snort
sudo mkdir /var/log/snort/archived_logs
#调整权限
sudo chmod -R 5775 /etc/snort
sudo chmod -R 5775 /var/log/snort
sudo chmod -R 5775 /var/log/snort/archived_logs
sudo chmod -R 5775 /etc/snort/rules/so_rules
sudo chmod -R 5775 /usr/local/lib/snort_dynamicrules
3.2复制文件到 /etc/snort
cd /home/lingqi/daq-2.0.7/LuaJIT-2.0.5/
cp ./snort-2.9.20/etc/*.conf* /etc/snort
cp ./snort-2.9.20/etc/*.map /etc/snort
cp ./snort-2.9.20/etc/*.dtd /etc/snort
cp ./snort-2.9.20/src/dynamic-preprocessors/build/usr/local/lib/snort_dynamicpreprocessor/* /usr/local/lib/snort_dynamicpreprocessor/
3.3修改默认配置
打开配置文件
sudo vim /etc/snort/snort.conf
修改路径
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/iplists/
var BLACK_LIST_PATH /etc/snort/rules/iplists/
让黑白名单生效
3.4****安装rules包
wget Snort - Network Intrusion Detection & Prevention System
sudo tar zxvf snortrules-snapshot-29181.tar.gz -C /etc/snort
报错:
看报错描述,stdin: not in gzip format,其实已经说明了问题所在,即文件不是gzip格式。可以使用“file”命令查看文件的具体信息:
发现这个文件是 HTML document。回到snort官网,直接下载文件。
sudo tar zxvf snortrules-snapshot-29181.tar.gz -C /etc/snort
sudo cp /etc/snort/so_rules/precompiled/RHEL-8/x86-64/2.9.18.1/* /usr/local/lib/snort_dynamicrules/
4****启动测试
sudo snort -T -c /etc/snort/snort.conf
CentOS:
一、准备工作
使用镜像CentOS-6.8-x86_64-mini在虚拟机中安装操作系统。
默认安装时,网络IP是自动获取的,需要改成静态IP地址。
#ifconfig -a //查看网卡配置信息
#vi /etc/sysconfig/network-scripts/ifcfg-eth0 //编辑网卡配置文件
修改为静态IP地址的方法是将BOOTPROTO=dhcp中的dhcp改为static,然后增加以下内容(根据内网环境配置IP):
IPADDR=192.168.91.128
NETMASK=255.255.255.0
GATEWAY=192.168.91.2
DNS1=192.168.91.2
DNS2=8.8.8.8 //DNS地址可以多个,要根据当地网络供应商进行添加
最后保存退出,重启网络服务。
一、使用 cat /etc/issue 命令看看自己系统版本是6.几,先找个小本本记下来
二、备份出问题的文件,以免出错后可以恢复。
1.mkdir /etc/yum.repos.d/bakk //新建文件夹
2.mv /etc/yum.repos.d/* /etc/yum.repos.d/bakk //会出现报错,不用管
三、如下打开配置文件CentOS-Base.repo
vim /etc/yum.repos.d/CentOS-Base.repo
清空!
把下方代码复制进去
注意:如果你的系统版本不是6.7版本
需要先把代码中5个“baseurl“里的“6.7”更换成你自己的系统版本
CentOS-Base.repo
The mirror system uses the connecting IP address of the client and the
update status of each mirror to pick mirrors that are updated to and
geographically close to the client. You should use this for CentOS updates
unless you are manually picking other mirrors.
If the mirrorlist= does not work for you, as a fall back you can try the
remarked out baseurl= line instead.
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=os&infra=$infra
#baseurl=https://mirrorlist.centos.org/centos/ r e l e a s e v e r / o s / releasever/os/ releasever/os/basearch/
baseurl=https://mirrors.aliyun.com/centos-vault/6.7/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=updates&infra=$infra
#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/ r e l e a s e v e r / u p d a t e s / releasever/updates/ releasever/updates/basearch/
baseurl=https://mirrors.aliyun.com/centos-vault/6.7/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=extras&infra=$infra
#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/ r e l e a s e v e r / e x t r a s / releasever/extras/ releasever/extras/basearch/
baseurl=https://mirrors.aliyun.com/centos-vault/6.7/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=centosplus&infra=$infra
#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/ r e l e a s e v e r / c e n t o s p l u s / releasever/centosplus/ releasever/centosplus/basearch/
baseurl=https://mirrors.aliyun.com/centos-vault/6.7/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=KaTeX parse error: Expected 'EOF', got '&' at position 11: releasever&̲arch=basearch&repo=contrib&infra=$infra
#baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-vault/ r e l e a s e v e r / c o n t r i b / releasever/contrib/ releasever/contrib/basearch/
baseurl=https://mirrors.aliyun.com/centos-vault/6.7/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
四、清除yum缓存。
yum clean all
五、将服务器上的软件包信息缓存到本地,提高搜索、安装软件的速度
yum makecache
到这一步yum功能就正常开启了。
#yum -y update //更新系统,时间较长
步骤6.复制软件到指定目录。
将libdnet-1.12.tgz、daq-2.0.4.tar.gz、snort-2.9.7.0.tar.gz、snortrules-snapshot-2970.tar.gz这4个文件用WinSCP复制到CentOS 6.8系统/usr/local/src/目录下。
经过以上6个步骤之后,Snort安装的准备工作完成。
二、编译并安装Snort
准备工作完成之后,接着开始正式安装Snort。编译安装Snort需要如下10个步骤。
步骤1.安装基本环境和依赖包。
#yum install -y gcc gcc-c++ flex bison zlib-devel zlib-static libxml2 libpcap pcre-devel pcre-static libpcap-devel.x8664 tcpdump git libtool curl man make
注意,如果没有安装pcre,在预编译时就会出现以下问题,比如我们执行./configure时,报错提示如下:
ERROR! Libpcre library not found, go get it from http://www.pcre.org
步骤2.解压libdnet、DAQ及Snort安装包。
在服务器的安装配置过程中,大家很可能会到官网下载最新版本的源码包,但是那样就会遇到各种依赖包缺失的问题,导致无法安装成功。因为有些软件(比如Snort)要在DAQ(Data AcQuisition,数据采集器)library安装好之后才能继续安装,而只有先libdnet安装完成,才能继续安装DAQ,否则会报错找不到依赖文件,具体操作如下:
#cd /usr/local/src
#tar -zxvf libdnet-1.12.tgz
#tar -zxvf daq-2.0.4.tar.gz
#tar -zxvf snort-2.9.7.0.tar.gz
下面必须依次安装libdnet、DAQ和Snort这3个包。
● 安装libdnet-1.12.tgz。
#cd /usr/local/src/libdnet-1.12/
#./configure
#make && make install
● 安装DAQ。
wget http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz
tar xvfz libpcap-1.0.0.tar.gz
cd libpcap-1.0.0/
./configure
make
make install
#cd daq-2.0.4
#./configure
编译环境检查完成之后,我们可以看到AFPacket DAQ module,Dump DAQ module,IPFW DAQ module,PCAP DAQ module的状态都是“yes”只有这样才能继续编译软件包。
#make && make install //编译、安装
● 安装Snort 2.9(安装Snort前一定要正确安装libdnet和DAQ以及zlib)。
#cd /usr/local/src/snort-2.9.7.0
#./configure --enable-sourcefire
#make && make install
编译过程中没有报错信息即可进行安装。
步骤3.添加用户和组。
创建用户和组,并设置权限。在root身份下解包的文件权限都与root有关,所以要修改成Snort用户的属主和相关权限。
#groupadd -g 40000 snort //新添加一个Snort组
#useradd snort -u 40000 -d /var/log/snort -s /sbin/nologin -c SNORT_IDS -g snort
//将Snort用户加入Snort组,新建目录/var/log/snort,并且不允许登录系统
步骤4.配置Snort。
● 新建目录/etc/snort/。
#mkdir /etc/snort/
● 将snortrules-snapshot-2970.tar.gz解压到/etc/snort/目录下。
#cd /etc/snort
tar –zxvf /usr/local/src/snortrules-snapshot-2970.tar.gz –C . (此步骤很关键,解压到当前目录)
完成此命令之后会在/etc/snort/目录下生成etc 、preproc_rules 、rules、so_rules共4个目录。
#cp /etc/snort/etc/sid-msg.map /etc/snort
● 将下载的Snort压缩包(snort-2.9.7.0.tar.gz),解压缩后复制到/etc/snort/目录下。
#cd /etc/snort/
#cp /usr/local/src/snort-2.9.7.0/etc/* .
● 设置目录/etc/snort及其下所有文件的属主和属组。
#chown -R snort:snort *
● 新建黑白名单规则文件。
#touch /etc/snort/rules/white_list.rules /etc/snort/rules/black_list.rules
在/etc/snort/rules下新建white_list.rules和black_list.rules两个文件。
● 编辑配置文件snort.conf,修改以下几行的内容。
#vi /etc/snort/snort.conf
● 配置Snort.conf中的变量
在snort.conf配置文件中有很多变量和选择,这些变量作用于rules目录下的所有规则。作为初学者需要掌握最重要的两个分别是:
$HOME_NET:你想监控的网络(用CIDR格式表示)。
$EXTERNAL_NET:连接外部,不受信任的网络。
这两个变量的默认值都是“any”,简单理解就是“默认监控一切”。但是我们需要进行适当修改,下面我们来设置网络变量,首将第45行的ipvar HOME_NET any改为ipvar HOME_NET 192.168.x.x网段,并写成CIDR格式。也可以添加多个网段,本实验中监控网段为192.168.11.0/24,来看下面的例子。
ipvar HOME_NET [192.168.11.0/24] //如果不加限制,网段地址也可以改为"any"
将48行ipvar EXTERNAL_NET any 改为ipvar EXTERNAL_NET $HOME_NET
如果当前网段还有DNS、SMTP、HTTP、SQLServer、SSH服务,我们推荐用如下方法定义变量。
ipvar DNS_SERVERS $HOME_NET
ipvar SMTP_SERVERS $HOME_NET
ipvar HTTP_SERVERS $HOME_NET
ipvar SQL_SERVERS $HOME_NET
ipvar SNMP_SERVERS $HOME_NET
ipvar SSH_SERVERS $HOME_NET
…
注意: 对于修改 H O M E _ N E T 、 HOME\_NET、 HOME_NET、EXTERNAL_NET变量为非必须项,对于初学者而言,不修改沿用原默认值any也可以。
但下面的相对规则路径就必须改成绝对路径了,否则启动snort时会报错。
第104行 var RULE_PATH …/ruls 改为var RULE_PATH /etc/snort/rules
第105行 var SO_RULE_PATH …/so_rules 改为var SO_RULE_PATH /etc/snort/so_rules
第106行 var PREPROC_RULE_PATH …/preproc_rules 改为var PREPROC_RULE_PATH/etc/snort/ preproc_rules
第113行 var WHITE_LIST_PATH …/rules 改为var WHITE_LIST_PATH /etc/snort/rules
第114行 var BLACK_LIST_PATH …/rules 改为var BLACK_LIST_PATH /etc/snort/rules
● 设置日志保存路径。
第186行 config logdir:/var/log/snort/
● 配置输出插件。
Snort可通过数据库插件(spo_database.c和spo_database.h)将预处理器输出的日志写入数据库,但下面的配置一方面将报警写入alert文件,另一方面将预处理器输出的日志写入到unified2格式的二进制文件中,以供Barnyard2读取使用。
将第521行修改成如下内容:
output unified2:filename snort.log,limit 128
以上几处修改时记得去掉注释,修改完成后,保存退出,对snort.conf配置文件的修改告一段落,接着进行下一步操作。
步骤5.新建目录snort_dynamicrules并设置属主和属组权限。
#mkdir -p /usr/local/lib/snort_dynamicrules
#chown -R snort:snort /usr/local/lib/snort_dynamicrules
#chmod -R 755 /usr/local/lib/snort_dynamicrules
步骤6.在/usr/sbin/目录下新建名为Snort的软链接文件。
#cd /usr/sbin
#ln -s /usr/local/bin/snort snort
步骤7.添加测试规则。
我们在安装Snort时已经复制了很多规则文件,但这些文件内的规则默认都被注销了,先不要管这些注销的规则,下面我们来写一条规则。
#vi /etc/snort/rules/local.rules
加入如下内容:
alert icmp any any -> $HOME_NET any (msg:“ICMP Packet Detected”;sid:1000003;rev:1;)
保存退出,我们就完成了第一条检测规则的编写。
步骤8.测试Snort。
#snort -T -i eth0 -u snort -g snort -c /etc/snort/snort.conf
注意:这里的参数“-T”表示测试完成之后即退出snort程序。
如果配置正确,则系统启动后显示如下内容。
如出现“Snort successfully validated the configuration!”的提示,则表示安装配置成功。
步骤9.用ping命令测试。
用ping命令进行测试的目的是为了让snort产生报警。ping命令使用ICMP协议,在IDS中使用libpcap函数所捕获的也是ICMP数据包。下面在Snort主机上操作:
#snort -i eth0 -c /etc/snort/snort.conf -A fast
注:以上命令中-A fast的含义如下。
-A fast含义:该参数报警信息包括以下内容:
timestamp时间戳
报警消息
源/目的IP地址
端口
输入上面的命令之后,报警记录在/var/log/snort/alert和/var/log/snort/snort.log.timestamp(这是一个存储数据包的二进制文件,用tail命令无法读取)中。用下面的命令直观查看alert报警。
#cd /var/log/snort/
#tail -f /var/log/snort/alert //查看报警
实例:
/var/log/snort/alert是文本文件,我们可以用任何编辑器来查看。
下面要将这些报警存储到数据库。
注意:在上面介绍的第6、7步骤中如果没有设置正确的路径,那么在启动Snort时,就会出现找不到动态规则的文件,发生致命错误导致程序异常退出。
ERROR:parser.c(5047)
加深理解:我们说理解/etc/snort/sid-msg.map这个文件的意义非常重要,实体signature表示的是报警信息列表规范化,即将报警事件信息按规则编号(sig_id)、规则描述(sig_name)、规则分类编号(sig_class_id)规则优先级(sig_priority)规则版本号(sig_rev),规则在snort中的内部编号(sig_sid;sig-gid)进行规范化存储。
其中的sig_class_id和sig_prority的具体内容包含在classification.config文件中;而sid_sid和sid_gid将文件/etc/snort/gen-msg.map中的一个消息和该snort规则建立一个映射关系。
对classification的解释:
文件Classification.config来自于snortrules-snapshot-2970.tar.gz压缩包。
此处单词classification本意是问题分类,在snort官网下载的安装包内有使用手册,其中有详细的classification分类表。
用在这里表示记录入侵签名的分类,各入侵签名所属的分类在编写对应的Snort规则时通过制定classification属性值来指定。
clasification.config这个配置文件,同时被/etc/snort/snort.conf和/etc/snort/barnyard2.conf这两个关键配置文件所引用。
稍后我们在进行BASE调试实验过程中还会发现classification的身影。
另外,做为基础用户我们需要了解 snort将1~1000000做为自己的保留的内部编号,而将大于1000000 编号供使用者自己使用。这是一种习惯,而非强制,所以我们自己编写规则时,需要在sid-msg.map添加自己的规则编号和消息。其中sig_reference、sig_class是对他其中sig_id和sig_class_id属性的扩展描述。
三、将Snort报警存入MySQL数据库
将Snort报警存入MySQL数据库需要如下几个步骤。
步骤1.安装MySQL数据库及PHP扩展。
#yum install -y mysql-server mysql-devel php-mysql php-pear php-gd libtool php-imap php-ldap php-odbc php-xml php-pecl-apc
#chkconfig --level 235 mysqld on//将MySQL服务设置为在运行级别为2、3、5时都是开启状态
#/etc/init.d/mysqld start
步骤2.为数据库管理员root赋予密码(为调试方便暂设定纯数字密码123456)。
#/usr/bin/mysqladmin -u root password ‘123456’
注意,root用户登录phpMyAdmin时,同样使用这个密码。
步骤3.创建Snort数据库并设定读取权限。
#mysql -u root -p//连接MySQL
输入步骤2中设置的密码“123456”。
mysql>CREATE DATABASE snort;//新建数据库
mysql>USE snort;
学习路线:
这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。不过,要想从脚本小子变成黑客大神,这个方向越往后,需要学习和掌握的东西就会越来越多以下是网络渗透需要学习的内容:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!