Suricata / Filebeat / ELK - iptables tee - 创建虚拟主机

Suricata / Filebeat / ELK - iptables tee - 创建虚拟主机

我的IDS设置如下:

硬件/接口

WAN <----(brwan)> ROUTER / AP <(br0)----> LAN
                                    \
                                     -----(eth1)> |
                                      \           | IDS device listening on eth1
                                       ---(eth0)> |

在路由器上,我使用这些 iptables 规则将流量传送到 IDS:

-A INPUT ! -s IDS_ETH1_IP/32 ! -i lo -j TEE --gateway IDS_ETH1_IP
-A FORWARD ! -s IDS_ETH1_IP/32 ! -d IDS_ETH1_IP/32 -j TEE --gateway IDS_ETH1_IP
-A OUTPUT ! -d IDS_ETH1_IP/32 ! -o lo -j TEE --gateway IDS_ETH1_IP

IDS_ETH1_IP 是一个固定 IP,位于我的 LAN 子网之外。

仍然在路由器上,设置到 IDS_ETH1_IP 的路由:

~$ ip r s
(…)
IDS_ETH1_IP dev br0 scope link

在 IDS 设备上,eth1 设置如下:

~$ ip a s dev eth1
3: eth1: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether IDS_ETH1_MAC brd ff:ff:ff:ff:ff:ff
    inet IDS_ETH1_IP/32 scope global noprefixroute eth1
       valid_lft forever preferred_lft forever

使用以下命令确保它只是一个监听设备:

ip link set dev eth1 multicast off
ethtool -K eth1 gro off gso off lro off rx off rxvlan off sg off tso off tx off txvlan off
ethtool -G eth1 rx 4096

iptables -t raw -F PREROUTING
iptables -t raw -A PREROUTING -i eth1 -j DROP

注意:我需要在接口上保持 ARP 开启,因为如果我启用 NOARP,那么各种交换机将无法识别 MAC,因此数据包将被发送到 LAN 上的每个设备/接口(WiFi 除外)。

以及 sysctl 设置(仍在 IDS 设备上):

net.ipv4.conf.eth1.accept_redirects = 0
net.ipv4.conf.eth1.accept_source_route = 0
net.ipv4.conf.eth1.forwarding = 0
net.ipv4.conf.eth1.promote_secondaries = 0
net.ipv4.conf.eth1.secure_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
net.ipv4.conf.eth1.shared_media = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.all.arp_ignore = 1

all.arp_ignore强制接口仅回答自己的 arp 查询至关重要。

软件

在 IDS 设备上,我安装了 Suricata(使用 AF_PACKETS 监听 eth1)和 Filebeat,以将数据发送到我的 LAN 上另一台具有 ELK docker 堆栈(Elasticsearch、Kibana 和 Evebox)的设备。

我花了一点时间来设置所有这些并最终达到这里描述的设置,并且效果很好。

问题

现在,在路由器上使用 iptables TEE 规则的好处在于,我可以决定在哪里进行分接。我在 WAN 端遵循防火墙规则(无需对已阻止的数据包发出警报),并且它允许根据 FORWARD 表上分接的内容了解数据包在 LAN 中的去向。它还会分接进出路由器本身的内容(输入/输出)。

我想做的是找到一种方法,在日志中区分 LAN 端和 WAN 端的窃听内容。例如,我可以详细说明 iptables 规则以区分-i brwan-o brwan-i br0-o br0这很容易,但如何在发送的数据包中区分它们?标记数据包不会在设备之间传递。也许在 IDS 设备上创建具有不同 IP 和 MAC 的 eth1 子接口?并相应地发送?如果我这样做,如何创建不同的虚拟的设备与 filebeat 以便我可以在 kibana 中区分它们?

有什么想法我可以做点什么来实现这个目标吗?以及如何利用我现有的系统改进我的 IDS 系统?

谢谢。

相关内容