防火墙

防火墙介绍

其主要功能是保护内部网络免受外部威胁,防止未经授权的访问,并在企业网络和互联网之间建立一道安全屏障。

通过流量过滤、阻止恶意和记录网络活动,防火墙有效地提升了网络的安全性和稳定性。作为网络安全的第一道防线,防火墙在企业、机构和个人用户的网络环境中发挥着关键作用。

防火墙类型

硬件防火墙

H3C、华为、深信服…

防火墙软件

iptable、firewalld、 ufw…

云平台安全组

阿里云、华为云、腾讯云、京东云、AWS、谷歌、Azure

防火墙安全流程

  1. 访问控制(核心功能)

入站控制:控制外部哪些 IP/端口可以访问你的服务器

出站控制:控制服务器内部程序可以访问哪些外部网络

白名单/黑名单:只允许信任的 IP 访问(如仅允许公司 IP 连 SSH)

  1. 端口保护

只开放必要的端口,关闭其他所有端口

例如:Web 服务器只开放 80/443,SSH 只开放 22,其余全部关闭

  1. 防御网络攻击

防止端口扫描:隐藏未开放的端口

防 DoS/DDoS 攻击:限制单个 IP 的连接数/频率

防 SYN Flood:防火墙可检测并丢弃异常连接请求

  1. 流量过滤

按协议过滤(TCP/UDP/ICMP)

按状态过滤(只允许已建立的连接返回数据)

按应用层内容过滤(如 Web 应用防火墙 WAF)

  1. 日志审计

记录所有被拒绝的连接尝试

帮助排查安全事件和异常流量

软防火墙介绍

本质是Linux内核中网络流量管理模块,Netfilter

iptables是Netfilter客户端;

firewalld是Redhat7之后标配的防火墙,提升了易用性,底层调用iptables;

ufw是Ubuntu系统上的防火墙软件,底层也是iptables;

四表五链、防火墙:iptables

防火墙:iptable的介绍

介绍:iptables是Linux最底层、最通用的防火墙命令工具,直接对接内核netfilter框架,极致灵活、性能拉满,适合资深运维、定制化场景,也是另外两个工具的底层基础。

iptables:指令拆解

 iptables 一条完整的规则,必须有的参数只有 3 个,其他都是可选的。
 iptables  命令动作  链名  -j 目标动作
 ​
 命令动作(必须)
 告诉 iptables 你要做什么:
 -A:添加规则(最常用)
 -D:删除规则
 -I:插入规则
 -L:查看规则
 ​
 链名(必须)
 告诉 iptables 规则作用在哪个方向:
 INPUT:进来的流量(别人访问你)
 OUTPUT:出去的流量(你访问别人)
 FORWARD:转发流量(路由器才用)
 没有这个,规则不知道管谁 → 报错。
 ​
 -j 目标动作(必须)
 告诉 iptables 匹配后怎么办:
 ACCEPT:允许
 DROP:拒绝(直接丢包)
 REJECT:拒绝(返回拒绝信息)
 没有 -j,规则没有结果 → 报错。

安装与基础启停

 iptables 完整教程
 ​
 1.1 安装与基础启停
 安装
 # Debian/Ubuntu 系
 apt update && apt install -y iptables iptables-persistent
 # RHEL/CentOS 系
 yum install -y iptables iptables-services
 ​
 注:iptables-persistent/iptables-services 用于实现规则重启后永久生效,必装。
 ​
 启停与状态管理
 systemctl status iptables                            # 查看状态
 systemctl start iptables                             # 启动
 systemctl stop iptables                              # 停止 
 systemctl enable iptables                            # 开启开机自启
 systemctl disable iptables                           # 关闭开机自启
 ​

四表五连

 四表(4个规则本子)
    raw         加急本 — 决定哪些包裹不要走常规流程跳过连接追踪,性能优化
    mangle      改装本 — 给包裹贴标签、改地址修改TTL、QoS 优先级等
    nat         改地址本 — 换门牌号、换收件人端口映射、内网共享上网(SNAT/DNAT)
    ilter       安检本 — 放行还是拦下最常用:允许或拒绝数据包
    
    用快递的形式介绍五链:
    PREROUTING → INPUT → FORWARD → OUTPUT → POSTROUTING
        ↓          ↓        ↓        ↓          ↓
     收货入口      送给本机  转发给别  本机发件   发货出口人
     
     英文          中文谐音       
     raw            绕        
     mangle         忙狗  
     nat            奈特    
     filter         飞欧特儿     
       
     英文            中文谐音     
     PREROUTING      普如停 
     INPUT           音普特    
     FORWARD         佛我儿的     
     OUTPUT          奥特普特 
     POSTROUTING     跑斯特如停 
     
     优先级
     先绕(raw)后改(mangle)改完地址(nat)再安检(filter)
image-20260703105159866.png
image-20260703105214559.png
image-20260703105223373.png

防火墙:firewalld

firewalld整体介绍:

介绍:firewalld(新手友好)

firewalld是红帽系(CentOS/RHEL/Fedora/麒麟/Linux)默认的防火墙管理工具,底层对接netfilter/nftables,核心创新是区域(zone)概念,支持动态加载规则,改配置不中断现有连接,对企业运维极其友好。

image-20260703105116880.png

区域(Zones)概念:

image-20260703105501502.png

