
SSH(安全外壳协议)是一种流行的工具,允许用户通过网络安全地连接到远程系统。默认情况下,只要适当的防火墙和网络设置到位,SSH 可以从任何网络访问。
然而,有时候你可能希望出于安全原因,限制 SSH 访问仅限于本地网络。在家庭或办公室环境中,这尤其有用,因为你不希望外部通过互联网访问你的系统。
本文将通过防火墙规则和 SSH 配置,介绍如何在 Linux 上将 SSH 访问限制为仅限本地网络。我们将用简单的术语解释每一步,确保即使是初学者也能跟得上。
为什么要限制 SSH 访问到本地网络?
限制 SSH 访问仅限于本地网络可以降低未经授权访问系统的风险。
以下是你可能想要这么做的原因:
安全性:将 SSH 访问限制在外部网络之外,可以防止攻击者扫描或尝试通过互联网暴力破解你的服务器。
受控访问:如果有多台设备连接到同一个本地网络,你仍然可以在不暴露于外部威胁的情况下管理系统。
简便性:只允许本地访问,你不需要担心为外部访问配置额外的安全层。
理解本地网络
在开始之前,了解“本地网络”是什么意思非常重要。 本地网络是指一组连接在同一个物理或无线网络中的设备,例如家庭 Wi-Fi 或办公室网络。
这些设备共享相同的内部 IP 地址范围,如 192.168.x.x 或 10.0.x.x,而外部设备(即互联网上的设备)会有不同的 IP 范围。
步骤 1:检查 Linux 本地 IP 地址范围
要知道你的本地网络范围,首先需要使用以下 ip 命令来确定设备的 IP 地址,该命令将显示你的 IP 地址和网络信息:
ip a
你将看到关于网络接口的信息。寻找类似于 192.168.x.x 或 10.0.x.x 的内容,这将告诉你你的本地 IP 地址。
通常,本地 IP 地址会在以下私有范围之一:
例如,如果你的 IP 地址是 192.168.122.63,那么你的本地网络范围可能是 192.168.1.0/24,这意味着所有 IP 地址在 192.168.1.x 范围内的设备都属于同一本地网络。
步骤 2:配置 SSH 仅监听本地地址
默认情况下,SSH 会监听所有可用的网络接口。我们将其更改为仅监听本地网络。
私有 IP 地址范围:
192.168.x.x
10.0.x.x
172.16.x.x 至 172.31.x.x
例如,如果你的本地 IP 是 192.168.122.63,你的本地网络范围可能是 192.168.1.0/24,这意味着所有 IP 地址在 192.168.1.x 范围内的设备都属于同一本地网络。
步骤 2:配置 SSH 仅监听本地地址
默认情况下,SSH 会监听所有可用的网络接口。我们将更改它,只监听本地网络。
编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config
找到以 #ListenAddress 开头的行,取消注释(删除行首的 #)。将其设置为你的本地 IP 地址。
例如,如果你的本地 IP 是 192.168.122.63,更新配置文件如下:
ListenAddress 192.168.122.63
然后重启 SSH 服务使更改生效:
sudo systemctl restart ssh
# 或
sudo systemctl restart sshd
现在,你的 SSH 服务器只会监听来自本地 IP 地址的连接。如果你尝试从外部网络连接,连接将被拒绝。
步骤 3:使用防火墙规则限制 SSH
虽然配置 SSH 守护进程仅监听本地地址非常有用,但你可以通过设置防火墙规则添加额外的安全层,从而确保只有本地网络上的设备可以通过 SSH 连接,即使有人尝试使用你的外部 IP 访问你的系统。
使用 UFW(简易防火墙)
如果你使用的是 UFW(Ubuntu 等许多 Linux 发行版的默认防火墙),请按照以下命令操作:
为了仅允许来自本地网络(如 192.168.1.x 范围内的 IP 地址)的 SSH 连接,并拒绝来自其他网络的 SSH 连接。确保重新加载防火墙并检查其状态。
sudo ufw allow from 192.168.1.0/24 to any port 22
sudo ufw deny 22
sudo ufw reload
sudo ufw status
使用 Firewalld
如果你使用的是 Firewalld,可以按照以下命令限制 SSH 仅限于本地网络:
为了仅允许来自本地网络(如 192.168.1.x 范围内的 IP 地址)的 SSH 连接,并拒绝来自其他网络的 SSH 连接。确保重新加载防火墙并检查其状态。
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port protocol="tcp" port="22" drop'
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
使用 iptables
如果你没有使用 UFW 或 Firewalld,可以使用 iptables 设置类似的规则:
sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
sudo iptables-save | sudo tee /etc/iptables/rules.v4
sudo iptables -L
现在,SSH 访问仅允许来自本地网络范围内的设备。
步骤 4:测试你的配置
配置 SSH 和防火墙之后,接下来是测试设置,确保一切按预期工作。
从本地网络中的设备上,尝试使用 SSH 连接到服务器:
ssh username@192.168.122.63
如果你有外部网络访问权限(例如,使用移动数据或 VPN),尝试连接到系统的外部 IP。连接应该被阻止或拒绝。
附加提示
以下是设置 SSH 仅限本地网络的一些额外提示:
静态 IP:为你希望通过 SSH 连接的设备设置静态 IP 地址是个好主意,特别是在基于本地 IP 范围配置防火墙规则时,这样可以避免路由器重启时 IP 地址发生变化。
VPN 访问:如果你需要从外部网络进行远程访问,考虑设置 VPN,这样你可以通过互联网安全地连接到本地网络,而 SSH 仍然只能在本地网络内访问。
监控日志:始终监控你的 SSH 日志,以便及时发现任何未经授权的访问尝试。你可以使用 tail 命令查看日志:
sudo tail -f /var/log/auth.log
将 SSH 访问限制为本地网络是增强 Linux 系统安全性的简单有效方法。通过遵循本指南中的步骤,你可以防止外部访问你的 SSH 服务器,同时保持本地访问以进行管理和行政任务。
通过防火墙规则和正确的配置,你可以确保只有本地网络中的可信设备能够通过 SSH 连接,从而降低未经授权访问的风险。











