最可靠的方式是直接在 /etc/ssh/sshd_config 中用 allowusers 限定用户+内网 cidr 段,因其原生支持、优先级最高;同时配合 listenaddress 限定监听内网 ip,再以 firewalld 或 iptables 作兜底防护。

要让 SSH 服务真正只对内网开放,核心不是“堵住外网”,而是“只认内网来源”。最有效、最直接的方式是修改 SSH 配置本身,而不是依赖防火墙或已失效的 hosts.allow。
用 AllowUsers 精确控制用户+内网段
这是当前最可靠的方法,原生支持、优先级最高,且在 OpenSSH 8.0+(RHEL/CentOS 8+、Ubuntu 20.04+、Debian 11+)中完全生效:
- 编辑 /etc/ssh/sshd_config,在文件末尾添加类似行:
- AllowUsers admin@192.168.1.0/24
- AllowUsers deploy@10.0.0.0/8 ops@fd00::/64(支持 IPv4 和 IPv6 CIDR)
- 注意:不能写
192.168.1.*,必须用标准 CIDR 表示法;多个规则每行一条 - 保存后执行 sudo systemctl restart sshd —— 当前 SSH 连接会断开,务必提前留好本地终端或 VNC 会话
配合 ListenAddress 限定监听范围
让 sshd 根本不响应外网请求,从网络层缩小攻击面:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- 在 /etc/ssh/sshd_config 中取消注释或添加:
- ListenAddress 192.168.1.100(填你服务器实际的内网 IP)
- ListenAddress 10.0.5.20(如有多个内网接口,可重复添加)
- 避免使用
0.0.0.0或*,否则仍可能被外网探测到端口 - 改完同样需 systemctl restart sshd
防火墙作为第二道防线(非替代方案)
firewalld 或 iptables 可拦截非法连接请求,但它不识别用户、不参与认证,仅作兜底:
- firewalld(推荐用于 RHEL/CentOS 8+、Fedora):
- sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'
- sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="22" protocol="tcp" reject'
- sudo firewall-cmd --reload
- 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 > /etc/iptables/rules.v4(Debian/Ubuntu)或 sudo service iptables save(CentOS 7)
配套加固建议(提升整体安全性)
仅限内网访问只是第一步,还需防止内网横向渗透和误操作:
- 禁用 root 登录:设置 PermitRootLogin no
- 关闭密码认证:设为 PasswordAuthentication no,强制密钥登录
- 限制认证尝试次数:添加 MaxAuthTries 3
- 启用详细日志:设 LogLevel VERBOSE,便于审计登录来源
- 所有修改后统一重启:sudo systemctl restart sshd