firewalld:安装及启停

 安装
 # RHEL/CentOS 系(默认自带,无需安装)
 yum install -y firewalld
 # Debian/Ubuntu 系
 apt update && apt install -y firewalld
 ​
 启停与状态管理
 # 查看状态
 systemctl status firewalld
 # 启动
 systemctl start firewalld
 # 停止
 systemctl stop firewalld
 # 开启开机自启
 systemctl enable firewalld
 # 关闭开机自启
 systemctl disable firewalld
 # 重载规则(不中断连接,永久规则生效必备)
 firewall-cmd --reload
 # 完全重启(中断现有连接,慎用)
 systemctl restart firewalld

firewalld:运行时 vs 永久配置

 运行时配置(临时生效):
 不加--permanent参数,配置后立即生效,重启firewalld/服务器后丢失,适合测试规则,避免锁死自己。
 ​
 永久配置:
 加--permanent参数,配置后不会立即生效,必须执行firewall-cmd --reload重载后才生效,重启不丢失。

firewalld:指令

 命令通用语法
 firewall-cmd [参数] [--permanent]
 所有永久配置,必须加--permanent,且重载后才生效。
 ​
 ========================================
       firewall-cmd 命令常用选项速查表
 ========================================
 选项/子命令                       说明
 ----------------------------------------
 --state                           # 查看防火墙运行状态
 --reload                          # 重载防火墙规则(不中断连接)
 --complete-reload                 # 完全重载防火墙规则(会中断连接)
 --list-all                        # 列出默认区域的所有规则
 --list-all-zones                  # 列出所有区域的所有规则
 --get-default-zone                # 获取默认区域
 --set-default-zone=<zone>         # 设置默认区域
 --get-active-zones                # 列出已激活的区域
 --get-zones                       # 列出所有可用区域
 --get-services                    # 列出默认区域支持的服务
 --add-service=<service>           # 添加服务到默认区域
 --remove-service=<service>        # 从默认区域移除服务
 --add-port=<port>/<proto>         # 添加端口(如 8080/tcp)
 --remove-port=<port>/<proto>      # 移除端口
 --add-rich-rule='<rule>'          # 添加富规则
 --remove-rich-rule='<rule>'       # 移除富规则
 --add-source=<网段>               # 添加源IP/网段(如 192.168.1.0/24)
 --remove-source=<网段>            # 移除源IP/网段
 --add-forward-port=...            # 添加端口转发
 --remove-forward-port=...         # 移除端口转发
 --permanent                       # 永久生效(需配合 --reload)
 ----------------------------------------
 常用组合示例:
   firewall-cmd --state                                          # 检查防火墙是否运行
   firewall-cmd --reload                                         # 重载规则
   firewall-cmd --list-all                                       # 查看当前区域规则
   firewall-cmd --add-service=http --add-service=https           # 临时开放HTTP和HTTPS
   firewall-cmd --permanent --add-port=8080/tcp                  # 永久开放8080端口
   firewall-cmd --reload                                         # 使永久规则生效
   firewall-cmd --zone=public --add-port=3306/tcp --permanent    # 指定区域永久开放
   firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept'  # 允许指定网段访问SSH
 ========================================
 ​
 高频核心命令
 基础状态与区域管理           
 firewall-cmd --state                                                 # 查看firewalld运行状态
 firewall-cmd --get-default-zone                                      # 查看默认区域
 firewall-cmd --set-default-zone=home                                 # 修改默认区域(比如改成home)    
 firewall-cmd --get-zones                                             # 查看所有可用区域   
 firewall-cmd --get-active-zones                                      # 查看当前网卡绑定的区域
 firewall-cmd --zone=public --change-interface=eth0 --permanent       # 把网卡绑定到指定区域(比如把eth0绑定到public)
 firewall-cmd --zone=public --list-all                                # 查看指定区域的所有规则
 firewall-cmd --list-all-zones                                        # 查看所有区域的所有规则
 ​
 服务管理(firewalld最大优势,不用记端口)
 firewalld预定义了上百种常用服务(ssh/http/https/mysql等),直接放行服务,无需记端口号,避免写错端口。
 firewall-cmd --get-services                                           # 查看所有预定义服务
 firewall-cmd --zone=public --add-service=ssh                          # 放行public区域的ssh服务(临时生效)
 firewall-cmd --zone=public --add-service=http --permanent             # 永久放行http服务(必加--permanent)
 firewall-cmd --zone=public --add-service=https --permanent            # 永久放行https服务(必加--permanent)
 firewall-cmd --zone=public --remove-service=mysql --permanent         # 移除放行的服务
 firewall-cmd --zone=public --list-services                            # 查看区域内已放行的服务
 firewall-cmd --reload                                                 # 重载规则,让永久配置生效
 ​
 3. 端口管理(自定义端口必备)
 firewall-cmd --zone=public --add-port=8080/tcp                        # 临时放行TCP 8080端口
 firewall-cmd --zone=public --add-port=53/udp --permanent              # 永久放行UDP 53端口(DNS)
 firewall-cmd --zone=public --add-port=10000-20000/tcp --permanent     # 永久放行端口范围
 firewall-cmd --zone=public --remove-port=3306/tcp --permanent         # 移除放行的端口
 firewall-cmd --zone=public --list-ports                               # 查看区域内已放行的端口
 firewall-cmd --reload                                                 # 重载生效

SELinux(沙盒)

 临时关闭
 setenforce 0
 ​
 永久关闭配置文件
 vim /etc/selinux/config
 修改为:SELINUX=disabled
 ​
 虚拟机重启
 init 6