iptables防火墙

发布于:2025-04-18 ⋅ 阅读:(95) ⋅ 点赞:(0)

目录

一 Linux防火墙基础

1 iptables的表,链结构

(1)规则表

filter 表

nat 表

mangle 表

raw 表

(2)规则链

2 数据包过滤的匹配流程

(1)规则表之间的顺序

(2)规则链之间的顺序

(3)规则链内部各条防火墙规则之间的顺序

二 编写防火墙规则

1 iptables的安装

2 基本语法,数据包控制类型

3 添加,查看,删除规则等基本操作

(1)添加新的规则

(2)查看规则列表

(3)删除,清空规则

(4)设置默认策略

三 规则的匹配条件

1 通用匹配

(1)协议匹配

(2)地址匹配

(3)网络接口匹配

2 隐含匹配

(1)端口匹配

(2)ICMP类型匹配

3 显示匹配

(1)多端口匹配

(2)IP范围匹配

(3)MAC地址匹配

(4)状态匹配


一 Linux防火墙基础

Linux 防火墙是一种用于保护 Linux 系统网络安全的机制,通过对网络数据包进行过滤和控制,来实现对系统的访问控制和安全防护。

Linux系统中防火墙的类型包括netfilter和iptables的区别:

  • Netfilter:它是 Linux 内核里的一个框架,处于内核层面。其功能是提供数据包过滤、网络地址转换(NAT)以及数据包修改等基础功能,为防火墙的实现奠定了基础,是 Linux 系统进行网络数据包处理的核心机制。
  • iptables:作为一个用户空间的工具,iptables 主要用于和 Netfilter 框架进行交互。用户通过它可以方便地定义和管理防火墙规则,这些规则最终会被传递给 Netfilter 框架,由 Netfilter 在数据包处理过程中执行。

1 iptables的表,链结构

(1)规则表

在 iptables 中,规则表是规则的集合,不同的表用于实现不同的功能。以下是常见的规则表及其功能:

filter 表
  • 功能:这是最常用的表,主要用于进行数据包过滤,决定是否允许数据包通过。例如,你可以使用它来控制哪些 IP 地址可以访问你的服务器,或者限制对特定端口的访问。
nat 表
  • 功能:主要用于网络地址转换(NAT),包括源地址转换(SNAT)和目的地址转换(DNAT)。SNAT 用于将内部网络的私有 IP 地址转换为公共 IP 地址,使得内部网络中的设备能够访问外部网络;DNAT 用于将外部网络的请求转发到内部网络的特定设备上。
mangle 表
  • 功能用于对数据包进行更细致的修改,如修改数据包的 TOS(服务类型)、TTL(生存时间)等字段。通过修改这些字段,可以影响数据包在网络中的传输行为。
raw 表
  • 功能:主要用于决定数据包是否要进行状态跟踪。在 iptables 中,默认会对数据包进行状态跟踪,以实现更智能的过滤规则。但在某些情况下,你可能不希望对某些数据包进行状态跟踪,这时就可以使用 raw 表来禁用状态跟踪。
(2)规则链

规则链是规则的有序集合,每个规则链负责处理特定类型或方向的数据包。以下是常见的规则链及其功能:

名称 功能
INPUT链 处理进入本机的数据包。当外部网络的数据包到达服务器时,首先会经过 INPUT 链的检查,根据链中的规则决定是否允许该数据包进入服务器。
OUTPUT链 处理从本机发出的数据包。当服务器内部的程序向外发送数据包时,会经过 OUTPUT 链的检查,根据链中的规则决定是否允许该数据包发出。
FORWARD链 处理经过本机转发的数据包。当服务器作为网关或路由器时,会有一些数据包需要从一个网络接口转发到另一个网络接口,这些数据包会经过 FORWARD 链的检查。
PREROUTING链 在数据包进行路由选择之前对其进行处理。通常用于进行目的地址转换(DNAT),可以根据规则将数据包的目的地址修改为其他地址。
POSTROUTING链 在数据包进行路由选择之后对其进行处理。通常用于进行源地址转换(SNAT),可以根据规则将数据包的源地址修改为其他地址。

2 数据包过滤的匹配流程

(1)规则表之间的顺序

当数据包进入系统时,会按照 rawmanglenatfilter 这样的顺序依次经过各个表。

(2)规则链之间的顺序
  • 入站数据流:数据包首先到达 PREROUTING 链,在这个链中主要进行目的地址转换(DNAT)操作,能够根据规则修改数据包的目的地址。经过 PREROUTING 链处理后,数据包会进入 INPUT 链,该链会根据规则决定是否允许数据包进入本机。
  • 转发数据流向:数据包首先进入 OUTPUT 链,此链会对从本机发出的数据包进行过滤,决定是否允许数据包发出。经过 OUTPUT 链处理后,数据包会进入 POSTROUTING 链,在这个链中主要进行源地址转换(SNAT)操作,可根据规则修改数据包的源地址。
  • 出战数据流向:当数据包是经过本机进行转发时,会依次经过 PREROUTING 链、FORWARD 链、POSTROUTING 链。
