恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Linux 中 iptables、SELinux、firewalld 的区别与使用方法
首页
资讯中心
/
Linux 中 iptables、SELinux、firewalld 的区别与使用方法
Linux 中 iptables、SELinux、firewalld 的区别与使用方法
发布时间:2026/8/17 19:47:26
1. 引言在 Linux 服务器运维中iptables、SELinux、firewalld是三个经常被提起的安全组件。初学者容易把它们混为一谈实际上它们工作在不同的层次解决的问题也不一样iptables内核层防火墙工具负责网络包的过滤与转发firewalld面向用户的动态防火墙管理框架底层通常仍然调用 nftables/iptables 规则SELinux强制访问控制机制限制进程对文件、端口等资源的访问权限不是传统意义上的“端口防火墙”。本文先讲清三者的区别再分别给出常用场景与命令示例帮助你在 CentOS/RHEL 系和 Ubuntu/Debian 系环境中快速上手。2. 三者是什么2.1 iptables内核包过滤工具iptables基于 Linux 内核的netfilter框架工作通过配置filter、nat、mangle等表中的规则链对进出主机的数据包进行匹配和处理。它直接操作网络层数据包是传统 Linux 防火墙的核心。新版内核中nftables正在逐渐取代iptables但许多系统仍然同时提供iptables命令底层可以转换为 nftables 规则。2.2 firewalld动态防火墙管理工具firewalld是 Red Hat 系发行版默认使用的防火墙管理程序。它并不是替代内核防火墙而是在 iptables/nftables 之上提供一层更友好的管理接口。firewalld引入了“区域zone”和“服务service”的概念允许在不中断现有连接的情况下动态修改规则。日常使用时我们通常操作firewall-cmd命令而不是直接写 iptables 规则。2.3 SELinux强制访问控制SELinuxSecurity-Enhanced Linux由红帽主导开发是内核级的安全模块。它不关心“哪个 IP 能访问哪个端口”而是根据安全策略限制“某个进程能访问哪些文件、目录、端口”。例如即使防火墙放行了 80 端口如果 SELinux 不允许httpd进程访问某个目录或绑定非标准端口Web 服务仍然可能无法正常工作。常见报错如Permission denied、SELinux is preventing ...。3. 三者核心区别维度iptablesfirewalldSELinux本质内核包过滤规则工具防火墙管理框架强制访问控制系统层次网络层数据包网络层面向管理员内核安全策略面向进程与资源主要用途过滤、转发、NAT区域化防火墙配置限制进程访问文件、端口等管理方式命令行直接写规则firewall-cmd动态管理修改上下文、布尔值、策略典型场景精细控制数据包日常开放/关闭端口、服务防止服务越权访问资源关系firewalld 底层可调用它更上层的封装与防火墙相互独立、互为补充简单理解能不能从外部访问某个端口由iptables或firewalld决定允许访问之后进程是否有权限读取文件或绑定端口可能还要看SELinux是否放行。生产环境中排查“服务无法访问”问题时一般按顺序检查应用是否监听 → 防火墙是否放行 → SELinux 是否阻断。4. iptables 使用方法4.1 查看当前规则# 查看 filter 表所有规则默认表iptables-L-n-v# 查看 nat 表规则iptables-tnat-L-n-v参数说明-L列出规则-n以数字形式显示 IP 和端口不做域名反解-v显示更详细的信息-t指定表如filter、nat、mangle。4.2 常用放行规则# 放行本机回环地址iptables-AINPUT-ilo-jACCEPT# 放行已建立连接和关联流量iptables-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT# 放行 22、80、443 端口iptables-AINPUT-ptcp--dport22-jACCEPT iptables-AINPUT-ptcp--dport80-jACCEPT iptables-AINPUT-ptcp--dport443-jACCEPT# 默认拒绝其他入站流量iptables-PINPUT DROP4.3 保存与恢复CentOS/RHEL 系可以使用iptables-services# 安装保存工具yuminstall-yiptables-services# 保存当前规则serviceiptables save# 或者使用 iptables-save 导出iptables-save/etc/iptables/rules.v4Ubuntu/Debian 系# 安装持久化工具aptinstall-yiptables-persistent# 保存规则netfilter-persistent save需要注意iptables命令直接写入的规则默认在重启后丢失生产环境一定要做持久化。5. firewalld 使用方法firewalld是 CentOS 7/8/9、RHEL 系列以及部分 Fedora 版本的默认防火墙。建议通过firewall-cmd管理。5.1 查看状态与区域# 查看防火墙运行状态systemctl status firewalld# 查看默认区域firewall-cmd --get-default-zone# 查看所有已激活区域firewall-cmd --get-active-zones# 查看当前生效规则firewall-cmd --list-all5.2 开放与关闭端口# 开放 80 端口临时生效重启后失效firewall-cmd --add-port80/tcp# 开放 80 端口并永久生效firewall-cmd--permanent--add-port80/tcp# 重新加载配置使永久规则生效firewall-cmd--reload# 移除端口firewall-cmd--permanent--remove-port80/tcp firewall-cmd--reload5.3 使用服务名开放服务# 开放 http、https 服务firewall-cmd--permanent--add-servicehttp firewall-cmd--permanent--add-servicehttps firewall-cmd--reload# 查看支持的服务列表firewall-cmd --get-services5.4 区域配置# 查看 public 区域详情firewall-cmd--zonepublic --list-all# 将网卡临时加入 trusted 区域firewall-cmd--zonetrusted --add-interfaceeth0# 永久修改默认区域firewall-cmd --set-default-zonepublic5.5 富规则示例# 仅允许 192.168.1.100 访问 22 端口firewall-cmd--permanent--add-rich-rulerule familyipv4 source address192.168.1.100 port protocoltcp port22 acceptfirewall-cmd--reload对比 iptablesfirewalld的优点是规则更易读、可动态修改、支持区域和服务抽象如果需要非常细粒度的数据包控制仍然可以回到 iptables/nftables。6. SELinux 使用方法6.1 查看状态# 查看当前状态sestatus# 查看运行模式Enforcing / Permissive / Disabledgetenforce三种模式Enforcing强制执行策略违反策略的访问会被拒绝Permissive只记录警告不实际拦截通常用于排障Disabled完全关闭 SELinux。6.2 临时切换模式# 临时切换到 Permissive无需重启setenforce0# 临时切换到 Enforcingsetenforce1setenforce修改只在当前运行期间有效重启后恢复配置文件中的模式。6.3 永久配置编辑/etc/selinux/configSELINUXenforcing # 或 permissive、disabled SELINUXTYPEtargeted修改后通常需要重启系统。6.4 查看与修改文件上下文# 查看文件上下文ls-Z/var/www/html/index.html# 恢复文件默认上下文restorecon-Rv/var/www/html/# 修改文件上下文类型chcon-R-thttpd_sys_content_t /var/www/html/6.5 布尔值管理# 查看所有 SELinux 布尔值getsebool-a# 查看与 httpd 相关的布尔值getsebool-a|grephttpd# 开启某个布尔值例如允许 httpd 访问用户家目录setsebool-Phttpd_enable_homedirs on-P表示永久生效。6.6 端口上下文管理# 查看端口与上下文类型semanage port-l|grephttp# 允许 httpd 使用 8080 端口semanage port-a-thttp_port_t-ptcp8080# 查看当前 http 端口semanage port-l|grephttp_port_t如果系统提示semanage命令不存在先安装策略管理工具yuminstall-ypolicycoreutils-python-utils# 或旧版系统yuminstall-ypolicycoreutils-python6.7 排障建议遇到 SELinux 相关问题时优先查看日志# 查看 SELinux 拒绝日志cat/var/log/audit/audit.log|grepAVC# 安装并使用排障工具yuminstall-ysetroubleshoot-server sealert-a/var/log/audit/audit.log生产环境不建议直接关闭 SELinux。正确做法是先临时切换到Permissive根据日志定位问题再通过修改上下文、布尔值或策略来放行。7. 典型场景对比场景一外部访问不了 Nginx 的 80 端口排查顺序确认 Nginx 是否监听ss -tlnp | grep 80检查防火墙firewalldfirewall-cmd --list-all未放行时执行--add-servicehttpiptablesiptables -L -n | grep 80未放行时添加--dport 80检查 SELinux如果 Nginx 监听非标准端口需要semanage port -a -t http_port_t。场景二修改 Web 目录后出现 403这通常不是防火墙问题而是 SELinux 或文件权限问题# 检查目录上下文是否正确ls-Zd/data/www# 重新打回正确的 SELinux 上下文semanage fcontext-a-thttpd_sys_content_t/data/www(/.*)?restorecon-Rv/data/www场景三只允许特定 IP 访问管理端口使用 firewalld 富规则实现或使用 iptables 精确匹配来源地址SELinux 一般不需要特别修改除非管理进程使用了非标准端口。8. 能否同时使用、如何选择8.1 iptables 与 firewalld 不要混用在启用了firewalld的系统上不建议再手工写 iptables 规则因为两者管理同一套内核规则时容易产生冲突且规则顺序不好预测。一般原则是默认使用firewalld用firewall-cmd管理特殊需求或无法使用 firewalld 时再考虑直接使用 iptables/nftables严格按发行版默认方案走减少踩坑。8.2 SELinux 与防火墙可以同时启用SELinux 和防火墙属于不同层次可以也应该同时启用。防火墙负责“谁能访问”SELinux 负责“进程能做什么”两者叠加形成纵深防御。8.3 选择建议环境建议配置CentOS/RHEL 服务器启用 firewalld SELinux EnforcingUbuntu/Debian 服务器使用 ufw 或 nftablesAppArmor 替代部分 SELinux 场景容器/云主机结合安全组、云防火墙主机内按需启用防火墙排障阶段SELinux 临时切 Permissive定位后恢复 Enforcing9. 总结iptables是内核包过滤工具适合精细控制网络流量firewalld是更上层的动态防火墙管理框架适合日常开放端口和服务SELinux是强制访问控制机制负责限制进程对文件、端口等资源的访问三者不是竞争关系而是协作关系防火墙管网络访问SELinux 管进程权限排障时建议按“应用监听 → 防火墙 → SELinux”的顺序检查避免盲目关闭安全组件。掌握这三类工具的区别和基础命令可以覆盖绝大多数 Linux 服务器安全配置需求。对于生产环境建议结合日志与监控持续验证规则避免因配置错误导致服务不可用。