如何设置 SSH 的 IP 白名单?

设置 SSH 的 IP 白名单可通过配置 sshd_config、使用 IPTables 或管理 hosts.allow/hosts.deny 文件实现,每种方法都有其优缺点和适用场景。

部署与运维 中等 SSH 网络安全 安全

设置 SSH 的 IP 白名单可通过多种方式实现,以限制仅允许特定的 IP 地址访问服务器。以下是三种常用方法的详细说明:

方法一:通过修改 SSH 服务器配置文件 (/etc/ssh/sshd_config)

直接在 SSH 配置文件中指定允许的 IP,是最简单的方式。

  1. 打开配置文件
    sudo nano /etc/ssh/sshd_config
    
  2. 添加白名单规则
    • 允许单个或多个 IP 或网段,使用 AllowUsersAllowAddresses
      AllowUsers *@192.168.1.100 *@192.168.1.101   # 允许具体 IP
      AllowUsers *@192.168.1.0/24                  # 允许整个网段
      

      注意:替换 * 可为特定用户名,语法应正确配置覆盖顺序以防冲突。

  3. 保存并重启 SSH 服务
    sudo service ssh restart    # Ubuntu/Debian
    sudo systemctl restart sshd # CentOS/RHEL
    
  4. 测试连接:从允许的 IP 执行 ssh user@server_ip 验证生效,如有问题优先检查白名单格式和权限。

方法二:使用 IPTables(Linux 防火墙工具)

通过防火墙规则过滤访问来源,适合多端口管理需求。

  1. 添加 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 # 网段
    
  2. 添加 DROP 规则拒绝其他所有来源
    sudo iptables -A INPUT -p tcp --dport 22 -j DROP
    
  3. 保存规则并持久化
    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 的管理方式,响应快速但不通用。

  1. 编辑白名单允许规则
    sudo nano /etc/hosts.allow
    

    添加内容限制访问服务的程序(此处以 SSH 为例):

    sshd: 192.168.1.100, 192.168.1.0/24  # 允许的列表
    
  2. 可选添加 Deny 文件禁止其他 IP
    sudo nano /etc/hosts.deny
    

    加入默认禁止项:

    sshd: ALL
    
  3. 更改生效无需重启服务:编辑后自动加载新策略;通过 sshd -T 或直接连接测试验证白名单范围。

注意事项:

  • 测试和备份:在进行任何修改前,备份原始配置文件并保持一个开放会话以防止意外中断访问。
  • 优先级与序列:方法之间可能有依赖,如 IPTables 需在白名单顺序前定义;单一工具部署以避免规则冲突。
  • 动态 IP 应对:对于可移动设备,结合动态 DNS (如 DDNS)更新 IP 白名单;所有方法适用于 22 默认端口,如有改动端口需一致更新规则。确保每次修改后验证授权连接以提升服务器安全。