前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >iptables基础及规则设置管理

iptables基础及规则设置管理

作者头像
用户5921339
发布于 2025-05-20 08:20:31
发布于 2025-05-20 08:20:31
1490
举报

Iptables简介

Linux协议栈中,有一组回调函数的挂载点,通过这些挂载点挂接的钩子函数可以在Linux网络栈处理数据包的过程中对数据进行一些操作,例如过滤、修改、丢弃等。整个挂载点技术就叫做iptables和netfilter。

很多人知道iptables,但是却不知道netfilter。实际上,netfilter负责在内核中执行各种挂载规则,运行在内核模式中;而iptables是在用户模式下运行的进程,负责协助维护内核中netfilter的各种规则表。通过二者的配合来实现整个Linux协议栈中灵活处理数据包的机制。

netfilter可以挂载的规则点有5个(PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING),如下图所示。

目前Linux系统支持的不同挂载点能挂接的规则类型如下图所示:

当Linux协议栈的数据处理运行到挂接点时,它会依次调用挂接点上所有的钩子函数,直至数据包的处理结果时明确的接受、拒绝或者丢弃。

下图详细描述了入站、出站、转发数据流向以及各表、链之间的规则:

规则表之间的优先顺序:raw > mangle > nat > filter

管理和设置iptables规则

实际工作中最常用的就是使用filter(默认)表对数据包进行过滤处理,接下来详细介绍filter表的常用命令。各种常用参数如下图

iptables命令选项详解

-A 在指定链的末尾添加(append)一条新的规则

-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除

-I 在指定链中插入(insert)一条新的规则,默认在第一行添加

-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换

-L 列出(list)指定链中所有的规则进行查看

-E 重命名用户定义的链,不改变链本身

-F 清空(flush)

-N 新建(new-chain)一条用户自己定义的规则链

-X 删除指定表中用户自定义的规则链(delete-chain)

-P 设置指定链的默认策略(policy)

-Z 将所有表的所有链的字节和数据包计数器清零

-n 使用数字形式(numeric)显示输出结果

-v 查看规则表详细信息(verbose)的信息

-V 查看版本(version)

-h 获取帮助(help)

iptables [-j target/jump] 常用的处理动作

ACCEPT:允许数据包通过(例如:允许防火墙转发除ICMP协议以外的所有数据包)

iptables -A FORWARD -p ! icmp -j ACCEPT

DROP:直接丢弃数据包,不给任何回应信息

iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP

REJECT 拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是tcp-reset(这个封包会要求对方关闭 连接)。进行完此处理动作后,将不再匹配其它规则,直接中断过滤程序

iptables -A INPUT -p tcp -m tcp --dport 1234 -j REJECT --reject-with tcp-reset

REDIRECT:

将封包重新导向到另一个端口(pnat),进行完此处理动作后,将会继续匹配其它规则。这个功能可以用来实现透明代理或用来保护 web 服务器。例如:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

MASQUERADE:源地址伪装,只在NAT表中使用(与SNAT略有不同)

iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000

DNAT:改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则链(filter:input 或 filter:forward)。范例如下:

iptables -t nat -A PREROUTING -p tcp -d 135.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100

SNAT:源地址转换,修改数据包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则(mangleostrouting)。范例如下:

iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 192.236.50.155-192.236.50.160:1024-30000 

MIRROR:镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。

QUEUE:中断过滤程序,将封包放入队列,交给其它程序处理。通过自行开发的处理程序,可以进行其它应用,例如:计算连接费用等。

RETURN:结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定义规则链看成是一个子程序,那么这个动作,就相当于提前结束子程序并返回到主程序中。

MARK:

将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续匹配其它规则。范例如下:

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2

LOG: 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"

-m:extend matches,这个选项用于提供更多的匹配参数,如:

-m state --state ESTABLISHED,RELATED

state状态有以下四种

  • NEW
  • ESTABLISHED
  • RELATED
  • INVALID

-m tcp --dport 22

-m multiport --dports 22,3306

-m icmp --icmp-type 8

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT人家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档