情况如下:我有一个企业电子邮件,其 SMTP 服务器监听端口 2525。我可以在家里毫无问题地配置像 thunderbird 这样的电子邮件客户端。我还有另一份工作,大多数出站端口都已关闭,包括 2525。但是,有几个端口是开放的,用于出站流量。
有没有办法让我使用家里不受限制的网络和路由器(以及全天候运行的 Linux 系统)来重定向流量?我曾经做过类似的事情,使用 SSH 隧道浏览互联网而不受代理限制,但这次不同。
我的想法是:在受限网络中:将 SMTP 设置为我家静态 IP 上的任何开放端口。在家里:将该端口重定向到(1)2525 上直接真实的 SMTP(2)本地服务器,然后以某种方式重定向到 2525 上的 SMTP
那么:我要做的事情叫什么名字?你认为我该如何实现它?
谢谢
答案1
我正在尝试做的事情叫什么名字?
TCP 中继
你认为我怎样才能实现这一目标?
索卡特:
...
socat TCP4-LISTEN:www TCP4:www.domain.org:www
安装一个简单的 TCP 端口转发器。使用 TCP4-LISTEN,它会监听本地端口“www”,直到有连接进入,接受该连接,然后连接到远程主机 (TCP4) 并开始数据传输。它不会接受第二个连接。
socat -d -d -lmlocal2 \ TCP4-LISTEN:80,bind=myaddr1,su=nobody,fork,range=10.0.0.0/8,reuseaddr \ TCP4:www.domain.org:80,bind=myaddr2
TCP 端口转发器,每一端都绑定到另一个本地 IP 地址(绑定)。此示例通过在每个 accept() 之后分叉一个新进程来处理几乎任意数量的并行或连续连接。它通过在分叉后对用户 nobody 进行审核来提供一点安全性;它只允许来自私有 10 网络(范围)的连接;由于重用地址,它允许在主进程终止后立即重新启动,即使某些子套接字未完全关闭。使用 -lmlocal2,socat 会将日志记录到 stderr,直到成功到达 accept 循环。进一步的日志记录将定向到具有功能 local2 的 syslog。
socat TCP4-LISTEN:5555,fork,tcpwrap=script \ EXEC:/bin/myscript,chroot=/home/sandbox,su-d=sandbox,pty,stderr
一个简单的服务器,它接受连接(TCP4-LISTEN)并为每个连接派生一个新的子进程;每个子进程都充当单个中继。客户端必须符合 /etc/hosts.allow 和 /etc/hosts.deny 中守护进程名称“script”的规则,否则将被拒绝访问(请参阅“man 5 hosts_access”)。为了执行程序,子进程 chroot 到 /home/sandbox,su 到用户沙箱,然后启动程序 /home/sandbox/bin/myscript。Socat 和 myscript 通过伪 tty (pty) 进行通信;myscript 的 stderr 被重定向到 stdout,因此其错误消息通过 socat 传输到连接的客户端。
socat EXEC:"mail.sh [email protected]",fdin=3,fdout=4 \ TCP4:mail.relay.org:25,crnl,bind=alias1.server.org,mss=512
mail.sh 是一个 shell 脚本,与 socat 一起发布,它实现了一个简单的 SMTP 客户端。它被编程为在其 FD 3(输入)和 4(输出)上“使用”SMTP。fdin 和 fdout 选项告诉 socat 使用这些 FD 与程序进行通信。由于 mail.sh 继承了 stdin 和 stdout,而 socat 不使用它们,因此脚本可以从 stdin 读取邮件正文。Socat 将 alias1 设为您的本地源地址(bind),关注正确的网络线路终止(crnl)并每数据包最多发送 512 个数据字节(mss)。
...