如何在 Linux 上限制对本地网络的 SSH 访问
SSH (Secure Shell) 是一种流行的工具,允许用户通过网络安全地连接到远程系统。默认情况下,只要适当的防火墙和网络设置就位,就可以从任何网络访问 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 地址将位于以下私有范围之一:
192.168.x.x
10.0.x.x
172.16.x.x to 172.31.x.x
例如,如果您的 IP 地址是 192.168.122.63,则您的本地网络范围可能是 192.168.1.0/24,这意味着 IP 地址在 192.168 范围内的所有设备.1.x范围位于同一本地网络上。
步骤 2:将 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
OR
sudo systemctl restart sshd
现在,您的 SSH 服务器将仅侦听来自您本地 IP 地址的连接。如果您尝试从外部网络连接,连接将被拒绝。
步骤 3:使用防火墙规则限制 SSH
虽然将 SSH 守护程序配置为仅侦听本地地址很有帮助,但您可以通过设置防火墙规则来添加额外的安全层,这确保只有本地网络上的设备可以通过 SSH 连接,即使有人尝试访问您的系统使用您的外部IP。
使用 UFW(简单防火墙)
如果您使用 UFW(许多 Linux 发行版(例如 Ubuntu)上的默认防火墙),请按照以下命令操作:
仅允许来自本地网络的 SSH 连接,例如 192.168.1.x 范围内的 IP 地址,并拒绝来自其他网络的 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 限制到 Linux 上的本地网络,请按照以下命令操作。
允许来自本地网络(例如 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 [email
如果您可以访问外部网络(例如,使用移动数据或 VPN),请尝试连接到系统的外部 IP。应阻止或拒绝连接。
额外提示
以下是设置 SSH 到本地网络的一些附加提示:
- 静态IP:最好为您想要通过 SSH 访问的设备设置静态 IP 地址,特别是当您根据本地 IP 范围配置防火墙规则时,这将防止您的 IP 发生更改如果路由器重新启动。
- VPN 访问:如果您需要从外部网络进行远程访问,请考虑设置 VPN,这将允许您通过互联网安全地连接到本地网络,并且 SSH 仍然只能在内部网络中访问。本地网络。
- 监控日志:始终监控您的 SSH 日志是否有任何未经授权的访问尝试。
您可以使用 tail 命令检查日志:
sudo tail -f /var/log/auth.log
结论
限制对本地网络的 SSH 访问是增强 Linux 系统安全性的简单而有效的方法。通过遵循本指南中的步骤,您可以防止对 SSH 服务器的外部访问,同时保持管理和管理任务的本地访问。
通过防火墙规则和正确的配置,您可以确保只有本地网络中受信任的设备才能通过 SSH 进行连接,从而降低未经授权访问的风险。