java编程服务器设计方案(Java应用代理服务器)

代理服务器

代理服务器的概念:

代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记

代理服务器作为连接Internet与Intranet的桥梁,在实际应用中发挥着极其重要的作用,它可用于多个目的,最基本的功能是连接,此外还包括安全性、缓存、内容过滤、访问控制管理等功能。更重要的是,代理服务器是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的对话层。

举例,IE浏览器通过设置代理服务器访问资源,应用场景,如下图所示:

java编程服务器设计方案(Java应用代理服务器)(1)

java编程服务器设计方案(Java应用代理服务器)(2)

java编程服务器设计方案(Java应用代理服务器)(3)

常用的代理协议:

1,转发(TCP、UDP包),将网络数据包接受后,直接转向另外一个服务。常见能提供转发功能的设备以及服务:硬件防火墙、硬件路由器、iptables(Liunx下的防火墙模块)、firewall(Liunx下的防火墙模块)、自己开发的软件功能(缺点:转发后的数据包包头为部署软件服务的地址)。

2,socks4,SOCKS 4只支持TCP转发。http://www.openssh.com/txt/socks4.protocol

3,socks5,socket5代理支持TCP和UDP两种,Socket5代理只是单纯传递数据包,不关心具体协议和用法,速度很快。 Socket5代理服务器一般有缓存功能,通常端口一般为1080。http://www.ietf.org/rfc/rfc1928.txt

4,http/ https,HTTP代理本质上是一个Web应用,它和其他普通Web应用没有根本区别。HTTP代理收到请求Header中Host字段的主机名和Get/POST请求地址综合判断目标主机,建立新的HTTP请求并转发请求数据,并将收到的响应数据转发给客户端。它的端口一般为80、8080、3128等。http://www.ietf.org/rfc/rfc2068.txt

堡垒主机是实现了代理功能的扩展

代理服务器的使用场景,就是客户端先访问代理服务器,代理服务器再访问真实的资源。堡垒主机的使用场景,就是客户端先访问堡垒主机,堡垒主机再访问真实的资源。

如此看来,堡垒主机和代理服务器有相似之处,其实际堡垒主机也是基于标准协议实现的代理服务器。使用字符堡垒来说明,其流程为:字符堡垒服务一般是一个特殊的SSH Server也可以称为代理SSH Server,客户端发送指令到字符堡垒,字符堡垒接收到指令后,再中转到SSH服务/Telnet服务上,SSH服务执行指令后,将结果传回到字符堡垒,字符堡垒再将结果返回给客户端。

堡垒主机实质是基于标准协议实现了代理服务功能,在此基础功能上再次进行的功能扩展。

堡垒主机

堡垒主机介绍

堡垒主机是一种被强化的可以防御进攻的计算机,作为进入内部网络的一个检查点,以达到把整个网络的安全问题集中在某个主机上解决,从而省时省力,不用考虑其它主机的安全的目的。

堡垒主机是一台完全暴露给外网攻击的主机,它没有任何防火墙或者包过滤路由器设备保护。建立堡垒主机的一般原则是:最简化原则、预防原则。

堡垒主机作用

1、防御外部网络的恶意攻击;2、用户操作行为审计;3、简化用户特定操作的步骤;

堡垒主机分类

根据应用场景分类

A、网关型堡垒机

java编程服务器设计方案(Java应用代理服务器)(4)

为安全起见,一般内部网络本身不直接向外部网络提供服务,堡垒主机作为进入内部网络的一个检查点,充当外部网络和内部网络的连接桥,提供对内部网络特定资源的安全访问控制。

B、运维审计型堡垒机

java编程服务器设计方案(Java应用代理服务器)(5)

审计型堡垒机,也被称作“内控堡垒机”,是对运维人员的操作权限进行控制以及对用户的操作行为进行审计,达到事前控制事后审计的目的。此为,堡垒主机还可以做自动化的代填,代替人工的某些固定的操作,减少运维人员的工作量。

外网IP和内网IP可以位于同一个网段,通过防火墙阻断除堡垒服务之外的其它服务。

