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


22

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


3
防火墙规则是采取的常规措施
Raman Sailopal

2
如果ssh使用TCP包装程序或/ etc / ssh / sshd_config文件规则进行编译,则防火墙或/etc/hosts.allow。
Rui F Ribeiro

不止一种方法,请参考linux.die.net/man/5/sshd_config,其中介绍了/etc/ssh/sshd_config
ron

Answers:


42

您可以通过配置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

您可以在删除规则之前添加更多规则,以匹配更多网络/主机。如果您有很多网络或主机地址,则应使用ipset模块。还有一个iprange模块,允许使用任意范围的IP地址。

iptables在重新启动后并不持久。您需要配置一些机制以在启动时还原iptables。

iptables仅适用于IPv4流量。可以使用ssh侦听IPv6地址并进行必要配置的系统ip6tables

选项2:使用TCP包装器

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

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

/etc/hosts.deny

sshd : ALL

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

/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手册页中


如何在/ etc / ssh / sshd_config中添加ListenAddress指令?
杰罗姆(Jerome)

在特定情况下(例如,侦听专用网络地址),可能会出现这种情况,具体取决于您的网络配置和要允许的主机。
sebasth

2
此外,sshd_config可以使用AlowUsers指令设置过滤,还可以使用'from IP或subnet'来设置authorized_keys进行过滤
。– tonioc

@tonioc对于我的用例而言,这是一个很好的解决方案。请将此建议扩展为答案。
simlev

如果您的NIC的每个端口都有4个端口,则默认#ListenAddress ::输入/etc/ssh/sshd_config将告诉SSH服务器接受来自任何这些网络的传入。否则,ListenAddress <ip address><ip address>要允许的那些NIC端口的位置进行操作。因此,我eth0的结果是SSH仅在eth0上的网络192.168.3.4上工作;eth1 eth2 eth3被拒绝。192.168.3.4ListenAddress 192.168.3.4
罗恩·

5

这是SSH守护程序的一些其他配置,用于扩展先前的答案:

  • AllowUserssshd_config文件中添加带有选项的用户过滤:

    AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
    

    这使得输入johndoeAdmin2的只是从192.168.1.*地址和otherid1otherid2从任何地方。

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.