通过 IP 地址限制对特定客户端的 SSH 访问

通过 IP 地址限制对特定客户端的 SSH 访问

我们如何允许某些私有IP通过SSH登录(RSA密钥对)进入Linux服务器?

答案1

您可以通过配置来限制哪些主机可以连接TCP 包装器 或使用过滤网络流量(防火墙)iptables。如果您想根据客户端 IP 地址使用不同的身份验证方法,请配置 SSH 守护程序(选项 3)。

选项 1:使用 IPTABLES 过滤

iptables 规则按顺序评估,直到第一个匹配。

例如,允许来自 192.168.0.0/24 网络的流量,否则丢弃流量(到端口 22)。DROP如果您的 iptables 默认策略配置为 ,则不需要该规则DROP

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

您可以在丢弃规则之前添加更多规则以匹配更多网络/主机。如果您有很多网络或主机地址,您应该使用IP集模块。还有伊普兰格允许使用任意范围的 IP 地址的模块。

Iptables 在重新启动后不会持续存在。您需要配置一些机制来在启动时恢复 iptables。

iptables仅适用于 IPv4 流量。具有 ssh 侦听 IPv6 地址的系统可以使用 来完成必要的配置ip6tables

选项 2:使用 TCP 包装器

注意:这可能不是现代发行版的一个选项,因为对 tcpwrappers 的支持已从OpenSSH 6.7

您还可以配置哪些主机可以使用 TCP 包装器进行连接。使用 TCP 包装器,除了 IP 地址之外,您还可以在规则中使用主机名。

默认情况下,拒绝所有主机。

/etc/hosts.deny

sshd : ALL

然后在hosts.allow 中列出允许的主机。例如允许网络192.168.0.0/24本地主机

/etc/hosts.allow

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

选项 3:SSH 守护进程配置

您可以在 sshd_config 中配置 ssh 守护进程,以根据客户端地址/主机名使用不同的身份验证方法。如果您只想阻止其他主机连接,则应该使用 iptables 或 TCP 包装器。

首先删除默认的身份验证方法:

PasswordAuthentication no
PubkeyAuthentication no

Match Address然后在文件末尾的a 之后添加所需的身份验证方法。放置Match在文件末尾很重要,因为它后面的所有配置行都放置在条件块内,直到下一Match行。例如:

Match Address 127.0.0.*
    PubkeyAuthentication yes

其他客户端仍然能够连接,但登录将失败,因为没有可用的身份验证方法。

匹配参数和允许的条件配置选项记录在 sshd_config 手册页。匹配模式记录在ssh_config 手册页

答案2

这里有一些 SSH 守护进程的附加配置来扩展之前的答案:

  • AllowUsers使用文件中的选项添加用户过滤sshd_config

    AllowUsers [email protected].* [email protected].* otherid1 otherid2
    

    这允许约翰多管理员2仅来自192.168.1.*地址和顶部1,顶部2来自任何地方。

  • .ssh/authorized_keys将 ssh 密钥或基于 ca 的密钥限制为给定用户主目录的文件中的一组地址:

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    在此示例中,用户别名的公钥仅对给定地址有效。

答案3

如果您不介意安装 UFW(简单防火墙):

sudo ufw allow from 192.168.1.0/24 to any port 22

编辑:如前所述,最好只使用密钥而不是密码进行身份验证,这可以通过编辑来完成/etc/ssh/sshd_config

PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

答案4

如果您使用 SSH CA 进行客户端身份验证,则可以source-address在签署证书时指定选项:

ssh-keygen -s ca_privkey -O source-address=172.16.0.0/16 id_rsa.pub
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

该证书id_rsa-cert.pub只能用于从172.16.0.0/16地址登录到主机(除非127.0.0.1您也指定了该地址)。

man 1 ssh-keygen如果您想了解更多详细信息,这是一个很好的文档。

相关内容