【Suricata】02-Suricata 7.0.x基础配置

目录

1.指定内部IP和外部网络

2.指定suricata检测网络流量的网络借口

2.1 监听单张网卡

2.2 监听两张网卡

3.设置suricata规则路径

4.更新suricata规则集

4.1 查看规则提供程序集

4.2 添加规则集

5. 测试规则集

5.1 测试suricata配置

5.2 启动suricata

5.3 发送请求到testmynids.org测试suricata

6. 日志轮训

6.1 eve.json日志

6.2 fast.log日志

7. suricata通过filebeat将日志发送到kafka


1.指定内部IP和外部网络

编辑配置文件/etc/suricata/suricata.yaml

对于HOME_NET指令,指定系统IP地址

HOME_NET: "[192.168.3.0/24]"

将EXTERNAL_NET指令设置为!$HOME_NET

EXTERNAL_NET:"!$HOME_NET"

2.指定suricata检测网络流量的网络借口

2.1 监听单张网卡

设置系统网络监听接口名称为:enp1s0

2.2 监听两张网卡

配置示例:

# 定义全局设置  
global:  
  # ... 其他全局配置 ...  
  
# 定义af-packet监听器  
af-packet:  
  # 监听器1:用于eth0网卡  
  - interface: eth0  
    threads: 1 # 根据需要调整线程数  
    cluster-id: 99 # 如果使用集群功能,请设置相应的ID  
    cluster-type: auto  
    # 其他可能的参数,如cluster-queue-length等,根据需求设置  
    # cluster-type设置为auto表示Suricata将自动选择最佳的集群类型。
  
  # 监听器2:用于eth1网卡  
  - interface: eth1  
    threads: 1 # 根据需要调整线程数  
    cluster-id: 100 # 如果使用集群功能,请设置相应的ID(确保与上一个不同)  
    cluster-type: auto  
    # 其他可能的参数,如cluster-queue-length等,根据需求设置  
    # cluster-type设置为auto表示Suricata将自动选择最佳的集群类型。
  
# ... 其他配置,如规则文件、输出设置等 ...

我的配置如下:

af-packet:
  - interface: ens1f0
    # Number of receive threads. "auto" uses the number of cores
    #threads: auto
    # Default clusterid. AF_PACKET will load balance packets based on flow.
    cluster-id: 99

  - interface: ens1f1
    # Number of receive threads. "auto" uses the number of cores
    #threads: auto
    # Default clusterid. AF_PACKET will load balance packets based on flow.
    cluster-id: 100

注:建议将不同网卡的Cluster-ID设置为不同的值。

Cluster-ID用于在负载平衡时为相应的接口进行分组线程。当Suricata使用af-packet抓包驱动时,它可以基于流量对数据包进行负载均衡。这个过程中,Cluster-ID起到了关键作用:

  • 流量分配:Cluster-ID允许Suricata根据网络流量的特性将数据包分配到不同的处理线程或核心上。这样做可以提高处理效率,特别是在多核处理器系统中。
  • 接口分组:在配置多个网络接口时,为每个接口指定一个独特的Cluster-ID可以确保它们在负载均衡过程中被正确处理。这样可以避免数据包处理时的冲突或重复。
  • 性能优化:结合其他参数,如cluster-type和硬件特性(例如RSS队列),Cluster-ID可以帮助优化Suricata的性能,特别是在高性能网络环境中。

cluster-flow

是cluster-type的一个可能值。当设置为cluster-flow时,Suricata将使用基于流的集群模式。在这种模式下,流量将根据流(例如,具有相同源和目标IP地址以及端口的TCP或UDP会话)在集群中的不同节点之间进行分配。这有助于确保同一流的所有数据包都由同一个Suricata实例处理,从而简化了状态管理和数据处理。

使用cluster-flow模式时,Suricata会利用某种形式的流量分配机制(如哈希函数)来确定每个流应该被发送到哪个节点。这样可以实现负载均衡,并确保流量在集群中的节点之间均匀分布。

3.设置suricata规则路径

将default-rule-path属性设置为/etc/suricata/rules

设置完成后,重启suricata服务

4.更新suricata规则集

默认情况下,suricata附带一组有限的检测规则,位于/etc/suricata/rules目录中,然而,这些被认为在检测入侵方面很弱且无效。需要加载被认为是suricata最全面的规则集,ET规则。

suricata提供了一个名为 suricata-update 的工具,用于更新规则集。

sudo suricata-update -o /etc/suricata/rules

4.1 查看规则提供程序集

suricata-update工具允许您从规则集提供者那里获取规则,有些是免费的,例如ET OPEN set,有些则需要付费订阅。

列出默认的规则提供程序集。

sudo suricata-upate list-sources

4.2 添加规则集

添加规则集,例如 tgreen/hunting 规则集,

sudo suricata-update enable-source tgreen/hunting

5. 测试规则集

5.1 测试suricata配置

在开始测试suricata之前,先测试下配置是否正常

sudo suricata -T -c /etc/suricata/suricata.yaml -v

确认没有报错后,在启动suricata。

5.2 启动suricata

如果是通过包管理器直接安装的suricata,则可以通过systemctl来启动和查看suricata。

sudo systemctl start suricata
sudo systemctl enable suricata
sudo systemctl status suricata

如果是手动编译安装suricata,则通过命令来启动suricata。

suricata -c /etc/suricata/suricata.yaml -i enp1s0

