socat:Linux/UNIX TCP端口转发器

时间:2020-01-09 10:42:25  来源:igfitidea点击:

问题描述:
如何在不使用防火墙的情况下将UNIX或者Linux系统配置为充当TCP端口转发器?
如何在Linux下安装socat(SOcket CAT)多功能中继以进行双向数据传输?

解决方法:
您可以使用名为socat(SOcket CAT)的实用程序。
就像" Netcat但具有安全性"一样(例如,它支持chrooting),并且可以通过各种协议并通过文件,管道,设备,TCP套接字,Unix套接字,SOCKS4的客户端,代理CONNECT或者SSL运行等等

Socat是基于命令行的实用程序,可建立两个双向字节流并在它们之间传输数据。
由于可以从大量不同类型的数据接收器和源(请参阅地址类型)中构造流,并且由于可以将大量地址选项应用于流,因此socat可以用于许多不同目的。

socat用法:

  • TCP端口转发器
  • 外部袜机
  • 攻击弱防火墙(安全测试)
  • UNIX套接字的Shell接口
  • IP6继电器
  • 用于将面向TCP的程序重定向到串行线
  • 逻辑连接不同计算机上的串行线
  • 安全测试与研究
  • 建立相对安全的环境(su和chroot),以通过网络连接等运行客户端或者服务器Shell脚本

警告!这些示例可能会打开您的计算机端口和其他Internet用户的套接字。
您必须对TCP/IP和UNIX网络有充分的了解才能使用此工具。

在Debian/Ubuntu Linux下安装socat

执行以下命令:

$ sudo apt-get update && sudo apt-get install socat

源代码安装

访问官方网站并获取最新版本:

# cd /opt
# wget http://www.dest-unreach.org/socat/download/socat-1.7.1.2.tar.gz

解压并安装相同的文件:

# tar -zxvf socat-1.7.1.2.tar.gz
# cd socat-1.7.1.2
# ./configure
# make
# make install

例子

要将所有端口80连接重定向到ip 192.54.1.5,请执行:

# socat TCP-LISTEN:80,fork TCP:192.54.1.5:80

与端口80的所有TCP4连接都将重定向到192.54.1.5。
这就像netcat。
您可以通过按[CTRL + C]即^ C终止连接。

连接到远程SSH服务器

您可以连接到名为server1的远程ssh服务器,并使用pty在socat和ssh之间进行通信,使其成为控制tty(ctty)的sshs,并使该pty成为新进程组(setsid)的所有者,因此ssh接受来自socat。

$ (sleep 5; echo YOURSSHPASSWORDHERE; sleep 5; echo date; sleep 1) |socat - EXEC:'ssh -l userName server1.theitroad.com',pty,setsid,ctty

获取有关Haproxy的信息

以下内容将为您提供有关正在运行的HAProxy进程的信息,例如pid,正常运行时间等:

# echo "show info" | socat unix-connect:/var/tmp/haproxy stdio

TCP端口转发器,每侧绑定到另一个本地IP地址(绑定)

本示例通过在每个accept()之后派生一个新进程来处理几乎任意数量的并行或者连续连接。
它通过在分叉后向用户提起诉讼来提供一点安全性。
它仅允许来自专用10网络(范围)的连接;由于reuseaddr,即使某些子套接字没有完全关闭,它也允许在主进程终止后立即重启。
使用-lmlocal2,socat将记录到stderr,直到成功到达accept循环为止。
进一步的日志记录将通过设施local2定向到syslog:

# socat -d -d -lmlocal2 \
TCP4-LISTEN:80,bind=myaddr1,su=nobody,fork,range=10.0.0.0/8,reuseaddr \
TCP4:www.theitroad.com:80,bind=myaddr2