1.IPS模式说明
suricata具有IDS的功能外,还具有IPS功能,所谓的IPS即是Intrusion Prevention System(入侵防护系统),对不符合配置规则的报文进行直接阻断。
suricata的阻断功能,是其本身所不具备的,只是通过和linux下通用的网络防火墙iptables/netfilter的联通来达到阻断网络的目的。
suricata的IPS分为两种:
1)drop:
包含签名的数据包立即被丢弃,不会再发送。 接收器不会收到导致超时的消息。 流的所有后续数据包都被丢弃。(实际测试http,用浏览器仍然可以访问,wget却不能访问)
2)reject:
主动拒绝数据包,接收者和发送者都会收到一个拒绝数据包。 如果数据包涉及TCP,则它将成为重置数据包,否则将成为所有其他协议的ICMP错误数据包。
NFQ支持多个队列处理,您应该在iptables规则和suricata命令行选项中明确指定。 例如,您可以使用NFQ配置负载平衡,如下所示:
iptables -A INPUT -j NFQUEUE --queue-balance 0:3
suricata -c /etc/suricata/suricata.yaml -q 0 -q 1 -q 2 -q 3
2. 原理
通过iptables 将网络报文发送到特定的队列中去,放入到用户态中,然后通过suricata进行规则匹配,最后返回对报文的处理,是丢弃还是接受。
在iptables中,一般在iptables中的target有以下五种(ACCEPT,DROP,RETURN,QUEUE,other_chain)而NFQUEUE是QUEUE的扩展。相比于QUEUE,它可以由用户指定不同的queue number。
示例:
比如做如下配置:
iptables -I FORWARD -j NFQUEUE --queue-num 0
suricata通过如下方式运行:
suricata -c /etc/suricata/suricata.yaml -q 0
操作0 号队列中的数据。
示例图:
模式:
1)图1的suricata 是运行在网关上,则可以通过和iptables联动,来阻止非法或攻击链接。
2)图2的suricata 是运行在主机上,通过对主机的进出报文进行控制,来达到阻断链接的目的。
网关场景向Suricata发送流量的最简单规则是:
iptables -I FORWARD -j NFQUEUE
主机场景向Suricata发送流量的简单规则是:
sudo iptables -I INPUT -j NFQUEUE
sudo iptables -I OUTPUT -j NFQUEUE
可以提供队列的号,如果不提供,那么默认的是队列号为0。
假设您希望Suricata检查例如TCP流量,或端口80上的所有传入流量,或目标端口80上的所有流量,您可以这样做:
sudo iptables -I INPUT -p tcp --sport 80 -j NFQUEUE
sudo iptables -I OUTPUT -p tcp --dport 80 -j NFQUEUE
对iptables的使用的描述是将其与IPv4一起使用的方式。 要在IPv6中使用它,所有前面提到的命令都必须以'ip6tables'开头。 也可以让Suricata检查两种流量。
还有一种方法可以使用iptables与多个网络(和接口卡)。 例:
sudo iptables -I FORWARD -i eth0 -o eth1 -j NFQUEUE
sudo iptables -I FORWARD -i eth1 -o eth0 -j NFQUEUE
如果你停止Suricata和使用互联网,交通将不会通过。 为了使互联网正常工作,你必须擦除所有的iptable规则。
要清除所有的iptable规则,请输入:
iptables -F
3 实践
1) 首先要确定安装的suricata是否支持IPS模式,在里面即为NFQ中。
通过命令:suricata --build-info
2)需要在配置的时候提供选项
./configure --enable-nfqueue
--prefix=/usr --sysconfdir=/etc --localstatedir=/var
--enable-lua
重点是enable-nfqueue 需要
开启这项功能需要用到这两个包:libnetfilter_queue
和 libnfnetlink
安装后仍然报错:
configure: error: Package requirements (libnfnetlink >= 0.0.41) were not met:
设置一个环境变量,后继续运行:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
仍然缺少库,编译后重新运行:
configure: error: Package requirements (libmnl >= 1.0.3) were not met:
No package 'libmnl' found
下载:http://www.netfilter.org/projects/libmnl/downloads.html
rpm -Uvh http://rules.emergingthreatspro.com/projects/emergingrepo/x86_64/libnetfilter_queue-0.0.17-2.x86_64.rpm
http://rules.emergingthreatspro.com/projects/emergingrepo/x86_64/libnetfilter_queue-devel-0.0.17-2.x86_64.rpm
http://rules.emergingthreatspro.com/projects/emergingrepo/x86_64/libnfnetlink-1.0.0-1.x86_64.rpm
http://rules.emergingthreatspro.com/projects/emergingrepo/x86_64/libnfnetlink-devel-1.0.0-1.x86_64.rpm
编译后安装,再次查看:
3)验证阻断功能:
新建:test.rules
更改配置文件:suricata.yaml 将配置文件添加进去:
用wget则无法下载。
四、参考网址
https://docs.mirantis.com/mcp/1.0/mcp-security-best-practices/use-cases/idps-vnf/install-idps.html
http://blog.csdn.net/leeboy_wang/article/details/50582629
https://linux.cn/article-6985-1.html
http://maskray.me/blog/2013-07-26-ids-ips-with-suricata
https://home.regit.org/netfilter-en/using-nfqueue-and-libnetfilter_queue/
https://redmine.openinfosecfoundation.org/projects/suricata/wiki/Ubuntu_Installation