10.43. Xbits 关键字

用于设置、取消、切换及检查基于主机或IP对存储的比特位。

语法:

xbits:<set|unset|isset|isnotset|toggle>,<名称>,track <ip_src|ip_dst|ip_pair>;
xbits:<set|unset|isset|toggle>,<名称>,track <ip_src|ip_dst|ip_pair> \
    [,expire <秒数>];
xbits:<set|unset|isset|toggle>,<名称>,track <ip_src|ip_dst|ip_pair> \
    [,expire <秒数>];

10.43.1. 注意事项

10.43.1.1. YAML配置

基于主机存储的比特位保存在主机表中。这意味着主机表配置会影响hostbits及基于主机的xbits。

基于IP对存储的比特位保存在IPPair表中。因此ippair表配置(特别是memcap)会影响基于ip_pair的xbits。

10.43.1.2. 线程机制

由于线程间存在微妙的时间差,设置与检查的执行顺序可能略有不可预测性。

10.43.1.3. Unix套接字

可通过unix套接字添加、删除和列出hostbits。

添加:

suricatasc -c "add-hostbit <IP> <比特名称> <过期秒数>"
suricatasc -c "add-hostbit 1.2.3.4 blacklist 3600"

若为已存在的hostbit添加,其过期计时器会被更新。

删除:

suricatasc -c "remove-hostbit <IP> <比特名称>"
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"
}

10.43.1.4. 示例

10.43.1.4.1. 创建SSH黑名单

以下是对SSH服务器入站流量的规则示例。

前两条规则匹配常用于僵尸程序的SSH软件版本。它们丢弃流量并为源IP设置有效期为1小时的'badssh' xbit标记:

drop ssh any any -> $MYSERVER 22 (msg:"丢弃入站libssh";   \
  flow:to_server,established; ssh.software; content:"libssh";     \
  xbits:set, badssh, track ip_src, expire 3600; sid:4000000005;)
drop ssh any any -> $MYSERVER 22 (msg:"丢弃入站PUTTY";    \
  flow:to_server,established; ssh.software; content:"PUTTY";      \
  xbits:set, badssh, track ip_src, expire 3600; sid:4000000007;)

随后这条规则直接丢弃该服务器上所有来自'badssh'列表IP的入站流量:

drop ssh any any -> $MYSERVER 22 (msg:"丢弃黑名单IP";       \
  xbits:isset, badssh, track ip_src; sid:4000000006;)