前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下的包过滤软件:iptables剖析

Linux下的包过滤软件:iptables剖析

作者头像
机械视角
发布2020-09-27 14:33:00
1.8K0
发布2020-09-27 14:33:00
举报
文章被收录于专栏:TensorbytesTensorbytes

netfilter/iptables 是Linux平台下的包过滤防火墙,iptables位于用户空间,通过命令操作 netfilter 来实现网络数据包的处理和转发,netfilter位于内核空间,是真正的管理网络数据包。iptables 包括了“表(tables)”、“链(chain)”和“规则(rules)”三个层面。 tables 表示不同类型的数据包处理流程, filter 表用于过滤数据包, nat 表用于地址转换, mangle 表, raw 表用于处理异常。 Netfilter为iptables提供了五个数据包的挂载点(Hook):PRE_ROUTING、INPUT、OUTPUT、FORWARD与POST_ROUTING。 下图是 netfliter 的数据包流:

iptables 总共有五张表:filter表、nat表、mangle表、raw表、security表(security表极少使用)。同样 chain 下 表的优先顺序是 raw -> mangle -> nat -> filter,比如 PREROUTING 链在 raw, mangle 和 nat 都有,其处理顺序是raw(PREROUTING) -> mangle(PREROUTING) -> nat(PREROUTING)。

filter 表

filter 表是默认表,主要做包过滤,用于防火墙规则,filter 表内建有三条链:

  • INPUT,输入链。发往本机的数据包通过此链。
  • OUTPUT,输出链。从本机发出的数据包通过此链。
  • FORWARD,转发链。本机转发的数据包通过此链。

nat 表

nat 表,主要做地址转换,用于网关路由器,其内建三条链:

  • PREROUTING,路由前链。
  • POSTROUTING,路由后链。
  • OUTPUT,输出链。

mangle 表

mangle 表主要做数据包修改,针对每一个数据包进行处理,其内建五条链:

  • PREROUTING,路由前链
  • OUTPUT,输出链
  • INPUT,输入链
  • FORWARD,转发链。
  • POSTROUTING,路由后链。

raw 表

raw 表主要用-j notrack给不需要被连接跟踪的包打标记(UNTRACKED状态),这种让数据包不进入链接跟踪/NAT子系统行为,所以raw表可以用在那些不需要做nat和链接跟踪的情况,提升系统性能。其内建两条链:

  • PREROUTING,路由前链
  • OUTPUT,输出链

命令行参数解说

iptalbes 命令参数讲解:

$ iptables -h
-t:指定要操纵的表,默认条件下是filter表;
-A:--append,向链中添加规则条目;
-D:--delete,从链中删除规则条目;
-i:--insert,向链中插入规则条目;
-R:--replace,替换链中的规则条目;
-L:--list,显示链中已有的规则条目;
-F:--flush,清空链中选择的规则条目,如果后面不跟参数代表所有规则;
-N:--new-chain,创建新的用户自定义链;
-X: --delete-chain,从删除用户定义链,不过必须是这个链里面的规则都被清空了才能删除;
-E: --rename-chain,为用户自定义的链重命名;
-P:--policy,定义链中规则的默认目标;
-p:--protocol,指定要匹配的数据包协议类型;
-s:--source,指定要匹配的数据包源ip地址;
-j:--jump,指定指定的目标执行规则,accept接收数据包,DROP丢弃数据包,REDIRECT重定向,SNAT源地址转换,DNAT目标地址转换,还有MASQUERADE,LOG等动作;
-i:--in-interface,指定数据包进入本机的网络接口,后面跟网络接口名字;
-o:--out-interface,指定数据包要离开本机所使用的网络接口,后面跟网络接口名字;

iptable 主要是针对IPv4,如果针对IPv6处理可以用 ip6tables, 命令是一样的。

以一个端口转换为例: 其命令如下: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

命令行解读: -t nat表示针对的 nat 表; -A PREROUTING 表示添加一个 PREROUTING 规则; -p tcp 表示规则的包协议,这里说明适应的协议是 tcp 协议; -j REDIRECT 表示指定的目标执行规则,即数据包匹配,该怎么办,REDIRECT 表示重定向动作; -dport 80 表示目标端口是80; --to-port 8080 表示重定向端口是8080;

意思就是向 nat 表添加一条 PREROUTING 规则,将目标端口80的 tcp 请求重定向到 8080。

设置好规则后可以通过iptables-save输出整个规则列表存储起来,后面再通过iptables-restore恢复。

参考文献

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
    • filter 表
      • nat 表
        • mangle 表
          • raw 表
          • 命令行参数解说
          • 参考文献
          相关产品与服务
          NAT 网关
          NAT 网关(NAT Gateway)提供 IP 地址转换服务,为腾讯云内资源提供高性能的 Internet 访问服务。通过 NAT 网关,在腾讯云上的资源可以更安全的访问 Internet,保护私有网络信息不直接暴露公网;您也可以通过 NAT 网关实现海量的公网访问,最大支持1000万以上的并发连接数;NAT 网关还支持 IP 级流量管控,可实时查看流量数据,帮助您快速定位异常流量,排查网络故障。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档