(3)规则链内部各条防火墙规则之间的顺序

规则链内规则按从上到下顺序匹配。数据包进入规则链后,先检查首条规则,若匹配则执行对应动作(如允许、拒绝、丢弃),不再检查后续规则;若不匹配则继续检查下一条,直至找到匹配规则或遍历完链。配置时应将常用或严格规则放前面以提高匹配效率。

二 编写防火墙规则

1 iptables的安装

安装iptables

sudo yum install iptables      或

sudo dnf install iptables

启动iptables防火墙并设置开机启动

systemctl  start  iptables 

systemctl  enable  iptables 

2 基本语法,数据包控制类型

iptables 的基本语法结构

iptables   [选项]   [链名]   [条件匹配]   [动作]

  • 选项用于指定操作类型(如添加、删除、查看等);
  • 链名包括 INPUT(处理进入本机的数据包)、OUTPUT(处理本机发出的数据包)、FORWARD(处理转发的数据包)等;
  • 条件匹配可根据源 IP、目的 IP、端口号、协议类型(如 TCP、UDP 等)等进行设置;
  • 动作常见的有 ACCEPT(允许通过)、DROP(丢弃数据包)、REJECT(拒绝并返回错误信息)、LOG(记录日志信息并传递给下一条)。

示例:

3 添加,查看,删除规则等基本操作

iptables命令中的常用管理选项
类别 选项 用途
增加 -A 追加到最后一行
-i 插入到第一行(或指定序号)
查看 -L 列出所有规则
-n 以数字形式显示
-v 详细信息
--line(--line-numbers) 显示序号
删除 -D 删除一条(指定序号或内容)
-F 清空所有
修改 -R 替换某条规则
设置默认 -P 设置默认规则
(1)添加新的规则

允许来自特定 IP(如 192.168.1.100)的主机通过 SSH(默认端口 22)访问本机,命令为

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

  • 其中 “-A” 表示追加规则到指定链(这里是 INPUT 链)。
(2)查看规则列表

使用 “iptables -L” 命令可以列出当前 iptables 的规则列表。若要查看更详细的信息,可使用 “iptables -L -n -v”,“-n” 表示以数字形式显示 IP 地址和端口号,“-v” 表示显示详细信息。

(3)删除,清空规则
  • 删除指定规则,比如要删除刚才添加的允许 SSH 访问的规则,可先使用 “iptables -L --line-numbers” 查看规则的序号,然后使用 “iptables -D INPUT [规则序号]” 进行删除。
  • 清空所有规则,可使用 “iptables -F” 命令,该命令会清空所有链中的规则。

iptables    -D   INPUT  3               //删除序列3

iptables    -n    -L    INPUT            //查看规则的序号

iptables    -F   INPUT

(4)设置默认策略

设置 INPUT 链的默认策略为 DROP,命令为 “iptables -P INPUT DROP”;设置 OUTPUT 链的默认策略为 ACCEPT,命令为 “iptables -P OUTPUT ACCEPT”。“-P” 选项用于设置默认策略

三 规则的匹配条件

1 通用匹配

(1)协议匹配

协议匹配是防火墙规则中常用的匹配方式,用于根据数据包所使用的协议类型来进行筛选和控制。常见的协议类型包括:

  1. TCP(传输控制协议):是一种面向连接的、可靠的传输层协议,常用于需要数据可靠传输的应用,如 HTTP(80 端口)、HTTPS(443 端口)、SSH(22 端口)、SMTP(25 端口)、POP3(110 端口)等服务。在 iptables 中,可使用 “-p tcp” 来匹配 TCP 协议的数据包。
  2. UDP(用户数据报协议):是一种无连接的、不可靠的传输层协议,常用于对实时性要求较高、允许少量数据丢失的应用,如 DNS(53 端口)、DHCP(67/68 端口)、TFTP(69 端口)、SNMP(161 端口)等服务。使用 “-p udp” 可匹配 UDP 协议的数据包。
  3. ICMP(互联网控制报文协议):主要用于在 IP 主机、路由器之间传递控制消息,如 ping 命令使用的就是 ICMP 协议。通过 “-p icmp” 来匹配 ICMP 协议的数据包。此外,还可以进一步根据 ICMP 的类型和代码进行更精细的匹配。

iptables  -I  INPUT  -p  icmp  -j  DROP              #"-p  协议名"

iptables  -A  FORWARD  !  -p icmp  -j  ACCEPT

(2)地址匹配

地址匹配用于根据数据包的源 IP 地址或目的 IP 地址来进行筛选和控制,以便允许或阻止特定 IP 地址的设备与本地系统进行通信

  1. 源地址匹配:使用 “-s” 选项指定源 IP 地址,例如 “iptables -A INPUT -s 192.168.1.100 -j ACCEPT” 表示允许来自 IP 地址为 192.168.1.100 的设备的数据包进入 INPUT 链。也可以指定一个 IP 地址段,如 “iptables -A INPUT -s 192.168.1.0/24 -j DROP” 表示丢弃来自 192.168.1.0 到 192.168.1.255 这个网段的所有数据包。
  2. 目的地址匹配:使用 “-d” 选项指定目的 IP 地址,例如 “iptables -A OUTPUT -d 10.0.0.10 -j ACCEPT” 表示允许发往 IP 地址为 10.0.0.10 的数据包从 OUTPUT 链发出。同样可以指定目的 IP 地址段进行匹配。

