Suricata安装配置(IPS模式-线下)
Suricata安装配置(IPS模式-线下)
说明:
本实验为线下实验,需要自行安装实验环境。
实验目的:
通过实验,了解IPS的工作原理及基本配置。
实验环境:
CentOS 7,运行IPTables防火墙。 测试服务器一台,运行web服务; 测试机一台; GCC的版本需要升级到较高版本,实验中可升级到6.4即可。
连接关系说明:
测试机通过Centos7进行数据包转发才能与测试服务器建立连接。
实验网络拓扑简图
实验步骤:
一、基础组件安装
运行以下命令:
#yum install wget libpcap-devel libnet-devel pcre-devel gcc-c++ automake autoconf libtool make libyaml-devel zlib-devel file-devel jansson-devel nss-devel
在开始安装Suricata之前,需要安装suricata所使用到的一些库。安装这些库的命令是:
#yum -y install ImageMagickgcc-c++ patch readline readline-devel zlib zlib-devel git-core libyaml-devel libffi-devel openssl-devel make libpcap-devel pcre-devel libyaml-devel file-devel jansson-devel nss-devel libcap-ng-devel libnet-devel tar libnetfilter_queue-devel lua-devel mysql-devel fontconfig-devel libX11-devel libXrender-devel libxml2-devel libxslt-devel qconf python-yaml libcap-ng-devel file-devel epel-release lz4-devel jansson-devel cargo file-devel lz4-devel jansson-devel cargo python-yaml
Suricata默认的运行模式是IDS模式,如果运行在IPS模式则还需要安装其他组件,命令为:
#yum install libnetfilter_queue libnetfilter_queue-devel libnfnetlink-devel libnfnetlink
或执行:
#yum install libnetfilter_queue* libnfnetlink-devel libnfnetlink
二、安装Suricata-4.1.3
安装好这些库之后就开始下载源代码:
#wget https://openinfosecfoundation.org/download/suricata-4.1.3.tar.gz
#tar -xvf suricata-4.1.3.tar.gz
#cd suricata-4.1.3
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
#./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var
#make
#make install
配置中,可能出现错误,需要重新安装一些包。
#yum install –y cargo
Suricata 默认安装到 /usr/local/bin/,默认配置文件目录 /usr/local/etc/suricata/ ,输出目录/usr/local/var/log/suricata。 可通过以下前缀可指定具体位置:
--prefix=/usr/ 指定安装到/usr/bin/目录;
--sysconfdir=/etc 指定配置文件在/etc/suricata/目录
--localstatedir=/var 指定输出日志文件在/var/log/suricata/目录
启用数据包分析选项:--enable-profiling 启用IPS功能选项:--enable-nfqueue,开启这项功能需要用到这两个包:libnetfilter_queue和 libnfnetlink
测试安装情况:
#export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib
#/usr/bin/suricata -v
输出: Suricata 4.1.3 USAGE: /usr/bin/suricata [OPTIONS] [BPF FILTER]
即表示安装正常了。
查看Suricata是否支持IPS模式 $sudo suricata --build-info
如果输出有: NFQueue support: yes 表示支持IPS模式。
安装配置文件 sudo make install-conf #安装默认配置文件。Suricata源代码带有默认的配置文件。
安装规则库:(先不安装,自己写规则) sudo make install-rules # 安装默认规则。从EmergingThreats.net上下载可用的社区规则集快照,并显示存储目录。
如果规则库不能安装的话,可以手动下载规则库并进行解压放到rules文件夹中 wget https://rules.emergingthreats.net/open/suricata-4.0/emerging.rules.tar.gz
基本配置 创建相关目录
sudo mkdir /var/log/suricata //日志目录
sudo mkdir /etc/suricata //配置文件目录
三、配置suricata
(一)配置基本参数
Suricata 的配置文件默认在/etc/suricata/suricata.yaml。需要配置HOME_NET地址、规则路径以及输出格式等。 vars: address-groups: HOME_NET: "[192.168.58.0/24]" //本地主机所在网段,信任网段 EXTERNAL_NET: "!$HOME_NET" //其他网段,非信任网段
(二)修改规则文件路径
default-rule-path: /etc/suricata/rules/ //规则文件所在目录 rule-files: //下面列出包含的规则文件名
- botcc.rules -emerging-attack_response.rules
- emerging-chat.rules
- my.rules(其他删除,添加自己的规则文件~~~) 其中,default-rule-path 用于指定存放规则路径,而后续 rule-files 参数则是用来指定规则文件名。
(三)设置输出
#global stats configuration ... outputs:
- fast: enabled: yes filename: fast.log append: yes
- unified2-alert: enabled: yes
filename: unified2.alert
(四)网卡特性设置
关闭网卡的 LRO/GRO 功能: sudo ethtool -K ens33 gro off lro off
输出: Cannot change large-receive-offload //表示网卡不支持 LRO 功能
四、FW开启路由转发
检查Linux系统中转发是否打开:
# sudo sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
如果为0,说明没有开启转发,则需要手动打开。
(1)临时开启路由转发
#echo "1" > /proc/sys/net/ipv4/ip_forward 或执行:
#sysctl -w net.ipv4.ip_forward=1
(2)随系统启动转发功能 修改/etc/sysctl.conf文件, vi /etc/sysctl.conf
#Controls IP packet forwarding net.ipv4.ip_forward = 1 然后,保存,执行命令: /sbin/sysctl -p即可立即生效。
(3)Iptables防火墙配置 如果要使用Suricata的IPS模式,也就是IPS inline模式的话还需要配置iptables防火墙。 sudo iptables -I FORWARD -j NFQUEUE --queue-num 0 //默认为0队列 sudo iptables -I INPUT -j NFQUEUE --queue-num 0 sudo iptables -I OUTPUT -j NFQUEUE --queue-num 0
//也可指定协议 sudo iptables -I INPUT -p tcp -j NFQUEUE --queue-num 0 sudo iptables -I OUTPUT -p tcp -j NFQUEUE --queue-num 0
//同时指定端口号 sudo iptables -I INPUT -p tcp --sport 80 -j NFQUEUE --queue-num 0 sudo iptables -I OUTPUT -p tcp --dport 80 -j NFQUEUE --queue-num 0
//也可按照物理接口号指定 sudo iptables -I FORWARD -i eth0 -o eth1 -j NFQUEUE sudo iptables -I FORWARD -i eth1 -o eth0 -j NFQUEUE
Suricata规则说明:
Suricata完全兼容Snort的规则,而且比Snort功能更强大,支持drop动作和reject等动作,可直接丢弃数据包。 制定规则: my.rules: drop http any any -> 192.168.31.100 any (msg:"suricata-alert:Select Attack!!";content:"select";nocase;sid:800001;rev:1;) reject http any any -> 192.168.31.100 any (msg:" suricata-alert:Union Attack!!";content:"union";nocase;sid:800002;rev:1;) reject http any any -> 192.168.31.100 any (msg:" suricata-alert:SQL Injection Attack tries!!";content:"and";nocase;sid:800003;rev:1;) reject http any any -> 192.168.31.100 any (msg:" suricata-alert:SQL Injection Attack tries!!";content:"and";http_uri;nocase;sid:800004;rev:1;)
suricata -c /etc/suricata/suricata.yaml -q 0
iptables -I FORWARD -j NFQUEUE --queue-num 0
从终端访问服务器,分别输入select、union等关键字,查看阻止效果。
查看日志:
在/var/log/suricata/fast.log文件中内容为:
3/30/2019-14:49:34.062496 [Drop] [] [1:800001:1] Attack!! [] [Classification: (null)] [Priority: 3] {TCP} 192.168.33.138:1080 -> 192.168.31.100$ 03/30/2019-14:49:36.600674 [Drop] [] [1:800001:1] Attack!! [] [Classification: (null)] [Priority: 3] {TCP} 192.168.33.138:1081 -> 192.168.31.100$ 03/30/2019-14:52:15.682880 [Drop] [] [1:800001:1] Attack!! [] [Classification: (null)] [Priority: 3] {TCP} 192.168.33.138:1086 -> 192.168.31.100$ 03/30/2019-15:00:25.421480 [] [1:800001:1] Attack!! [] [Classification: (null)] [Priority: 3] {TCP} 192.168.33.138:1097 -> 192.168.31.100:8083 03/30/2019-15:02:41.651144 [Drop] [] [1:800001:1] Select Attack!! [] [Classification: (null)] [Priority: 3] {TCP} 192.168.33.138:1098 -> 192.168$ 03/30/2019-15:03:12.747903 [Drop] [] [1:800001:1] Select Attack!! [] [Classification: (null)] [Priority: 3] {TCP} 192.168.33.138:1099 -> 192.168$ 03/30/2019-15:03:12.747903 [Drop] [] [1:800002:1] Union Attack!! [] [Classification: (null)] [Priority: 3] {TCP} 192.168.33.138:1099 -> 192.168.$
注意:
实验中的IP地址等需要根据自己的实际情况进行修改。
错误解决:
1、测试运行错误:
[root@localhost suricata-4.1.3]# /usr/bin/suricata -v /usr/bin/suricata: error while loading shared libraries: libhtp.so.2: cannot open shared object file: No such file or directory 查看依赖关系,发现库文件均在/lib64/路径下: [root@localhost suricata-4.1.3]# ldd /usr/bin/suricata linux-vdso.so.1 => (0x00007ffc9d3a7000) libhtp.so.2 => not found librt.so.1 => /lib64/librt.so.1 (0x00007fedd6252000) libm.so.6 => /lib64/libm.so.6 (0x00007fedd5f50000) …… 做软连接: [root@localhost suricata-4.1.3]# ln -s /usr/lib/libhtp.so.2 /lib64/libhtp.so.2
再次测试即正常。
2、执行make install-rules时,出错:
suricata: error while loading shared libraries: libhtp.so.2: cannot open shared object file: No such file or directory解决方法: sudo vim /etc/ld.so.conf 加入一行 /usr/local/lib,保存 执行sudo ldconfig命令 即可解决
注意规则路径,/etc/suricata/ suricata.yaml中设置的default-rule-path值应与安装路径处一致。
No rule files match the pattern /usr/share/suricata/rules/emerging-trojan.rules 表示,缺少该规则文件(在yaml配置文件中,包含了该规则文件,但是实际没有对应的文件) 将对应文件注释掉即可。
实验小结:
通过本实验,了解了IPS的工作原理及安装步骤,对IPS与防火墙的协同工作有了深刻认识。