防火墙基本介绍与使用

防火墙概述

文章目录

防火墙是位于内部网络与外部网络之间的安全防护系统,依据预设规则审查、允许或拒绝数据传输。

防火墙种类及使用说明

硬件防火墙(企业级网络入口防护)

  • 定位:部署在企业网络的核心入口,承担大规模流量的安全过滤,属于物理设备级的防护。
  • 细分组件:
    • 三层路由 :负责网络层的路由转发,代表厂商有H3C、华为、Cisco(思科),这些厂商的设备具备强路由性能,是企业骨干网络的基础组件。
    • 专业防火墙 :专注于安全策略执行,代表厂商有深信服、奇安信、绿盟 ,还有国际厂商Juniper,这类设备性能强劲,能处理高吞吐量的网络流量并抵御复杂攻击。

二、软件防火墙(开源 / 终端级防护,部署灵活)

  • 定位:以软件形式安装在服务器或终端系统中,成本低、配置灵活,适用于小型网络或特定设备的精细化防护。
  • 代表工具:
    • iptables:Linux 内核级的防火墙工具,直接写入内核层,对性能影响小,还能为 Docker 容器服务(主要工作在网络 4 层,即传输层)。
    • firewalld :CentOS 7 系统的默认防火墙工具,底层依赖 iptables,操作更轻量化,适合 CentOS 生态的服务器。
    • nftables:为替代 iptables 设计的新一代工具,在 CentOS 8、9 中应用,性能和易用性更优。
    • ufw(Ubuntu Firewall):Ubuntu 系统的专用防火墙工具,配置简单,面向 Ubuntu 服务器或桌面用户。
  • 典型场景:网站内部的 IP 封禁、小型业务系统的访问控制等。

三、云防火墙(公有云场景下的弹性防护)

  • 定位:部署在公有云平台上,无需本地硬件,按需付费且弹性扩容,适配云端资产和分布式网络架构。
  • 以阿里云为例的组件:
    • 安全组:最基础的云防火墙功能,通过 "封 IP、封端口" 的规则,控制云服务器的出入流量。
    • NAT 网关:实现云端的 "共享上网、端口映射",同时隐藏内部网络结构,提升安全性。
    • WAF 应用防火墙:集成在云平台的 Web 应用防护层,防御针对网站的应用层攻击。
    • DDoS 高防:专门抵御分布式拒绝服务攻击,保障云端业务的可用性。

四、WAF 防火墙(Web 应用层 7 层防护)

  • 定位 :专注于 Web 应用的7 层(应用层)攻击防御,针对 HTTP/HTTPS 协议,抵御 SQL 注入、XSS(跨站脚本)、恶意爬虫等攻击。
  • 核心要求:需要 "书写规则"------ 即通过定义攻击特征(如 SQL 注入的语法模式、XSS 的脚本特征),精准识别并拦截攻击行为,规则需描述 "攻击过程、关键提示、关键操作" 以确保防护有效性。

SQL注入

SQL 注入是一种常见的 Web 应用安全漏洞,指攻击者通过构造恶意 SQL 语句,利用应用程序对用户输入验证不足的缺陷,非法操作数据库(如读取、篡改、删除数据,甚至控制服务器)。

一、核心原理

应用程序在拼接 SQL 语句时,若直接将用户输入的内容嵌入语句中,且未做过滤或转义,攻击者可通过构造特殊输入(如包含 SQL 关键字、逻辑运算符的字符串),让数据库执行非预期的 SQL 命令。

bash 复制代码
企业选型建议:
中小企业:使用公有云,安全组,waf防火墙,态势感知
访问量巨大:使用硬件防火墙,waf防火墙,硬件服务器+云服务器

必须熟悉的名词

概念 定义
容器 可理解为链是规则的容器表是链的容器
表(table) 功能分类的容器,每个表负责一类网络功能,包含多条 "链"。
链(chain) 规则的容器,是一组规则的有序集合,数据包会按链的顺序依次匹配规则
规则(policy) 链中的具体策略,由 "匹配条件" 和 "动作" 组成。

