美文网首页
suricata的ips模式详解

suricata的ips模式详解

作者: 梁帆 | 来源:发表于2021-11-12 10:28 被阅读0次

    suricata文档中有关ips的内容:https://www.jianshu.com/p/7cf491575cec

    一、简介

    在IPS模式下,您可以使用以下action阻止两个网络接口之间桥接之间的流量:

    1.Drop

    包含签名的报文将被立即丢弃,不再继续发送。接收方没有收到消息,导致超时。一个流的所有后续数据包将被丢弃。

    2.Reject

    积极拒绝分组,接收器和发件人接收拒绝数据包。如果数据包关注TCP,则将是一个重置包(reset-packet),否则它将是所有其他协议的ICMP错误数据包。

    Note: Suricata在两种IPS模式下都会产生alert。

    二、分类

    要启用suricata的ips或者inline模式,可以采用下面几种策略:

    NFQ

    使用linux的Netfilter工具(即iptables)。

    iptables工具详解见:https://www.jianshu.com/p/a1e92d3aaffc

    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
    

    AF_PACKET

    是layer 2 Linux bridge,支持自动负载平衡以获得更好的性能。

    PF_RING

    抓包性能较强,如果您的NIC也支持零拷贝(ZC)模式,请通过PF_RING ZC提高您的性能。注意,PF_RING ZC功能是付费的。

    三、NFQ详解

    NFQUEUE是一个IPTables和IP6Tables目标实体,其将数据包的决定委托给IP等用户空间软件。
    启动NFQ功能

    1.安装netfilter工具包:

    sudo apt-get -y install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0
    

    2.configure suricata源码时添加选项后缀:

    --enable-nfqueue
    

    3.build以及install

    4.配置iptables:

    (1)要扫描桥接数据包,请添加规则:

    sudo iptables -I FORWARD -j NFQUEUE
    

    (2)要使用Repeat Suricata NFQ模式,请在下面添加规则,指定您需要的源链:

    iptables -I FORWARD -m mark ! --mark $MARK/$MASK -j NFQUEUE
    

    此规则仅在数据包处理之后的SURICATA中没有设置的指定标记时,才将数据包转发到NFQUEUE。

    如果停止Suricata,则不会处理进入NFQueue的数据包,结果将不会进一步传递。

    5.在suricata.yaml中配置suricata的NFQ模式:

    Accept

    在默认的NFQ模式下,Suricata会生成终端验证:pass或drop。其余的IPTables规则不会检查数据包。

    Repeat

    Suricata产生非终端判决,并标记将在IPTables的第一个规则中再次重新加注的数据包。将以下规则添加到iptables:

    iptables -I FORWARD -m mark ! --mark $MARK/$MASK -j NFQUEUE
    

    Route

    若要在接受决定后将数据包发送到另一个队列,请将mode设置为route并设置route-queue值。使用路由模式,可以在同一个虚拟机上使用多个网络扫描仪扫描数据包。

    配置好的一个示例如下:

    nfq:
    mode: accept # nfq mode: accept, repeat, route
    repeat-mark: 1 # used for repeat mode to mark a packet
    repeat-mask: 1 # used for repeat mode to mark a packet
    route-queue: 2 # for 'route' mode
    batchcount: 20 # max length of a batching verdict cache
    fail-open: yes # a packet is accepted when queue is full
    

    6.启动Suricata以过滤NFQueue的数据包:

    suricata -c /etc/suricata/suricata.yaml -q 0 -D
    

    四、AF_PACKET模式详解

    AF_PACKET通过将报文从一个接口复制到另一个接口(并反向复制),在两个接口之间建立了一个软件桥。
    启用AF_PACKET:

    1.在suricata.yaml配置文件中编辑af-packet部分:

    af-packet:
    - interface: eth0
    threads: auto
    defrag: yes
    cluster-type: cluster_flow
    cluster-id: 98
    copy-mode: ips
    copy-iface: eth1
    buffer-size: 64535
    use-mmap: yes
    - interface: eth1
    threads: auto
    cluster-id: 97
    defrag: yes
    cluster-type: cluster_flow
    copy-mode: ips
    copy-iface: eth0
    buffer-size: 64535
    use-mmap: yes
    

    Cluster-ID用于在负载平衡时为相应的接口进行分组线程。对于每个接口,Cluster-ID值应该是不同的。

    2.启动suricata时增加--af-packet选项后缀:

    suricata -c /etc/suricata/suricata.yaml --af-packet -D
    

    3.验证Suricata是否已打开IPS模式

    (1)修改/etc/suricata/rules/test.rules文件中的测试规则,以丢弃或拒绝数据包:

    drop http any any -> any any (msg:"Alarm detected"; content:"Alarm"; nocase; classtype:policy-violation; sid:1; rev:1;)
    

    or

    reject http any any -> any any (msg:"Alarm detected"; content:"Alarm"; nocase; classtype:policy-violation; sid:1; rev:1;)
    

    (2)在IPS VM上查看目标接口ETH1上的HTTP流量:

    sudo tcpdump -i eth1 tcp port <HTTP_PORT> -A -w tcpdump.output
    

    (3)使用IPS VM上的Alarm Word下载测试文件。例如:

    wget http://<WEB_SERVER_IP>/test
    

    (4)终止tcpdump,并在tcpdump输出日志(包含到目的接口eth1的桥接流量)中验证带有“Alarm”字的测试文件是否被IPS阻断。

    五、PF_RING模式详解

    PF_RING是一个Linux网络套接字,它使用NAPI将数据包从网卡复制到PF_RING循环缓冲区,然后用户空间应用程序从环读取数据包。
    开启PF_RING

    1.安装PF_RING包:

    sudo apt-get install build-essential bison flex linux-headers-$(uname -r) libnuma-dev
    

    2.下载最新的PF_RING库,提取并构建该库:

    wget http://sourceforge.net/projects/ntop/files/PF_RING/PF_RING-6.2.0.tar.gz
    tar -xvzf PF_RING-6.2.0.tar.gz
    cd PF_RING-6.2.0/
    make
    cd kernel; sudo make install
    cd ../userland/lib; sudo make install
    cd ../userland/libpcap; ./configure; make
    sudo cp libpcap* /usr/local/lib/; sudo cp pcap.h /usr/local/include/
    

    请确认Suricata在配置时可以找到新的libpcap库。例如,在/usr/local/lib/目录下。否则,您将看到以下警告消息:WARNING! libcap-ng library not found。

    3.验证PF_Ring Linux内核模块已成功加载:

    modinfo pf_ring
    cat /proc/net/pf_ring/info
    

    4.使用--enable-pfring选项和库的路径配置Suricata,并包含头文件。例如:

    LIBS="-lrt -lnuma"
    ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
    --enable-pfring --with-libpfring-includes=/usr/local/include \
    --with-libpfring-libraries=/usr/local/lib
    

    5.build & install

    make && make install
    

    6.采用PF_RING模式开启suricata:

    sudo suricata --pfring-int=eth0 --pfring-cluster-id=99 \
    --pfring-cluster-type=cluster_flow \
    -c /etc/suricata/suricata.yaml -D
    

    7.如果又需要,可以在suricata中优化PF_RING。yaml。eth0接口默认为开启状态:

    pfring:
    - interface: eth0
    threads: 1
    cluster-id: 99
    cluster-type: cluster_flow
    

    8.测试suricata的ids模式

    (1)创建/etc/suricata/rules/test.rules文件,并写入以下规则:

    alert http any any -> any any (msg:"Alarm detected"; content:"Alarm"; nocase; classtype:policy-violation; sid:1; rev:1;)”
    

    (2)将test.rules添加到suricata.yaml配置文件中的规则列表中。

    (3)在守护进程模式下手动启动Suricata:

    sudo suricata --pfring-int=eth0 --pfring-cluster-id=99 \
    --pfring-cluster-type=cluster_flow \
    -c /etc/suricata/suricata.yaml -D
    

    或者在不重启Suricata的情况下更新活动规则集:

    sudo kill -USR2 <suricata pid>
    

    (4)确认Suricata .log在Suricata启动后没有错误:

    tail -f /etc/suricata/suricata.log
    

    (5)发送任何带有"Alarm"字段的HTTP请求。例如:

    curl http://google.com/Alarm
    

    (6)查看Fast.log以验证Suricata是否生成警报消息:检测到警报:

    tail -f /etc/suricata/fast.log
    

    要查看更多PF_RING相关的话,可以去官网查看:

    相关文章

      网友评论

          本文标题:suricata的ips模式详解

          本文链接:https://www.haomeiwen.com/subject/iqbnzltx.html