如何设置OpenVPN以便我可以安全地从不安全的热点使用互联网?

目标:当我的笔记本连接到开放的热点/接入点时,我希望能够通过家用PC安全地使用互联网。

我知道我可以使用SSH隧道/ SOCKS代理,但我不想乱用应用程序(如果可能的话,让它们使用它)。 我想我需要的是OpenVPN设置,所以我正在寻找有关如何:

  1. 安装并设置OpenVPN服务器
  2. 设置OpenVPN客户端(NetworkManager)

应该使用的Ubuntu版本是10.10和11.04。

几个月前我有确切的问题,但另外,如果可能的话,我希望有一个IPv6连接。 您可能对我在Serverfault上的问题感兴趣:

  • 如何配置OpenVPN以通过一个NIC访问Internet?
  • 如何使用分接设备使用IPv4和IPv6设置OpenVPN?

我的服务器上只有一个NIC(“网络接口”)供使用。 在我的设置中,NetworkManager是不够的,因为我需要运行自定义脚本来支持IPv6。 但是为了简单起见,我将在此处使用NetworkManager并省略IPv6支持。

首先,只需要对身份validation方法做出决定。 我将使用更安全的证书方法,其工作方式类似于SSL:在握手期间,选择将用于会话的公共秘密。 其他方法是共享密钥; 用户名和密码。

服务器

1.准备

首先,安装openvpn服务器。 这和sudo apt-get install openvpn一样简单。 困难的部分是配置它。 配置存在于/etc/openvpn

2.配置身份validation

服务器需要证书来识别自身及其客户端。 从CA(​​通用授权机构)检索这些证书。 证书和相关私钥的创建可以在任何机器上完成,不必在服务器上完成。 如果你真的很偏执,你应该在没有连接到网络的机器上进行,并使用记忆棒来传输证书。

为服务器创建CA和证书

除非您的CA的私钥受到损害,否则此步骤必须完成一次。 在这种情况下,可以创建有效的证书,这些证书将被服务器接受,从而导致安全漏洞。

官方文档建议在/etc/openvpn 。 我不是以root身份运行所有内容的忠实粉丝,因此我将把它放在不同的目录中。

  1. 通过运行以下命令创建管理目录并复制其中的文件:

     mkdir ~/openvpn-admin cd ~/openvpn-admin cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/ ./easy-rsa cd easy-rsa 
  2. 根据需要编辑vars默认值,例如设置KEY_SIZE=2048因为您是偏执狂。
  3. 通过运行以下命令加载变量并创建密钥目录:

     . vars 
  4. 如果你得到一个错误, No ... openssl.cnf file could be found Further invocations will fail ,然后运行ln -s openssl-1.0.0.cnf openssl.cnf . vars 再次. vars

  5. 如果这是您第一次使用此CA,请准备密钥环境。 如果要维护以前创建的CA,请不要运行此命令。 这样做将要求您部署新的ca.crt

     ./clean-all 
  6. 通过执行./build-ca创建CA. 您可以填写所需的任何详细信息,但请注意,当客户端连接到服务器时,此信息将显示在日志文件中。 这将在子文件夹keys创建文件ca.keyca.crt在所有情况下都保持ca.key文件的机密性。 如果不这样做,任何拥有密钥的人都可以连接到您的服务器。
  7. 如果您的先前证书已丢失或已过期,则需要先使用./revoke-full server撤消旧./revoke-full server 。 否则会出现数据库错误。
  8. 通过运行以下命令为服务器创建证书:

     ./build-key-server server 

    当要求输入密码时,请将其保留为空,除非您每次启动服务器时都愿意输入密码(不推荐)。 签署证书并提交时确认。 目录keys中将出现两个新文件: server.keyserver.crt

DH和使用准备tls-auth

使用以下方法生成Diffie-Hellman参数:

 ./build-dh 

根据强化提示 ,使用tls-auth 。 为此,使用以下方法生成共享密钥:

 openvpn --genkey --secret ta.key 

生成的文件( ta.key )也必须分发给客户端,但不应将其公开。

为客户创建证书

对于每个客户,应重复这些步骤:

  1. 输入您在其中创建CA和服务器证书的目录:

     cd ~/openvpn-admin/easy-rsa 
  2. 如果您已经跳过了CA创建步骤,那么您需要先加载变量:

     . vars 
  3. 如果您要创建新证书,因为旧证书丢失或过期 ,您需要先使用./revoke-full you撤销旧./revoke-full you 。 否则会出现数据库错误。
  4. 创建客户端证书you.key及其相应的证书you.crt

     ./build-key you 

    CommonName应该是唯一的。 如果您正在使用KDE,请将密码保留为空,因为从10.10开始不支持KDE。 与生成服务器证书一样,确认签署证书并提交更改。

3.设置OpenVPN服务

