总体情况:我需要构建一个自动测试环境,以便我测试端口扫描工具。
这是我用作游乐场的 github 存储库:https://github.com/WojciechMigda/tested-scanners
我拥有的:
- 两个(将会有更多)容器正在运行
snmpd
,连接到自定义 ipv4 和 ipv6 网络net-snmpd
,连接到br-snmpd
主机接口。 - 我可以
ping
和ping6
来自主机的容器。 nmap
可以通过 ipv4 和 ipv6 网络对端口 161 执行健全性扫描。注意:nmap
在IP层级别运行。它将 IP 探测数据包发送到br-snmpd
接口。
问题:
我也在运行masscan
进行端口扫描。与nmap
masscan
在以太网层上操作相反。默认情况下,当未显式指定接口时,masscan
使用主机的 eth0 接口。选择此接口是因为默认路由通向该接口。不幸的是,masscan
无法检测到容器上的开放端口。
但是,masscan
也可以通过指定网络接口(br-snmpd
而不是eth0
)和关联路由器的 MAC 来运行。通过这样的设置,masscan
容器上的端口检测成功。
我尝试更改不同的内容,但无法找到缺失的部分 - 需要额外配置什么才能masscan
通过接口成功扫描容器上的端口eth0
?
我想要实现的另一个设置是有一个与 关联的路由器(网关?)br-snmpd
,这样当br-snmpd
选择 为工作接口时,masscan
它将尝试发现非空路由器 IP 地址的路由器 MAC。
docker-compose.yml
:https://github.com/WojciechMigda/tested-scanners/blob/main/tests/resources/docker-compose.yml
github 操作工作流程:https://github.com/WojciechMigda/tested-scanners/blob/main/.github/workflows/test.yml
工作流程之一运行:https://github.com/WojciechMigda/tested-scanners/actions/runs/4813378705/jobs/8569841427
ip -4 addr
ip -6 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
inet 10.1.24.5/16 metric 100 brd 10.1.255.255 scope global eth0
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
4: br-snmpd: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
inet 10.9.0.1/24 brd 10.9.0.255 scope global br-snmpd
valid_lft forever preferred_lft forever
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 fe80::6245:bdff:fe7a:4922/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 state DOWN
inet6 2001:db8:1::1/64 scope global tentative
valid_lft forever preferred_lft forever
inet6 fe80::1/64 scope link tentative
valid_lft forever preferred_lft forever
4: br-snmpd: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 2001:db8:1:1::1/120 scope global
valid_lft forever preferred_lft forever
inet6 fe80::42:31ff:fed7:61d3/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::1/64 scope link
valid_lft forever preferred_lft forever
6: veth58fff89@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 fe80::14f4:fcff:fe3c:2b8a/64 scope link
valid_lft forever preferred_lft forever
8: veth55e96c9@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP
inet6 fe80::d471:a4ff:febf:8273/64 scope link
valid_lft forever preferred_lft forever
ip -4 route
ip -6 route
default via 10.1.0.1 dev eth0 proto dhcp src 10.1.24.5 metric 100
10.1.0.0/16 dev eth0 proto kernel scope link src 10.1.24.5 metric 100
10.1.0.1 dev eth0 proto dhcp scope link src 10.1.24.5 metric 100
10.9.0.0/24 dev br-snmpd proto kernel scope link src 10.9.0.1
168.63.129.16 via 10.1.0.1 dev eth0 proto dhcp src 10.1.24.5 metric 100
169.254.169.254 via 10.1.0.1 dev eth0 proto dhcp src 10.1.24.5 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
::1 dev lo proto kernel metric 256 pref medium
2001:db8:1::/64 dev docker0 proto kernel metric 256 linkdown pref medium
2001:db8:1::/64 dev docker0 metric 1024 linkdown pref medium
2001:db8:1:1::/120 dev br-snmpd proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev docker0 proto kernel metric 256 linkdown pref medium
fe80::/64 dev br-snmpd proto kernel metric 256 pref medium
fe80::/64 dev veth58fff89 proto kernel metric 256 pref medium
fe80::/64 dev veth55e96c9 proto kernel metric 256 pref medium
答案1
事实证明,按照设计,eth0
进入容器的流量是被禁用的。
此外,过了一段时间,我意识到更方便、更好的解决方案将涉及在容器内运行扫描仪,然后让扫描目标在 LAN 容器中运行,或者在通过对等bird
路由器连接的单独网络中运行的容器中运行。