根据操作终端分类

java编程服务器设计方案(Java应用代理服务器)(6)

堡垒主机技术原理

字符堡垒技术原理

作为运维人员,一般我们常用的终端可归纳为:字符终端(发送命令行),文件终端(增、删、改、查文件)、图形终端(远程服务器图形化操作)。因此,对应的堡垒主机也可以归纳为:字符堡垒、文件堡垒和图形堡垒。

java编程服务器设计方案(Java应用代理服务器)(7)

堡垒主机技术实现

OSI参考模型和TCP/IP4层模型

OSI网络参考模型:

java编程服务器设计方案(Java应用代理服务器)(8)

java编程服务器设计方案(Java应用代理服务器)(9)

TCP/IP4层应用模型:

java编程服务器设计方案(Java应用代理服务器)(10)

TCP(Transmission Control Protocol,传输控制协议)。

UDP(User Datagram Protocol,用户数据报协议)。

TCP/IP协议族分为四层,分别为应用层,传输层,网络层,链路层。

应用层: 负责程序之间的数据沟通,应用层常用知名协议http超文本传输协议、Telnet网络远程访问协议、ftp文件传输协议、SMTP简单邮件传输协议,SNMP简单网络管理协议,同时可以自己定义协议。

传输层:为两台主机的应用程序之间提供端到端的数据传输,提供了两种不同的服务,面向连接,可靠的数据流TCP传输控制协议,和无连接,不可靠面向数据报传输的UDP用户数据报协议。

网络层:网络层主要提供地址管理,和路由选择,TCP/IP协议族中,网络层协议包括IP协议(网际协议)、ICMP (Internet控制报文协议),IGMP (Internet 组管理协议)。

链路层:链路层主要提供相邻设备之间的数据传输, 链路层主要实现三个目的:接受和发送ip数据包、接受发送ARP(地址解析协议)请求(获取目标主机的MAC地址) 、为发送RARP(逆地址解析协议,针对无盘机)请求和接收RARP应答,另外根据网络中硬件的不同,链路层有不同的协议,如以太网,令牌环网。

操作系统的标准输入/输出流

Unix/Linux/BSD 都有三个特别文件,分别:

A、标准输入,即STDIN , 在/dev/stdin,一般指键盘输入,shell里代号是0。

B、标准输出,STDOUT ,在/dev/stdout,一般指终端(terminal),就是显示器,shell里代号是 1。

C、标准错误 STDERR, 在/dev/stderr,也是指终端(termina),不同的是,错误信息送到这里,shell里代号是2。

Socket编程和SSH协议

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

在Java、Python等语言中,直接创建socket对象,获取到输入输出流内容就为应用层数据包,可直接通过输入流或者输入流进行读写操作,不需要关心应用层之下的协议层。

Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。

SSH由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、DigitalUNIX、Irix,以及其他平台,都可运行SSH。

SSH主要由三部分组成:

A、传输层协议 [SSH-TRANS]

提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。

B、用户认证协议 [SSH-USERAUTH]

用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。

C、连接协议 [SSH-CONNECT]

将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。

Java语言技术实现方案

Apache SSHD,官网:http://mina.apache.org/sshd-project/

Apache SSHD是一个100%纯Java类库用于在基于Java开发的客户端与服务器提供SSH协议支持。这个类库采用Apache MINA开发,它是一个可扩展和高性能的异步IO类库。

基于Apache SSHD的源码进行改造,实现字符堡垒主机的连接协议,即客户端连接到堡垒主机。

下载:http://mina.apache.org/sshd-project/downloads.html

JSch,纯Java语言实现SSH客户端组件包。

JSch是SSH2的一个纯Java实现。它允许你连接到一个sshd 服务器,使用端口转发,X11转发,文件传输等等。你可以将它的功能集成到你自己的程序中。同时该项目也提供一个J2ME版本用来在手机上直连SSHD服务器。

堡垒主机通过输入流解析到执行指令,再通过使用JSch组件连接服务器端,执行该指令,返回输出流结果后,与SSHD的输出流进行对接。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页