Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >IPTABLES端口转发

IPTABLES端口转发

作者头像
Al1ex
发布于 2022-06-23 07:54:37
发布于 2022-06-23 07:54:37
1.9K00
代码可运行
举报
文章被收录于专栏:网络安全攻防网络安全攻防
运行总次数:0
代码可运行
文章前言

iptables是unix/linux系统自带的优秀且完全免费的基于包过滤的防火墙工具,它的功能十分强大、使用非常灵活、可以对流入、流出及流经服务器的数据包进行精细的控制,作为防火墙其端口转发功能自然是必不可少的,但是需要高的操作权限

基础知识
Tables

iptables包含5张表(tables):

  • raw:用于配置数据包,raw中的数据包不会被系统跟踪
  • filter:是用于存放所有与防火墙相关操作的默认表
  • nat:用于网络地址转换,例如:端口转发
  • mangle:用于对特定数据包的修改,例如:损坏数据包
  • security:用于强制访问控制网络规则,例如:SELinux
Chains

表由链组成,链是一些按顺序排列的规则的列表,默认的filter表包含INPUT、OUTPUT、FORWARD共计3条内建的链,这3条链作用于数据包过滤过程中的不同时间点,具体如下方流程图所示:

默认情况下,任何链中都没有规则,用户可以向链中添加自己想用的规则,链的默认规则通常设置为ACCEPT,如果想确保任何包都不能通过规则集,那么可以重置为DROP,默认的规则总是在一条链的最后生效,所以在默认规则生效前数据包需要通过所有存在的规则,用户可以加入自己定义的链,从而使规则集更有效并且易于修改

Rules

数据包的过滤基于规则,规则由一个目标(数据包匹配所有条件后的动作)和很多匹配(导致该规则可以应用的数据包所满足的条件)指定,一个规则的典型匹配事项是数据包进入的端口(例如:eth0或者eth1)、数据包的类型(ICMP, TCP, 或者UDP)和数据包的目的端口。

目标使用-j或者--jump选项指定,目标可以是用户定义的链(例如,如果条件匹配,则跳转到用户定义的链之后继续处理)、内置的特定目标或者是一个目标扩展,内置目标是ACCEPT、DROP、QUEUE和RETURN,目标扩展是REJECT and LOG,如果目标是内置目标,数据包的命运会立刻被决定,并且在当前表的数据包的处理过程会停止,如果目标是用户定义的链,并且数据包成功穿过第二条链,目标将移动到原始链中的下一个规则,目标扩展可以被终止(像内置目标一样)或者不终止(像用户定义链一样)

Modules

有许多模块可以用来扩展iptables,例如connlimit, conntrack, limit和recent,这些模块增添了很多功能,可以进行更复杂的过滤

Traversing Chains

位于上方的流程图描述了在任何接口上收到的网络数据包是按照怎样的顺序穿过表的交通管制链的,第一个路由策略包括决定数据包的目的地是本地主机(数据包穿过INPUT链),还是其他主机(数据包穿过FORWARD链),中间的路由策略包括决定给传出的数据包使用那个源地址、分配哪个接口,最后一个路由策略存在是因为先前的mangle与nat链可能会改变数据包的路由信息,数据包通过路径上的每一条链时,链中的每一条规则按顺序匹配,无论何时匹配了一条规则,相应的target/jump动作将会执行,最常用的3个target是ACCEPT、DROP、JUMP到用户自定义的链,内置的链有默认的策略,但是用户自定义的链没有默认的策略,在JUMP,若每一条规则都不能提供完全匹配,那么数据包像这张图片描述的一样返回到调用链,在任何时候,若DROP TARGET的规则实现完全匹配,那么被匹配的数据包会被丢弃,不会进行进一步处理,如果一个数据包在链中被ACCEPT,那么它也会被所有的父链ACCEPT,并且不再遍历其他父链,需要注意的是,数据包还会以正常的方式继续遍历其他表中的其他链

工作原理

下图简要描述了网络数据包通过iptables的过程:

端口转发
前期配置

修改配置文件,使iptables允许ipv4转发:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/sysctl.conf     #可以直接进文件修改
net.ipv4.ip_forward = 1   #开启ipv4 forward

也可以用这条命令直接修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sysctl -w net.ipv4.ip_forward=1

查看修改结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sysctl -p

规则说明

端口转发功能主要是用nat表中的三个链实现该功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-t 指定配置表
-A 链中添加规则
-D 删除链中规则
-C 修改链中规则
-j target 决定符合条件的包到何处去,target模式很多
本地转发

REDIRECT模式可以将防火墙所在机子内部数据流量包转发到本地的另一个端口,它只能用在nat表的PREROUTING、OUTPUT链 ,并且通过--to-ports选项来指定转发到本地的那个端口号,例如:--to-ports 8080,当然也可以指定为一个范围,例如:--to-ports 8080-8090

