iptables 通过 mac 地址限制 ssh 会话

iptables 通过 mac 地址限制 ssh 会话

我正在限制对我的 Linux 生产机器的访问,其中 ssh 访问需要限制为仅几个 MAC 地址。

我已按照本指南并运行以下两个命令:

/sbin/iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP
/sbin/iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT

root@xxxx:~/#: iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere            MAC XX:XX:XX:XX:XX:XX
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh MAC XX:XX:XX:XX:XX:XX

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

但是我仍然能够从其他 MAC 地址访问该机器。我是否缺少任何配置步骤?

答案1

我从你的输出结果中看到了问题:

Chain INPUT (policy ACCEPT)

您的系统 iptables 默认 INPUT 链规则策略为 ACCEPT,它仅影响您输入的 MAC。因此请将其默认策略更改为 DROP。

#iptables -P INPUT DROP

现在您可以再次测试。您的计算机只能通过允许的 MAC 地址访问。

答案2

正如上面的评论,我认为你可能以错误的方式处理这个问题;MAC 地址可能会被欺骗,甚至可能在大型网络中重复。

如果您想将 ssh 访问限制在几台机器上,那么通过 IP 地址进行限制将是您最好的选择。这些机器是在本地网络上还是全球网络上?

但请注意,即使通过 IP 进行阻止也可能是一种错误的方法:

  • 如果您在某些时候需要从另一台机器访问,它将会限制您。

  • ssh 应该使用足够安全的身份验证方法来阻止未经授权的用户,无论他们来自哪里。

我的方法是:

  • [肯定] 使用 iptables 或类似 fail2ban 的包限制 ssh 连接尝试的速率
  • [绝对] 仅允许基于密钥的 shh 身份验证
  • [可能] 仅允许希望从 iptables 内部访问的网络

答案3

我认为你真正想要的是ebtables

但我认为这是个坏主意(出于前面提到的原因)。最好生成 ssh 密钥,并将服务器配置为仅允许基于密钥的登录(即禁用密码验证)。这样你会更安全。

相关内容