背景

为了进行对小鸡的流量审计。找了一圈后决定试试Proxmox+suricata的组合。

来自ChatGPT:


Suricata 是一个开源的入侵检测、预防和网络安全监视系统 (IDS/IPS/NSM)。它由 Open Information Security Foundation (OISF) 发展并维护。Suricata 是一个规则驱动的系统,其中规则和签名是用于检测网络入侵和恶意行为的主要部分。
Suricata 的主要功能包括:
入侵检测和防止 (IDS/IPS):Suricata 使用一个强大的规则和签名语言,可以检测对网络的各种攻击和威胁。
网络安全监视 (NSM):除了 IDS/IPS 功能外,Suricata 还可以作为一个网络安全监视器,提供对网络流量的详细观察和记录。
协议解析:Suricata 能够解析多种网络协议,包括 HTTP, FTP, TLS, SMB 和许多其他常见协议。这使得 Suricata 可以理解网络流量的上下文,以便更准确地检测威胁。
多线程:Suricata 采用多线程设计,可以充分利用现代多核 CPU 的能力,提供更高的性能。
输出模式:Suricata 提供多种输出模式,包括详细的日志文件,以及与其他网络安全工具(如 ELK stack,Moloch 等)的集成。
开源:Suricata 是完全开源的,这意味着任何人都可以查看和修改其代码,以适应其特定的需要。
它通常与像 pfSense 和 OPNsense 这样的防火墙软件一起使用,提供一种强大的、可定制的网络安全解决方案。

在Proxmox上安装Suricata

首先你得有一个安装好的Proxmox系统。由于Proxmox是完全基于Debian的,以下过程Debian也完全适用。理论上其他Linux发行版比如Ubuntu也适用。

在Proxmox的命令行执行:

apt-get install suricata
modprobe nfnetlink_queue

启用开机后自动加载nfnetlink_queue依赖模块

echo nfnetlink_queue > /etc/modules-load.d/suricata.conf

之后去proxmox的webui。找到左侧的Datacenter->firewall选项

确保firewall被全局地打开。

这样一来Suricata就算安装完了

配置Suricata

修改Suricata全局配置文件

nano /etc/suricata/suricata.yaml

将里面的

default-rule-path: /etc/suricata/rules

改成 default-rule-path: /var/lib/suricata/rules

如果你用的是独服并且虚拟机使用的是分配的公网ip(NAT鸡或者proxmox在内网里请忽略):

把 HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"

改成 HOME_NET: "[你的公网IP段/你的公网ip的网段]"

然后保存退出。

给防火墙添加转发流量到Suricata的规则

关于防火墙的配置,我们有两种方法。第一种是使用Proxmox自带的防火墙规则。优点是pve-firewall会自动加上相应的iptables规则,可以选择性地在指定的虚拟机上打开IPS。缺点是pve-firewall只会创建输入到虚拟机的流量的规则。完全不管输出的流量。第二种方法是我们手动创建iptables规则。优点是支持全局的IPS并且支持双向流量。缺点是得手动管理规则(我喜欢自动化)。

第一种

如果让Proxmox使用pve-firewall对虚拟机创建NFQUEUE的规则,需要在对应的虚拟机的防火墙文件加上

nano /etc/pve/firewall/<你的虚拟机id>.fw
[OPTIONS]
ips: 1
ips_queues: 0

第二种

如果想要手动地创建iptables规则

iptables -A INPUT -j NFQUEUE --queue-num 0 --queue-bypass
iptables -A FORWARD -j NFQUEUE --queue-num 0 --queue-bypass
iptables -A OUTPUT -j NFQUEUE --queue-num 0 --queue-bypass

这两个命令会把所有输入输出流量都转发到NFQUEUE(默认是第0个通道)进行处理。--queue-bypass的意思是当没有程序在监听nfqueue 0时会直接放走流量而不是drop掉。这保证了万一Suricata挂了我们的主机也不会失联。

Suricarta默认设置会监听NFQUEUE 0并决定数据的去留。

下载并更新Suricata的检测规则

接下来我们就可以来下载Suricata的检测规则了

运行以下命令来更新我们本地的规则集:

suricata-update

等命令跑完后我们的规则集就下载好了

