限制 SSH 访问仅允许特定 IP 连接
要限制 SSH 访问仅允许特定 IP 连接,可以通过以下 4 种方法实现(推荐按优先级选择):
方法 1:使用 /etc/hosts.allow
和 /etc/hosts.deny
(最简单)
# 编辑允许规则(需 root 权限)
sudo vim /etc/hosts.allow
添加内容(支持 IP 或网段):
sshd: 192.168.1.100, 203.0.113.45/32
# 编辑拒绝规则
sudo vim /etc/hosts.deny
添加内容:
sshd: ALL
生效:
无需重启服务,规则即时生效。
方法 2:配置 SSH 的 AllowUsers
或 AllowGroups
(精准控制)
sudo vim /etc/ssh/sshd_config
添加或修改以下行(支持通配符):
AllowUsers *@192.168.1.100 *@203.0.113.45
# 或限制用户组
AllowGroups admin@192.168.1.0/24
生效:
重启 SSH 服务:
sudo systemctl restart sshd
方法 3:使用防火墙(iptables/nftables)
iptables 规则示例:
# 清空现有规则(谨慎操作)
sudo iptables -F# 允许指定 IP 访问 22 端口
sudo iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -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/RHEL
nftables 规则示例:
sudo nft add table ip ssh_filter
sudo nft add chain ip ssh_filter input { type filter hook input priority 0 \; }
sudo nft add rule ip ssh_filter input tcp dport 22 ip saddr 192.168.1.100 accept
sudo nft add rule ip ssh_filter input tcp dport 22 drop
方法 4:TCP Wrappers(传统方法,部分系统已弃用)
# 编辑 /etc/hosts.allow(同方法1)
sudo vim /etc/hosts.allow
sshd: 192.168.1.100
验证配置
- 测试连接:
ssh user@服务器IP -v # 从非允许IP尝试会显示被拒绝
- 查看日志:
sudo tail -f /var/log/auth.log # Debian/Ubuntu sudo tail -f /var/log/secure # CentOS/RHEL
注意事项
- 备份配置:修改前备份相关文件(如
sshd_config
)。 - 保留应急通道:确保至少有一个 IP 能被允许,避免锁死服务器。
- 动态 IP 用户:若需支持动态 IP,可结合 DDNS 或 VPN 方案。
选择最适合你环境的方法,通常 方法1+方法2 组合使用既简单又安全。