Case 1:下面我们通过PREROUTING链,将外网访问4444端口的数据流量全部转发到本机22端口(注意:本机访问4444并不进行转发),这种方法适用于当我们的目标主机不允许外部访问特定的端口时我们可以通过端口转发实现对其访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -t nat -A PREROUTING -p tcp --dport 4444 -j REDIRECT --to-ports 22

之后攻击者远程连接目标主机的4444端口的流量会被转发到22端口,实现对目标主机SSH服务的连接:

Case 2:我们也可以通过OUTPUT链,将本地访问4444端口的数据流量全部转发到本机22端口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -t nat -A OUTPUT -p tcp --dport 4444 -j REDIRECT --to-ports 22

之后再本地访问4444端口,可以成功连接到本地SSH服务:

远程转发

DNAT模式是用来做目的网络地址转换,它也可以做某种类型地负载平衡,只能用在nat表的PREROUTING和OUTPUT链,并且通过--to-destination选项指定要写入的IP头的地址,其参数可以是一个IP范围,例如: --to-destination 192.168.10.141-192.168.10.151

SNAT模式用来做源网络地址转换的,就是重写包的源IP地址,如果直接转发包的话,网络响应包上就不知道往哪儿发送应答,所以需要改为防火墙的地址,只能用在nat表的POSTROUTING链,且有一个--to-source选项,它可以是一个单独的地址也可以是一段连续的地址,例如:194.236.50.155-194.236.50.160,在指定-p tcp或-p udp的前提下,可以指定源端口的范围,例如:194.236.50.155:1024-32000

当前场景:

  • A主机:192.168.174.1
  • B主机:192.168.174.129
  • C主机:192.168.174.131

场景要求:

通过将B主机作为中间媒介,攻击者通过A主机访问B主机的4444端口实现对目标主机C的22号端口的访问

具体实现:

Step 1:通过PREROUTING链,将A访问B的4444端口的包,转发到C的22端口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -t nat -A PREROUTING --dst 192.168.174.129 -p tcp --dport 4444 -j DNAT --to-destination 192.168.174.131:22

Step 2:通过POSTROUTING链,修改请求包的源IP,为B主机IP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -t nat -A POSTROUTING --dst 192.168.174.131 -p tcp --dport 22 -j SNAT --to-source 192.168.174.129 

Step 3:A主机访问B的4444端口,此时C主机的22端口收到包,并显示是B发来的请求,但包里的Host并没有改变

分流机制

当前场景:

  • A主机:192.168.174.1
  • B主机:192.168.174.129
  • C主机:192.168.174.131

场景要求:

A主机访问B的4444端口转发到C主机的22端口,D主机访问则不进行转发(只对192.168.174.1来源IP有效,其他IP访问完全正常)

具体实现:

Step 1:通过PREROUTING链,将源为192.168.174.1访问B的4444端口的包,转发到C的22端口,其他的不管

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -t nat -A PREROUTING --source 192.168.174.1 -p tcp --dport 4444 -j DNAT --to-destination 192.168.174.131:22

Step 2:MASQUERADE模式和SNAT模式作用一样,区别就是它不需要指定--to-source ,而是动态获取IP地址的连接的,比如:拨号上网、DHCP连接时我们IP是会变的,只能用于nat表的POSTROUTING链 ,有一个非必须--to-ports选项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE
iptables -t nat -A POSTROUTING --dst 192.168.174.131 -p tcp --dport 22 -j MASQUERADE

Step 3:使用攻击主机A链接B主机的4444端口发现成功转发

Step 4:使用其他主机连接,发现无法成功连接到目标主机C的22端口

删除规则

查询列表后,-D删除指定表的指定链上num的规则

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iptables -t nat -nL --line
iptables -t nat -D PREROUTING 1
iptables -t nat -D OUTPUT 1

参考链接

https://blog.csdn.net/zzchances/article/details/124062478

https://mp.weixin.qq.com/s/QOfORsSIcxuRXFj1xkUFcA

