普通网友 2025-06-13 11:05 采纳率: 98%
浏览 11
已采纳

CentOS SSH如何只允许一个特定IP访问,其他全部拒绝?防火墙规则怎么设置?

在CentOS系统中,如何通过防火墙规则设置,确保SSH服务仅允许特定IP地址访问,而拒绝所有其他来源的连接?此设置可增强服务器安全性,防止未经授权的访问。具体操作中,使用firewalld或iptables配置规则时,应先允许指定IP通过端口22(SSH默认端口)访问,再拒绝其余所有IP的SSH请求。例如,在firewalld中,可通过`--add-rich-rule`添加规则,限定特定IP访问SSH服务。同时,需确认SELinux状态及SSH服务配置未冲突,避免误拒合法连接。若规则设置不当,可能导致无法远程访问服务器,请务必提前做好备份与应急计划。
  • 写回答

1条回答 默认 最新

  • 程昱森 2025-06-13 11:05
    关注

    1. 初步了解:SSH服务与防火墙规则基础

    在CentOS系统中,SSH(Secure Shell)服务用于远程管理和安全连接。为了增强服务器的安全性,可以通过配置防火墙规则限制SSH服务的访问来源。

    • SSH默认端口:22
    • 常用防火墙工具:firewalld和iptables

    通过设置防火墙规则,确保仅允许特定IP地址访问SSH服务,可以有效防止未经授权的尝试。例如,使用firewalld时,可通过`--add-rich-rule`命令添加精细规则。

    2. 实践操作:使用firewalld配置规则

    以下是使用firewalld限制SSH访问的具体步骤:

    1. 检查firewalld状态:systemctl status firewalld
    2. 添加允许特定IP访问的规则:
      firewall-cmd --add-rich-rule='rule family="ipv4" source address="指定IP" port protocol="tcp" port="22" accept'
    3. 拒绝其他所有IP访问SSH:
      firewall-cmd --add-rich-rule='rule family="ipv4" port protocol="tcp" port="22" drop'
    4. 使规则永久生效:firewall-cmd --runtime-to-permanent

    注意:上述命令中的“指定IP”需替换为实际允许访问的IP地址。

    3. 替代方案:使用iptables配置规则

    对于不使用firewalld的环境,可以借助iptables实现类似功能:

    # 允许特定IP访问SSH
    iptables -A INPUT -p tcp --dport 22 -s 指定IP -j ACCEPT
    
    # 拒绝其他所有IP访问SSH
    iptables -A INPUT -p tcp --dport 22 -j DROP
    
    # 保存规则
    service iptables save
    

    此方法直接修改内核级规则,适合需要更高控制精度的场景。

    4. 环境确认与冲突排查

    在配置防火墙规则前,需确认以下事项以避免误拒合法连接:

    检查项操作命令
    SELinux状态getenforce
    SSH服务配置文件cat /etc/ssh/sshd_config
    现有防火墙规则firewall-cmd --list-alliptables -L

    如果SELinux处于强制模式,可能需要调整策略以兼容新规则。

    5. 备份与应急计划

    由于不当规则可能导致无法远程访问服务器,建议提前做好备份与应急计划:

    • 备份当前防火墙规则:firewall-cmd --dumpiptables-save > backup.rules
    • 记录本地或物理访问方式以备恢复

    同时,可利用mermaid格式流程图展示应急处理步骤:

    graph TD;
        A[发现无法连接] --> B{是否有规则冲突};
        B --是--> C[恢复备份规则];
        B --否--> D[检查网络配置];
        D --> E[联系技术支持];
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 6月13日