iptables执行过程

工作流程:

  1. 防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后过滤的
  2. 如果匹配成功规则,及明确表示是拒绝(DROP)还是接受(ACCEPT),数据包就不再向下匹配新的规则。
  3. 如果规则中没有明确表面是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过.
  4. 防火墙的默认规则是所有规则都匹配完才会匹配的。

表与链

包含 4 类核心表:

  • filter:最常用,负责流量过滤(允许 / 拒绝),含 INPUT/OUTPUT/FORWARD 链;

  • nat:处理网络地址转换(如端口映射、IP 伪装),含 PREROUTING/POSTROUTING/OUTPUT 链;

  • mangle:修改数据包头部(如 TTL、优先级),用于流量标记;

  • raw:关闭连接跟踪,提升高吞吐量场景(如 DNS)性能。

iptables 中,5 条核心内置链是数据包处理流程的关键节点,分别对应 "入站预处理、入站过滤、转发、出站过滤、出站后处理" 五个阶段,以下是详细说明:

链名称 所属主要表 功能说明
PREROUTING natmangleraw 数据包到达网卡后、路由判断前 执行的规则,用于修改目的地址 / 端口(如端口映射)
INPUT filtermangle 处理目标地址是本机的数据包,决定是否允许数据包进入本机服务
FORWARD filtermangle 处理流经本机转发的数据包(本机作为路由器时生效)
OUTPUT natfiltermangle 处理本机主动发起的数据包,决定是否允许数据包从本机发出
POSTROUTING natmangle 数据包离开网卡前、路由判断后 执行的规则,用于修改源地址 / 端口(如 IP 伪装)

filter表

  • iptables默认的表,filter表示过滤

  • 实现防火墙功能:(对数据包的filter过滤)屏蔽或准许,端口,ip

filter 表 主要和主机自身相关,真正负责主机防火墙功能(过滤流入流出主机的数据包)。是 iptables 默认使用的表,定义了三个链。企业场景:主机防火墙
INPUT 负责过滤所有目标地址是本机地址的数据包,通俗来说就是过滤进入主机的数据包(能否让数据包进入服务器)
FORWARD 负责转发流经主机的数据包,起转发作用,和 NAT 关系很大(如 LVS NAT 模式,涉及 net.ipv4.ip_forward=0 配置)
OUTPUT 处理所有源地址是本机地址的数据包,通俗的讲就是处理从主机发出去的数据包

nat表

  • 实现共享上网(内网服务器上外网)
  • 端口映射和ip映射
概念 说明
nat 负责网络地址转换,即来源与目的 IP 地址和 port 的转换。应用:和主机本身无关,一般用于局域网共享上网或者特殊的端口转换服务相关。工作场景:1. 用于企业路由(zebra)或网关(iptables),共享上网(POSTROUTING);2. 做内部外部 IP 地址一对一映射(dmz),硬件防火墙映射 IP 到内部服务器,ftp 服务(PREROUTING);3.WEB,单个端口的映射,直接映射 80 端口(PREROUTING)。这个表定义了 3 个链,nat 功能相当于网络的 acl 控制,和网络交换机 acl 类似。
OUTPUT 和主机放出去的数据包有关,改变主机发出数据包的目的地址。
PREROUTING 在数据包到达防火墙时,进行路由判断之前执行的规则,作用是改变数据包的目的地址、目的端口等。就是收信时,根据规则重写收件人的地址。例如:把公网 IP:xxx.xxx.xxx.xxx 映射到局域网的 xx.xx.xx.xx 服务器上。如果是 web 服务,可以将 80 转换为局域网的服务器 9000 端口上(如 10.0.0.61 8080 (目标端口) ---nat→ 10.0.0.7 22)。
POSTROUTING 在数据包离开防火墙时进行路由判断之后执行的规则,作用改变数据包的源地址,源端口等。写好发件人的地址,要让家人回信时能够有地址可回。例如:默认笔记本和虚拟机都是局域网地址,在出网的时候被路由器将源地址改为了公网地址。生产应用:局域网共享上网。

