我有 Ubuntu 10 作为路由器,带有 WAN(eth0)和 LAN(eth1)。如何限制 eth1 仅接受来自某些 MAC 地址的数据包并丢弃其余数据包?我还打算将 DHCP 设置为某些 MAC 地址,但是任何人都可以手动设置 IP 地址。我有 4-6 个自己的设备可以使用网络。
答案1
正如我在评论中提到的那样,我不认为这能给你带来任何真正的安全,甚至不会比基于 IP 的阻止带来更多的安全,但像这样的事情应该可以做到:
/sbin/iptables -A INPUT -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
当然,假设您的默认策略是 DROP。
答案2
这是你的开始:
iptables -P FORWARD DROP
iptables -I FORWARD -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
iptables -I FORWARD -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:BB -j ACCEPT
iptables -P INPUT DROP
iptables -I INPUT -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
iptables -I INPUT -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:BB -j ACCEPT
XX:XX:XX:XX:XX:XX
除和之外的所有 MAC 地址XX:XX:XX:XX:XX:BB
都将无法访问您的路由器或互联网。
答案3
( 我是用户63709;不知何故我的 Google OpenID 登录名和 MyOpenID 登录名被拆分了,但在 Stack Overflow 上它们实际上是相同的)
arptables
有自己的政策。不是将其与iptables
的政策混淆。
既然你想“限制[原文如此] eth1 只接受来自特定 MAC 地址的数据包,并丢弃其余的数据包”,你将想默认 DROP 策略。
(顺便说一句,我在上面的 arptables 规则中犯了一个小错误。它们应该是:)
arptables -P IN DROP
arptables -A IN -i eth1 --source-mac <allowed_mac_address> -j ACCEPT
arptables -A IN -i eth1 --source-mac <allowed_mac_address> -j ACCEPT
... and so on ...
(再次注意,IN
是内置链具体来说仅在 arptables 中发现。阅读arptables 的手册页了解更多信息)。
答案4
Michael,您不能为每条规则指定多个 mac 源,因此您将需要一组如下规则(如果您要使用 iptables)
#Rules for allowing your mac addresses
/sbin/iptables -A FORWARD -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:11 -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:22 -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:33 -j ACCEPT
#One final rule to drop all packets which do not match one of the rules above (are not from one of your allowed macs)
/sbin/iptables -A FORWARD -i eth1 -j DROP
请注意,这些位于 FORWARD 链中,并且不是INPUT 链。通过在 FORWARD 链中设置这些规则,您的 Linux 路由器将不允许除您允许的 Mac 之外的任何 Mac 通过路由器发送或接收任何流量。它们仍然能够与位于同一子网中的机器进行通信(因为这样不需要它们通过路由器)。
您还可以通过复制上述输入链规则来控制谁可以连接到您的路由器。
#Rules for allowing your mac addresses
/sbin/iptables -A INPUT -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:11 -j ACCEPT
/sbin/iptables -A INPUT -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:22 -j ACCEPT
/sbin/iptables -A INPUT -i eth1 -m mac --mac-source XX:XX:XX:XX:XX:33 -j ACCEPT
#One final rule to drop all packets which do not match one of the rules above (are not from one of your allowed macs)
/sbin/iptables -A INPUT -i eth1 -j DROP
阅读您对有关 FORWARD 和 INPUT 适用哪些情况的另一个较短答案的评论,这里有一个简短的解释。
向前仅适用于数据包通过您的路由器到其他子网或到外界(通过 WAN)接口。输入适用于目的地在路由器本身终止的数据包(例如,到路由器/Linux 机箱本身的 SSH 连接)。