广告位联系
返回顶部
分享到

linux网络知识之iptables的规则介绍

linux 来源:互联网 作者:佚名 发布时间:2024-02-25 10:06:36 人浏览
摘要

iptables规则 下图为数据包到达linux主机网卡后,内核如何处理数据包的大致流程 什么是规则 规则是管理员对数据包制定的一种触发机制,即当数据包达到某种条件,就执行指定的动作。 条件:

iptables规则

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

什么是规则

规则是管理员对数据包制定的一种触发机制,即当数据包达到某种条件,就执行指定的动作。
条件:可以是数据包源地址、目的地址、协议等
动作:可以是拒绝、接受、丢弃等;详细介绍见下表

动作 说明
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

2

3

4

5

iptables -t filter -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 -m multiport --dports 443,80 -j ACCEPT

#-t:操作那个表

#-A:在表末追加规则;-I为表首插入规则、-D为删除规则

#INPUT:链名称;该规则在那条链上生效

#-j:数据包处理动作;比如接受、拒绝等

整条命令解释:允许经过本机网卡eth0,访问协议是TCP,源地址是192.168.1.0/24 段的数据包访问本地端口是80和443的服务

什么是表

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

  • raw表:主要用于决定数据包是否被状态跟踪机制处理
  • mangle表:主要用于拆解报文修改数据包的 IP 头信息
  • nat表:主要用于修改数据包的源地址和目的地址、端口号等信息(实现网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。
  • filter表:主要用于对过滤流入和流出的数据包,根据具体的规则决定是否放行该数据包
  • security 表:最不常用的表,用在 SELinux 上;用于强制访问控制(MAC)网络规则,由Linux安全模块(如SELinux)实现
    其中nat表和filter表最常用

什么是链

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

  • PREROUTING:在数据包到达防火墙时,进行路由判断之前执行的规则
  • INPUT:路由判断之后确定数据包流入本机,应用其规则
  • FORWARD:路由判断之后确定数据包要转发给其他主机,应用其规则;linux主机需要开启ip_forward功能才支持转发,在/etc/sysctl.conf文件中配置参数net.ipv4.ip_forward=1
  • OUTPUT:本机应用向外发出数据包时,应用其规则
  • POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则
    在每条链中,规则按照从上到下的顺序进行匹配,当一个数据包与某个规则匹配成功后,就会按照该规则的动作进行处理,并且后续的规则将不再被考虑。

表、链、规则三者的关系是什么

表是区分相同链的上下顺序,规则在每条链中的上下顺序确定规则执行顺序:

  • 如果规则来自不同表,通过表的优先级确定链的优先级: 比如完整的PREROUTING链中有来自raw表、mangle表、nat标的PREROUTING链规则,通过表优先级 (raw>mangle>nat>filter>security) 区分优先级。所以一个报文发送到某台虚拟机后,被虚拟机网卡接收,会进入的虚拟机网络协议栈处理,先经过PREROUTING链处理,具体来说先走raw表的PREROUTING规则、再走mangle表、最后在走nat表PREROUTING规则。
  • 如果规则来自同一个表,则按规则插入表的顺序自上而下。

数据报文进/出节点经过哪些规则

  • 对于客户端来说,发送报文过程
    先进入OUTPUT链处理(raw、mangle、nat、filter、security表对应的PREROUTING规则依次匹配),如果没有被拦截则根据路由选择出网口,再进入POSTROUTING链处理(mangle、nat表对应的POSTROUTING规则依次匹配),最后从网卡出去

  • 对于服务端来说,发送报文过程
    先进入PREROUTING链处理(raw、mangle、nat表对应的PREROUTING规则依次匹配),根据路由判断数据报文发给本机,报文进入INPUT链处理(mangle、nat、filter、security表对应的INPUT规则依次匹配),如果没有被拦截则报文被应用程序处理

  • 对于转发场景,发送报文过程
    先进入PREROUTING链处理(raw、mangle、nat表对应的PREROUTING规则依次匹配),根据路由判断数据报文不是发给本机,报文进入FORWARD链处理(mangle、filter、security表对应的FORWARD规则依次匹配),如果没有被拦截则进入POSTROUTING链处理(mangle、nat表对应的POSTROUTING规则依次匹配),最后从网卡出去

    *补充:转发场景需要Linux开启转发功能,否则数据报文进入FORWARD链直接丢弃;临时开启执行命令sysctl net.ipv4.ip_forward=1或者echo "1" >/proc/sys/net/ipv4/ip_forward;永久生效需要修改/etc/sysctl.conf,增加内容net.ipv4.ip_forward = 1保存,再执行命令:sysctl -p

NAT(网络地址转换)介绍

NAT应用最广的场景就是解决局域网内设备访问互联网的问题。
SNAT(源地址转换) 主要用于修改数据包的源IP和源端口,一般在nat表的PREROUTING链中增加规则:局域网内所有设备要上外网,如果每个设备都分配一个公网ip成本太大,可以在路由器出口分配一个公网ip,局域网内的设备访问外网时统一走路由器出口,路由器此时需要做两件事:

  • 数据包从出口出去之前,将数据包的源地址和源端口改成公网ip和随机端口
  • 同时将转换关系记录保存,响应数据包返回时根据记录转发给局域网内的设备

SNAT示例:

1

2

3

4

iptables -t nat -A POSTROUTING -d 192.168.1.11 -p tcp --dport 88 -j SNAT --to-source 122.9.3.47:88

# -j:值为SNAT需要静态指定修改后的值,值为MASQUERADE表示动态修改源地址为出口网卡地址

# --to-source:将数据包的源地址转换成指定值

# 整条命令解释:将发给192.168.1.11:88的数据包,其源地址改为122.9.3.47

DNAT(目的地址转换) 主要用于修改数据包目的地址和端口路由器,一般在nat表中的PREROUTING链中增加规则:接收到数据包后,将目的地址和目的端口根据转换规则修改为实际的内网地址,规则需要提前在路由器上手动添加,如下图:将访问公网ip 100...155:10022的数据包转发给内网设备172.30.100.136:22
image.png
DNAT示例:

1

2

3

iptables -t nat -A PREROUTING -d 202.12.10.100 -p tcp --dport 20022 -j DNAT --to-destination 192.168.10.11:22

# --to-destination:修改数据包的目的地址

# 整条命令解释:将发给202.12.10.100:20022的数据包,其目的地址改为192.168.10.11:22

注意:linux内核使用CONNTRACK表(连接跟踪)记录NAT转换关系,一个连接仅在首次经过iptables链条时会计算nat表,一旦conntrack记录下这次的改写关系,后续无论是去程包还是回程包都是依据conntrack表进行改写关系的处理,不会再重复执行nat表中的DNAT/SNAT规则


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Linux文件系统之缓冲区介绍

    Linux文件系统之缓冲区介绍
    一、先看现象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include stdio.h #include string.h #include unistd.h int main() { const char* fstr = Hello fwrite\n; const char* str
  • linux网络知识之iptables的规则介绍

    linux网络知识之iptables的规则介绍
    iptables规则 下图为数据包到达linux主机网卡后,内核如何处理数据包的大致流程 什么是规则 规则是管理员对数据包制定的一种触发机制,即
  • Linux包管理工具yum、apt的区别介绍
    一般来说著名的 Linux 系统基本上分两大类:RedHat 系列:Redhat、Centos、Fedora 等;Debian 系列:Debian、Ubuntu 等。 yum( Yellow dog Updater, Modified)是
  • linux命令:echo使用介绍
    Shell中的echo命令类似于php中的echo命令,都是用于输出。Shell中另有一个输出命令为printf命令,大家可以在Shell printf 命令中查阅学习。 本文中
  • 红帽RHEL8和7的区别对比介绍(Centos8与7参照redhat)
    红帽RHEL8与RHEL7的区别 1. 红帽RHEL8和RHEL7功能区别对比 1.1 默认的文件系统 RHEL8与RHEL7都是采用XFS 1.2 RHEL8与RHEL7的内核版本分别是多少 关于内核
  • apache-zookeeper-3.7.1的安装部署教程
    apache-zookeeper-3.7.1 安装部署 下载地址:https://mirrors.bfsu.edu.cn/apache/zookeeper/ apache-zookeeper-3.7.1 1.下载直接解压,进入../conf/目录下复制一份zoo
  • Linux版本中Nginx平滑升级与回退介绍

    Linux版本中Nginx平滑升级与回退介绍
    一、平滑升级概述 1.平滑升级的定义 在进行服务版本升级的时候,对于用户访问体验无感知,不会造成服务中断。 2.平滑升级的思路 (1)
  • 微服务之注册中心和配置中心Consul介绍

    微服务之注册中心和配置中心Consul介绍
    注册中心 注册中心选型 你有没有思考过这样一个问题,为什么会有这么多的注册中心(etcd/ZooKeeper/Consul),选用那个最适合自己,是不是在选用
  • Linux查看端口占用情况介绍

    Linux查看端口占用情况介绍
    一、查看已知端口占用情况 比如,我们想知道8080端口的使用情况,或者说被谁占用了,命令如下: 1 netstat -anp | grep 8080 结果如下: 也可以
  • Apache APISIX Dashboard 未授权访问漏洞分析(CVE-2021-
    声明:本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,本人不承担任何法律
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计