当前位置: 首页>>技术问答>>正文


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

, , , , ,

问题描述

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

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

  1. 安装并设置OpenVPN服务器

  2. 设置OpenVPN客户端(NetworkManager)

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

最佳解决思路

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

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

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

Server

1.准备

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

2.配置身份验证

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

为服务器创建CA和证书

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

official documentation建议在/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

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

    ./clean-all
    
  6. 通过执行./build-ca创建CA.您可以填写所需的任何详细信息,但请注意,当客户端连接到服务器时,此信息将显示在日志文件中。这将在子文件夹keys中创建文件ca.keyca.crt。在任何情况下都要保密ca.key文件。如果不这样做,任何拥有密钥的人都可以连接到您的服务器。

  7. 如果您的先前证书已丢失或已过期,则需要先使用./revoke-full server撤消旧证书。否则会出现数据库错误。

  8. 通过运行以下命令为服务器创建证书:

    ./build-key-server server
    

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

DH和使用准备tls-auth

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

./build-dh

根据hardening tips,使用tls-auth。为此,使用以下命令生成shared-secret密钥:

openvpn --genkey --secret ta.key

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

为客户创建证书

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

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

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

    . vars
    
  3. 如果要创建新证书,因为旧证书丢失或过期,则需要先使用./revoke-full you撤消旧证书。否则会出现数据库错误。

  4. 创建客户端证书you.key及其对应的证书you.crt

    ./build-key you
    

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

3.设置OpenVPN服务

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

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

    sudo useradd openvpn
    
  2. 将文件server.keyserver.crtca.crtdh1024.pem(如果已更改密钥大小,则为dh2048.pem)从密钥目录复制到/etc/openvpn。 400(read-only为业主)的许可是好的。

    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是可能的。

Client

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

  • ca.crt:用于验证证书

  • server.crt:用于验证服务器并与之通信

  • ta.key:用于加强安全性

  • you.crt:用服务器标识自己

  • you.key:就像你的密码一样,文件权限应为400(所有者为read-only)

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身份验证:默认

  • 使用TLS-authentication:enabled指定ta.key的密钥文件路径,并将”Key Direction”设置为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。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2920.html,未经允许,请勿转载。