socat:Linux/UNIX TCP端口转发器
问题描述:
如何在不使用防火墙的情况下将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