使Suricata运行在NFQUEUE模式

接下来要修改systemd service脚本来使suricata运行在nfqueue模式。

nano /etc/systemd/system/multi-user.target.wants/suricata.service

将ExecStart行改成

ExecStart=/usr/bin/suricata -D -c /etc/suricata/suricata.yaml --pidfile /run/suricata.pid -q 0               #使用NFQUEUE 0

接下来运行Suricata来验证运行状态

systemctl daemon-reload
systemctl start suricata.service

看看规则是否被成功加载:

cat /var/log/suricata/suricata.log | grep "rule files processed"

如果输出是类似于这个,证明规则成功加载了

15/6/2023 -- 23:10:21 - <Info> - 1 rule files processed. 34178 rules successfully loaded, 0 rules failed

Suricata已经成功运行了。但是如果Suricata使用了太多规则集,内存会有点吃不消。我们可以只启用部分我们感兴趣的规则集。

下一步我们需要进行Suricata的规则集管理。

通过suricata-update来管理规则

方法非常简单。运行

suricata-update list-sources

可以看到suricata-update自带的规则来源列表。默认情况下只有et/open是被启用的。一般情况下et/open已经包含了非常多规则集供我们使用了。

也可以开启其他我们想要的规则集:

suricata-update enable-source 规则集名称     #启用
suricata-update disable-source 规则集名称    #禁用

在et/open有非常多种类的子集规则:https://tools.emergingthreats.net/docs/ETPro%20Rule%20Categories.pdf

默认是全部启用的,可以通过以下方法禁用指定的子集规则:

nano /etc/suricata/disable.conf

# Disable come with installation rules
group:app-layer-events.rules
group:decoder-events.rules
group:dhcp-events.rules
group:dnp3-events.rules
group:dns-events.rules
group:files.rules
group:http-events.rules
group:ipsec-events.rules
group:kerberos-events.rules
group:modbus-events.rules
group:nfs-events.rules
group:ntp-events.rules
group:smb-events.rules
group:smtp-events.rules
group:stream-events.rules
group:tls-events.rules
# Disable ET/Open Rules
group:3coresec.rules
group:botcc.portgrouped.rules
group:botcc.rules
group:ciarmy.rules
group:compromised.rules
group:drop.rules
group:dshield.rules
group:emerging-activex.rules
group:emerging-adware_pup.rules
group:emerging-attack_response.rules
group:emerging-chat.rules
group:emerging-coinminer.rules
group:emerging-current_events.rules
group:emerging-deleted.rules
group:emerging-dns.rules
group:emerging-dos.rules
group:emerging-exploit_kit.rules
group:emerging-exploit.rules
group:emerging-ftp.rules
group:emerging-games.rules
group:emerging-hunting.rules
group:emerging-icmp_info.rules
group:emerging-icmp.rules
group:emerging-imap.rules
group:emerging-inappropriate.rules
group:emerging-info.rules
group:emerging-ja3.rules
group:emerging-malware.rules
group:emerging-misc.rules
group:emerging-mobile_malware.rules
group:emerging-netbios.rules
group:emerging-p2p.rules
group:emerging-phishing.rules
group:emerging-policy.rules
group:emerging-pop3.rules
group:emerging-rpc.rules
group:emerging-scada.rules
group:emerging-scan.rules
group:emerging-shellcode.rules
group:emerging-smtp.rules
group:emerging-snmp.rules
group:emerging-sql.rules
group:emerging-telnet.rules
group:emerging-tftp.rules
group:emerging-user_agents.rules
group:emerging-voip.rules
group:emerging-web_client.rules
group:emerging-web_server.rules
group:emerging-web_specific_apps.rules
group:emerging-worm.rules
group:threatview_CS_c2.rules
group:tor.rules

然后执行

suricata-update
systemctl restart suricata.service               #重启Suricata

如果想启用某些规则就手动注释掉对应的行就行。

如果想让某些规则变成触发后拦截(Drop)流量,可以把对应的规则加到/etc/suricata/drop.conf里去。

也可以用crontab来定时更新最新规则,这里就略过了。

这样一来Suricata就大致设置好了。

进阶

可以使用ELK Stack配合Filebeat导出Suricata日志来实现可视化数据分析

参考: