巧用OpenSSH穿透你的防火墙

上一篇 / 下一篇  2008-05-10 17:42:35 / 个人分类:Linux

即使系统管理员在仔细地过滤了除22号端口(SSH)以外的所有通信,攻击者仍有可以通过渗透防火墙,获得计算机的访问权。本文将展示远程LinuxWindows用户如何访问防火墙后的Samba、邮件和Web服务器。实际上,本文展示了无需对防火墙投资的情况下,如何将openSSH和PuTTY用作一个简单的VPN方案。本文并不是要建议你关闭22号端口,这些措施仅对服务器上的合法账户有效。不过,请您继续读下去,你会因为不用找到防火墙上额外的漏洞而执行的操作而感到惊奇,而且找到更多的漏洞并非一个好主意。先看图:

巧用OpenSSH穿透你的防火墙

  OpenSSH 和 Linux

  从Linux笔记本电脑(我们假定其IP地址为192.168.1.106)上 ,我们就可以直接访问防火墙后的资源,包括Samba 服务器、 Web 服务器,甚至由防火墙对外锁定的邮件服务器。防火墙仅允许通过22号端口对SSH服务器的访问,不过笔记本电脑仍然可以访问其它的服务器:

   ##LinuxLaptop.ssh/config##
  Hostwork
  HostName66.35.250.203
  Usersporkey
  LocalForward20000192.168.0.66:80
  LocalForward22000192.168.0.66:22
  LocalForward22139192.168.0.8:139
  LocalForward22110192.168.0.5:110
  Hosthttp
  HostNamelocalhost
  Userdonkey
  Port22000

  这个文件必须恰当地设置其权利:

  $ chmod 600 ~/.ssh/config

  可以看一下上面的文件。注意到条目“LocalForward 22000 192.168.0.66:22”,并将其与网络图表相对比。到SSH服务器的连接是通过从Linux笔记本电脑上运行下面的命令实现的:

  $ ssh -l sporkey 66.35.250.203

  小提示:上面的命令可以被缩写,因为用户名“sporkey”和“主机名”已经在配置文件中指定了。因此,你可用下面显示的“SSH work”:

  $ ssh work

  在完成这个连接之后,就有可能直接访问HTTP服务器,假定账户“donkey”可以访问这个服务器。下面的命令是在Linux笔记本电脑 (192.168.1.106)上执行的。是的,那是一个处于新窗口中的Linux笔记本电脑。此外,这是在IP地址为192.168.1.106的主机中的一个新的会话中执行的。因此,请注意这儿的Linux笔记本电脑可以直接访问192.168.0.66。请注意,这儿的SSH会话起始于Linux笔记本电脑。

  $ ssh -l donkey localhost -p 22000

  因为配置文件将“HTTP”映射到localhost 端口2200上,所以上面的命令可以简写如下:

  $ ssh http

  不过,别急。有一个更好的方法。其实,我们不用创建两个终端会话,一个用于ssh work,另外一个用于ssh http,我们为什么不能将其用在一个命令中呢:

  $ ssh -N -f -q work; ssh http

  上面的命令将建立连接,从所需的端口转发到其它的服务器。“-N”表示“不要执行远程命令”,而“-f”要求ssh转到后台,“-q”是禁止所有的警告和诊断信息。那么这对你来说是不是还太繁琐?那就创建一个别名(alias)吧:

  alias http=‘ssh -N -f -q work; ssh http’,并将其放置到~.bashrc文件中,这样就可以使它尽可能地简短,因为在命令行键入http将使你达到HTTP服务器。

  要将文件复制到这个服务器,就要使用下面的命令(注意:scp之后的大写P)。如果你在.ssh目录中,你就会看到一个授权的 authorized_keys2或者是一个授权的authorized_keys,你可能想要将其追加到目标服务器的类似文件上。这些文件仅仅作为一个示例而列示。可以复制任何文件,不过如果你将这些文件复制到远程服务器上,并将内容追加到远程服务器的authorized_key*文件,那么在下次你建立连接时,就不会被提示要求口令。

 $ scp -P 22000 authorized_keys* donkey@localhost:.

  不过,如果你将全部内容都放在配置文件中,那么你可以将上面的命令缩写为:

  $ scp authorized_keys* http:.

  要启用上面所提到的基于密钥的访问,你仍然需要将密钥文件追加到‘http’服务器上的~/.ssh中。这可以通过运行:

  ssh http 'for a in authorized_keys*; do cat $a >> ssh/$a; rm $a; done'

  来实现,上面的命令还会删除‘http’服务器上目前无用的密钥文件。

  下面的命令,是从Linux笔记本上运行的,它会从远程服务器(192.168.0.66)上下载主页(index page):

  $ wget http://localhost:20000/

  RemoteForward的威力

  假设Linux笔记本电脑正运行着一个Web服务器(对于公司的人们来说,在笔记本电脑(192.168.1.106)上查看Web服务器是可能的吗?),那么当他们将这台电脑连接到正常的公司HTTP服务器(192.168.0.66)时又如何呢?你可以想一下,因为我们所暗示的是一台没有直接连接到HTTP服务器的笔记本电脑,它将要取而代之成为公司的Web服务器!是的,这就是我们将要展示的。虽然,并没有完全取代公司的Web服务器,此服务器运行在IP地址为192.168.0.66服务器的80号端口上,我们将在端口20080上增加一个额外的Web服务器。如果你决心要取代公司的Web 服务器,就需要以root身份执行类似的步骤,因为仅有root拥有能力取得特权端口。让我们先从这个例子开始,然后你就可以知道如何在80端口上执行此操作了。为了执行这个的操作,公司Web服务器上的/etc/ssh/sshd_config必须将变量“GatewayPorts”设置为“yes”, 否则只有登录到HTTP服务器的用户才能看到笔记本电脑上的网页。而我们是要公司的每一个人都能直接访问这个附加的端口(20080端口):

 GatewayPorts yes

  在作了此改变之后,你需要重新启动SSH进程:

  $ /etc/init.d/sshd restart

  在Linux笔记本电脑的~/.ssh/config中,增加下面的条目:

  RemoteForward 20080 localhost:80

  完整的~/.ssh/config列示如下:

   ##UpdatedLinuxLaptop.ssh/config##
  Hostwork
  HostName66.35.250.203
  Usersporkey
  LocalForward20000192.168.0.66:80
  LocalForward22000192.168.0.66:22
  LocalForward22139192.168.0.8:139
  LocalForward22110192.168.0.5:110
  Hosthttp
  HostNamelocalhost
  Userdonkey
  Port22000
  RemoteForward20080localhost:80

  如果你从192.168.0.66(即远程Web服务器)执行“netstat –l” 命令,你会看到如下的内容:

  tcp0 0 *:20080 *:* LISTEN

  这也就意味着公司的任何人都可以在端口20080上查看这个Web页(http://192.168.0.66:20080)。如果你想在80端口(即默认的HTTP端口)上实现类似功能,所连接的用户需要拥有root特权。

  如果你没有改变/etc/ssh/sshd_config文件,网关功能就会被禁用,因为GatewayPorts的默认设置是“no”。而执行一次netstat –l(注意,这里是小写的L,并不是数字1),将会返回下面的内容:

  tcp0 0 ::1:20080 *:* LISTEN

  有了上面的限制,就只有计算机(IP地址为192.168.0.66)上的用户能够在计算机192.168.1.106通过端口20080看到网页。

  附加信息:如果你想参考有关生成SSH密钥对、保障远程root访问SSH服务器的安全、通过SSH隧道装载samba等方面的资料,可以访问这个网址参考其中的一些技巧。其中的技巧12,13和138列示在这篇文章的末尾。此外,如果你是一位系统管理员,可能需要注意技巧14(保存每年的日志)和技巧 26,这两个技巧会向你展示如何终止一个用户及其正运行的进程。此外,技巧10、11、15、24、47、52、89、150等都有助于提升系统的安全性


TAG: Linux

 

评分:0

我来说两句

Open Toolbar