4表5链规则

  1. 流程起点:封包进入

数据包首先进入nat 表的 PREROUTING 链 ------ 这是在 "路由判断" 前的地址转换环节,可修改数据包的目的 IP / 端口(比如将公网 IP 映射到内网服务器的端口)。

  1. 路由判断:决定数据包流向

路由判断是核心分支点,根据数据包的目标地址,决定其走向:

  • 路径 A(目标是本机) :进入 filter 表的 INPUT 链 ,过滤 "进入本机" 的数据包(比如判断是否允许外部访问本机的 80 端口)。通过后,数据包访问Linux本机的资源(如本机的 Web 服务、数据库)。
  • 路径 B(需要转发) :进入 filter 表的 FORWARD 链,过滤 "流经本机转发" 的数据包(比如本机作为路由器时,转发内网到外网的流量)。
  • 路径 C(本机发起) :若数据包是Linux本机的资源主动发起的,经过路由判断后,进入 nat 表的 OUTPUT 链 (修改本机发出数据包的目的地址 ),再进入 filter 表的 OUTPUT 链,过滤 "从本机发出" 的数据包。
  1. 最终出口:封包传出

无论数据包是 "转发流量(FORWARD)" 还是 "本机出站流量(OUTPUT)",最终都会进入 nat 表的 POSTROUTING 链 ------ 在数据包离开防火墙前,修改源 IP / 端口(比如局域网共享上网时,将内网 IP 伪装成公网 IP),最终 "封包传出" 到目标网络。

最详细

iptables

iptables 是 Linux 系统中基于内核 netfilter 框架实现的防火墙工具,用于管理网络流量的访问控制(允许、拒绝、转发等),是 Linux 网络安全的核心组件。其核心逻辑是通过 "表(Table)→ 链(Chain)→ 规则(Rule)" 的层级结构,对数据包进行精准过滤和处理。

bsah 复制代码
yum install -y iptables-services

apt install -y iptables-services

环境准备及命令

节点 ip
m01 10.0.0.61/172.16.1.61
web01 10.0.0.51/172.16.1.51
bash 复制代码
[root@lx ~]# rpm -qa | grep iptables
iptables-1.8.5-2.ky10.x86_64
iptables-help-1.8.5-2.ky10.noarch
iptables-libs-1.8.5-2.ky10.x86_64

[root@lx ~]# rpm -ql iptables
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables   #防火墙配置文件
/usr/lib/systemd/system/ip6tables.service
/usr/lib/systemd/system/iptables.service  #防火墙服务配置文件(命令)

/usr/sbin/iptables  #iptables 命令 添加/删除查看 规则
/usr/sbin/iptables-restore  #恢复
/usr/sbin/iptables-save    #iptables 规则 输出(保存)



#防火墙相关模块 加载到内核中
#写入到开机自启动.
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state    

#永久 
chmod +x /etc/rc.d/rc.local 
cat >>/etc/rc.local<<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ipt_state    
EOF

#关闭已有的firewalld防火墙
systemctl stop firewalld
systemctl disable firewalld



#检查是否加载防火墙iptables 模块 
lsmod |egrep 'filter|nat|ipt'

nf_nat_ftp             12770  0 
nf_conntrack_ftp       18638  1 nf_nat_ftp
iptable_nat            12875  0 
nf_nat_ipv4            14115  1 iptable_nat
nf_nat                 26787  2 nf_nat_ftp,nf_nat_ipv4
nf_conntrack          133053  6 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4
iptable_filter         12810  0 
ip_tables              27126  2 iptable_filter,iptable_nat
libcrc32c              12644  3 xfs,nf_nat,nf_conntrack


systemctl enable --now iptables

这些modprobe命令用于加载 Linux 内核中与iptables相关的内核模块,以扩展防火墙的功能支持。以下是每个模块的作用说明:

