Linux之iptables(四)iptables数据包命中规则后的执行动作

本文深入解析了iptables中的SNAT和DNAT规则,阐述了如何通过这两个动作实现源地址和目标地址的转换,以及在不同链中配置的具体方法。同时,介绍了如何启用Linux的IP转发功能,以确保网络数据的正确路由。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如图:4  便是iptables数据包命中规则后的执行动作,用-j选项来指定,后跟具体的动作。

常用的动作:

1.ACCEPT,DROP,REJECT

常用语filter表,用于配置黑白名单

2.SNAT,DNAT

常用于nat表,用于配置nat转换

3.当然还有其他的动作,如LOG,MASQUERADE,REDIRECT等。。。

这些不常用,自己作为开发也不搞运维,了解就好。这里主要总结

SNAT,DNAT两个动作。因为经常开发过程需要配置网络通畅,要么找其他人配置网络设备比较麻烦,要么自己配置代理转发,自己解决,多爽~~~

 

SNAT&DNAT的概念我不详细解释,

iptables -t nat -A POSTROUTING -p tcp --dport 10443 -j SNAT --to-source 172.29.50.12
# 将流过本机的,目标端口为10443的数据包,转换它的源IP为172.29.50.12
# 注意,根据iptables(1)数据流向,可知,改变源IP只能在数据出去的时候改变,也就是配置SNAT只能在POSTROUTING链中配置,在prerouting中配置会报错。


iptables -t nat -A PREROUTING  -p tcp --dport 10443 -j DNAT --to-destination 10.29.4.71:10443
# 将流过本机的,目标端口为10443的数据包转换他的目标IP为10.29.4.71,且转换目标端口为10443.这里加了个:10443就是在转换IP的同时转换目标端口。
# 同理,改变目标IP也只能在PREROUTING ;链中,在postrouting,中配置也会报错。





注意:
想要Linux主机能够转发目标ip非本机的ip,需要配置ipforward。
打开系统的IP转发功能
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
不用重启,立即生效
sysctl -p

记住语法即可,

 

 

### Ubuntu 中 iptables 规则处理顺序 在 Ubuntu 系统中,iptables规则按照特定的链和表来组织并依次处理数据包。每张表内有多个预定义的链,这些链决定了如何以及何时应用规则。 #### 表及其优先级 Linux 内核中的网络过滤框架 netfilter 支持多种不同的表,其中最常用的包括: - **raw**:用于配置豁免连接跟踪机制的规则[^1] - **mangle**:主要用于修改数据包的内容 - **nat**:用于地址转换(如端口转发) - **filter**:默认情况下用来决定是否允许或拒绝数据包通过 表格按如下顺序被处理: 1. raw 2. mangle (PREROUTING 和 INPUT 链) 3. nat (PREROUTING 链) 4. mangle (FORWARD, OUTPUT 和 POSTROUTING 链) 5. filter (INPUT 和 FORWARD 链) 对于本地产生的流量,则会先经过 OUTPUT 链再进入其他链;而对于外部传入的数据包来说,通常是从 PREROUTING 开始直到到达目标主机的应用层之前都会经历上述过程的一部分或多部分。 #### 连接状态匹配准则 当涉及到已建立连接的状态时,可以利用连接追踪功能让 iptables 更加灵活地管理通信流。例如,在给定的例子中可以看到一条接受 ESTABLISHED 或 RELATED 类型连接请求的规则[^2]: ```bash sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT ``` 这条命令确保只有那些属于现有合法对话的新分组才能继续前进到目的地,从而提高了系统的安全性。 #### 实际案例展示 考虑下面这个简单的防火墙设置例子,它展示了不同类型的规则是如何组合在一起工作的: ```bash # 清空已有规则 sudo iptables -F # 设置默认策略为丢弃所有输入流量 sudo iptables -P INPUT DROP # 接受回环接口上的任何流量 sudo iptables -A INPUT -i lo -j ACCEPT # 允许已经存在的或者关联于当前会话的新连接 sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -A INPUT -p tcp --dport ssh -j ACCEPT sudo iptables -A INPUT -p tcp --dport www -j ACCEPT # 所有未命中前面规则数据包都将被阻止 ``` 在这个脚本里,`conntrack` 模块替代了较旧版本中的 `state` 模块,这使得我们可以更精确地控制哪些类型的连接应该被允许访问服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值