Linux命令之iptables(防火墙操作)详解
Linux命令之iptables(防火墙操作)详解
文章目录
- 一、iptables的基本功能
- 二、处理流程
- 三、iptables的表与链
- 四、规则与动作
- 五、常用命令示例
-
- 1)执行iptables命令,查看iptables指令提示信息
- 2)查看iptables防火墙所有规则集
- 3)清空预设表filter中的所有规则链的规则
- 4)配置默认规则,为INPUT链设置默认策略DROP,拒绝所有数据包,除管理主机A除外,允许主机A通过SSH登录到设备。
- 5)设置eth2网络接口IP地址
- 6)主机B ping设备eth2网络接口IP地址,无法正常ping通。
- 7)设置主机B数据包ICMP运行进入防火墙。
- 8)重复步骤5,主机B正常ping通设备eth2 IP地址
- 9)设置主机B正常访问WEB服务器
- 10)设置主机B正常SSH远程登录设备
- 11)配置拒绝来自特定MAC地址数据包
- 12)设置已建立连接相关数据放行,新建立连接的请求拒绝。
- 13)设置拒绝包含特定字符串的数据包。(password、vim等等)
- 14)查看设备防火墙规则序列号
- 15)根据防火墙序列号删除防火墙规则,根据查看到防火墙规则,删除指定序列号规则
一、iptables的基本功能
iptables功能非常灵活,它不仅仅是一个简单的防火墙,还可以实现复杂的网络流量管理,例如:
- 数据包过滤:根据规则允许或拒绝数据包通过。
- 数据包转发:在不同网络接口之间转发数据包。
- 地址转换:实现网络地址转换(
NAT),包括源地址转换(SNAT)和目的地址转换(DNAT)。 - 基于
MAC地址的过滤:根据数据包的MAC地址进行过滤。 - 基于状态的过滤:根据数据包的状态(如
NEW、ESTABLISHED、RELATED)进行过滤。 - 包速率限制:限制数据包的传输速率,防止网络拥堵或攻击。
二、处理流程
iptables的处理流程遵循“表-链-规则”的层次结构,具体流程如下:数据包捕获:
当数据包到达网络接口时,netfilter框架会捕获这些数据包。
表的选择:iptables具有多个表(如raw、mangle、nat、filter等),每个表都有特定的用途和处理数据包的不同阶段。数据包会首先经过raw表,然后是mangle表,接着是nat表,最后是filter表。
链的处理:
在每个表中,数据包会经过一个或多个链(如PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING等)。这些链在数据包通过Linux系统时起着关键的作用,每个链上都有一系列规则用于匹配数据包。
规则匹配:
数据包在每个链上都会按照规则的顺序进行匹配。如果数据包匹配了某条规则,就会执行该规则指定的动作(如接受、拒绝、修改等)。
动作执行:
一旦数据包匹配了某条规则,iptables就会执行该规则指定的动作。这些动作可以是接受数据包(ACCEPT)、拒绝数据包(DROP或REJECT)、修改数据包(如SNAT、DNAT)等。
继续处理或终止:
如果数据包在某个链上没有匹配到任何规则,它会继续沿正常的网络堆栈路径前进,直到到达下一个链或处理流程的终点。如果数据包在某个链上匹配到了规则并执行了相应的动作(如DROP),则处理流程会终止,数据包不会被继续传递。
三、iptables的表与链
iptables具有四个主要表:raw、mangle、nat和filter,每个表都有独特的用途和处理数据包的不同阶段。
raw表:优先级最高,主要用于决定数据包是否应该被状态跟踪机制处理。它只包含PREROUTING和OUTPUT两个链。
mangle表:用于修改数据包的某些特性,包含五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD。一个典型应用是实现策略路由。
nat表:实现网络地址转换的核心,包含三个主要链:PREROUTING、POSTROUTING和OUTPUT。主要用于进行源地址转换(SNAT)和目标地址转换(DNAT)。
filter表:最常用的表,包含三个主要链:INPUT、FORWARD和OUTPUT。主要用于实现基本的包过滤功能,是构建防火墙策略的核心。
PREROUTING链:用于目标地址转换(DNAT)和某些高级路由决策。
处理流程:数据包首先经过PREROUTING链,如果匹配到规则并执行了相应动作(如DNAT),则可能改变数据包的目的地址或进行其他处理。
INPUT链:用于处理进入本机的数据包,实现基本的包过滤功能。
处理流程:数据包在通过INPUT链时,会按照规则进行匹配。如果匹配到规则并执行了拒绝(DROP或REJECT)动作,则数据包将被丢弃或拒绝;如果匹配到允许(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
更多推荐
所有评论(0)