首页 > 编程知识 正文

linux iptables详解,iptables命令

时间:2023-05-04 02:42:12 阅读:41268 作者:984

本目的:作为“虚拟网络”的第一章,为以后理解“docker、k8s网络”奠定基础,然后选择“flannel、 学习calico网络插件”以获得基础CSI---- containerstorageinterface----标准化”容器存储接口“CNI---- -”conteinrenetworarage

舒适的草莓大神的理解

(1) iptables

学习驱动程序: iptables在Docker和Kubernetes网络中的应用非常广泛—实现iptables:docker容器和宿主机的端口映射、Kubernetes服务器

iptables的“底层实现”是netfilter,而netfilter是“Linux内核版本2.4”引入的子系统的特征。 “包过滤- -过滤器”、“数据包处理”(设置标志位、更改TTL等)、“地址伪装--masquery”、“网络地址转换-”作为“通用抽象”的框架为“hook”挂接”函数提供一套管理机制功能的限速等功能本质:在整个“网络进程的几个位置”放置几个“挂接”,在每个挂接中装载和处理“几个处理函数”(3) hhh

“WebHook”机制----一个条件的发生,“满足条件”--------其他“事件的发生”--------分割线--------iid "五条内置链"."五个挂钩点"--- "五条内置链"分别为":PREROUTING、POSTROUTING、INPUT、OUTPUT、forward---"

注意:“数据流”流程,“整体理解”下的文字:“上图说明”centos7网卡命名约定

)1)网卡上--eth0)收到数据包时,第一个通过的netfilter挂接是“PREROUTING”的细节。 “确定用户是否填充了此挂接函数”,如果填充,则内核在此处使用“PREROUTING”(对“分组”进行“目标地址转换”(DNAT ) )来填充DNAT”。 内核通过查看“本地路由表--route”来决定是将此包发送到“本地进程”还是发送到“其他设备”-------决策1-----发送到其他设备用户在此处选择“设置包过滤挂接函数”(4)立即“发送到协议栈之外”的所有数据包都通过“POSTROUTING挂接”。 用户可以在此填充“源地址转换”SNAT或源地址伪装“Masequery”的挂接函数---------决策2-----并将其发送到本地进程“OUTPUT挂接”,然后“路由确定”) (例如,在:处,机器的“确定从哪个网卡出来”、“下一跳地址”是多少等) )5)最后从协议栈出来

table '表'、chain '链'和rule '规则' iptables是'用户空间'中的程序,通过' netlink '和'内核的netfilter框架' “在挂接中放置回调函数”通常用于在“挂接中放置回调函数”。即使在特殊情况下,“服务负载平衡”----这是Kubernetes的特征操作,“在挂接中放置回调函数”

下面讲解'iptables的工作原理'

(5)五表五链

常说的iptables'5X5',即'5张表(table)和5条链(chain)'5条链即iptables的5条'内置链-->系统预定义的5条iptables链',对应上文介绍的netfilter的'5个钩子'。--------- '5条链分别是' ---------INPUT链:一般用于'处理输入本地进程'的数据包OUTPUT链:一般用于'处理本地进'程的'输出数据包'FORWARD链:一般用于处理'转发到其他机器'/'network namespace'的数据包PREROUTING链:可以在'此处进行DNAT'POSTROUTING链:可以在'此处进行SNAT'

用户还可以在表中定义自己的链

------ '5张表解释如下' ------filter表:用于控制'到达某条链上'的数据包是'继续放行'(accept)、直接'丢弃'(drop)或'拒绝'(reject)后续:补充drop和reject的'区别'?nat表:用于'修改数据包的源和目的地址'mangle表:用于修改数据包的IP头信息-->'目前先了解'raw表:iptables是'有状态的',即iptables对数据包有'连接追踪'(connectiontracking)机制,而raw是用来'去除这种追踪机制'的security表:最不常用的表(通常我们说iptables'只有4张表',security表是'新加入'的特性),用于在数据包上应用'SELinux'------ '5张表优先级' ------从'高到低'是:raw、mangle、'nat、filter'、security注意: iptables'不支持用户自定义表'------ '不是每个链上都能挂表-->细细体会' ------iptables'表与链的对应关系'如下图所示

iptables 表和链的对应关系

1.'filter表'——三个链:INPUT、FORWARD、OUTPUT作用:过滤数据包 内核模块:iptables_filter2.'Nat表' ——三个链:PREROUTING、POSTROUTING、OUTPUT作用:用于网络地址转换(IP、端口) 内核模块:iptable_nat3.'Mangle表'——五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD作用:修改数据包的服务类型、TTL、并且可以配置路由实现QOS内核模块4.'Raw表' ——两个链:OUTPUT、PREROUTING作用:决定数据包是否被状态跟踪机制处理

 ip报文的格式

(6) 一个网络包经过iptables的处理路径

(7)概念深入理解

'iptables的链-->chain' <===> '对应netfilter的5处钩子'----------- 'iptables的表(table)的作用' -----------iptables的表是来'分类管理'iptables规则(rule)的,系统所有的iptables规则都'被划分'到不同的'表集合'中iptables的规则就是挂在netfilter钩子上的函数,用来修改数据包的内容或过滤数据包,iptables的表就是所有规则的5个逻辑集合!----------- '数据包匹配条件' -----------一条iptables规则包含两部分信息:匹配条件和动作。匹配条件很好理解,即匹配数据包被这条iptables规则“捕获”的条件,例如协议类型、源IP、目的IP、源端口、目的端口、连接状态等。每条iptables规则允许多个匹配条件任意组合,从而实现多条件的匹配,多条件之间是逻辑与(&&)关系。----------- '数据包匹配后动作' -----------DROP:直接'将数据包丢弃',不再进行后续的处理应用场景: 是'不让'某个数据源'意识'到你的系统的存在,可以用来'模拟宕机' ------- '分割线' -------REJECT:给客户端返回一个connectionrefused或destinationunreachable报文应用场景:是不让某个数据源访问你的系统,'善意地拒绝':我这里没有你要的服务内容、 ------- '分割线' -------QUEUE:将数据包放入'用户空间的队列',供用户空间的程序处理 ------- '分割线' -------RETURN:跳出当前链,该链里后续的规则不再执行 ------- '分割线' -------ACCEPT:同意数据包通过,继续执行后续的规则 ------- '分割线' -------JUMP:'跳转到其他用户自定义的链'继续执行 ------- '分割线' -------REDIRECT:在本机上进行'端口映射'iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080效果:经过上述'规则映射后',当别的机器'访问本机的80端口'时,报文会被'重定向到本机的8080端口上'REDIRECT规则'只能定义'在PREROUTING链或者OUTPUT链中 ------- '自定义链' -------用户'自定义链中的规则'和系统预定义的5条链里的规则'没有区别'由于自定义的链'没有与netfilter里的钩子'进行'绑定',所以它'不会自动触发','只能'从其他链的规则中'跳转过来',这也是'JUMP动作'存在的意义

二    centos7 中iptables、firewalld 和 netfilter 的关系

centos7系统使用'firewalld服'务'替代'了'iptables服务',但是依然可以使用iptables来'管理内核'的netfilter-->'firewalld和iptables冲突问题'说明:iptables服务和firewalld服务'都不是真正'的防火墙,只是用来定义'防火墙规则功能的管理工具'原理:将定义好的规则'交由内核中的netfilter'(网络过滤器来读取)从而实现真正的'防火墙功能'明确:用户'无法直接操作内核',都是通过相应的'工具'-->'使用相应的命令',调用'相应的内核接口'达到目标展示:最后都以'iptables的规则'来体现

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。