实现TCP透明代理

本文所描述的TCP代理服务器工作于网络协议层次中的应用层,位于传输层之上。只要是以TCP的方式为客户提供服务的(包括我们的HTTP服务器,HTTP底层走的仍然是TCP),我们都可以在真正的TCP服务器前面增加代理服务器。

  

一.TCP透明代理的作用

TCP代理服务器可以隐藏背后真正TCP服务器,如此便可以起到保护真正TCP服务器的作用。由于TCP代理服务器工作于应用层,所以,黑客对应用层以下级别的协议栈的攻击(比如TCP半连接攻击)就无法穿过TCP代理服务器,这样,即使TCP代理服务器挂了,我们真正的TCP服务器仍然可以正常运行。当然,如果黑客是针对应用层进行攻击的,这时,代理服务器就不起作用的。

当黑客攻击应用层以下级别的协议栈,我们可以在真正的TCP服务器前面部署N个代理服务器,并将它们分布于不同的地方,这样,当其中一个代理服务器因为遭遇攻击而挂掉时,受影响的只是连接到这台代理服务器的用户,而其它的代理服务器上的用户仍然是正常被服务的,就像下面这样:

  

TCP代理服务器还有另外一个重要的作用,就是转址机。比如,我们的机房位于广州,而当北京的用户来访问服务时,网络延迟很大。我们可以在北京的机房部署一台代理服务器,并将该代理服务器与广州服务器之间的网络路由调节到最优。如此,北京的用户就可以通过这台代理服务器来快速地访问我们提供的服务了。对于转址机这项功能而言,有很多现有的软件可以做到,它们通常工作于网络协议层次中的IP层(即网络层),所以它们除了可以做TCP转址外,还可以做UDP的转址。

所以,概括而言,TCP代理服务器在以下场合适用:

(1)需要隐藏真正TCP服务器的位置。

(2)保护TCP服务器免受应用层以下级别的协议栈攻击。

(3)TCP转址机。

二.实现原理 

在实现TCP代理服务器时,遵循以下几点原则:

(1)当客户端与代理服务器建立TCP连接成功时,代理服务器立即与TCP服务器建立连接,并将它们作为一个连接对管理起来。

(2)当连接对中的任何一个连接断开时,代理服务器都关闭另外一个连接,并释放该连接对所持有的任何资源。

(3)当接收到来自客户端的任何数据时,都原封不动地转发给TCP服务器;当接收到来自TCP服务器的任何数据时,都原封不动地转发给对应的客户端。

(4)通过客户端的端点地址IPEndPoint来识别不同的连接对。

三.下载

使用TCPProxy类,我写了个简单的TCP代理服务器应用程序,对于简单的场景可以直接拿来使用。该程序运行的截图如下:      

使用时,只需要修改一下TCPProxyServer.exe.config中对应的配置即可。

可以从这里下载TCP代理服务器

实现TCP透明代理

时间: 2024-10-14 04:51:05

实现TCP透明代理的相关文章

基于zbus网络通讯模块实现的MySQL透明代理(<100行代码)

项目地址 https://git.oschina.net/rushmore/zbus 我们上次讲到zbus网络通讯的核心API: Dispatcher -- 负责-NIO网络事件Selector引擎的管理,对Selector引擎负载均衡 IoAdaptor -- 网络事件的处理,服务器与客户端共用,负责读写,消息分包组包等 Session -- 代表网络链接,可以读写消息 实际的应用,我们几乎只需要做IoAdaptor的个性化实现就能完成高效的网络通讯服务,今天我们将举例说明如何个性化这个IoA

Squid透明代理+ACL访问控制+日志分析

防伪码:仰天大笑出门去,我辈岂是蓬蒿人 第一章 Squid透明代理+ACL访问控制+日志分析 前言:搭建代理服务器可以提高上网打开网页的速度,可以对非法网站进行屏蔽,限制文件下载,以及查看员工访问internet的情况,包括上网的地址,用户,时间等,是企业网络管理的常用手段. 代理服务器分为传统代理和透明代理,传统代理适用于浏览internet,需要在浏览器上手工指定服务器地址和端口,不是很方便,但是可以隐藏本机真实的ip地址,而且为下载工具使用多个代理可以规避服务器的并发连接显示.透明代理适用

图解正向代理、反向代理以及透明代理

链接地址:http://z00w00.blog.51cto.com/515114/1031287 1.正向代理: 所谓的正向代理就是代理服务器Z代替客户端A去访问目标服务器B.正向代理的作用有:访问本机无法访问的服务器(如FQ服务).加速访问服务器B(缩短路径).Cache作用.客户端访问授权.隐藏访问者的行踪(肉鸡)等. 2.反向代理: 和正向代理相反,反向代理Z对于客户端A而言就像是原始服务器,并且客户端不需要做特殊设置.客户端向反向代理服务器发送普通请求,接着反向代理服务器将判断向何处转交

squid 透明代理和反向代理

透明代理: 1.修改 squid 配置文件: http_port 192.168.10.1:3128 transparent          #transparent 透明 2.利用iptables 的nat表建立一条目标转向规则. iptables -t nat -A PREROUTING -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 类型  nat 添加   数据方向进     源自 192.168.10.0段IP  

llinux企业常用服务---squit透明代理

注意: 在传统代理的基础上配置 透明代理需指定网关 1.配置透明代理: 1)修改配置文件:支持透明代理 [[email protected] ~]# vi /etc/squid.conf http_port 192.168.100.150:3128 transparent   ##将http_port 3128修改为支持透明代理 [[email protected] ~]# /etc/init.d/squid reload [[email protected] ~]# netstat -utpl

金庸武功之“碧血剑法”----squid做透明代理

一.试验目的:公司阿里云环境要求之开放一个代理服务器,其他服务器不允许有外网IP 二.环境拓扑: A:代理服务器:(利用squid做透明代理) (centos7.2) [[email protected] squid]# ip a eth0:10.30.204.122 eth1:116.62.XX.XX B:客户端服务器:(centos7.2) [[email protected] squid]# ip a eth0:10.30.204.90 三.试验环境准备(A,B都执行) yum  -y u

CentOS下Privoxy和Iptables 实现透明代理,修改http-header

Linux下目前使用最多的HTTP代理当属Squid了,这边有个需要修改http-header的需要,前提是要做http的透明代理,squid实现透明代理很容易,但修改http-header没找到方法. Privoxy在修改http-header方面很善长,但透明代理如何实现网上好像还没有成熟的方法.比起修改http-header,透明代理应该实现起来更简单一些,于是研究了一下,下面详细说一说. 一.环境说明: 1.系统: CentOS 6.5 32位(64位在装privoxy的时候经常报错,直

.net 真实代理和透明代理的交互

1 1.本地代理调用 2 3 4 using System; 5 using System.Runtime.Remoting ; 6 using System.Runtime.Remoting.Services ; 7 using System.Runtime.Remoting.Activation ; 8 using System.Runtime.Remoting.Proxies ; 9 using System.Runtime.Remoting.Messaging ; 10 11 12 /*

squid 透明代理配置

透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改变你的request fields(报文),并会传送真实IP,多用于路由器的NAT转发中. 透明代理的原理是这样的:1. 假设A为内部网络客户机2. B为外部网络服务器,B提供的服务为httpd服务,监听端口为803. C为代理服务器(也是我们的网关),假如代理服务器提供服务端口为3128 过程: 当A向B的80端口请求数据时,TCP连接请求要先经过C,C看到A请求的是B的80端口时,C由于已经设置了转发规则,所以C会把A的请求80端口