📄 vpn.txt
字号:
drwx------ 2 slave slave 1024 Apr 7 23:49 ./drwx------ 4 slave slave 1024 Apr 24 14:05 ../-rwx------ 1 slave slave 328 Apr 7 03:04 authorized_keys-rw------- 1 slave slave 660 Apr 14 15:23 known_hosts-rw------- 1 slave slave 512 Apr 21 10:03 random_seed 其中,第一行是 ~slave/.ssh,第二行是 ~slave。 4.8 加强 ssh 在 bastion 主机上的安全性。 请按照我在 sshd_conf 上的设定: PermitRootLogin noIgnoreRhosts yesStrictModes yesQuietMode noFascistLogging yesKeepAlive yesRhostsAuthentication noRhostsRSAAuthentication noRSAAuthentication yesPasswordAuthentication noPermitEmptyPasswords no 密码认证(PasswordAuthentication)被关闭了,所以,你只有使用授权过的 key ,才能够 完成登入的动作。(当然,你也已经关闭了,telnet 与 'r' 命令)。 4.9 允许 ppp 的执行,和这两个帐户的路由。 当你的 master 帐户是 root 时(以我的例子而言),你不必做任何事情。至於 slave 帐户,则会在你的 /etc/sudoers 的档案中出现一行: Cmnd_Alias VPN=/usr/sbin/pppd,/usr/local/vpn/routeslave ALL=NOPASSWD: VPN 正如你所看到的,我在次防火墙主机上,使用了一些命令稿(scripts),来设定 ppp 和路由表。 4.10 撰写命令稿程式 在主防火墙主机上,我使用了一个成熟的启始命令稿:#! /bin/sh# 程式架构 这个档案是个建立在 /etc/init.d/ 目录下的命令稿实例。# 你应该在 /etc/init.d 目录下使用这个命令稿。## 作者 Miquel van Smoorenburg <miquels@cistron.nl>.# Debian GNU/Linux 修订版作者# Ian Murdock <imurdock@gnu.ai.mit.edu>.## 版本: @(#)skeleton 1.6 11-Nov-1996 miquels@cistron.nl#PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11/:PPPAPP=/home/slave/pppROUTEAPP=/home/slave/routePPPD=/usr/sbin/pppdNAME=VPNREDIR=/usr/local/bin/pty-redirSSH=/usr/bin/sshMYPPPIP=192.168.0.1TARGETIP=192.168.0.2TARGETNET=193.6.37.0MYNET=193.6.35.0SLAVEWALL=polanski-outSLAVEACC=slavetest -f $PPPD || exit 0set -ecase "$1" in start) echo setting up vpn $REDIR $SSH -o 'Batchmode yes' -t -l $SLAVEACC $SLAVEWALL sudo $PPPAPP>/tmp/device TTYNAME=`cat /tmp/device`echo tty is $TTYNAME sleep 10s if [ ! -z $TTYNAME ] then $PPPD $TTYNAME ${MYPPPIP}:${TARGETIP} else echo FAILED! logger "vpn setup failed" fi sleep 5s route add -net $TARGETNET gw $TARGETIP $SSH -o 'Batchmode yes' -l $SLAVEACC $SLAVEWALL sudo $ROUTEAPP ;; stop) ps -ax | grep "ssh -t -l $SLAVEACC " | grep -v grep | awk '{print $1}'| xargs kill ;; *) # echo "Usage: /etc/init.d/$NAME {start|stop|reload}" echo "Usage: /etc/init.d/$NAME {start|stop}" exit 1 ;;esacexit 0 slave 帐户可以使用命令稿来设定路由 (/usr/local/vpn/route):#!/bin/bash/sbin/route add -net 193.6.35.0 gw 192.168.0.1 而其 .ppprc 的内容,如下:passive5. 让我们检视执行的结果: master 会登入到 slave 帐户里、启动 pppd、以及,将所有的资料重导至本机的 pty( 虚拟终端机)。整个执行流程如下: * 配置一个新的 pty * 透过 ssh 登入 slave 帐户 * 在 slave 帐户中执行 pppd * master 在本机的 pty 执行 pppd * 并且在用户端设定路由表。 此处我们考虑到了时序的问题(不是太严格的要求),这就是为什麽我们会使用 到 'sleep 10s' 这个叙述的原因。 6. 著手执行。6.1 登入 现在,你应该已经测试过 ssh 是否能够正常地工作。如果,slave 拒绝你登入, 请阅读 记录档。也许是档案使用权限或 sshd ,在设定上的问题。 6.2 启动 ppp 登入到 slave 帐户,并执行:sudo /usr/sbin/pppd passive 此时,如果工作正常你应该会看到一些乱码。假设,没有出现乱码,不是 sudo 就是 pppd 有问题。请参考,记录档、/etc/ppp/options 、和 .ppprc ,等档案 ,以便找出是那个命令出了问题。问题排除後,将 'passive' 这个字写到 .ppprc 里,然 後再试一次。以压下 enter、'~'、和 '^Z'等按键的方式,清除 萤幕上的乱码,继续 工作。现在,你应该会看到 master 的“输入提示符 号(prompt)”,然後执行 kill %1 。如果你想知道更多有关“逸出字元(escape character)”的说明,请参阅“调整(tuning)” 那一节。 6.3 一次完成两个动作 当然,你也可以这麽做 ssh -l slave polanski sudo /usr/sbin/pppd 如果工作正常,它就会当著你的面,传送一些看似乱码的资料。 6.4 Pty 的重导功能 这次,我们试著重导上面的动作:/usr/local/bin/pty-redir /usr/bin/ssh -l slave polanski sudo /usr/sbin/pppd 好长的句子,不是吗?你应该使用 ssh 执行档的完全路径名称,为了安全的理由 ,pty-redir 程式只允许你使用这种方式。现在,你会透过这个程式取得一个装 置名称。假设,你取得的 是 /dev/ttyp0 。你可以使用 ps 命令来检视目前的状 况。请找寻 'p0' 这个装 置的相关叙述。 6.5 这个装置上面,会有些什麽东西? 试著执行/usr/sbin/pppd /dev/ttyp0 local 192.168.0.1:192.168.0.2 来建立连线。然後,检视 ifconfig 命令的输出结果,看是否已经建立了这个装 置,然後 ,使用 ping 来检查你的虚拟网路。 6.6 设定路由 除了设定主防火墙主机的路由,次防火墙主机也要设定。现在,你应该能够从公 司的一个 内部网路上的主机,ping 到其它内部网路上的主机。接著,设定额外 的防火墙规则。现 在,你已经拥有了 VPN 的环境,你可以设定公司两个内部网 路之间的连接规则。 7. 调整7.1 设定的调整 正如我所说的,这份文件只是我个人设定 VPN 的备忘录而已。设定中有部分的内 容,我还 未测试过。等到我测试过後,会给它们正确的定位,或有任何人告诉我 “它是如何工作的” 。有个最重要的事情大家必须铭记在心,ppp 网路连线尚未 使用 8-bit。我自己也觉得 ssh 或 pty 的设定,一定还有要加强的地方。在 ssh 的设定中,使用了“颚化符号(tilde)” (~) 字元做为逸出字元。它可以停 止或减缓两端之间的通讯,当任何的“新行符号- 颚化符号(newline-tilde)”逸 出顺序的出现,会使得 ssh 跳到输入提示符号的模式。ssh 的文件上说: < 在 大部分的系统上,若设定不使用逸出字元,则就算是你使用了 tty ,也会造成通 讯对话的透通化。> 这个功能相对於 ssh 的选项标记是 '-e' ,你也可以在设定 档中设定它。 7.2 频宽与安全谁重要 不论建置任何的虚拟网路,都会浪费掉实际资源。VPN 会吃掉频宽和计算的资源 。你的目标 应该是如何取得双赢的局面。你可以使用 '-C' 开关或 'CompressionLevel' 选项,来调整 它。你也以尝试使用另一种加密法,但是, 我并不建议这麽做。也请注意,如果你使用越高 的压缩等级,你传送资料的来回 时间就越长。欢迎提供任何相关的测试报告。 8. 分析易受攻击的弱点 我试著在此处说明一下,这个特别的设定和 VPNs 一般有那些易受攻击的弱点。 热诚地欢迎 各位发表任何意见。 * sudo 程式:我承认,我过度地使用了 sudo。我深信目前它仍然比使用 setuid bits 还安全。Linux 上仍然没有好的存取控制机制,是个不争的事 实。只有等到相容 POSIX.6 标准的核心正式发行了< http://www.xarius.demon.co.uk/software/posix6/>。更 糟糕的是,我居 然透过 sudo 来呼叫执行 shell 的命令稿程式。实在糟糕透了。你有任何 建议麽? * pppd 程式:它也会使用 suid root (译注) 的执行方式。你可以透过使用者 的 .ppprc 来设定它。留心,它可能会有“缓冲区超限运转(buffer overrun)”的状况发生。底限是 :尽可能地保护你的 slave 帐户的安全性 。 * ssh 程式:当心,ssh 在 1.2.20 以前的版本有安全的漏洞。更糟糕的是, 我们的 设定是,当我们对 master 帐户的安全性做出了让步,相对地,也弃 守了 slave 帐户的安 全底限,而且,我们使用了两个透过 sudo 启动的程 式,也大开了攻击之门。那是因为,为 了能够自动设定 VPN,我们选择让 master 使用没有密码的“私人钥匙(secret key)”。 * firewall 程式: bastion 主机上的防火墙,若规则设定的不恰当,就等於 是大开公 司内部网路的方便之门。我建议大家使用 IP“伪 装(Masquerading)”的技术(此时,就算是 路由设定不正确,所造成的影响 也是微不足道的),以及,在 VPN 的界面上做严格的控制 。 译注: suid root 是指任何执行该程式的人,在执行的当时会取得 root 的权限 。其中,suid( 设定使用者识别代码)是指设定档案属性的第 11 个位元,让执 行该档案的人,成为档案的 拥有者。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -