本文最后更新于 2025-09-23,文章内容可能已经过时。

在上一篇详解的基础上,本文补充了iptables和firewalld的安装方法、服务管理操作以及状态监控技巧,帮助你全面掌握这两个防火墙工具的实际运维。

1. 服务安装指南

1.1 iptables安装

Red Hat/CentOS/Fedora系列:

# 检查是否已安装
rpm -q iptables

# 安装iptables
sudo yum install iptables-services    # CentOS 7及以下
sudo dnf install iptables-services    # CentOS 8/Fedora

# 安装iptables实用工具
sudo yum install iptables-utils

Debian/Ubuntu系列:

# 检查是否已安装
dpkg -l | grep iptables

# 安装iptables
sudo apt update
sudo apt install iptables

# 安装持久化工具(保存规则用)
sudo apt install iptables-persistent

1.2 firewalld安装

Red Hat/CentOS/Fedora系列:

# 检查是否已安装
rpm -q firewalld

# 安装firewalld
sudo yum install firewalld    # CentOS 7
sudo dnf install firewalld    # CentOS 8/Fedora

Debian/Ubuntu系列:

# 安装firewalld
sudo apt update
sudo apt install firewalld

2. 服务管理操作

2.1 iptables服务管理

systemd系统(CentOS 7+/Ubuntu 16.04+):

# 启动iptables服务
sudo systemctl start iptables

# 停止iptables服务
sudo systemctl stop iptables

# 重启iptables服务
sudo systemctl restart iptables

# 查看iptables服务状态
sudo systemctl status iptables

# 设置开机自启
sudo systemctl enable iptables

# 禁用开机自启
sudo systemctl disable iptables

# 重新加载规则(不重启服务)
sudo systemctl reload iptables

传统SysV系统(CentOS 6及以下):

# 启动服务
sudo service iptables start

# 停止服务
sudo service iptables stop

# 重启服务
sudo service iptables restart

# 查看状态
sudo service iptables status

# 保存规则
sudo service iptables save

# 设置开机自启
sudo chkconfig iptables on

2.2 firewalld服务管理

systemd系统管理:

# 启动firewalld服务
sudo systemctl start firewalld

# 停止firewalld服务
sudo systemctl stop firewalld

# 重启firewalld服务
sudo systemctl restart firewalld

# 查看firewalld服务状态
sudo systemctl status firewalld

# 设置开机自启
sudo systemctl enable firewalld

# 禁用开机自启
sudo systemctl disable firewalld

# 重新加载配置(不中断连接)
sudo systemctl reload firewalld

# 检查服务是否运行
sudo systemctl is-active firewalld

# 检查服务是否启用开机启动
sudo systemctl is-enabled firewalld

3. 状态查看与监控

3.1 iptables状态查看

# 查看所有规则(详细模式)
sudo iptables -L -n -v --line-numbers

# 查看特定表的规则
sudo iptables -t nat -L -n -v
sudo iptables -t mangle -L -n -v

# 查看规则数量统计
sudo iptables -L -n -v | grep -c "^ACCEPT"
sudo iptables -L -n -v | grep -c "^DROP"

# 查看输入链规则
sudo iptables -L INPUT -n -v --line-numbers

# 查看规则计数器
sudo iptables -L -n -v -x

# 检查iptables服务是否运行
sudo systemctl is-active iptables

# 查看iptables服务日志
sudo journalctl -u iptables -f

3.2 firewalld状态查看

# 查看防火墙状态
sudo firewall-cmd --state

# 查看所有活动区域及其配置
sudo firewall-cmd --list-all-zones

# 查看默认区域配置
sudo firewall-cmd --list-all

# 查看当前活动区域
sudo firewall-cmd --get-active-zones

# 查看所有可用服务
sudo firewall-cmd --get-services

# 查看当前区域允许的服务
sudo firewall-cmd --list-services

# 查看当前区域开放的端口
sudo firewall-cmd --list-ports

# 查看富规则(复杂规则)
sudo firewall-cmd --list-rich-rules

# 查看直接规则(直接传递的iptables规则)
sudo firewall-cmd --list-direct-rules

# 检查firewalld运行状态
sudo systemctl status firewalld

# 实时监控firewalld日志
sudo journalctl -u firewalld -f

4. 服务切换与共存

4.1 从iptables切换到firewalld

# 1. 停止iptables服务
sudo systemctl stop iptables
sudo systemctl disable iptables

# 2. 确保iptables规则不会干扰
sudo iptables -F
sudo iptables -X
sudo iptables -Z

# 3. 启动并启用firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld

# 4. 检查状态
sudo firewall-cmd --state

4.2 从firewalld切换回iptables

# 1. 停止firewalld服务
sudo systemctl stop firewalld
sudo systemctl disable firewalld

# 2. 安装iptables服务(如果未安装)
sudo yum install iptables-services

# 3. 启动并启用iptables
sudo systemctl start iptables
sudo systemctl enable iptables

# 4. 恢复或重新配置iptables规则

4.3 服务冲突处理

检查服务冲突:

# 检查是否有多个防火墙服务同时运行
sudo systemctl status iptables firewalld ufw

# 查看端口监听冲突
sudo netstat -tulpn | grep :22

解决冲突:

# 方案1:禁用所有其他防火墙服务
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl stop ufw
sudo systemctl disable ufw

# 方案2:只启用一个服务
sudo systemctl enable iptables --now

5. 高级服务管理技巧

5.1 iptables服务高级管理

自定义服务文件(/usr/lib/systemd/system/iptables.service):

[Unit]
Description=IPv4 firewall with iptables
Documentation=man:iptables(8)
After=network.target
Conflicts=firewalld

[Service]
Type=oneshot
ExecStart=/usr/libexec/iptables/iptables.init start
ExecReload=/usr/libexec/iptables/iptables.init reload
ExecStop=/usr/libexec/iptables/iptables.init stop
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

保存和恢复规则脚本:

#!/bin/bash
# 备份iptables规则
iptables-save > /etc/iptables/backup_$(date +%Y%m%d_%H%M%S).rules

# 恢复最近备份
latest_backup=$(ls -t /etc/iptables/backup_*.rules | head -1)
iptables-restore < $latest_backup

5.2 firewalld服务高级管理

自定义服务配置:

# 创建自定义服务
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/myapp.xml

# 编辑自定义服务
sudo vi /etc/firewalld/services/myapp.xml

自定义服务文件示例(/etc/firewalld/services/myapp.xml):

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>My Custom Application</short>
  <description>This is my custom application service</description>
  <port protocol="tcp" port="8080"/>
  <port protocol="tcp" port="8443"/>
</service>

重新加载自定义服务:

# 重新加载firewalld以识别新服务
sudo firewall-cmd --reload

# 添加自定义服务
sudo firewall-cmd --add-service=myapp --permanent
sudo firewall-cmd --reload

6. 故障排除与日志分析

6.1 服务启动故障排除

iptables启动失败常见原因:

# 检查语法错误
sudo iptables-restore -t < /etc/sysconfig/iptables

# 查看详细错误信息
sudo journalctl -u iptables -n 50

# 检查模块是否加载
lsmod | grep ip_tables

# 手动加载模块
sudo modprobe ip_tables

firewalld启动失败排查:

# 检查配置语法
sudo firewall-cmd --check-config

# 查看详细日志
sudo journalctl -u firewalld -f

# 重置firewalld配置
sudo firewall-cmd --reset-to-defaults

6.2 服务监控脚本

iptables监控脚本:

#!/bin/bash
# iptables状态监控脚本

echo "=== iptables服务状态 ==="
systemctl status iptables --no-pager -l

echo -e "\n=== 当前规则统计 ==="
iptables -L -n | grep -E "(Chain|ACCEPT|DROP|REJECT)" | awk '{print $1}' | sort | uniq -c

echo -e "\n=== 连接跟踪统计 ==="
conntrack -C 2>/dev/null || echo "conntrack not available"

firewalld监控脚本:

#!/bin/bash
# firewalld状态监控脚本

echo "=== firewalld服务状态 ==="
systemctl status firewalld --no-pager -l

echo -e "\n=== 防火墙状态 ==="
firewall-cmd --state

echo -e "\n=== 默认区域配置 ==="
firewall-cmd --list-all

echo -e "\n=== 活动区域 ==="
firewall-cmd --get-active-zones

7. 实际运维场景示例

7.1 生产环境部署流程

iptables部署流程:

# 1. 安装服务
sudo yum install iptables-services

# 2. 配置基本规则
sudo vi /etc/sysconfig/iptables

# 3. 测试规则语法
sudo iptables-restore -t < /etc/sysconfig/iptables

# 4. 启动服务
sudo systemctl start iptables

# 5. 设置开机自启
sudo systemctl enable iptables

# 6. 验证规则生效
sudo iptables -L -n

firewalld部署流程:

# 1. 安装服务
sudo yum install firewalld

# 2. 启动服务
sudo systemctl start firewalld

# 3. 配置基本规则
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent

# 4. 重新加载配置
sudo firewall-cmd --reload

# 5. 设置开机自启
sudo systemctl enable firewalld

# 6. 验证配置
sudo firewall-cmd --list-all

7.2 日常维护命令汇总

iptables日常维护:

# 备份规则
sudo iptables-save > /backup/iptables-backup-$(date +%F).rules

# 临时允许某个IP
sudo iptables -I INPUT -s 192.168.1.100 -j ACCEPT

# 临时阻塞某个IP
sudo iptables -I INPUT -s 192.168.1.200 -j DROP

# 查看规则命中计数
sudo iptables -L -n -v

# 清空计数器
sudo iptables -Z

firewalld日常维护:

# 临时开放端口(重启后失效)
sudo firewall-cmd --add-port=8080/tcp

# 永久开放端口
sudo firewall-cmd --add-port=8080/tcp --permanent

# 添加富规则
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept' --permanent

# 重新加载而不中断连接
sudo firewall-cmd --reload

# 查看运行时和永久配置差异
sudo firewall-cmd --list-all
sudo firewall-cmd --list-all --permanent

总结

通过本文的详细指南,你应该已经掌握了iptables和firewalld的安装、服务管理、状态监控等全方位操作。在实际生产环境中,建议根据具体需求选择合适的防火墙工具,并建立完善的监控和维护流程。

关键要点回顾:

  • iptables适合需要精细控制的场景

  • firewalld适合需要动态管理的现代环境

  • 避免多个防火墙服务同时运行

  • 定期备份规则配置

  • 建立监控和告警机制

掌握这些服务管理技能,将帮助你在实际运维中更加得心应手地管理Linux系统防火墙。