温馨提示×

centos虚拟机如何设置防火墙规则

小樊
52
2025-10-06 22:00:30
栏目: 云计算

CentOS虚拟机防火墙规则设置指南(以firewalld为主,兼顾iptables)

一、CentOS 7及以上版本:使用firewalld(默认工具)

firewalld是CentOS 7及以上版本的默认防火墙管理工具,基于区域(Zone)和服务(Service)的概念,支持动态更新规则,无需重启服务即可应用大部分变更。

1. 基础操作

  • 启动firewalld服务
    sudo systemctl start firewalld
    
  • 设置开机自启
    sudo systemctl enable firewalld
    
  • 检查服务状态
    sudo systemctl status firewalld  # 查看是否运行
    sudo firewall-cmd --state        # 查看防火墙状态(running表示开启)
    

2. 查看规则

  • 查看所有活动区域的规则
    sudo firewall-cmd --list-all
    
  • 查看默认区域
    sudo firewall-cmd --get-default-zone
    
  • 查看所有可用区域
    sudo firewall-cmd --get-zones
    

3. 常见规则配置

  • 开放端口(永久生效,需重载)
    例如开放TCP 80(HTTP)端口:
    sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
    sudo firewall-cmd --reload  # 应用变更
    
  • 添加服务(预定义规则集,更便捷)
    例如开放HTTP服务(包含80端口):
    sudo firewall-cmd --zone=public --add-service=http --permanent
    sudo firewall-cmd --reload
    
  • 允许特定IP访问
    例如允许192.168.1.100访问所有端口:
    sudo firewall-cmd --zone=public --add-source=192.168.1.100 --permanent
    sudo firewall-cmd --reload
    
  • 删除规则
    例如删除TCP 80端口:
    sudo firewall-cmd --zone=public --remove-port=80/tcp --permanent
    sudo firewall-cmd --reload
    

4. 高级功能

  • 设置NAT(端口转发)
    例如将公网8080端口转发到内网80端口:
    sudo firewall-cmd --zone=public --add-forward-port=port=8080:proto=tcp:toport=80 --permanent
    sudo firewall-cmd --reload
    
  • 启用IP伪装(允许内网访问外网)
    sudo firewall-cmd --zone=public --add-masquerade --permanent
    sudo firewall-cmd --reload
    

二、CentOS 6及以下版本:使用iptables(传统工具)

CentOS 6及以下版本默认使用iptables作为防火墙管理工具,需手动配置规则并保存。

1. 基础操作

  • 查看当前规则
    sudo iptables -L -n -v  # -L列出规则,-n以数字显示端口/IP,-v显示详细信息
    
  • 清空所有规则
    sudo iptables -F  # 清空所有链的规则
    sudo iptables -X  # 清空自定义链
    
  • 设置默认策略(谨慎操作,可能锁死系统):
    sudo iptables -P INPUT DROP   # 拒绝所有入站流量(默认拒绝)
    sudo iptables -P OUTPUT ACCEPT  # 允许所有出站流量(默认允许)
    sudo iptables -P FORWARD DROP # 拒绝所有转发流量
    

2. 常见规则配置

  • 允许特定IP访问
    例如允许192.168.1.100访问所有端口:
    sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
    
  • 允许特定端口访问
    例如允许TCP 22(SSH)端口:
    sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    
  • 拒绝特定端口访问
    例如拒绝TCP 80端口:
    sudo iptables -A INPUT -p tcp --dport 80 -j DROP
    
  • 保存规则
    sudo service iptables save  # 保存到/etc/sysconfig/iptables
    

3. 重启与关闭

  • 重启iptables服务
    sudo systemctl restart iptables  # CentOS 7及以上
    sudo service iptables restart    # CentOS 6及以下
    
  • 关闭iptables服务
    sudo systemctl stop iptables
    sudo systemctl disable iptables  # 禁止开机启动
    

三、注意事项

  1. 最小化开放原则:仅开放业务必需的端口(如Web服务器开放80/443,SSH开放22),减少攻击面。
  2. 默认拒绝策略:firewalld默认区域(public)的INPUT链策略为ACCEPT,建议修改为DROP(需提前开放必要端口):
    sudo firewall-cmd --set-default-zone=drop  # 不推荐新手直接使用
    
  3. 备份规则:修改规则前备份现有配置(firewalld备份/etc/firewalld/目录,iptables备份/etc/sysconfig/iptables文件)。
  4. 测试规则:修改后通过pingtelnetcurl测试连通性,避免误操作导致无法访问。
  5. 日志记录:可通过--log选项记录拒绝的流量(如iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: "),便于排查问题。

以上步骤覆盖了CentOS虚拟机防火墙的基本配置需求,根据系统版本选择对应工具即可。firewalld更适合新手(动态管理、预定义服务),iptables更适合高级用户(精细化控制)。

0