iptables  -A  FORWARD  -s  192.168.1.11  -j  REJECT

iptables  -A  FORWARD  -s  192.168.7.0/24  -j  ACCEPT

iptables  -I  INPUT  -s  10.20.30.0/24  -j  DROP

iptables  -I  FORWARD  -s  10.20.30.0/24  -j  DROP

(3)网络接口匹配

网络接口匹配是根据数据包进出的网络接口来进行筛选和控制,有助于更精确地管理不同网络连接上的流量。

  1. 输入接口匹配:使用 “-i” 选项指定输入接口,例如 “iptables -A INPUT -i eth0 -j ACCEPT” 表示只允许从 eth0 网络接口进入的数据包通过 INPUT 链。常用于区分不同网络连接(如内网、外网接口),对进入的流量进行不同的处理。
  2. 输出接口匹配:使用 “-o” 选项指定输出接口,例如 “iptables -A OUTPUT -o wlan0 -j DROP” 表示丢弃从 wlan0 网络接口发出的数据包。可以根据实际的网络拓扑和安全需求,对从特定接口发出的流量进行控制。

iptables  -A  INPUT  -i  ens33  -s  10.0.0.0/8  -j  DROP

iptables  -A  INPUT  -i  ens33  -s  172.16.0.0/16  -j  DROP

iptables  -A  INPUT  -i  ens33  -s  192.186.0.0/16  -j  DROP

2 隐含匹配

(1)端口匹配
  • 原理端口是网络通信中用于区分不同应用程序或服务的逻辑标识。在 TCP 和 UDP 协议中,每个数据包都包含源端口和目的端口信息。端口匹配通过检查数据包中的端口号,来决定是否应用相应的规则。
  • 示例:在 iptables 中,使用 --sport 指定源端口,--dport 指定目的端口
    • 允许外部主机访问本地的 HTTP 服务(默认端口 80):
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
  • 允许本地主机访问外部的 DNS 服务(UDP 端口 53):
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
(2)ICMP类型匹配
  • 原理:ICMP(Internet Control Message Protocol,互联网控制报文协议)用于在 IP 主机、路由器之间传递控制消息,不同类型的 ICMP 消息用于不同的目的。ICMP 类型匹配通过检查数据包中的 ICMP 类型字段,对不同类型的 ICMP 消息进行不同的处理。
  • 示例:在 iptables 中,使用 --icmp-type 指定 ICMP 类型
    • 允许本地主机接收外部的 ping 请求(ICMP 类型为 8):
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
  • 允许本地主机发送 ping 响应(ICMP 类型为 0):
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT

3 显示匹配

(1)多端口匹配
  • 原理:同时指定多个源或目的端口,通过特定语法参数列出端口号供防火墙识别。
  • 用途:统一管理多种服务端口,简化规则设置。
  • 示例:iptables 中用 “--multiport”,如
  • “iptables -A INPUT -p tcp --dport --multiport 22,80,443 -j ACCEPT”。
(2)IP范围匹配
  • 原理:IP 范围匹配通过指定源 IP 地址或目的 IP 地址的范围来筛选数据包。可以使用 CIDR 表示法或指定起始和结束 IP 地址来定义范围。
  • 示例:在 iptables 中,使用 -s 选项指定源 IP 范围,-d 选项指定目的 IP 范围。
    • 允许来自 192.168.1.0/24 子网的主机访问本地服务器:
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
  • 阻止发往 10.0.0.0/8 子网的数据包:
iptables -A OUTPUT -d 10.0.0.0/8 -j DROP
(3)MAC地址匹配
  • 原理:MAC 地址匹配是根据数据包的源 MAC 地址来进行匹配。MAC 地址是网络设备的物理地址,在局域网内具有唯一性。
  • 示例:在 iptables 中,使用 -m mac 模块和 --mac-source 选项进行 MAC 地址匹配。
    • 允许 MAC 地址为 00:11:22:33:44:55 的设备访问本地网络:
iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT
  • 阻止 MAC 地址为 66:77:88:99:AA:BB 的设备访问本地网络:
iptables -A INPUT -m mac --mac-source 66:77:88:99:AA:BB -j DROP
(4)状态匹配
  • 原理:状态匹配基于连接的状态信息进行数据包的筛选。防火墙会跟踪网络连接的状态,如新建连接(NEW)、已建立连接(ESTABLISHED)、相关连接(RELATED)和无效连接(INVALID)等。
  • 示例:在 iptables 中,使用 -m state 模块和 --state 选项进行状态匹配。
    • 允许已建立连接和相关连接的数据包进入:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  • 拒绝新建连接的数据包(除非有特定规则允许):
iptables -A INPUT -m state --state NEW -j DROP


网站公告

今日签到

点亮在社区的每一天
去签到