Linux端口转发的几种常用方法

摘要:
12iptables tnat APEROUTING-ptcp-ieth0-dport22222 jDNAT-tox。x、 x.x:22serviceiptablesave远程端口转发也可以参考此处:http://www.jb51.net/LINUXjishu/401922.htmlfirewallfirewall这是一项替代CentOS7上iptables的服务。0x02inetd端口映射和转发工具1.下载并解压缩rinetd1get2.安装rinetd12makemakeinstall。安装过程可能会遇到man目录不存在的问题。您可以手动创建它以完成安装。有关rinetd的更多信息:https://boutell.com/rinetd/和http://blog.csdn.net/paulluo0739/article/details/70237110x03lcx端口转发lcx是***中经常使用的工具,并且易于使用。Rinetd和lcx也受到iptables和防火墙的限制,必须打开端口。

0x00 背景

  端口转发是一个常用的功能,不管是在服务器运维还是在***领域,都需要用到。在近期遇到一个问题就是一个服务的端口不能进行配置,但是由于出口硬件防火墙的原因,为了不修改硬件防火墙的策略,所以只能在本地做端口转发。因此尝试和寻找了以下的几种方法。


0x01 iptables和firewall

  • iptables

  iptables是我第一个想到的方法,但却是最后一个尝试的,因为我对iptables并不熟悉。


1、打开IP转发功能。

  linux的IP转发功能是默认关闭的,而且根据很多安全加固策略以及安全基线的要求,IP转发功能必须关闭,所以需要先打开IP转发。需要长期使用的话则写入到sysctl的配置文件中。

1
2
echo 1 >/proc/sys/net/ipv4/ip_forward
sysctl -w /etc/sysctl.conf

2、配置iptables,在PERROUTING链中做DNAT。需要长期使用的话需要注意保存配置。

1
2
iptables -t nat -A PEROUTING -p tcp -i eth0 --dport 22222 -j DNAT --to x.x.x.x:22
service iptables save

wKioL1f1FnCiYRPyAABGq9RpkuY713.jpg

  远程端口转发的还可以参考这里:

http://www.jb51.net/LINUXjishu/401922.html


  • firewall

  firewall是CentOS 7上替代iptables的服务。使用起来比iptables要稍微简单一点,直接使用firewall的端口转发就能实现。firewall我也不熟悉,参考了http://www.centoscn.com/CentOS/Intermediate/2015/0313/4879.html


1、打开端口转发功能

1
firewall-cmd --zone=public --add-forward-port=port=22222:proto=tcp:toport=22

  在不增加toaddr的情况下,默认就是转发到自己的IP上。

  如果需要长期使用则增加--permanent加入到永久规则即可。



0x02 rinetd端口映射转发工具


1、下载并解压rinetd

1
wget


2、安装rinetd

1
2
make
make install

  安装过程可能遇到man目录不存在的问题,手动创建即可完成安装。


3、创建/etc/rinetd.conf并写入转发规则

  配置文件中的规则格式为:

[Source Address] [Source Port] [Destination Address] [Destination Port]

源地址  源端口   目的地址  目的端口

wKioL1f1G2bQB1YWAAAXQw6IDt0601.jpg

  使用iptables的命令要更直接一些。但写入规则的时候需要注意源端口不能被其他服务占用,并且也需要在iptables上打开。


4、运行rinetd

wKiom1f1HHChEz6EAAB51qoRUuc577.jpg

  运行后即可发现,rinetd已经绑定了指定的端口。

  如果需要长期使用,把命令写入开机启动即可。


  更多rinetd的参考:https://boutell.com/rinetd/和http://blog.csdn.net/paulluo0739/article/details/7023711 


0x03 lcx端口转发

  lcx是***中经常用的工具,使用简单。但一般用于Windows,由于没有shell版本的lcx,编译、安装等环节较为麻烦,因此比较少见。因此,lcx虽然是我第一个想到的实现方法,但却是实现的最麻烦的。

1、网上找到代码见附件

  来源和参考:http://www.oldrss.com/article/hacker-00205.html


2、gcc编译

1
gcc lcx.c -o lcx

  CentOS6.X & CentOS 7.0测试可以编译成功。


3、运行lcx

wKiom1f18xajaMuDAACXooGOD74723.jpg


  使用方式较为简单,根据提示运行即可。

1
lcx -m 1 -h1 0.0.0.0 -p1 22222 -h2 127.0.0.1 -p2 22 -log /tmp/lcx.log

  如果服务连接较多,建议不要记录日志,因为日志中会记录传输的所有数据,这样将会占用大量的空间,并且也可能会影响传输。

  如果需要长期使用,设置开机启动并置入后台即可。


0x04 总结

 整体上来看,iptables和firewall是最简单的方案,不需要安装任何的程序和服务,系统自带。rinetd和lcx也都受到iptables和firewall的限制,必须要其打开端口。


免责声明:文章转载自《Linux端口转发的几种常用方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vc6中向vs2010迁移的几个问题剖析虚幻渲染体系(04)- 延迟渲染管线下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux C errno出错处理

1. 出错处理errno 每个进程维护一个全局整型变量errno, 记录系统(调用)的最后一次错误代码. errno及其常量值定义位于<errno.h>.以前, errno不是线程安全的, 其定义是: extern int errno; 现在, 为支持多线程环境, errno定义是: extern int *__errno_location(...

Python 脚本实现对 Linux 服务器的监控

本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 原文地址 由于原文来自微信公众号,并且脚本都是图片,所以这里自己亲自把代码整理执行一遍 工作原理:基于/proc文件 Linux 系统为管理员提供了非常好的方法,使其可以在系统运行时更改内核,而不需要重新引导内核...

linux系统统计某一字符出现的次数

1、创建测试数据 [root@linuxprobe test]# cat a.txt e i j s e f s d g e d d 2、利用grep命令统计字符e出现的次数 [root@linuxprobe test]# grep -o "e" a.txt | wc -l 3 3、同时统计e和d出现的次数 [root@linuxprobe test]#...

常用协议对应的端口--转载

>https://wenku.baidu.com/view/4f7ce022ccbff121dd3683e5.html DHCP 服务器的端口: 67 客户端的端口: 68 POP3: POP3仅仅是接收协议,POP3客户端使用SMTP向服务器发送邮件。POP3所用的端口号是110。 SMTP: 端口号是25。SMTP真正关心的不是邮件如何被传送,而...

Ubuntu 18.04 下配置 HAXM 加速 Android模拟器

Ubuntu 18.04 下配置 HAXM 加速 Android模拟器 最近在vmware环境下搭建ubuntu18.04开发环境,开始发现总是运行android模拟器在console提示加载如下错误信息:  Emulator: emulator: ERROR: x86 emulation currently requires hardware acc...

go build 不同系统下的可执行文件

Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。 1、Mac下编译Linux, Windows平台的64位可执行程序: 1 2 $ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go $ CGO_ENABLED=0 GOOS=windows GOARCH=amd6...