[GFW]我的SSH我做主——秘密握手
恰好今天看到所用的ssh代理服务供应商开始在server上部署和测试Obfuscation功能,以增强抵御某怪物干扰用户正常使用ssh代理的能力。
1. 原理
以下是ISP提供的说明:
那何为Obfuscation?
查了下Wikipedia:
In cryptography, obfuscation refers to encoding the input data before it is sent to a hash function or other encryption scheme. This technique helps to make brute force attacks unfeasible, as it is difficult to determine the correct cleartext. 从密码学角度上讲,Obfuscation(混淆)指的是在将所输入的数据发送至哈希公式或者其他加密公式 前对其进行编码,该技术使得暴利破解难以见效,因为要确认正确的明文非常困难。
概念蛮绕口的,然后我那烂翻译也……不过意思还是很清楚的,实际上就是将handshake易容,这样怪物就看不出来数据传输用的ssh协议了,然后ssh代理满血归来。
2. 解决方案
牛人Bruce Leidl为openssh写了个很给力的补丁。它可以在创建加密SSH连接时将握手信号(handshake)进行混淆处理。这样一个加密的握手信号就可以骗过怪物所用的深度包检测设备,顺利完成使命,进而保证了网络的安全性与稳定性。
(1)准备
你需要有一台位于怪物控制范围的Linux服务器,然后在服务器上配置好Obfuscated-openssh补丁。
Obfuscated-openssh点此下载,然后执行下述命令编译安装:
./configure make make install
建议将其与常规的SSH守护进程分开安装。
(2)配置
作为SSH代理的话,没有必要让用户通过ssh登陆服务器,因此需要将此部分权限给限制掉,让用户只能使用SOCKS代理。要做到这点,需要创建专用的用户账号。
以下即为添加一个名为“golengssh”而密码为“goleng.com”用户的命令,该用户无法远程登入服务器。
sudo useradd -m -s /usr/sbin/nologin -p goleng.com golengssh
小贴士:useradd命令用法参见此文。
下面为大家提供一个samplesshd_config文件共参考使用,使用此文件只允许用户“golengssh”连接服务器。
Linux下安装ssh客户端需要激活sshd,参考此文。
Linux下连接服务器的命令是:
ssh -Nfx -D 7070 -z yuanjin golengssh@goleng.com -p 443
这里的“yuanjin”就是在配置文件中的ObfuscateKeyword,ssh的服务器端口为443,最后设置浏览器的SOCKS代理至本地的7070端口,可参考此文。
关于SSH命令转发更多的内容可以参考此文,上述命令的例子感谢ISP客服提供的参考。
SSHD_config # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin # This ssh daemon is meant to be run separately from the regular # non-obfuscated sshd. A single user account is enough for this purpose. # You should make sure this user does not have shell access, by changing # the shell to /usr/sbin/nologin. This example adds a new user "golengssh" with # password "goleng.com". # sudo useradd -m -s /usr/sbin/nologin -p goleng.com golengssh # AllowUsers golengssh # To set up a SOCKS proxy, execute an obfuscated-openssh client like so: # ssh -Nfx -D 7070 -z yuanjin golengssh@goleng.com -p 443 # The client will now be running a SOCKS proxy on localhost:7070 and forwarding # all traffic to the ssh server port 443. User will need to configure web browsers and # such to use the SOCKS proxy. # Protocol 2 ObfuscatedPort 443 ObfuscateKeyword yuanjin #Port 22 SyslogFacility AUTH LogLevel ERROR LoginGraceTime 2m PermitRootLogin no StrictModes yes MaxAuthTries 6 MaxSessions 10 PermitEmptyPasswords no AllowAgentForwarding no AllowTcpForwarding yes PrintLastLog no TCPKeepAlive yes ClientAliveInterval 60 ClientAliveCountMax 3 PidFile /var/run/obf_sshd.pid #MaxStartups 10 #PermitTunnel no ChrootDirectory /home/golengssh # no default banner path #Banner none
参考文章:
[1]Secret Handshake for Iran http://nihilex.com/obfuscated-openssh
[2]Obfuscation http://en.wikipedia.org/wiki/Obfuscation
来源:http://www.goleng.com/?p=665
此类技术用于翻墙,据我知道最早是赛风3在用,我在 http://igfw.net/archives/7152 一文中有过详述,有兴趣的看看。
其实我最近一直在考虑到底如何能做到安全的群组聊天,大概少于10个人的规模。gtalk和聊天室加好友的办法貌似也不那么好用,聊天室不能随便建立不提,本身也没有加密。IRC聊天室除了搭建问题外加密还是个问题……本来想借用匿名者的IRC的,不过之前允许自建房间的一个挂掉了,现在彻底没辙了\(^o^)/