一、iptables的基本功能

iptables功能非常灵活,它不仅仅是一个简单的防火墙,还可以实现复杂的网络流量管理,例如:

  • 数据包过滤:根据规则允许或拒绝数据包通过。
  • 数据包转发:在不同网络接口之间转发数据包。
  • 地址转换:实现网络地址转换(NAT),包括源地址转换(SNAT)和目的地址转换(DNAT)。
  • 基于MAC地址的过滤:根据数据包的MAC地址进行过滤。
  • 基于状态的过滤:根据数据包的状态(如NEWESTABLISHEDRELATED)进行过滤。
  • 包速率限制:限制数据包的传输速率,防止网络拥堵或攻击。

二、处理流程

iptables的处理流程遵循“表-链-规则”的层次结构,具体流程如下:
数据包捕获:
当数据包到达网络接口时,netfilter框架会捕获这些数据包。

表的选择:
iptables具有多个表(如rawmanglenatfilter等),每个表都有特定的用途和处理数据包的不同阶段。数据包会首先经过raw表,然后是mangle表,接着是nat表,最后是filter表。

链的处理:
在每个表中,数据包会经过一个或多个链(如PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING等)。这些链在数据包通过Linux系统时起着关键的作用,每个链上都有一系列规则用于匹配数据包。

规则匹配:
数据包在每个链上都会按照规则的顺序进行匹配。如果数据包匹配了某条规则,就会执行该规则指定的动作(如接受、拒绝、修改等)。

动作执行:
一旦数据包匹配了某条规则,iptables就会执行该规则指定的动作。这些动作可以是接受数据包(ACCEPT)、拒绝数据包(DROPREJECT)、修改数据包(如SNATDNAT)等。

继续处理或终止:
如果数据包在某个链上没有匹配到任何规则,它会继续沿正常的网络堆栈路径前进,直到到达下一个链或处理流程的终点。如果数据包在某个链上匹配到了规则并执行了相应的动作(如DROP),则处理流程会终止,数据包不会被继续传递。

三、iptables的表与链

iptables具有四个主要表:rawmanglenatfilter,每个表都有独特的用途和处理数据包的不同阶段。

raw表:优先级最高,主要用于决定数据包是否应该被状态跟踪机制处理。它只包含PREROUTINGOUTPUT两个链。

mangle表:用于修改数据包的某些特性,包含五个链:PREROUTINGPOSTROUTINGINPUTOUTPUTFORWARD。一个典型应用是实现策略路由。

nat表:实现网络地址转换的核心,包含三个主要链:PREROUTINGPOSTROUTINGOUTPUT。主要用于进行源地址转换(SNAT)和目标地址转换(DNAT)。

filter表:最常用的表,包含三个主要链:INPUTFORWARDOUTPUT。主要用于实现基本的包过滤功能,是构建防火墙策略的核心。

PREROUTING链:用于目标地址转换(DNAT)和某些高级路由决策。

处理流程:数据包首先经过PREROUTING链,如果匹配到规则并执行了相应动作(如DNAT),则可能改变数据包的目的地址或进行其他处理。

INPUT链:用于处理进入本机的数据包,实现基本的包过滤功能。

处理流程:数据包在通过INPUT链时,会按照规则进行匹配。如果匹配到规则并执行了拒绝(DROPREJECT)动作,则数据包将被丢弃或拒绝;如果匹配到允许(ACCEPT)动作,则数据包将被允许进入本机。

FORWARD链:用于处理转发的数据包,实现转发策略。

处理流程:数据包在通过FORWARD链时,会按照规则进行匹配。如果匹配到规则并执行了拒绝或允许动作,则数据包将被相应处理。

OUTPUT链:用于处理从本机发出的数据包,实现源地址转换(SNAT)和基本的包过滤功能。

处理流程:数据包在通过OUTPUT链时,会按照规则进行匹配。如果匹配到规则并执行了源地址转换(如SNAT),则数据包的源地址将被改变;如果匹配到拒绝或允许动作,则数据包将被相应处理。

POSTROUTING链:用于对已经经过路由选择的数据包进行最后的处理,如修改数据包的某些特性或进行源地址转换(SNAT)。

处理流程:数据包在通过POSTROUTING链时,会按照规则进行匹配。如果匹配到规则并执行了相应动作(如修改TTL值或SNAT),则数据包将被相应处理。

四、规则与动作

匹配条件:常见的匹配条件包括IP地址、协议类型、端口号、网络接口等。匹配条件类型有三类,分别是通用匹配、隐含匹配和显式匹配。

  • 通用匹配:可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
  • 隐含匹配:要求以特定的协议匹配作为前提,包括端口、TCP标记ICMP类型等条件。
  • 显式匹配:要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址IP范围、数据包状态等条件。

动作(Action):定义规则匹配时要执行的动作。常见的动作有以下几种:

  • ACCEPT:允许数据包通过。
  • DROP:丢弃数据包,不给出任何响应。
  • REJECT:拒绝数据包,并给出响应(如返回ICMP错误信息)。
  • LOG:将数据包的信息记录到系统日志中,但不改变数据包的去向。
  • DNAT:目的地址转换,将数据包的目的IP地址或端口号更改为其他地址。
  • SNAT:源地址转换,将数据包的源IP地址或端口号更改为其他地址

五、常用命令示例

下面命令用到的主机A主机B的信息:

主机A的网络配置信息
IP 192.168.1.20
Netmask 255.255.255.0
Gateway 192.168.1.1
主机B的网络配置信息
IP 192.168.5.21
Netmask 255.255.255.0
Gateway 192.168.5.1

在这里插入图片描述

1)执行iptables命令,查看iptables指令提示信息

iptables -h

2)查看iptables防火墙所有规则集

iptables --list

3)清空预设表filter中的所有规则链的规则

iptables -F

4)配置默认规则,为INPUT链设置默认策略DROP,拒绝所有数据包,除管理主机A除外,允许主机A通过SSH登录到设备。

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

iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD DROP

5)设置eth2网络接口IP地址

ifconfig eth2 192.168.5.1

6)主机B ping设备eth2网络接口IP地址,无法正常ping通。

ping 192.168.5.1

在这里插入图片描述

7)设置主机B数据包ICMP运行进入防火墙。

iptables -A INPUT -s 192.168.5.21 -p icmp -j ACCEPT

8)重复步骤5,主机B正常ping通设备eth2 IP地址

在这里插入图片描述

9)设置主机B正常访问WEB服务器

iptables -A INPUT -s 192.168.5.21 -p tcp --dport 80 -j ACCEPT

10)设置主机B正常SSH远程登录设备

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

11)配置拒绝来自特定MAC地址数据包

iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j DROP 

12)设置已建立连接相关数据放行,新建立连接的请求拒绝。

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

iptables -A INPUT -m state --state NEW -j DROP

13)设置拒绝包含特定字符串的数据包。(password、vim等等)

iptables -A INPUT -m string --string “password” --algo kmp -j DROP

14)查看设备防火墙规则序列号

iptables -L -n --line-number

15)根据防火墙序列号删除防火墙规则,根据查看到防火墙规则,删除指定序列号规则

iptables -D INPUT 3
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