https://wiki.archlinux.org/title/iptables_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七芒星实验室 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iptables基础及规则设置管理
在Linux协议栈中,有一组回调函数的挂载点,通过这些挂载点挂接的钩子函数可以在Linux网络栈处理数据包的过程中对数据进行一些操作,例如过滤、修改、丢弃等。整个挂载点技术就叫做iptables和netfilter。
用户5921339
2025/05/20
1440
iptables基础及规则设置管理
使用iptables实现多主机间端口转发
访问 192.168.1.10:18888 ,实际访问服务为 192.168.1.125:80
大大大黑白格子
2020/06/10
3.8K0
使用iptables实现多主机间端口转发
Iptables防火墙规则使用梳理
iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。在日常Linux运维工作中,经常会设置iptables防火墙规则,用来加固服务安全。以下对iptables的规则使用做了总结性梳理: iptables首先需要了解的: 1)规则概念 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储
洗尽了浮华
2018/01/23
3.9K0
Iptables防火墙规则使用梳理
iptables系列三
iptables系列之nat及其过滤功能 自定义规则链 iptables -N clean_in iptables -L -n iptables -A clean_in -d 255.255.25
若与
2018/04/25
7000
iptables系列三
Linux端口转发的几种常用方法
在一些实际的场景里,我们需要通过利用一些端口转发工具,比如系统自带的命令行工具或第三方小软件,来绕过网络访问限制触及目标系统。
Bypass
2020/08/27
52.4K0
防火墙(iptables)
防火墙(iptables)基于Netfilter实现,它在Linux内核中的一个软件框架,用于管理网络数据包。不仅具有网络地址转换(NAT)的功能,也具备数据包内容修改、以及数据包过滤等防火墙功能。
研究僧
2020/10/12
1.9K0
一文了解iptables
netfilter/iptables(简称 iptables)组成 Linux 平台下的包过滤防火墙
中龙技术
2022/09/30
5.2K0
一文了解iptables
iptables详解及常用规则
netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
sunsky
2020/08/20
3K0
iptables详解及常用规则
快速了解iptables
iptables是一个在Linux操作系统上使用的防火墙工具,它可以用于配置和管理网络数据包的过滤、转发和修改等操作。
编程黑洞
2023/05/16
6280
快速了解iptables
使用iptables进行端口转发
说明:玩vps的经常要用到端口转发用以实现更快的速度,比如手上有个某商家的vps,本地访问速度很慢,这时候就可以用一个香港或者日本的线路做桥梁,达到更快的速度,这里先说下用iptables来进行中转的教程,毕竟自认为这个是最好上手的。
用户8851537
2021/07/23
9.9K0
iptables防火墙与端口转发
iptables 的结构:iptables -> Tables -> Chains -> Rules
yichen
2023/01/31
2K0
iptables防火墙与端口转发
iptables之NAT端口转发设置
背景: 服务器A:103.110.114.8/192.168.1.8,有外网ip,是IDC的一台服务器 服务器B:192.168.1.150,没有外网ip,A服务器是它的宿主机,能相互ping通 服务器C:192.168.9.120,是公司的一台服务器,能上网。 服务器C可以直接ssh登陆A服务器,但是不能直接登陆服务器B,因为它们处在两个不同的局域网内。 现在要求能从服务器C上ssh登陆服务器B,并且做ssh无密码信任跳转关系。 这就需要用到iptables的NAT端口转发功能了~~~~~ 思路: 让服务
洗尽了浮华
2018/01/22
3.7K0
[Linux]iptables 端口转发
Windows的端口转发,我们可以 点击这里 直达。但是我们今天的需求是用我们的linux转发来加速我们在美国的windows。所以我们设定的案例如下
用户2353021
2020/05/12
3.7K0
Linux下 iptables 超详细教程和使用示例
PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
CPP开发前沿
2021/11/16
7630
iptables学习笔记
iptables -AI 链 INPUT|OUTPUT|FORWARD|LOG -io 网络接口 -p 协议 -s 来源ip/网段 --sport 端口范围 \
力哥聊运维与云计算
2019/06/28
6510
防火墙之地址转换SNAT DNAT
1、原理:在路由器后(PSOTROUTING)将内网的ip地址修改为外网网卡的ip地址。
拓荒者
2019/03/15
3.2K0
防火墙之地址转换SNAT DNAT
udp端口转发 Linux,Linux iptables 端口转发[通俗易懂]
大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说udp端口转发 Linux,Linux iptables 端口转发[通俗易懂],希望能够帮助大家进步!!!
Java架构师必看
2022/08/09
14.4K0
Linux安全: iptables端口转发
# iptables -t nat -A PREROUTING -p tcp --dport 2201 -j DNAT --to-destination 10.6.1.114:22
heidsoft
2018/10/18
2.4K0
Linux本机端口转发配置
所谓端口转发就是,本来你的进程是提供端口A的TCP服务,但是由于一些特殊原因(比如该端口禁止外网访问,或者金志明某些用户访问),如果还是想要访问到该端口A的服务,可以配置一下端口转发,使得到端口B的请求被自动转发到端口A,而端口B是可以访问的,从而也就实现了对端口A服务的访问。
Cloudox
2021/11/23
4.4K0
Linux本机端口转发配置
iptables学习笔记
本篇文章作为本人的iptables学习笔记,断断续续写了好几天,今天终于写完了,自己可以在虚拟机或者docker容器里操作一下,下面是正文:
没有故事的陈师傅
2019/07/27
6040
相关推荐
iptables基础及规则设置管理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验