1. CentOS防火墙基础概述
在centos系统中,防火墙作为第一道安全防线,负责监控和控制进出系统的网络流量。无论是防止未授权访问,还是限制特定端口的暴露,防火墙都扮演着不可或缺的角色。
1.1 防火墙的核心作用
防火墙通过预定义的安全策略,对数据包进行过滤、转发或拒绝,从而保护系统免受恶意攻击。例如,可开放Web服务的80端口,同时关闭不必要的远程登录端口,降低被入侵风险。
1.2 CentOS默认防火墙组件
不同版本的centos采用了不同的防火墙实现:CentOS 7及后续版本默认使用firewalld,支持动态规则管理;CentOS 6及以前版本则依赖iptables,需手动保存规则。了解这一差异是正确操作的前提。
2. 使用firewalld管理防火墙
firewalld是CentOS 7+的默认防火墙管理工具,其基于Linux Netfilter框架,支持区域(Zone)和服务的动态配置,操作更为便捷。
2.1 检查firewalld服务状态
执行systemctl status firewalld命令,可查看当前防火墙是否运行。若显示“active (running)”,表示防火墙已开启;若为“inactive (dead)”,则处于关闭状态。
2.2 临时开启防火墙
仅需执行systemctl start firewalld,防火墙将立即生效。但此方式为临时生效,系统重启后仍会恢复至之前的开机自启状态(若之前已禁用,则重启后关闭)。
2.3 永久开启防火墙
若需防火墙开机自启,执行systemctl enable firewalld。该命令会创建开机启动项,确保每次重启系统后自动开启防火墙。配合systemctl start firewalld可立即启用当前会话。
2.4 临时关闭防火墙
执行systemctl stop firewalld,防火墙将立即停止,所有规则链失效。此操作同样为临时生效,重启系统后恢复至开机自启状态(若已启用)。
2.5 永久关闭防火墙
若需彻底关闭防火墙并取消开机自启,需分两步:执行systemctl disable firewalld(取消开机启动),再执行systemctl stop firewalld(停止当前服务)。此后重启系统,防火墙将不再自动开启。
2.6 防火墙规则管理
firewalld支持通过firewall-cmd命令管理规则。例如,开放80端口:firewall-cmd –add-port=80/tcp –permanent(–permanent表示永久生效,需重载规则:firewall-cmd –reload);查看已开放端口:firewall-cmd –list-ports;删除规则:firewall-cmd –remove-port=80/tcp –permanent。
3. 使用iptables管理防火墙
对于仍在使用CentOS 6或更早版本的服务器,iptables是核心防火墙工具。其通过定义表(Table)、链(Chain)和规则(Rule)精细控制流量,学习成本略高但灵活性更强。
3.1 检查iptables状态
执行service iptables status或iptables -L,可查看当前规则链及策略。若未显示任何规则,可能防火墙未启动或规则为空。
3.2 临时开启iptables
执行service iptables start,iptables立即生效。此方式为临时生效,重启后需手动重启服务(除非已配置开机自启)。
3.3 永久开启iptables
在CentOS 6中,使用chkconfig iptables on可设置iptables开机自启。执行后,重启系统将自动启动iptables服务。
3.4 临时关闭iptables
执行service iptables stop,iptables立即停止,所有规则失效。此操作为临时生效,重启后恢复至开机自启状态(若已启用)。
3.5 永久关闭iptables
执行chkconfig iptables off取消开机自启,再执行service iptables stop停止当前服务。此后重启系统,iptables不再自动开启。
3.6 iptables规则配置
iptables规则配置需谨慎。例如,允许SSH访问(22端口):iptables -A INPUT -p tcp –dport 22 -j ACCEPT(-A表示追加到链末尾,-j ACCEPT表示允许);保存规则:service iptables save(将规则写入/etc/sysconfig/iptables文件,确保重启后生效)。删除规则需先定位规则序号(iptables -L –line-numbers),再通过iptables -D INPUT 序号删除。
4. 关闭防火墙时的注意事项
虽然关闭防火墙可简化某些操作,但必须充分评估风险,尤其是生产环境中的centos服务器。
4.1 SELinux与防火墙的关系
SELinux(Security-Enhanced Linux)是Linux系统的强制访问控制机制,与防火墙协同工作。关闭防火墙不等于关闭SELinux,SELinux仍可能限制进程的网络访问。检查SELinux状态:getenforce,临时关闭:setenforce 0,永久关闭需修改/etc/selinux/config文件(将SELINUX=enforcing改为SELINUX=disabled)。
4.2 生产环境的风险提示
生产环境强烈不建议直接关闭防火墙。正确的做法是仅开放必要的端口和服务,并通过安全策略限制访问来源(如仅允许特定IP访问数据库端口)。关闭防火墙会使服务器暴露在公网攻击之下,可能导致数据泄露或服务中断。
4.3 防火墙日志查看
通过分析防火墙日志,可发现异常访问并优化规则。firewalld日志通常位于/var/log/firewalld,可通过journalctl -u firewalld查看;iptables日志需通过auditd或rsyslog配置,例如在/etc/rsyslog.d/iptables.conf中添加“:msg,contains, “iptables” /var/log/iptables.log”。
5. 常见问题与解决方案
在使用centos防火墙过程中,可能会遇到一些操作问题,以下是典型场景的解决方法。
5.1 防火墙关闭后服务仍无法访问
若已关闭防火墙但服务(如Web服务)仍无法访问,首先检查SELinux状态(getenforce)。若为Enforcing,可能是SELinux策略阻止了服务监听。可临时关闭SELinux测试,或通过semanage port -a -t http_port_t -p tcp 80添加端口策略。

