如何设置 SSH 的 IP 白名单?
设置 SSH 的 IP 白名单可通过配置 sshd_config、使用 IPTables 或管理 hosts.allow/hosts.deny 文件实现,每种方法都有其优缺点和适用场景。
设置 SSH 的 IP 白名单可通过多种方式实现,以限制仅允许特定的 IP 地址访问服务器。以下是三种常用方法的详细说明:
方法一:通过修改 SSH 服务器配置文件 (/etc/ssh/sshd_config
)
直接在 SSH 配置文件中指定允许的 IP,是最简单的方式。
- 打开配置文件:
sudo nano /etc/ssh/sshd_config
- 添加白名单规则:
- 允许单个或多个 IP 或网段,使用
AllowUsers
或AllowAddresses
:AllowUsers *@192.168.1.100 *@192.168.1.101 # 允许具体 IP AllowUsers *@192.168.1.0/24 # 允许整个网段
注意:替换
*
可为特定用户名,语法应正确配置覆盖顺序以防冲突。
- 允许单个或多个 IP 或网段,使用
- 保存并重启 SSH 服务:
sudo service ssh restart # Ubuntu/Debian sudo systemctl restart sshd # CentOS/RHEL
- 测试连接:从允许的 IP 执行
ssh user@server_ip
验证生效,如有问题优先检查白名单格式和权限。
方法二:使用 IPTables(Linux 防火墙工具)
通过防火墙规则过滤访问来源,适合多端口管理需求。
- 添加 ACCEPT 规则允许特定 IP:
sudo iptables -A INPUT -p tcp -s 192.168.1.100 --dport 22 -j ACCEPT # 单 IP sudo iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT # 网段
- 添加 DROP 规则拒绝其他所有来源:
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
- 保存规则并持久化:
sudo apt-get install iptables-persistent # Ubuntu/Debian sudo iptables-save > /etc/sysconfig/iptables # CentOS/RHEL
重启后可测试规则应用状态:
sudo iptables -L -v
。建议在操作前备份配置或用测试环境验证避免自锁。
方法三:配置 Hosts Access Control(使用 /etc/hosts.allow
和 /etc/hosts.deny
)
基于 TCP Wrappers 的管理方式,响应快速但不通用。
- 编辑白名单允许规则:
sudo nano /etc/hosts.allow
添加内容限制访问服务的程序(此处以 SSH 为例):
sshd: 192.168.1.100, 192.168.1.0/24 # 允许的列表
- 可选添加 Deny 文件禁止其他 IP:
sudo nano /etc/hosts.deny
加入默认禁止项:
sshd: ALL
- 更改生效无需重启服务:编辑后自动加载新策略;通过
sshd -T
或直接连接测试验证白名单范围。
注意事项:
- 测试和备份:在进行任何修改前,备份原始配置文件并保持一个开放会话以防止意外中断访问。
- 优先级与序列:方法之间可能有依赖,如 IPTables 需在白名单顺序前定义;单一工具部署以避免规则冲突。
- 动态 IP 应对:对于可移动设备,结合动态 DNS (如 DDNS)更新 IP 白名单;所有方法适用于 22 默认端口,如有改动端口需一致更新规则。确保每次修改后验证授权连接以提升服务器安全。