Snort 正在接收流量,但似乎没有应用规则

Cli*_*ong 11 iptables ips snort

我已经通过 NFQUEUE 在本地(因为我可以走进隔壁房间并触摸它)网关上安装了 snort 并以内联模式运行。我的 中有以下规则/etc/snort/rules/snort.rules

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"ET CURRENT_EVENTS D-LINK Router Backdoor via Specific UA"; flow:to_server,established; content:"xmlset_roodkcableoj28840ybtide"; http_header; pcre:"/^User-Agent\x3a[^\r\n]*?xmlset_roodkcableoj28840ybtide/Hm"; reference:url,www.devttys0.com/2013/10/reverse-engineering-a-d-link-backdoor/; classtype:attempted-admin; sid:2017590; rev:2; metadata:created_at 2013_10_13, updated_at 2013_10_13;)
Run Code Online (Sandbox Code Playgroud)

此规则与在某些 DLink 路由器中发现的后门有关。我选择这个规则是因为它看起来很容易测试。规则本身是由来自新兴威胁的 pullpork 添加的,所以我认为规则语法是正确的。

为了进行测试,我在面向 Internet 的端口 80 上使用 lighttpd 配置了我的网关,并确认它可以访问。然后,在远程机器上,我运行了命令curl -A 'xmlset_roodkcableoj28840ybtide' 'http://<EXTERNAL_IP>'。这会立即将来自 lighttpd 的响应打印到控制台并退出。网关上不会生成 Snort 警报。

此外,netfilter 似乎只使用了我正在运行的四个 snort 进程中的两个。我可以看到这一点,htop因为 CPU 1 和 2 上的 snort 进程在使用 bittorrent 进行测试时会产生沉重的负载……但 CPU 0 和 3 上的 snort 进程仍然完全空闲。

我的测试方法是错误的吗?或者 snort 没有在应该发出警报时发出警报(即由于配置错误)?我会在哪里查看为什么 netfilter 不能平衡所有四个队列之间的流量?

配置

我的 Snort/Netfilter 配置

我的 netfilter 链的具体相关部分是:

Chain wan-fw (1 references)
 pkts bytes target     prot opt in     out     source               destination         
25766 2960K smurfs     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate INVALID,NEW,UNTRACKED
    4  1380 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpts:67:68
 4267  246K tcpflags   tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           
 3820  550K ~comb0     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate ESTABLISHED     <<=== this one for established connections ====!
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate RELATED
  937 79669 DROP       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp flags:!0x17/0x02
   13   506 DROP       icmp --  *      *       0.0.0.0/0            0.0.0.0/0            icmptype 8 /* Ping */
    4   240 ~log0      tcp  --  *      *       <remote_server>      0.0.0.0/0            tcp dpt:80 /* Tiphares Allowed In */     <<=== this one for new connections ====!
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type BROADCAST
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type ANYCAST
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type MULTICAST
21506 2454K NFLOG      all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: up to 1/sec burst 10 mode srcip nflog-prefix  "IPv4 wan-fw REJECT " nflog-threshold 1
24808 2878K reject     all  --  *      *       0.0.0.0/0            0.0.0.0/0           [goto] 
Run Code Online (Sandbox Code Playgroud)
Chain ~log0 (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    4   240 NFLOG      all  --  *      *       0.0.0.0/0            0.0.0.0/0            limit: up to 1/sec burst 10 mode srcip /* Tiphares Allowed In */ nflog-prefix  "IPv4 HTTPTest NFQUEUE " nflog-group 1 nflog-threshold 1
    4   240 NFQUEUE    all  --  *      *       0.0.0.0/0            0.0.0.0/0            /* Tiphares Allowed In */ NFQUEUE balance 0:3 bypass cpu-fanout     <<=== passes packets to one of 4 snort processes ====!
Run Code Online (Sandbox Code Playgroud)
Chain ~comb0 (4 references)
 pkts bytes target     prot opt in     out     source               destination         
 474K  196M NFQUEUE    all  --  *      *       0.0.0.0/0            0.0.0.0/0            ctstate ESTABLISHED NFQUEUE balance 0:3 bypass cpu-fanout     <<=== all established connections from 'wan' are monitored by snort ====!
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0      
Run Code Online (Sandbox Code Playgroud)

额外的皱纹:

我不确定它是否相关。我发现我的网关上似乎有什么东西向互联网上的 IP 发送 TCP 重置数据包。并且这些数据包与现有连接无关。

鉴于在此网关后面的机器上使用 bittorrent 时会发生这种情况,并且大多数重置数据包将 torrent 端口列为源端口,对我来说唯一有意义的是,当它阻塞某些东西时,这是 snort 发送重置(是吗? )。

但是我使用 nfqueue daq...所以,如果它是 snort,那么为什么 snort 以一种 netfilter 认为是新连接的方式发送这些数据包,而不是将数据包直接插入 netfilter 链并将它们与现有的关联它阻塞的连接?而且,snort 没有设置为丢弃数据包或发送重置(仅警报)......那么它为什么要这样做呢?因此,为什么我不确定这是 snort 正在做的事情。

其他信息

根据@Lenniey 的建议,我还使用curl -A 'asafaweb.com' http://server-ip. 这也没有产生警报。我仔细检查了我的规则文件中是否存在针对此的规则。那里有两个:

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"ET POLICY ASafaWeb Scan User-Agent (asafaweb.com)"; flow:established,to_server; content:"User-Agent|3a| asafaweb.com|0d 0a|"; http_header; reference:url,asafaweb.com; classtype:network-scan; sid:2014233; rev:2; metadata:created_at 2012_02_16, updated_at 2012_02_16;)
Run Code Online (Sandbox Code Playgroud)

alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"MALWARE-CNC User-Agent ASafaWeb Scan"; flow:to_server,established; content:"User-Agent|3A| asafaweb.com"; fast_pattern:only; http_header; metadata:policy balanced-ips alert, policy security-ips drop, ruleset community, service http; reference:url,asafaweb.com; classtype:network-scan; sid:21327; rev:7;)
Run Code Online (Sandbox Code Playgroud)

我也更新了我的配置。我上传的那个显然是旧的(对于 http netfilter 规则显示 ACCEPT 而不是 NFQUEUE)。

Len*_*iey 5

在聊天中“解决”。

在调试了几乎所有内容(iptables + NFQUEUE、systemd.service 和插入单元、snort 警报等)之后,问题出在测试的方式上。

通常,snort 作为内联 IDS/IPS 本身并不被定义为检查可疑流量,而只是检查 HOME_NET(又名本地 LAN 子网),而不是检查其自己的公共 IP。原始规则针对该公共 IP 进行了测试,因此没有生成任何警报,因为警报的默认值类似于EXTERNAL_NET any -> HOME_NET any.