6.33. Xbits关键字

设置、取消设置、切换和检查每个主机或IP对存储的位。

语法::

xbits:<set|unset|isset|isnotset|toggle>,<name>,track <ip_src|ip_dst|ip_pair>;
xbits:<set|unset|isset|toggle>,<name>,track <ip_src|ip_dst|ip_pair> \
    [,expire <seconds>];
xbits:<set|unset|isset|toggle>,<name>,track <ip_src|ip_dst|ip_pair> \
    [,expire <seconds>];

6.33.1. 笔记

6.33.1.1. Yaml设置

每个主机存储的位存储在主机表中。这意味着主机表设置会影响每个主机的主机位和Xbits。

每个IP对存储的位存储在IPPAir表中。这意味着ip pair表设置,尤其是memcap,会影响每个IP对的xbits。

6.33.1.2. 穿线

由于线程之间存在细微的时间问题,因此集合和检查的顺序可能有些不可预测。

6.33.1.3. Unix套接字

主机位可以通过Unix套接字添加、删除和列出。

添加::

suricatasc -c "add-hostbit <ip> <bit name> <expire in seconds>"
suricatasc -c "add-hostbit 1.2.3.4 blacklist 3600"

如果为现有主机位添加了主机位,则会更新其到期计时器。

删除::

suricatasc -c "remove-hostbit <ip> <bit name>"
suricatasc -c "remove-hostbit 1.2.3.4 blacklist"

列表::

suricatasc -c "list-hostbit <ip>"
suricatasc -c "list-hostbit 1.2.3.4"

结果是:

{
    "message":
    {
       "count": 1,
       "hostbits":
            [{
                "expire": 89,
                "name": "blacklist"
            }]
    },
    "return": "OK"
}

6.33.1.4. 实例

6.33.1.4.1. 创建ssh黑名单

下面是传入ssh服务器的规则示例。

前两个规则与机器人程序中常用的ssh软件版本相匹配。它们会中断通信,并为源IP创建一个“xbit”“badssh”。一小时后到期:

drop ssh any any -> $MYSERVER 22 (msg:"DROP libssh incoming";   \
  flow:to_server,established; ssh.softwareversion:"libssh";     \
  xbits:set, badssh, track ip_src, expire 3600; sid:4000000005;)
drop ssh any any -> $MYSERVER 22 (msg:"DROP PUTTY incoming";    \
  flow:to_server,established; ssh.softwareversion:"PUTTY";      \
  xbits:set, badssh, track ip_src, expire 3600; sid:4000000007;)

然后,下面的规则只会将任何传入的流量丢弃到该“badssh”列表中的服务器:

drop ssh any any -> $MYSERVER 22 (msg:"DROP BLACKLISTED";       \
  xbits:isset, badssh, track ip_src; sid:4000000006;)