【Linux】centos 防火墙学习

一、防火墙基础概念

1. 两种防火墙管理方式

  • iptables: 直接管理netfilter内核模块的传统工具

  • firewalld: 动态管理防火墙的守护进程(CentOS 7/8默认)

2. 常用术语

  • zone: 网络区域(public, internal, trusted等)

  • service: 预定义的服务规则集合

  • port: 端口号

  • rich rule: 复杂规则

二、firewalld 基础操作

1. 服务管理

bash 复制代码
# 查看防火墙状态
sudo systemctl status firewalld

# 启动防火墙
sudo systemctl start firewalld

# 停止防火墙
sudo systemctl stop firewalld

# 开机自启
sudo systemctl enable firewalld

# 禁止开机自启
sudo systemctl disable firewalld
复制代码

2. 基本命令

bash 复制代码
# 查看运行状态
sudo firewall-cmd --state

# 重新加载配置(不中断现有连接)
sudo firewall-cmd --reload

# 完全重启(中断连接)
sudo systemctl restart firewalld
复制代码

三、区域(Zone)管理

1. 查看默认区域

bash 复制代码
# 查看默认区域
sudo firewall-cmd --get-default-zone

# 查看所有区域
sudo firewall-cmd --get-zones

# 查看活动的区域
sudo firewall-cmd --get-active-zones
复制代码

2. 更改区域

bash 复制代码
# 更改默认区域
sudo firewall-cmd --set-default-zone=internal

# 更改网卡区域
sudo firewall-cmd --zone=public --change-interface=eth0
复制代码

四、规则管理

1. 开放/关闭端口

bash 复制代码
# 开放端口(临时)
sudo firewall-cmd --add-port=80/tcp

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

# 关闭端口
sudo firewall-cmd --remove-port=80/tcp --permanent

# 查看开放的端口
sudo firewall-cmd --list-ports
复制代码

2. 服务管理

bash 复制代码
# 允许服务(例:http)
sudo firewall-cmd --add-service=http --permanent

# 移除服务
sudo firewall-cmd --remove-service=http --permanent

# 查看允许的服务
sudo firewall-cmd --list-services
复制代码

3. 高级规则

bash 复制代码
# 允许IP段
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'

# 端口转发
sudo firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
复制代码

五、iptables 基础(了解)

1. 基本命令结构

bash 复制代码
# 查看规则
sudo iptables -L -n -v

# 清空规则
sudo iptables -F

# 保存规则(CentOS 7)
sudo service iptables save

# 允许SSH
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 拒绝某个IP
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
复制代码

六、实战案例

案例1:配置Web服务器防火墙

bash 复制代码
# 设置默认区域为public
sudo firewall-cmd --set-default-zone=public

# 开放服务
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

# 开放额外端口
sudo firewall-cmd --permanent --add-port=3000/tcp

# 重新加载
sudo firewall-cmd --reload

# 验证配置
sudo firewall-cmd --list-all
复制代码

案例2:限制访问

bash 复制代码
# 仅允许特定IP访问SSH
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="22" accept'

# 拒绝某个IP访问
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.50" reject'
复制代码

七、配置文件位置

firewalld配置

bash 复制代码
# 配置文件目录
/etc/firewalld/

# 主要配置文件
/etc/firewalld/firewalld.conf

# 区域配置文件
/etc/firewalld/zones/

# 服务定义
/usr/lib/firewalld/services/
复制代码

iptables配置

bash 复制代码
# 规则保存位置(CentOS 7)
/etc/sysconfig/iptables
复制代码

八、故障排查

常用命令

bash 复制代码
# 查看拒绝的日志
sudo journalctl -xe | grep -i firewall

# 查看完整规则
sudo firewall-cmd --list-all --zone=public

# 测试端口连通性
telnet 服务器IP 端口号
nc -zv 服务器IP 端口号


firewalld 与 iptables 详细对比

一、核心区别概述

特性 iptables firewalld
诞生时间 2001年 2011年(CentOS 7引入)
管理方式 静态配置 动态管理
配置方式 直接修改规则 区域、服务抽象
配置存储 一次性加载 运行时+持久化分离
重新加载 中断所有连接 不中断现有连接
复杂性 较低,直接 较高,抽象层
默认状态 CentOS 6及以前 CentOS 7/8/9默认

二、架构和工作原理

iptables 架构

复制代码
用户空间命令 (iptables) 
    ↓
内核空间 (netfilter框架)
    ↓
规则链 (INPUT/OUTPUT/FORWARD)
    ↓
规则表 (filter/nat/mangle/raw)
复制代码

firewalld 架构

复制代码
firewall-cmd/cli/GUI
    ↓
firewalld 守护进程
    ↓
DBus 接口
    ↓
iptables/nftables 后端
    ↓
内核空间 (netfilter)

三、将 iptables 规则转换为 firewalld

场景1:开放端口
复制代码
# iptables方式
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

# firewalld等价命令
firewall-cmd --add-port=3306/tcp --permanent
复制代码
场景2:允许特定IP
复制代码
# iptables方式
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT

# firewalld等价命令
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' --permanent
复制代码
场景3:端口转发
复制代码
# iptables方式
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

# firewalld等价命令
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
复制代码



相关推荐
彧azz13 分钟前
算法设计与分析:贪心与动态规划
数据结构·学习·算法·贪心算法·动态规划
吴声子夜歌23 分钟前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
xiaoye-duck2 小时前
《Linux 网络编程》深入理解 IP 协议(二):网段划分、私有 IP 与 NAT 地址转换
linux·网络·ip
一条小小yu2 小时前
基于数据库唯一索引 + 过期时间的分布式锁
学习
传奇开心果编程2 小时前
【ArkUI 练中学】第15课:UI 界面设计与实战
学习·ui·华为·harmonyos
zx_741484813 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS3 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
金士顿3 小时前
System.Text.Json Source Generator 深度解析:为什么 Native AOT 不喜欢反射
linux·asp.net core·arm64·net·native aot
传奇开心果编程4 小时前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习
做运维的阿瑞4 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python