提问人:19mike95 提问时间:7/5/2023 更新时间:7/11/2023 访问量:378
如何将流量镜像到 Suricata 容器
How to mirror traffic to Suricata container
问:
我的目标是使用 suricata 嗅探“攻击者”容器的所有流量,以便其所有可疑流量发出警报跳跃。所以我的计划是这样的:
这样两个容器都可以通过主机访问互联网,my_network和另一个网络(攻击网络),我会在my_network中镜像攻击者的流量,以便 suricata 可以监听它。为了镜像流量,我正在使用 Daemonlogger 和 .
为了实现这一目标,我有以下docker-compose.yml:daemonlogger -i eth1 -o eth0
version: "3.8"
services:
suricata:
container_name: suricata
build: ./suricata
depends_on:
- syslog
networks:
my_network:
ipv4_address: 172.16.238.10
attacknet:
ipv4_address: 172.16.233.10
attacker:
container_name: attacker
build: ./attacker
networks:
my_network:
ipv4_address: 172.16.238.11
attacknet:
ipv4_address: 172.16.233.11
networks:
my_network:
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
attacknet:
ipam:
driver: default
config:
- subnet: 172.16.233.0/24
但它不起作用,苏里卡塔没有得到流量。我做错了什么?或者,也许你有另一种方法来实现我的最终目标?
答:
您可以尝试在 Docker 主机上使用 iptables
和 tee
将流量镜像到另一个(桥接网络)接口,该接口可能是 Suricata 容器使用的接口。
您将:
在 Docker 主机中创建一个网桥,例如 ,并为其分配一个 IP 地址。(您可能需要先安装软件包)
br0
bridge-utils
sudo brctl addbr br0 # create a new bridge named br0 sudo ip addr add 192.168.1.1/24 dev br0 # assign the IP address 192.168.1.1 with a netmask of 255.255.255.0 to br0
将 “” 和 “” 容器分配给与 br0 关联的同一 Docker 网络。
(见下文)attacker
suricata
docker-compose.yml
使用和复制流量:
iptables
tee
iptables -t mangle -A PREROUTING -i br0 ! -s <suricata IP> -j TEE --gateway <suricata IP>
设置 Suricata 以侦听其网络接口。
首先检查接口名称的名称:查找与“攻击者”容器在同一网络上具有 IP 地址的接口。 然后编辑 , 部分 , 放 .编辑后:.docker exec -it suricata bash -c "ip addr"
/etc/suricata/suricata.yaml
af-packet:
- interface: eth1
service suricata restart
以下是基于您的文件的更新:docker-compose.yml
version: "3.8"
services:
suricata:
container_name: suricata
build: ./suricata
networks:
attacknet:
ipv4_address: 172.16.238.10
attacker:
container_name: attacker
build: ./attacker
networks:
attacknet:
ipv4_address: 172.16.238.11
networks:
attacknet:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
在该配置中,Suricata 和攻击者位于同一 Docker 网络上。如上所述,您可以设置将流量从攻击者镜像到 Suricata。iptables
这仍然是一个高级草图,可能需要根据您的特定设置进行调整。
而上面提到的规则只是一个简单的例子,要根据你感兴趣的流量(入站、出站等)进行调整,确保不要产生流量循环。iptables
如果尝试在云平台上运行此设置,则由于云提供商的网络虚拟化施加的限制,网络接口镜像选项可能不可用。您可能需要考虑在裸机或自我管理的虚拟化环境中运行此设置,至少用于测试它。
另一种方法是使用网络功能虚拟化平台,例如 TNSR 或 pfSense,它可以将数据包从一个接口镜像到另一个接口。
当您说“将”攻击者“和”suricata“容器分配给与 br0 关联的同一 Docker 网络时,您如何在 docker-compose 文件中实际定义它?
我没有看到文件中的关系,不是 Ips,也没有提到接口 br0。
在 Docker 中,当您在 docker-compose.yml
文件中定义网络并将该网络分配给服务时,Docker 将自动为该网络创建一个网桥,并将服务的容器连接到该网桥。桥将由 Docker 自动分配一个名称,并且不会在文件中明确提及。docker-compose.yml
在您的文件中,您定义了一个名为的网络,并将其分配给您的和服务:docker-compose.yml
attacknet
suricata
attacker
services:
suricata:
container_name: suricata
build: ./suricata
networks:
attacknet:
ipv4_address: 172.16.238.10
attacker:
container_name: attacker
build: ./attacker
networks:
attacknet:
ipv4_address: 172.16.238.11
networks:
attacknet:
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
当您使用 启动这些服务时,Docker 将为网络创建一个新的网桥,并为其分配 和 容器。您的文件中未指定网桥的实际名称(可能类似于 ),但您可以通过运行命令 docker network inspect attacknet
来找到它。docker-compose up
attacknet
suricata
attacker
br-<random ID>
docker-compose.yml
所以当我提到时,这是一个假设的例子。在设置的上下文中,可以替换为 Docker 为网络创建的实际桥接接口。br0
br0
attacknet
分配给服务的 IPv4 地址 ( 和 ) 是这些服务在网络中将具有的地址。网络 () 的子网也在文件中定义。172.16.238.10
172.16.238.11
attacknet
attacknet
172.16.238.0/24
docker-compose.yml
评论