
iptables与Firewalld服务管理全指南:安装、启停与状态监控
本文最后更新于 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系统防火墙。