ToB企服应用市场:ToB评测及商务社交产业平台

标题: 详解网络知识:iptables规则 [打印本页]

作者: 南飓风    时间: 2024-5-3 10:43
标题: 详解网络知识:iptables规则
本文分享自华为云社区《【理解云容器网络】1-基础篇-iptables介绍》,作者: 可以交个朋友。
iptables规则

下图为数据包到达linux主机网卡后,内核如何处理数据包的大致流程

什么是规则

规则是管理员对数据包制定的一种触发机制,即当数据包达到某种条件,就执行指定的动作。
条件:可以是数据包源地址、目的地址、协议等
动作:可以是拒绝、接受、丢弃等;详细介绍见下表
动作说明ACCEPT将封包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链(nat:postrouting)REJECT拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply 或是 tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其它规则,直接 中断过滤程序。DROP丢弃封包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。MASQUERADE改写封包来源 IP 为防火墙 NIC IP,可以指定 port 对应的范围,进行完此处理动作后,直接跳往下一个规则炼(mangle:postrouting)。这个功能与 SNAT 略有不同,当进行 IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP 服务器指派的,这个时候 MASQUERADE 特别有用。SNAT改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将直接跳往下一个规则炼(mangle:postrouting)。DNAT改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围,进行完此处理动作后,将会直接跳往下一个规则炼(filter:input 或 filter:forward)。MARK将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。RETURN结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把自订规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。使用iptables命令写入规则示例:
  1. iptables -t filter -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 -m multiport --dports 443,80 -j ACCEPT
  2. #-t:操作那个表
  3. #-A:在表末追加规则;-I为表首插入规则、-D为删除规则
  4. #INPUT:链名称;该规则在那条链上生效
  5. #-j:数据包处理动作;比如接受、拒绝等
复制代码
整条命令解释:允许经过本机网卡eth0,访问协议是TCP,源地址是192.168.1.0/24 段的数据包访问本地端口是80和443的服务
什么是表

表主要用来存放具体的防火墙规则,而规则具有功能性,比如修改数据包源/目的ip、拒绝来自某个网段的数据包访问本机等;所以我们可以对规则进行分类,不同的功能存入不同的表
什么是链

上文提到表主要存放具体的规则,但是规则什么时候生效呢?比如客户端访问VIP,数据包到达本机后必须先用DNAT(网络地址转换)将vip转换成实际的后端实例ip,然后才能路由判断,因为后端实例可能有多个且分布在不同主机,直接用vip进行路由判断肯定是不行的。所以规则有生效时机,根据生效时机可以分为:
表、链、规则三者的关系是什么

表是区分相同链的上下顺序,规则在每条链中的上下顺序确定规则执行顺序:
数据报文进/出节点经过哪些规则

NAT(网络地址转换)介绍

NAT应用最广的场景就是解决局域网内设备访问互联网的问题。
SNAT(源地址转换) 主要用于修改数据包的源IP和源端口,一般在nat表的PREROUTING链中增加规则:局域网内所有设备要上外网,如果每个设备都分配一个公网ip成本太大,可以在路由器出口分配一个公网ip,局域网内的设备访问外网时统一走路由器出口,路由器此时需要做两件事:
SNAT示例:
  1. iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 88 -j SNAT --to-source 122.9.3.47:88
  2. # -j:值为SNAT需要静态指定修改后的值,值为MASQUERADE表示动态修改源地址为出口网卡地址
  3. # --to-source:将数据包的源地址转换成指定值
  4. # 整条命令解释:将发给192.168.1.11:88的数据包,其源地址改为122.9.3.47
复制代码
DNAT(目的地址转换) 主要用于修改数据包目的地址和端口路由器,一般在nat表中的PREROUTING链中增加规则:接收到数据包后,将目的地址和目的端口根据转换规则修改为实际的内网地址,规则需要提前在路由器上手动添加,如下图:将访问公网ip 100...155:10022的数据包转发给内网设备172.30.100.136:22

DNAT示例:
  1. iptables -t nat -A PREROUTING -d 202.12.10.100 -p tcp --dport 20022 -j DNAT --to-destination 192.168.10.11:22
  2. # --to-destination:修改数据包的目的地址
  3. # 整条命令解释:将发给202.12.10.100:20022的数据包,其目的地址改为192.168.10.11:22
复制代码
注意:linux内核使用CONNTRACK表(连接跟踪)记录NAT转换关系,一个连接仅在首次经过iptables链条时会计算nat表,一旦conntrack记录下这次的改写关系,后续无论是去程包还是回程包都是依据conntrack表进行改写关系的处理,不会再重复执行nat表中的DNAT/SNAT规则
点击关注,第一时间了解华为云新鲜技术~
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4