系统端口转发

linux端口转发两种方式:iptables,ssh

windows端口转发一种方式:netsh

Iptables

关键字:iptables(L3)

编辑/etc/sysctl.conf文件,将net.ipv4.ip_forward=1前面的#注释去掉,保存文件,然后执行sudo sysctl -p使其生效

法则:iptables -t 表名 指令 链名 描述 -j 动作

表名有filter;nat;mangle,默认为filter(可省略);

指令有-A(追加),-I(插入),-D(删除),-R(替换),-F,-N,-X,-E,-P,-Z,-L等;

链名有input(数据进入)、output(数据发出)、forward(数据转发);PREROUTING(目的地址转换)、POSTROUTING(原地址转换)、OUTPUT等;

描述有-s(原址),-d(目的址),-i(进口网卡),-o(出口网卡),-p(网络协议)。扩展匹配(调用iptables的模块,以便扩展iptables的匹配功能, -m);

动作有accept、drop、reject等;

示例:

iptables -P INPUT DROP;

iptables -A INPUT -d 192.168.0.100/32 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT;

iptables -A INPUT -m iprange --src-range 192.168.0.100-192.168.0.200 -p tcp --dport 23 -m state --state NEW -j ACCEPT;

iptables -A INPUT -s 192.168.0.100 -p tcp --dport 80 -m state --state NEW -m limit --limit 3/minute --limit-burst 5 -j ACCAPT;

iptables -I OUTPUT 1 -m string --algo kmp --string "magedu" -j REJECT;

把公网A机器端口P1映射为内网B机器端口P2:

iptables -P FORWARD ACCEPT

iptables -t nat -A PREROUTING -d [A公网地址] -p tcp -m tcp --dport [公网端口] -j DNAT --to-destination [B内网IP]:[B内网端口];

iptables -t nat -A POSTROUTING -d [B内网IP] -p tcp -m tcp --dport [B内网端口] -j SNAT --to-source [A内网地址];

iptables -A FORWARD -o [A内网网卡] -d [B内网IP] -p tcp --dport [B内网端口] -j ACCEPT;

iptables -A FORWARD -i [A内网网卡] -s [B内网IP] -p tcp –sport [B内网端口] -j ACCEPT;

SSH端口转发:

SSH端口转发的好处:

1. 利用SSH通道天然的加密特性

2. 通过具备访问权限的第三者,突破防火墙对自己的限制,或者隐身

角色定义:

A. 本地服务器,想通过中间服务器B间接访问目标服务器C

B. 中间服务器,类似于代理,A以B的名义去访问C

C. 目标服务器,C看到的都是中间服务器B在访问自己

1. 本地端口转发

命令ssh -Nf -L [local_A_address]:local_A_port:target_C_server:target_C_port via_B_server

参数:

       -N,不执行命令

-f,后台执行

-L,local本地端口转发

local_A_address,127.0.0.1 - 默认,只能本机使用这个端口转发,也可以是本机的IP地址,同时其他人可以使用这个IP来使用这个端口转发

via_B_server,中间服务器

target_C_server,如果为 localhost 或127.0.0.1,则指向via_B_server

应用:

A---能访问------>B-------能访问------>C

A---不能访问----------------------------->C

A---通过本机端口,以B的名义访问-->C

关闭:

直接kill -9 建立的SSH连接,下同

2. 远程端口转发

命令ssh -Nf -R [local_A_address]:local_A_port:target_C_server:target_C_port local_A_address

参数:

-R,remote,远程端口转发

local_A_address,这个地址为A的IP

应用:

环境和目的与本地端口转发是一样的,这里只是不在本地服务器A上执行命令,而是在中间服务器B上执行;

为什么不直接在服务器A自己身上执行命令呢?这个场景有别于本地端口转发的地方在于A不能主动连接B但反之可以,比如A在外网,B在内网;

而A去访问的时候,同样都是通过自己的IP和端口,同样首先建立AB之间的SSH通道,以服务器B的名义来访问目标服务器C。

3. 动态端口转发

命令ssh -Nf -D [local_A_address]:local_A_port via_B_server

参数:

-D,dynamic,动态端口转发

应用:

本地和远程端口转发,都限定了目标服务器以及目标服务器的端口;

而动态端口转发,A把B作为了自己的全权代理,不限定目标服务器及其端口;

这里要求在A上,做下代理设置,比如浏览器的代理设定为自己的IP:PORT;

本地端口转发和远程端口转发,其实都可看着是动态端口转发(代理)的子集;

三者和一般代理的目的和场景都一致,区别在于这里自己A和代理服务器B之前的所有连接都是基于加密的SSH

状态(state):

NEW(第一次请求连接syn=1,ack=0)ESTABLISHED(已建立的连接syn=0,ack=1)INVALID(非法的连接)RELATED(相关连的连接)

Netsh端口转发(windows):

目前只支持tcp协议的端口转发,前提需要作为portproxy的主机需要安装IPV6,安装可以不启用IPV6。可以随时根据需要添加或删除端口转发条目,并且重启操作系统仍能自动保存之前的配置并自动启用。

配置方法

假定需要通过192.168.1.8的14941端口连接192.168.1.118的1494端口,则需要在192.168.1.8主机的命令行输入如下语句
---如果已经安装IPV6,该条语可以不需要
netsh  interface ipv6 install

---可不用指定本地监听地址,这样可以通过操作系统提供浮动地址来实现,如果操作系统开启了主机防火墙,需要放行TCP 14941的入站连接

netsh interface portproxy add v4tov4 listenaddress=192.168.1.8 listenport=14941 connectaddress=192.168.1.118 connectport=1494

netsh interface portproxy add v4tov4 listenport=14941 connectaddress=192.168.1.118 connectport=1494

---取消上面配置的端口转发,可以用如下语句:

netsh interface portproxy delete v4tov4 listenaddress=192.168.1.8 listenport=33891

---如果想查看已经配置了哪些端口转发,可以用如下语句:

netsh interface portproxy show v4tov4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值