模块名称 功能作用 关键场景
ip_tables iptables 工具的核心模块 ,是使用 iptables 配置防火墙的基础。 所有 iptables 功能的前提,必须加载才能使用 iptables 命令。
iptable_filter 加载 filter 表的支持模块,负责流量过滤(允许 / 拒绝数据包)。 配置 INPUT/OUTPUT/FORWARD 链的过滤规则时依赖此模块。
iptable_nat 加载 nat 表的支持模块,负责网络地址转换(端口映射、IP 伪装等)。 配置端口转发(如将公网端口映射到内网服务)、共享上网(IP 伪装)时依赖此模块。
ip_conntrack 连接跟踪模块,记录网络连接的状态(如新建连接、已建立连接等)。 iptables 使用 --state 匹配连接状态(如 ESTABLISHED)时依赖此模块,是状态防火墙的核心。
ip_conntrack_ftp FTP 协议的连接跟踪模块,识别 FTP 主动 / 被动模式的动态连接。 若防火墙需放行 FTP 流量,必须加载此模块,否则会因 FTP 动态端口协商被拦截。
ip_nat_ftp FTP 协议的NAT 支持模块 ,配合 ip_conntrack_ftp 实现 FTP 流量的地址转换。 当内网 FTP 服务器通过 NAT 对外提供服务时,需加载此模块保证 FTP 数据连接正常。
ipt_state 状态匹配模块,提供 --state 选项的匹配能力 简化基于连接状态的规则配置(如 iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT)。

iptables命令参数

  • 指定表与链的指令
