通过 iptables 或 /etc/hosts.allow 限制 ubuntu 12.04 上的 ssh、sftp 访问

通过 iptables 或 /etc/hosts.allow 限制 ubuntu 12.04 上的 ssh、sftp 访问

我试图限制对 ubuntu 服务器的访问,但我仍然不确定该怎么做。情况:我们想要将 ssh 和 sftp 的访问限制在 ubuntu 12.04 服务器上没有静态 ip 的 4 个客户端。因此每个客户端都有一个 dyndns 帐户。服务器将使用共享防火墙,不幸的是不能使用 dyndns 帐户作为允许规则。

想法:允许在共享防火墙中访问 ssh 和 sftp,但在服务器端阻止所有 4 个 dyndns 帐户。

但实现这一目标最简单的方法是什么?

第一个解决方案是使用 iptabels脚本:由 cronjob 运行,它会检查 dyndns ips 并使用类似以下内容更新 iptable 规则:

# All connectsion from address 1.2.3.4 to SSH (port 22)
iptables -A INPUT -p tcp -m state --state NEW --source DYNDNS_IP --dport 22 -j ACCEPT

# Deny all other SSH connections
iptables -A INPUT -p tcp --dport 22 -j DROP

第二种解决方案是通过denyhosts进行限制,例如:

# /etc/hosts.allow
sshd: client.dyndns.org

# /etc/hosts.deny
sshd: ALL

但我不确定denyhosts是否也能够限制ftp访问。如果是这样,这个解决方案看起来更容易管理。

感谢每一个想法,

亲切的问候,

托尼

答案1

如果客户端没有静态 IP,那么下一个最佳解决方案就是使用带有或不带有密码的 SSH 密钥并禁用密码。 这是关于 SSH 密钥的一个很好的入门知识

并且在服务器上,您可以调整 SSH 以仅publickey通过调整来PreferredAuthentications接受/etc/ssh/ssh_config(在 Ubuntu 12.04 中)。这里有关于 SSH 服务器端选项的很好的解释

过去我仍然会使用iptables进一步限制端口来使事情变得更加安全。

答案2

在我看来,你越接近堆栈的底部,就越有利于实现安全性。如果你在 iptables 处阻止,数据包甚至永远不会超过第 3/4 层,所以这会更好。然而,最好的是一个分层的洋葱安全模型,具有基于网络和主机的防火墙,以及拒绝主机/tcpwrappers 和特定于协议的安全性(即 apache 上的 htaccess 规则)。

服务器将使用共享防火墙,遗憾的是它不能使用 dyndns 帐户作为允许规则。

您可以随时用 iptables 或 pfSense 替换您的外围防火墙。

相关内容