安装obfuscated反制gfw对ssh连接的干扰

原文:http://briteming.blogspot.com/2012/06/obfuscatedgfwssh.html

看到所用的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协议了.

2. 解决方案
牛人Bruce Leidl为openssh写了个很给力的补丁。它可以在创建加密SSH连接时将握手信号(handshake)进行混淆处理。这样一个加密的握手信号就可以骗过怪物所用的深度包检测设备,顺利完成使命,进而保证了网络的安全性与稳定性。
(1)准备
你需要有一台位于怪物控制范围的Linux服务器,然后在服务器上配置好Obfuscated-openssh补丁。
Obfuscated-openssh点此下载: http://socks.nihilex.com/brl-obfuscated-openssh-7288432890c63dc228afe6c61e6343b72ef30962.tar.gz,然后执行下述命令编译安装:

./configure
make
make install

建议将其与常规的SSH守护进程分开安装。

(2)配置
作为SSH代理的话,没有必要让用户通过ssh登陆服务器,因此需要将此部分权限给限制掉,让用户只能使用SOCKS代理。要做到这点,需要创建专用的用户账号。

以下即为添加一个名为“golengssh"用户的命令,该用户无法远程登入服务器:
useradd -s /usr/sbin/nologin golengssh


下面为大家提供一个sshd_config文件供参考使用,使用此配置文件后,只允许用户“golengssh”连接服务器。

Linux桌面系统下,连接服务器的命令是:

ssh -Nfx -D 7070 -z yuanjin golengssh@ur-host.com -p 443

这里的“yuanjin”就是在配置文件中的ObfuscateKeyword,ssh的服务器端口为443,最后设置浏览器的SOCKS代理为127.0.0.1:7070

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. 
# sudo useradd -s /usr/sbin/nologin golengssh
#
AllowUsers golengssh

# To set up a SOCKS proxy, execute an obfuscated-openssh client like so:
# 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
发表评论