参数 说明
-t 表名 指定操作的表(默认 filter,可选 nat/mangle/raw
-A 链名 向链末尾追加一条规则
-I 链名 [序号] 向链指定位置插入规则(无序号则插入到开头)
-D 链名 [序号/匹配条件] 删除链中的规则(可按序号或完整匹配条件)
-R 链名 序号 规则 替换链中某条规则
-F [链名] 清空链中所有规则(无链名则清空所有表的链)
-Z [链名] 清空链的数据包 / 字节计数器
-N 自定义链名 创建自定义链
-X [自定义链名] 删除自定义链(需先清空规则)
-P 链名 策略 设置链的默认策略 (如 ACCEPT/DROP
  • 匹配条件参数
参数 说明
-p 协议 指定网络协议(tcp/udp/icmp/all
--dport 端口 目标端口(仅tcp/udp有效)
--sport 端口 源端口(仅tcp/udp有效)
-s 源IP/网段 源 IP 地址或网段
-d 目标IP/网段 目标 IP 地址或网段
-i 网卡 入站网卡(如eth0/lo
-o 网卡 出站网卡(如eth0/lo
-m state --state 状态 匹配连接状态(NEW/ESTABLISHED/RELATED
-m multiport --dports 端口列表 匹配多个目标端口(逗号分隔)
-m limit --limit 速率 速率限制(如10/s表示每秒 10 个包)
  • 指定是准许还是拒绝
参数 含义
-j jump,满足条件后的动作:DROP (拒绝)/ACCEPT (准许)/REJECT (拒绝)
DROP:丢弃数据包,不返回任何信息; REJECT:拒绝并返回错误信息
参数 含义
-F(flush) 清除指定表中所有的规则,可用于规则备份操作
-X 删除用户自定义的链
-Z(zero) 链的计数器清零(包括数据包计数器和数据包字节计数器)
-v 显示数据包数量、数据量等详细信息
iptables 命令及选项 指定表 指定链 (插入 / 追加 / 删除) ip 具体要求 (端口,ip, 协议) 端口 动作
iptables -t filter -A INPUT -s -p tcp/udp/icmp --dport 目标端口 -j DROP
-I -d --sport 源端口 -j REJECT
-D -j ACCEPT

查看表规则

  • 默认查看的是filter表
bash 复制代码
iptables -nL
  • 查看指定表中的规则
bash 复制代码
iptables -t nat -nL
  • 查看规则并加上序号
bash 复制代码
iptables -nL --line-number

删除规则

  • 删除所有规则
bash 复制代码
iptables -F
  • 根据序号删除
bash 复制代码
iptables -D INPUT 1

配置filter表规则

  • 正式配置之前,先备份,清空规则
bash 复制代码
iptables -F
iptables -X
iptables -Z

[root@lx ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

禁止访问22端口

bash 复制代码
#拒绝用户访问22端口
iptables -A INPUT -p tcp --dport 22 -j DROP 

封ip,屏蔽某个ip⭐

  • 发出DOS攻击,某几个/IP对网站发出大量请求
bash 复制代码
iptables -I INPUT -s 10.0.0.7 -j DROP

iptables -I INPUT -s 172.16.1.7 -j DROP

禁止网段连入(禁止10.0.0.0/24网段访问22端口)⭐

bash 复制代码
iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP

只允许指定网段连入

  • 实现阿里云白名单功能:默认是拒绝,开发端口,网段
bash 复制代码
#方法1 利用 ! 进行排除
iptables -I INPUT ! -s 172.16.1.0/24 -j DROP
#源ip不是172.16.1.0/24网段,则拒绝

#只允许10.0.0.0/24访问,除了10.0.0.0/24都拒绝
iptables -I INPUT ! -s 10.0.0.0/24 -j DROP


# 允许192.168.0.0/24网段所有访问
iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

# 仅允许10.0.0.0/16网段访问3306端口(MySQL)
iptables -A INPUT -s 10.0.0.0/16 -p tcp --dport 3306 -j ACCEPT


#方法2 修改链默认规则 修改为拒绝,添加准许
#修改默认规则
iptables -f filter -I INPUT -s 10.0.0.1 -j ACCEPT
iptables -f filter -I INPUT -s 172.16.1.0/24 -j ACCEPT
iptables -t filter -P INPUT DROP

#恢复
iptables -t filter -P INPUT ACCEPT

匹配ICMP类型,禁止ping⭐

  • 方案1:防火墙实现
bash 复制代码
#精确写法	
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
#简单写法
iptables -I INPUT -p icmp -j DROP
  • 方案2:通过内核参数,禁止被ping /etc/sysctl.conf
bash 复制代码
[root@lx ~]# cat /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all=1


#生效
sysctl -p

指定多个端口⭐

bash 复制代码
iptables -I INPUT -p tcp --dport 8888 -j DROP
iptables -I INPUT -p tcp --dport 9999 -j DROP

#指定多个端口
iptables -A INPUT -m multiport -p tcp --dport 80,443 -j ACCEPT

iptables -A INPUT -p tcp --dport 1:1024 -j ACCEPT

#书写防火墙则准许任何地址访问80和443端口
iptables -A INPUT -m multiport -p tcp --dport 80,443 -j ACCEPT

#书写防火墙规则只准许172.16.1.0/24访问3306和6379(! -s)
iptables -I INPUT ! -s 172.16.1.0/24 -p tcp -m multiport --dport 3306,6379 -j DROP

#公司的云服务器22端口只能在公司访问(在防火墙设置只准许公网ip访问22端口)
iptables -I INPUT ! -s 221.218.215.241 -p tcp --dport 22 -j DROP

iptables -I INPUT -s 221.218.215.241 -p tcp --dport 22 -j ACCEPT

匹配网络状态(TCP/IP连接状态)

-m state -state

NEW: 已经或将启动新的连接

ESTABLISHED:已建立的连接

RELATED:正在启动的新连接

INVALID:非法或无法识别的

bash 复制代码
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

限制并发及速率

bash 复制代码
防火墙limit模块和ngx limit_req,limit_conn模块都可以进行访问,请求频率的限制
可以辅助预防DDOS攻击
  • -m limit 限制模块
bash 复制代码
-m limit --limit 10/minute #每分钟只能有10个数据包 每6秒生成
  • -m limit -limit n(second/minute/hour)

解释:指定时间内的请求速率"n"为速率,后面为时间分别为:秒,分,时

bash 复制代码
-m limit --limit 10/minute --limit-burst 5 #每6秒释放工牌,给别人使用

#10个数据包
前5个 1个1个工牌   从第6个开始  每6秒 才能释放1个工牌
  • 测试
bash 复制代码
iptables -F

iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -P INPUT DROP

从5秒开始,间隔6秒

防火墙规则的保存与恢复⭐⭐⭐

  • iptables-save 进行备份,默认输出到屏幕

  • iptables-restore 进行恢复,加上文件

  • 写入到/etc/sysconfig/iptables

bash 复制代码
[root@lx ~]# iptables-save >/etc/sysconfig/iptables
[root@lx ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.8.5 on Fri Nov  7 20:44:41 2025
*filter
:INPUT DROP [62:6432]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [94:7800]
-A INPUT -p icmp -m limit --limit 10/min -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT
# Completed on Fri Nov  7 20:44:41 2025

[root@lx ~]# iptables -D INPUT 1
[root@lx ~]# iptables -nL --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
[root@lx ~]# iptables-restore </etc/sysconfig/iptables
[root@lx ~]# iptables -nL --line-numbers
Chain INPUT (policy DROP)
num  target     prot opt source               destination         
1    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            limit: avg 1
2    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

#读取/etc/sysconfig/iptables内容
systemctl restart iptables

生产用法

  • ssh可以连接进来
bash 复制代码
iptables -F
iptables -X
iptables -Z
iptables -nL

#放行22端口
iptables -A INPUT  -p tcp --dport 22 -j ACCEPT 
  • 设置允许本机lo 通讯规则
bash 复制代码
#允许本机回环lo接口数据流量流出与流入
# -i 数据进入的时候
iptables -A INPUT -i lo -j ACCEPT
#-o 数据流出的时候
iptables -A OUTPUT -o lo -j ACCEPT
  • 配置默认规则及方向80,443端口
bash 复制代码
 iptables -A INPUT -m multiport -p tcp --dport 443,80 -j ACCEPT 
[root@lx ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0



iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT 
iptables -A INPUT -s 172.16.1.0/24 -j ACCEPT 
 
[root@lx ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 443,80
ACCEPT     all  --  10.0.0.0/24          0.0.0.0/0           
ACCEPT     all  --  172.16.1.0/24        0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0


[root@lx ~]# iptables-save 
# Generated by iptables-save v1.8.5 on Fri Nov  7 20:59:36 2025
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [27:2880]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m multiport --dports 443,80 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -j ACCEPT
-A INPUT -s 172.16.1.0/24 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Fri Nov  7 20:59:36 2025
  • 修改默认的规则为拒绝INPUT
bash 复制代码
#本机所有服务(如 Web、SSH 等)将无法被外部访问,除非手动添加允许规则(如 iptables -A INPUT -p tcp --dport 22 -j ACCEPT 开放 SSH 端口)。
iptables -P INPUT DROP


#所有 "流经本机转发" 的数据包(如本机作为路由器时,内网到外网的流量)默认被允许通过。
iptables -P FORWARD ACCEPT


#本机主动发起的所有出站数据包(如访问外部网站、调用 API 等)默认被允许。
iptables -P OUTPUT ACCEPT 

nat

在网络技术中,NAT(Network Address Translation,网络地址转换) 是一种通过修改数据包的源 IP / 目标 IP 或端口,实现内网与外网通信的技术,主要用于解决 IPv4 地址资源不足的问题,同时隔离内网结构以提升安全性。

nat 表的核心功能

  • 地址转换 :将内网私有 IP(如 192.168.1.0/24)与公网 IP(如 203.0.113.1)相互映射,让内网设备通过少量公网 IP 访问外网。
  • 隐藏内网:外网无法直接获取内网 IP,减少被攻击的风险。
  • 端口复用 :通过端口区分不同内网设备(如公网 IP 的 8080 端口映射到内网 192.168.1.10:808081 映射到 192.168.1.11:80)。

实现共享上网

bash 复制代码
iptables -t nat -A POSTROUTING -s 172.16.1.7 -j SNAT --to-source 10.0.0.61
1.指定nat表,配置POSTROUTING链
2.源ip是172.16.1.7 这台主机进行共享上网,如果是多台(-s 172.16.1.0/24)
3.指定使用SNAT功能,源地址转换
4.通过SNAT功能把数据包中的源ip地址改为防火墙公网的ip地址(10.0.0.61)

环境准备

  • db01 172.16.1.51(只保留这个网卡),eth0网卡关闭(ONBOOT=no)
  • m01配置共享上网的规则
共享上网流程 详细步骤
客户端 关闭eth0网卡 ONBOOT=no 修改eth1网关为防火墙GATEWAY=172.16.1.61 配置DNS1
服务端(防火墙机器) 1.开启内核转发,内核配置文件/etc/sysctl.conf 2.配置防火墙规则

防火墙配置

bash 复制代码
配置防火墙规则,改为默认是准许
清空其他规则
配置防火墙共享上网规则

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j SNAT --to-source 10.0.0.211

echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf
sysctl -p

web配置

bash 复制代码
[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 | grep ONBOOT
ONBOOT=no

[root@web01 ~]# tail -5 /etc/sysconfig/network-scripts/ifcfg-ens34
GATEWAY=172.16.1.211
DNS1=223.5.5.5
DNS2=223.6.6.6

ifdown ens33 
ifdown ens34 && ifup ens34

结果

共享上网流程

  1. 防火墙添加 SNAT 规则(nat 表 POSTROUTING 链)
  2. 防火墙服务器开启 IP 转发(内核参数 ip_forward 功能)
  3. 后端节点配置网卡,将网关指向防火墙
  4. 后端节点的网卡中配置 DNS:DNS1=223.5.5.5DNS2=223.6.6.6

实现端口转发

bash 复制代码
[root@lx ~]# iptables -t nat -A PREROUTING -d 10.0.0.211 -p tcp --dport 9999 -j DNAT --to-destination 172.16.1.7:22
[root@lx ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            10.0.0.211           tcp dpt:9999 to:172.16.1.7:22

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  172.16.1.0/24        0.0.0.0/0            to:10.0.0.211

测试与检测

git-bash 测试 ssh -p 9999 root@10.0.0.61

实现ip映射

共享上网流程 详细步骤
客户端 关闭eth0网卡 ONBOOT=no 修改eth1网关为防火墙GATEWAY=172.16.1.61 配置DNS1
服务端(防火墙机器) 1.开启内核转发,内核配置文件/etc/sysctl.conf 2.配置防火墙规则
bash 复制代码
[root@lx ~]# iptables -t nat -A PREROUTING -d 10.0.0.62 -j DNAT --to-destination 172.16.1.7
[root@lx ~]# 
[root@lx ~]# 
[root@lx ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  0.0.0.0/0            10.0.0.211           tcp dpt:9999 to:172.16.1.7:22
DNAT       all  --  0.0.0.0/0            10.0.0.62            to:172.16.1.7

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  172.16.1.0/24        0.0.0.0/0            to:10.0.0.211
相关推荐
取加若则_2 小时前
深入解析Linux进程优先级机制
linux·服务器
点亮一颗LED(从入门到放弃)2 小时前
设备模型(10)
linux·服务器·前端
Web极客码2 小时前
使用VPS主机进行数据分析的主要优势
linux·windows·vps主机
sweet丶2 小时前
扩展了解DNS放大攻击:原理、影响与防御
网络协议·安全
九思x2 小时前
Linux 系统安装 JDK 17
linux·运维
HIT_Weston3 小时前
77、【Ubuntu】【Hugo】搭建私人博客:Detached HEAD
linux·运维·ubuntu
acrelgxy3 小时前
看不见≠不存在,更不等于安全!故障电弧探测器,让隐形危险现出原形。
安全·电力监控系统·智能电力仪表
再睡一夏就好3 小时前
多线程并发编程核心:互斥与同步的深度解析及生产者消费者模型两种实现
linux·运维·服务器·jvm·c++·笔记
老赵聊算法、大模型备案3 小时前
新规解读:2025 年修正版《中华人民共和国网络安全法》核心变化解读
安全·web安全