为suricata添加守护进程,使用systemctl来管理。

cd /lib/systemd/system/
vim suricata.service

suricata.service的内容如下:

[Unit]
Description=Suricata IDS/IDP daemon
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=forking
#Environment=LD_PRELOAD=/usr/lib/libtcmalloc_minimal.so.4
PIDFile=/run/suricata.pid
ExecStart=/usr/bin/suricata -D --af-packet -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid
ExecReload=/usr/bin/suricatasc -c reload-rules ; /bin/kill -HUP $MAINPID
ExecStop=/usr/bin/suricatasc -c shutdown
Restart=on-failure
RestartSec=15
ProtectSystem=full
ProtectHome=true

[Install]
WantedBy=multi-user.target

5.3 发送请求到testmynids.org测试suricata

通过向作为NIDS(网络入侵和检测系统)框架的testmynids.org网站发送HTTP请求。

将使用签名ID 2100498测试IDS功能。

curl http://testmynids.org/uid/index.html

得到以下输出。

uid=0(root) gid=0(root) groups=0(root)

发送到HTTP请求旨在通过模仿id命令的输出来出发报警,该命令可能通过shell在受感染的远程系统上运行。

现在筛选suricata的日志来获取相应的警报。

suricata附带两个默认启用的日志文件。

/var/log/suricata/fast.log
/var/log/suricata/eve.log

使用grep命令在/var/log/suriata/fast.log日志文件中检查与curl请求相对应的日志条目。使用 2100498 规则标识符来搜索日志条目。

grep 2100498 /var/log/suricata/fast.log

将获得以下表示入侵的输出。

08/05/2023-22:49:50.170203  [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 18.66.122.56:80 -> 192.168.3.36:40334

或者,检查/var/log/suricata/eve.log日志文件中的签名ID 2100498

apt install jq
jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json
sec@dyp-elk:~$ jq 'select(.alert .signature_id==2100498)' /var/log/suricata/eve.json
{
  "timestamp": "2023-08-05T22:49:50.170203+0800",
  "flow_id": 1402112037181580,
  "in_iface": "enp1s0",
  "event_type": "alert",
  "src_ip": "18.66.122.56",
  "src_port": 80,
  "dest_ip": "192.168.3.36",
  "dest_port": 40334,
  "proto": "TCP",
  "pkt_src": "wire/pcap",
  "alert": {
    "action": "allowed",
    "gid": 1,
    "signature_id": 2100498,
    "rev": 7,
    "signature": "GPL ATTACK_RESPONSE id check returned root",
    "category": "Potentially Bad Traffic",
    "severity": 2,
    "metadata": {
      "created_at": [
        "2010_09_23"
      ],
      "updated_at": [
        "2010_09_23"
      ]
    }
  },
  "http": {
    "hostname": "testmynids.org",
    "url": "/uid/index.html",
    "http_user_agent": "curl/7.74.0",
    "http_content_type": "text/html",
    "http_method": "GET",
    "protocol": "HTTP/1.1",
    "status": 200,
    "length": 39
  },
  "files": [
    {
      "filename": "/uid/index.html",
      "gaps": false,
      "state": "CLOSED",
      "stored": false,
      "size": 39,
      "tx_id": 0
    }
  ],
  "app_proto": "http",
  "direction": "to_client",
  "flow": {
    "pkts_toserver": 7,
    "pkts_toclient": 5,
    "bytes_toserver": 562,
    "bytes_toclient": 888,
    "start": "2023-08-05T22:49:48.981814+0800",
    "src_ip": "192.168.3.36",
    "dest_ip": "18.66.122.56",
    "src_port": 40334,
    "dest_port": 80
  }
}
sec@dyp-elk:~$ 

6. 日志轮训

suricata通过logrotate配置日志轮训,自动切割日志。防止单个日志文件过大。

6.1 eve.json日志

vim /etc/logrotate.d/suricata-eve
/var/log/suricata/eve.json {  
   daily  
   rotate 3  
   maxsize 2048M  
   noolddir
   missingok  
   notifempty  
   dateext  
   dateformat %Y-%m-%d-%s
   postrotate  
   /bin/kill -HUP $(cat /var/run/suricata.pid)  
   endscript  
}

6.2 fast.log日志

vim /etc/logrotate.d/suricata-fast
/var/log/suricata/fast.log {  
   daily  
   rotate 3
   maxsize 2048M  
   noolddir
   missingok  
   notifempty  
   dateext  
   dateformat %Y-%m-%d-%s
   postrotate  
   /bin/kill -HUP $(cat /var/run/suricata.pid)  
   endscript  
}

强制执行,测试是否配置成功

sudo logrotate -f /etc/logrotate.d/suricata-eve

每天自动执行

cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf

 也可以配置定时任务来执行,每五分钟执行一次日志轮训命令

crontab -u root -e
*/5 * * * * /usr/sbin/logrotate /etc/logrotate.conf 

7. suricata通过filebeat将日志发送到kafka

可选,如果想将suricata日志发送到态势平台分析使用,可以发送到kafka来进行无边界数据流的接收。

配置文件filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/suricata/eve.json
  fields:
    topic: wuhan-ndr-suricata
  time_zone: "Asia/Shanghai"


output.kafka:
  hosts: ["x.x.x.x:9092"]
  topic: '%{[fields.topic]}'
  code.json: true

  • 25
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simo2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值