UP | HOME

使用suricata屏蔽APP

原理

suricata是一套IDS/IPS系统,因为需要实现一个拦截的功能,这里就需要使用到IPS模式,利用IPS来过滤数据包,从而实现拦截的方法。

具体操作

安装suricata

这里以centos 7为例

yum install epel-release yum-plugin-copr
yum copr enable @oisf/suricata-latest
yum install suricata

配置IDS模式

IDS模式有网卡过滤和NFQUEUE两种模式,这里使用NFQUEUE,也可以根据自身需求来选择,安装完成之后,需要使用iptables来创建对应的规则拦截所有流量

sudo iptables -A INPUT -j NFQUEUE --queue-bypass
sudo iptables -A OUTPUT -j NFQUEUE --queue-bypass

这里的–queue-bypass选项是为了防止在流量没有进行处理的时候,不丢弃流量,从而影响正常的网络连接。 之后在/etc/sysconfig/suricata文件里面将OPTIONS的内容改为以下内容

OPTIONS="-q 0 --user suricata"

-q 0的意思是处理NFQUEUE 0的所有内容

编写规则文件

在编写规则文件之前,需要运行suricata-update更新下默认的规则,之后将以下规覆盖入到/var/lib/suricata/suricata.yaml文件中

drop tcp any any <> any any (msg:"drop  WeChat tcp 16 "; content:"|16 F1 04|"; sid:6;)
drop tcp any any <> any any (msg:"drop  WeChat tcp 17 "; content:"|17 F1 04|"; sid:7;)
drop tcp any any <> any any (msg:"drop  WeChat tcp 19 "; content:"|19 F1 04|"; sid:8;)
drop tcp any any <> any any (msg:"drop  upgrade mmtls"; content:"Upgrade|3A| mmtls";nocase;  sid:16;)
drop tcp any any <> any any (msg:"drop  WeChat tcp UA"; content:"User-Agent|3A| MicroMessenger Client";  sid:5;)
drop tcp any any <> any any (msg:"drop qq start tcp";content:"|02|";startswith;content:"|03|";endswith;sid:10;)
drop udp any any <> any any (msg:"drop qq start udp";content:"|02|";startswith;content:"|03|";endswith;sid:11;)
drop tls any any -> any any (msg:"block wx.qq.com";tls.cert_subject;content:"wx.qq.com"; sid:18;)

最后运行suricata -T检测规则是否合格,如果正常没报错的话,可以重启服务观察是否有拦截到流量

systemctl restart suricata
iptables -nvL #查看是否有流量经过
tail -f /var/log/suricata/fast.log #查看是否有对应的输出

缺点

经过测试在hyper-v环境下过滤100台左右的虚拟机会出现延迟高丢包的情况,猜测和网卡以及NFQUEUE性能有关。暂时没有深入研究原因

作者: jamesarch

Created: 2023-01-06 Fri 19:33