Ran*_*mar 41 linux firewall sshd
我们如何允许某些私有 IP 通过 SSH 登录(RSA 密钥对)进入 Linux 服务器?
seb*_*sth 69
您可以通过配置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
Run Code Online (Sandbox Code Playgroud)
您可以在丢弃规则之前添加更多规则以匹配更多网络/主机。如果你有很多网络或主机地址,你应该使用ipset模块。还有iprange模块允许使用任意范围的 IP 地址。
iptables 在重新启动后不是持久的。您需要配置一些机制来在启动时恢复 iptables。
iptables
仅适用于 IPv4 流量。具有 ssh 侦听 IPv6 地址的系统可以使用ip6tables
.
注意:这可能不是现代发行版的选项,因为从OpenSSH 6.7 中删除了对 tcpwrappers 的支持
您还可以配置哪些主机可以使用 TCP 包装器进行连接。使用 TCP 包装器,除了 IP 地址之外,您还可以在规则中使用主机名。
默认情况下,拒绝所有主机。
/etc/hosts.deny
:
sshd : ALL
Run Code Online (Sandbox Code Playgroud)
然后在 hosts.allow 中列出允许的主机。例如允许网络192.168.0.0/24和localhost。
/etc/hosts.allow
:
sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]
Run Code Online (Sandbox Code Playgroud)
您可以在 sshd_config 中配置 ssh 守护程序以根据客户端地址/主机名使用不同的身份验证方法。如果您只想阻止其他主机连接,则应改用 iptables 或 TCP 包装器。
首先删除默认身份验证方法:
PasswordAuthentication no
PubkeyAuthentication no
Run Code Online (Sandbox Code Playgroud)
然后Match Address
在文件末尾的a 之后添加所需的身份验证方法。放置Match
在文件的结尾是重要的,因为所有它后配置线被放置在条件块内,直到下一个Match
线。例如:
Match Address 127.0.0.*
PubkeyAuthentication yes
Run Code Online (Sandbox Code Playgroud)
其他客户端仍然可以连接,但登录将失败,因为没有可用的身份验证方法。
匹配参数和允许的条件配置选项记录在 sshd_config 手册页中。匹配模式记录在ssh_config 手册页中。
ton*_*ioc 21
这里有一些额外的 SSH 守护进程配置来扩展以前的答案:
使用文件中的AllowUsers
选项添加用户过滤sshd_config
:
AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
Run Code Online (Sandbox Code Playgroud)
这使得输入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
Run Code Online (Sandbox Code Playgroud)
在此示例中,用户别名的公钥仅对给定地址有效。
小智 6
如果您不介意安装 UFW(简单防火墙):
sudo ufw allow from 192.168.1.0/24 to any port 22
Run Code Online (Sandbox Code Playgroud)
编辑:如前所述,最好只使用密钥而不是密码进行身份验证,这可以通过编辑来完成/etc/ssh/sshd_config
:
sudo ufw allow from 192.168.1.0/24 to any port 22
Run Code Online (Sandbox Code Playgroud)