默认情况下,OpenVPN在接受连接时以root身份运行。 如果可以从邪恶的互联网上获得服务,那不是一个好主意。

  1. 为openVPN创建一个专用用户,比如openvpn

     sudo useradd openvpn 
  2. 将文件server.keyserver.crtca.crtdh1024.pem (如果已更改密钥大小, dh2048.pem )从keys目录复制到/etc/openvpn 。 400(对所有者只读)的许可是好的。

     sudo cp ~/openvpn-admin/easy-rsa/keys/{server.key,server.crt,ca.crt,dh*.pem} /etc/openvpn sudo chmod 400 /etc/openvpn/{server.key,server.crt,ca.crt} 
  3. 复制文件ta.key

     sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn sudo chmod 400 /etc/openvpn/ta.key 
  4. 创建文件/etc/openvpn/server.conf并将下一行放入其中:

     proto udp dev tap ca ca.crt cert server.crt key server.key dh dh1024.pem server 10.8.0.0 255.255.255.0 push "redirect-gateway def1" ifconfig-pool-persist ipp.txt keepalive 10 120 tls-auth ta.key 0 # Compress data to save bandwidth comp-lzo user openvpn group openvpn persist-key persist-tun # Logs are useful for debugging log-append openvpn-log verb 3 mute 10 
  5. 在它上面设置适当的权限,它不需要保密,但我不希望泄漏配置细节,所以:

     sudo chmod 640 /etc/openvpn/server.conf 

4.完成服务器

如果您已在服务器上创建了证书,则最好对其进行加密或将其移出服务器。 无论如何,不​​要丢失ca.keyserver.key 。 在第一种情况下,其他人将能够连接到您的服务器。 在后者中, MITM是可能的。

客户

除服务器IP地址外,服务器管理员还应移交以下文件:

  • ca.crt :用于validation证书
  • server.crt :用于validation服务器并与之通信
  • ta.key :强化安全性
  • you.crt :用服务器来表明自己
  • you.key :就像你的密码一样,文件权限应该是400(对于所有者是只读的)

1.安装

安装OpenVPN和NetworkManager插件(适用于KDE和Gnome):

 sudo apt-get install openvpn network-manager-openvpn 

network-manager-openvpn位于Universe存储库中。

2.配置

在控制面板中,使用以下详细信息:

  • 网关:服务器IP地址
  • 键入:“证书(TLS)”(Gnome)或“X.509证书”(KDE)
  • CA证书: ca.crt路径
  • 用户证书: you.crt路径
  • 私钥:通往you.key路径

高级

  • 网关端口:自动(1194)(不需要更改)
  • 使用LZO数据压缩:启用
  • 使用TCP连接:禁用
  • 使用TAP设备:已启用
  • 密码:默认
  • HMAC身份validation:默认
  • 使用TLS身份validation:已启用
    指定ta.key的密钥文件路径,并将“密钥方向”设置为1
  • todo – 检查出来 )服务器推送默认网关,以便所有流量通过VPN连接。 我最后一次检查时,network-manager-openvpn插件没有这样做。

如果您无法使NetworkManager工作或不想使用它,请将文件( ca.crt ,…)放在/etc/openvpn并创建文件/etc/openvpn/client.conf文件:

 client dev tap proto udp # replace 1.2.3.4 by your server IP remote 1.2.3.4 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert you.crt key you.key ns-cert-type server tls-auth ta.key 1 comp-lzo user nobody group nogroup verb 3 mute 20 

如果您不想在启动时启用此VPN,请编辑/etc/default/openvpn并通过删除#取消注释下一行:

 #AUTOSTART="none" 

要启动此连接,请运行:

 sudo /etc/init.d/openvpn start client 

如果您的配置文件未命名为client.conf则应重命名client 。 示例:如果已将配置文件命名为safe.conf ,则需要运行sudo /etc/init.d/openvpn start safe

要停止OpenVPN,您必须运行:

 sudo /etc/init.d/openvpn stop 

你实际上并不需要摆弄任何应用程序。 这就像“VPN一样”。

  1. 首先安装tsocks包(临时袜子):

     sudo apt-get install tsocks 
  2. 然后编辑/etc/tsocks.conf并输入

     server = 127.0.0.1 server_port = 3333 
  3. 现在,打开一个终端并输入(这会连接你):

     ssh -ND 3333 ssh.url.to.your.home.machine 
  4. 运行(通过另一个终端或ALT-F2):

     tsocks firefox 

现在,Firefox将所有通信传输到SSH创建的计算机上的SOCKS服务器。 这进一步通过隧道传输到您的家庭机器,在那里它进入网络。 您的家庭计算机上只需要一台SSH服务器。 在第一次之后,只需重复步骤3和4。

它就像一个魅力! 唉,铬不喜欢tsocks,但嘿,Firefox的作​​用。

SSH隧道解决方案比您想象的更容易。 像gSTM这样的程序将使用GUI为您启动/停止隧道。 然后只需打开网络代理并将其从直接互联网连接更改为手动代理配置,点击“应用系统范围”,所有应用程序都应该将数据发送到隧道中 – 无需单独操作每个应用程序。