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

hto*_*que 31 security network-manager vpn networking openvpn

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

知道,我可以使用SSH隧道/ SOCKS代理,但我不想摆弄应用(使它们使用它,如果甚至有可能)。我想我需要的是 OpenVPN 设置,因此我正在寻找有关如何执行以下操作的详细指南:

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

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

Lek*_*eyn 40

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

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

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

服务器

1. 准备

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

2. 配置认证

服务器需要证书来识别它自己和它的客户端。这些证书是从 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. vars根据需要编辑默认值,例如设置,KEY_SIZE=2048因为您是偏执狂。
  3. 通过运行以下命令加载变量并创建密钥目录:

    . vars
    
    Run Code Online (Sandbox Code Playgroud)
  4. 如果出现错误No ... openssl.cnf file could be found Further invocations will fail,请运行ln -s openssl-1.0.0.cnf openssl.cnf,然后. vars再次运行。

  5. 如果这是您第一次使用此 CA,请准备好密钥环境。难道,如果你想保持你以前创建的CA.运行此命令 这样做将需要您部署一个新的ca.crt.

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

    ./build-key-server server
    
    Run Code Online (Sandbox Code Playgroud)

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

DH 和使用准备 tls-auth

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

./build-dh
Run Code Online (Sandbox Code Playgroud)

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

openvpn --genkey --secret ta.key
Run Code Online (Sandbox Code Playgroud)

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

为客户创建证书

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

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

    cd ~/openvpn-admin/easy-rsa
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果您因为已经创建了 CA 而跳过了 CA 创建步骤,则需要先加载变量:

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

    ./build-key you
    
    Run Code Online (Sandbox Code Playgroud)

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

3.设置OpenVPN服务

默认情况下,OpenVPN 在接受连接时以 root 身份运行。如果可以从邪恶的 Internet 访问该服务,这不是一个好主意。

  1. 为 OpenVPN 创建一个专用用户,例如openvpn

    sudo useradd openvpn
    
    Run Code Online (Sandbox Code Playgroud)
  2. 复制文件server.keyserver.crtca.crtdh1024.pem(或dh2048.pem如果您已经改变密钥大小)从钥匙进入目录/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}
    
    Run Code Online (Sandbox Code Playgroud)
  3. 也复制文件ta.key

    sudo cp ~/openvpn-admin/easy-rsa/ta.key /etc/openvpn
    sudo chmod 400 /etc/openvpn/ta.key
    
    Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)
  5. 为其设置适当的权限,它不需要保密,但我不希望泄露配置详细信息,因此:

    sudo chmod 640 /etc/openvpn/server.conf
    
    Run Code Online (Sandbox Code Playgroud)

4.整理服务器

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

客户

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

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

一、安装

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

sudo apt-get install openvpn network-manager-openvpn
Run Code Online (Sandbox Code Playgroud)

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

2. 配置

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

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

高级

  • 网关端口:自动(1194)(不需要更改)
  • 使用 LZO 数据压缩:已启用
  • 使用 TCP 连接:禁用
  • 使用 TAP 设备:已启用
  • 密码:默认
  • HMAC 认证:默认
  • Use TLS-authentication: enabled
    将密钥文件路径指定为ta.key并将“密钥方向”设置为1
  • 待办事项 - 检查出来)服务器推送默认网关,因此所有流量都通过 VPN 连接。上次查了一下,network-manager-openvpn插件没有做到。

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

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
Run Code Online (Sandbox Code Playgroud)

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

#AUTOSTART="none"
Run Code Online (Sandbox Code Playgroud)

要启动此连接,请运行:

sudo /etc/init.d/openvpn start client
Run Code Online (Sandbox Code Playgroud)

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

要停止 OpenVPN,您必须运行:

sudo /etc/init.d/openvpn stop
Run Code Online (Sandbox Code Playgroud)


Mar*_*Ch1 8

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

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

    sudo apt-get install tsocks
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后编辑/etc/tsocks.conf并输入

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

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

    tsocks firefox
    
    Run Code Online (Sandbox Code Playgroud)

现在,Firefox 将所有通信传输到您计算机上由 SSH 创建的 SOCKS 服务器。这会进一步通过隧道连接到您的家用机器,然后再访问网络。您在家用机器上所需要的只是一个 SSH 服务器。第一次后,只需重复步骤 3 和 4。

它就像一个魅力!唉,Chromium 不喜欢 tsocks,但是嘿,Firefox 可以工作。

  • 好吧,看你的最后一句话——我不想首先检查我的所有程序,如果它们真的与 tsocks 一起工作得很好,当它可以通过 OpenVPN 在 NetworkManager 小程序中单击一下。 (3认同)