我正在使用 Mikrotik“hAP ac”路由器自学基本的家庭网络。我现在正在研究防火墙规则,但我真的很难理解为什么一个非常简单的规则不起作用。
我的测试网络非常简单:
RasPi(10.0.0.253)--- LAN 电缆 --- Mikrotik(10.0.0.1)--- LAN 电缆 --- PC(10.0.0.254)。
首先,PC 可以成功 ping RasPi。作为一个学习实验,我认为添加防火墙来阻止 PC ping RasPi 是一个好主意,这样我就可以轻松验证防火墙规则是否有效。
在 Mikrotik 路由器上我添加了一个向前规则降低 ICMP数据包到目的地地址10.0.0.253。然后我将其移至列表上方,使其成为规则 #1。所有其他防火墙规则都是此设备的出厂标准。在我看来,这应该可以完全阻止所有主机 ping RasPi。
但是,我仍然可以从 PC 成功 ping 通 10.0.0.253 主机。
Mikrotik 中的防火墙过滤器表数据包计数器表明没有特定规则对 ping 数据包进行计数,这使我相信隐含的“让一切通过”规则只是允许它们发生。
这是防火墙过滤器的转储,除了我添加的#1之外,其他都是工厂标准......
# jan/ 2/1970 12:44:34 by RouterOS 6.45.9
# software id = LPQ2-0CJJ
#
Flags: X - disabled, I - invalid, D - dynamic
0 D ;;; special dummy rule to show fasttrack counters
chain=forward action=passthrough
1 ;;; --------------------------------------------------------------THIS ONE!
chain=forward action=drop connection-state="" protocol=icmp
dst-address=10.0.0.253 log=no log-prefix=""
2 ;;; defconf: accept established,related,untracked
chain=input action=accept
connection-state=established,related,untracked
3 ;;; defconf: drop invalid
chain=input action=drop connection-state=invalid
4 ;;; defconf: accept ICMP
chain=input action=accept protocol=icmp
5 ;;; defconf: accept to local loopback (for CAPsMAN)
chain=input action=accept dst-address=127.0.0.1
6 ;;; defconf: drop all not coming from LAN
chain=input action=drop in-interface-list=!LAN
7 ;;; defconf: accept in ipsec policy
chain=forward action=accept ipsec-policy=in,ipsec
8 ;;; defconf: accept out ipsec policy
chain=forward action=accept ipsec-policy=out,ipsec
9 ;;; defconf: fasttrack
chain=forward action=fasttrack-connection
connection-state=established,related
10 ;;; defconf: accept established,related, untracked
chain=forward action=accept
connection-state=established,related,untracked
11 ;;; defconf: drop invalid
chain=forward action=drop connection-state=invalid
12 ;;; defconf: drop all from WAN not DSTNATed
chain=forward action=drop connection-state=new
connection-nat-state=!dstnat in-interface-list=WAN
显然我的配置中缺少了一些东西。我的理解是,我不需要重新启动或重置任何硬件,更改应该是即时的,至少从 Mikrotik 方面来说是这样。
我错过了什么?
答案1
防火墙规则仅适用于在 IP 层路由的数据包 - 但如果发送方和接收方都在同一个子网中,他们实际上将直接在 MAC 层进行通信,从而绕过路由器本身。
(在 RouterOS 中,您可以看到物理端口已桥接/interface bridge port print
。)
假设两个主机都使用以太网电缆直接连接到路由器(没有另一个以太网交换机提供旁路),则需要使用 hAP 的硬件交换机 ACL 来实现这种过滤 -请参阅文档限制:
/interface ethernet switch rule add ...
桥接端口带有“H”标志,表示它们在硬件中处理转发。但如果这是软件桥接,例如以太网和 Wi-Fi 之间的桥接,那么您将在以下位置创建规则:
/interface bridge filter add ...
或者,您可以使用交换机端口隔离(与代理 ARP 一起),强制两个主机始终通过路由器进行通信。
隔离设备的一种更常见的方法是创建两个 LAN 或 VLAN(具有单独的子网),因为它们在 MAC 层是隔离的,必须通过路由器,因此也必须通过 IP 防火墙。只需从网桥上移除一个端口并将其配置为具有单独的子网即可完成此操作。