5.2 firewalld规则不生效
若添加的firewalld规则未生效,需检查两点:是否添加了–permanent参数(临时规则无需此参数,但重启后失效);是否执行了firewall-cmd –reload重载规则。永久规则修改后必须重载才能生效。
5.3 iptables规则重启后丢失
iptables规则默认保存在内存中,重启后会丢失。确保每次修改规则后执行service iptables save,将规则写入配置文件。若规则仍丢失,检查/etc/sysconfig/iptables文件是否存在且权限正确(通常为600)。
6. 防火墙工具对比与选择
为更直观理解firewalld与iptables的差异,可通过下表对比核心特性:
| 对比项 | firewalld | iptables |
|---|---|---|
| 默认版本 | CentOS 7+ | CentOS 6及以前 |
| 管理方式 | 动态区域管理,支持运行时修改 | 静态规则链,需保存配置 |
| 命令工具 | firewall-cmd、firewall-config | iptables、service、chkconfig |
| 规则持久化 | 通过–permanent参数,需重载 | 需手动执行service iptables save |
选择时需结合系统版本:CentOS 7+优先使用firewalld,操作更高效;CentOS 6仍需依赖iptables,确保兼容性。
FAQ问答
Q1:CentOS 7和CentOS 6防火墙管理命令有什么区别?
A:CentOS 7默认使用firewalld,通过systemctl和firewall-cmd管理;CentOS 6使用iptables,通过service和chkconfig管理,规则保存方式也不同(iptables需手动save)。
Q2:关闭防火墙会影响系统哪些功能?
A:关闭防火墙会使所有网络端口暴露,失去流量过滤能力,可能导致系统易受攻击。但不会影响系统本身的服务状态(如Apache、MySQL等需手动启动)。
Q3:如何在防火墙中开放特定IP的访问权限?
A:以firewalld为例,添加源IP规则:firewall-cmd –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.100″ port protocol=”tcp” port=”80″ accept’ –permanent,然后重载规则。
Q4:firewalld的zone(区域)是什么,如何使用?
A:Zone是firewalld的网络区域概念,根据网络信任度划分(如public、trusted、dmz等)。默认使用public区域,可通过firewall-cmd –get-active-zones查看当前区域,firewall-cmd –set-default-zone=trusted修改默认区域。
Q5:iptables的INPUT、OUTPUT、FORWARD链有什么区别?
A:INPUT链处理进入本机的数据包;OUTPUT链处理本机发出的数据包;FORWARD链处理经过本机但不进入本机的转发数据包(如路由器场景)。
Q6:如何恢复防火墙默认配置?
A:以firewalld为例,执行firewall-cmd –reload重载规则;若需恢复所有默认规则,可备份后删除/etc/firewalld目录,再重装firewalld包:yum reinstall firewalld。iptables则执行service iptables restart,或直接覆盖/etc/sysconfig/iptables为默认配置文件。

