1、前言
本文版权归作者freshegg所有,任何人转载全文或节选,请注明作者和版本信息,否则视为侵权。 版本:0.1 作者:freshegg
俗话说得好“打洞有风险,动手需谨慎”,您需要仔细鉴别本文所列技术可能带来的安全风险。本着“谁打洞,谁受益,谁承担风险”的原则,对于您执行本文中的操作而导致的任何结果和本人无关。另外,本文中所列人物情节纯属虚构,请勿对号入座,如有雷同,纯属巧合 ;
话说家住广州的本文主角very正在位于中山的公司上班,突然接到上司发来的邮件要求他接手一个广告策划,而这个案子原来是由策划部某主任在做,今天某主任因为工作过分操劳身体不支住院了,要求他必须在明天早上之前不惜一切代价完成,将结果发到上司和boss的公司内部邮箱里。very拿到相关电子资料研究了一下,原来是某公司的情侣衫广告,very脑里浮现出在另外一家公司做运维工作的枕头mm的倩影,不觉心里一荡,觉得虽然今天要加班但应该问题不大,顺手回了一句“保证完成任务”便埋头苦干起来。弹指一挥间,下午5点,very接到一个重要电话,是very苦追很久的枕头mm打来的,未来的从未谋面的岳父、岳母邀请他在傍晚7点去吃个饭见个面。“7点”very转念一想,上司布置的任务还没完成啊!这怎生是好?今天必须要去枕头mm家(广州),去了再回家加班?但是今天又没带移动硬盘,在家里也无法访问公司,虽然自己的电脑上已经安装了vnc server,但因为公司有状态检测防火墙,只允许内网访问外网,而且只能访问21,22,25,80,110这几个端口,外网是无法主动连接内网的。very不禁仰天长叹“鱼与熊掌不可兼得啊”,very没辙的时候打电话给枕头mm诉苦,枕头mm听完,说我给你想个办法让你在家里连到公司继续加班,我在电邮里仔细给你说。
2、ssh -i soho_private_key -L 5900:localhost:5900 soho@fresh.egg
第一封电邮 写道
为节省本文篇幅,第一封枕头mm发的电邮省略n多字,大概内容如下:
2.1、状态检测防火墙简单的说就是比包过滤防火墙多了一个设施--状态表,当通信双方发起的第一个数据包通过防火墙时,防火墙使用包过滤功能将数据包与防火墙规则进行匹配,当匹配的规则中的动作定义为放行时,防火墙会在状态表中记录下该连接。随后双方的通信中,防火墙将使用状态检测功能,因为状态表中的记录匹配双方之后的通信,所以所有的合法连接和通信将顺利通过。
2.2、very公司的状态检测防火墙的规则只允许当通信双方的第一个数据包通过防火墙时,是从内网访问外网,所以首先very应该从内网向外部发起连接,待到在状态表中生成相应的记录后,再用某种方法从相同的连接访问进来。这种方法枕头mm恰好知道,就是利用OpenSSH的端口转发技术。
2.3、OpenSSH的端口转发技术的一个先决条件就是需要一个ssh server,在本文中假设为fresh.egg,使用FreeBSD7,并且有一个使用远程ssh key方式认证的帐户soho。大部分文档上说的端口转发是ssh -L port:host:hostport user@sshserver这种方法。在windows下可以使用流行的putty来实现,如图1。当执行图1配置的putty时,将在ssh client和ssh server之间建立一个隧道(隧道里面装载的是vnc通信)。在图1中的右边的Source port输入5900,这个表示在ssh client本机虚拟出一个之前未用的服务端口5900,就是隧道的入口;Destination输入localhost:5900表示隧道的出口在ssh server(fresh.egg)上绑定在loopback上的端口5900;下面的单选Local表示隧道的方向--从内向外--vnc client在内而vnc server在外。当在ssh client上用vnc客户端访问ip为127.0.0.1时,请求访问的数据将被putty转移进入隧道,最后数据到达ssh隧道出口处被sshd转发到ssh server的5900。这样,虽然防火墙禁止你访问外部的vnc server,通过OpenSSH您却可以。如果您使用OpenSSH客户端,和图1相对应的命令为:
% ssh -i soho_private_key -L 5900:localhost:5900 soho@fresh.egg
very看到这里心想:看了半天还是不大明白,关键是现在我要从家里访问公司的电脑啊,怎么好像方向不对啊?这时候接到枕头mm第二封电邮。
图1
3、ssh -i soho_private_key -R 5900:localhost:5900 soho@fresh.egg
第二封电邮写道
3.1、既然向外都能突破firewall了,当然也能在另外一个方向实现。如图2进行配置。图2右边的Source port输入5900,这个表示在ssh server(fresh.egg)虚拟出服务端口5900,就是隧道的入口;Destination输入localhost:5900表示隧道的出口在ssh client上的端口5900;下面的单选Remote表示隧道的方向--从外向内--vnc server在内而vnc client在外。选择上面的复选框Remote ports do the same表示在ssh server的端口5900绑定在所有接口而可以被外部主机直接访问。只要执行了这样设置的putty,就会在ssh client和ssh server之间建立一个隧道。如果您使用OpenSSH客户端,和图2相对应的命令为:
% ssh -g -i soho_private_key -R 5900:localhost:5900 soho@fresh.egg
3.2、您回到家里,使用vnc client设置访问地址为fresh.egg,那么您的桌面将瞬间呈现在你面前;p 另外在ssh server上要使sshd起的5900可以被外部主机直接访问,需要在ssh server上执行命令:
% sudo sed -i ".bak" 's/^#\(GatewayPorts \)no/\1yes/' /etc/ssh/sshd_config
% sudo /etc/rc.d/sshd reload
very看到这封邮件大悦,可转头一想:sshd起的5900可以被任意外部主机直接访问的话,可能有很大的安全风险吧?例如其他人有意无意的通过sshd起的5900访问到very公司的电脑,而putty正在运行中(ssh client保持运行是维持隧道连通性的关键),访问者可以轻松拿到private key,那ssh server的安全就成问题了。。。
图2
4、ssh -i soho_private_key -R 5900:localhost:5900 soho@fresh.egg和ssh -i soho_private_key -L 5900:localhost:5900 soho@fresh.egg
第三封电邮 写道
4.1、如果刚才您用了sudo sed -i ".bak" 's/^#\(GatewayPorts \)no/\1yes/' /etc/ssh/sshd_config这个命令,请立即在ssh server上执行:
% sudo mv /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
% sudo /etc/rc.d/sshd reload
4.2、在公司设置putty如图3。图3和图2的唯一区别:不选择上面的复选框Remote ports do the same。然后点Add按钮,最后执行putty。如果您使用OpenSSH客户端,和图3相对应的命令为:
% ssh -i soho_private_key -R 5900:localhost:5900 soho@fresh.egg
4.3、回到家里设置putty如图1。
4.4、使用vnc client设置访问地址为127.0.0.1。您将访问到公司的电脑。
“呕也”very想:看来这个方案消除我上面的疑虑了,但如果我的soho的key一不小心被别人拿到了,别人就会获得一个交互式shell,那fresh.egg是否会有安全风险?另外我怎么才能保持putty和ssh server之间连通性(不因为client长时间不操作而中断连接),very将疑虑告诉了枕头mm,很快收到了第四封邮件。
图3
5、其他设置
第四封电邮 写道
5.1、在ssh server上执行命令(假设soho只有一个key)
% sudo sed -i ".bak" 's/^\(.*\)/no-pty,command="echo forwarding" \1/' \
/home/soho/.ssh/authorized_keys
这个命令执行后,soho下次用该key登录ssh时,就不能得到一个交互式shell,并且非交互式执行命令将仅限于
"echo forwarding"。
5.2、开启ssh server的keepalive机制
% sudo sed -i ".bak" 's/^#\(ClientAliveInterval \)0/\130/' /etc/ssh/sshd_config
% sudo /etc/rc.d/sshd reload
5.3、在putty上开启ssh client的keepalive机制
在putty的Connection的右边窗体的Seconds between keepalives栏输入15
5.4、在putty上关闭交互式shell方式登录
在putty的Connection=》SSH的右边窗体中,选中Don't start a shell or command at all复选框
最后第四封电邮有个附件,用某种方法加密的soho_private_key。
6、后记
very按照邮件执行了上面4.2节 5.3节 5.4节的操作,下班,到广州和枕头mm胜利会师,饭桌上胸有成竹、谈笑风生,得到两位老人的肯定。回到家,执行了4.3节 5.3节 5.4节 4.4节的操作,连到公司的电脑,由于自感幸福指数大增,情侣衫广告的字里行间充满郎情妾意。。。第二天早上10点,very获悉他被任命为策划部主任。
注意:第4节和第5节中的操作相对本文中其他部分要安全一些,另外ssh public-key认证方式涉及的server和client的设置请参考其他资料。
参考资料:
man 1 ssh man 5 sshd_config FreeBSD使用手册 PuTTY User Manual 《OReilly SSH The Secure Shell The Definitive Guide 2nd》 使用 SSH 建立安全通信信道http://www.ibm.com/developerworks/cn/aix/library/au-tunnelingssh/index.html
最后感谢very和枕头mm对本文提供的技术支持。
|
相关推荐
7. **其他端口转发工具**:除了fpipe,还有许多其他的端口转发工具,如SSH的`-L`选项,OpenSSH的`sshuttle`,以及在Windows下的`PortProxy`等,它们各有特点和适用场景,可以根据具体需求选择合适的工具。...
5. **丰富的功能**:除了基本的远程登录,OpenSSH 还支持文件传输(scp/sftp)、端口转发、代理等功能,满足了各种复杂的网络环境需求。 6. **持续更新与维护**:OpenSSH 社区活跃,不断有新的特性加入,确保软件...
- `GatewayPorts`: 是否启用网关端口转发功能。 - `X11Forwarding`: 是否允许X11转发。 - `PrintMotd`: 是否打印消息(motd)到用户。 - `KeepAlive`: 保持连接的设置。 - `SyslogFacility`: 日志记录设施。 -...
它支持 SSH2 协议,提供了一个易于使用的图形化界面,可以让用户轻松地连接和管理远程 SSH 服务器。BvSshClient 支持密码和公钥身份验证,可以与 OpenSSH、OpenSSH for Windows 和 Dropbear 等常用的 SSH 服务器配合...
它支持 SSH2 协议,提供了一个易于使用的图形化界面,可以让用户轻松地连接和管理远程 SSH 服务器。BvSshClient 支持密码和公钥身份验证,可以与 OpenSSH、OpenSSH for Windows 和 Dropbear 等常用的 SSH 服务器配合...
rinetd,全称“remote internet services daemon”,是一款轻量级的端口转发工具,...然而,由于rinetd不具备高级特性如SSL/TLS支持,对于更复杂的需求,可能需要考虑使用更强大的端口转发工具,如OpenSSH或Proxifier。
OpenSSH还支持其他高级特性,如端口转发、X11转发和代理跳转,为远程管理提供了更多灵活性。 **RPM软件包管理** RPM软件包是Linux发行版,尤其是基于Red Hat的系统(如CentOS)的标准格式。RPM包含软件及其依赖关系...
端口转发是指在没有公网IP的远程训练服务器上配置端口转发,以便在个人电脑上使用VSCode远程开发和调试服务器上的c/c++代码。配置端口转发需要修改ssh配置文件,添加GatewayPorts yes和PasswordAuthentication yes,...
4. **端口转发**:SSH支持端口转发,可以将本地端口的流量转发到远程服务器,或者将远程服务器的端口转发到本地。这对于绕过防火墙限制,或者创建安全的隧道(如HTTPS到HTTP)非常有用。 5. **X11转发**:SSH还可以...
例如,SSH2比SSH1更安全,而OpenSSH是目前最广泛使用的实现。 10. **安全实践**:最佳实践包括定期更换密钥、限制SSH登录的用户和IP、使用防火墙限制SSH访问端口、启用日志记录以便审计等。 总之,SSH Secure File...
综上所述,SSH远程登录Linux是运维工作中不可或缺的一部分,熟练掌握其使用和配置,能大大提高工作效率并保障系统的安全性。了解并应用上述知识点,你就能轻松地在不同环境下远程管理和维护Linux服务器了。
端口转发能让你通过SSH安全地访问远程网络上的服务,而代理跳转则可以在多级SSH连接中保持安全性。会话复用通过控制通道减少重复认证,提高效率。 为了提高SSH的安全性,你应该定期更新SSH软件,限制SSH登录方式...
5. **端口转发**:SSH的端口转发功能可以将本地端口的流量转发到远程服务器,实现对内网资源的访问或保护本地服务的安全。 6. **X11转发**:允许在远程服务器上运行图形应用程序,其显示结果会在本地机器上呈现。 7....
2. **易用性**:通过图形化界面,用户可以轻松配置SSH服务,包括设置用户权限、密钥对验证、端口转发等。 3. **多用户管理**:COPSSH允许创建多个用户账号,每个账号可分配不同的访问权限,便于管理不同用户的远程...
- **通道管理**:提供本地到远程的端口转发,以及远程到远程的端口转发,增强安全性。 - **文件传输**:通过SFTP(SSH File Transfer Protocol)协议进行文件和目录的上传、下载、删除等操作。 - **命令执行**:...
3. **隧道创建**:SSH可以创建端口转发,将本地端口的数据转发到远程服务器,如`ssh -L local_port:remote_host:remote_port user@server`。 对于描述中的"已完成user、main、cart部分的结构优化,还差order部分...
6. **扩展性**:一个好的SSH包装架构应该允许扩展,比如添加新的功能,如SFTP文件传输、端口转发或代理跳转。 7. **安全最佳实践**:包装架构应遵循SSH的安全最佳实践,比如限制可使用的加密算法,定期更新密钥,...
3. **通道管理**:开启和关闭通道,支持转发本地或远程端口,实现安全的TCP隧道。 4. **SFTP支持**:提供SFTP(SSH文件传输协议)子系统,安全地在客户端和服务器之间传输文件。 5. **加密算法**:支持多种加密算法...
### CentOS 6.4 SSH与Telnet服务器配置详解 #### 一、SSH服务器概述与功能 **SSH**(Secure Shell)是...通过本文所述的方法和步骤,用户可以轻松地在CentOS 6.4环境中搭建并使用SSH服务器,以满足实际工作中的需求。
- 防火墙规则:ipfw、pf防火墙的配置,以及端口转发和NAT。 - 安全审计:syslogd、auditd日志记录和分析。 7. **性能监控与调试** - 系统性能监控:vmstat、iostat、top等工具,分析CPU、内存、磁盘和网络性能。...