背景
为了进行对小鸡的流量审计。找了一圈后决定试试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日志来实现可视化数据分析
参考:
- Proxmox VE Firewall (Poxmox安装Suricata官方文档)
- 13. Setting up IPS/inline for Linux — Suricata 6.0.0 documentation (Suricata官方文档)