我们如何允许某些私有IP通过SSH登录(RSA密钥对)进入Linux Server?
/etc/ssh/sshd_config
我们如何允许某些私有IP通过SSH登录(RSA密钥对)进入Linux Server?
/etc/ssh/sshd_config
Answers:
您可以通过配置TCP包装器 或使用iptables过滤网络流量(防火墙)来限制可以连接的主机。如果要根据客户端IP地址使用不同的身份验证方法,请配置SSH守护程序(选项3)。
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
。
您还可以配置哪些主机可以使用TCP包装器进行连接。使用TCP包装程序,除了IP地址外,您还可以在规则中使用主机名。
默认情况下,拒绝所有主机。
/etc/hosts.deny
:
sshd : ALL
然后在hosts.allow中列出允许的主机。例如,允许网络192.168.0.0/24和localhost。
/etc/hosts.allow
:
sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]
您可以在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手册页中。
#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.4
ListenAddress 192.168.3.4
这是SSH守护程序的一些其他配置,用于扩展先前的答案:
AllowUsers
在sshd_config
文件中添加带有选项的用户过滤:
AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
这使得输入johndoe和Admin2的只是从192.168.1.*
地址和otherid1,otherid2从任何地方。
将ssh密钥或基于ca的密钥限制为.ssh/authorized_keys
给定用户主目录文件中的一组地址:
from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
在此示例中,用户别名的公钥仅对给定地址有效。