如何将 Ubuntu 服务器设置为(安全地)从 Internet 上可用?

Ste*_*e B 7 server ssh vpn apache2

我想构建一个将持续连接到互联网的 Ubuntu 服务器。我只拥有一个 IP 地址。服务器的主要用途是作为一个源代码控制器(可能是 git 或 svn... 还没有选择),但也有一些偶尔的其他用途(与家人或客户共享文件、个人备份、Web 应用程序的主机我可以写,等等。我也希望能够随时访问计算机来管理它,即使在一些只允许 http 或 https 的客户代理后面

实现这一目标的标准步骤是什么?

  • 我的第一个想法是设置openssh服务器。是否有可能(并且非常安全)在标准端口(即客户防火墙/代理兼容)上将其打开到互联网?
  • 是否可以设置从网页插件(也由服务器托管)运行的 VPN 服务器?
  • 因为我只有一个 IP 地址(实际上是 IP V4 和 IPV 6,但我认为现在客户网络无法访问 IP V6 地址),我可以让 apache 和其他服务器软件在相同的标准端口上共存吗?

提前致谢 ;)

Lek*_*eyn 10

正确设置 OpenSSH 是安全的,即使在标准端口上也是如此。将它从标准端口移开可以避免您的日志文件被未经授权的登录尝试填满。更多细节在最后。

如果您无法控制应该连接到您的服务器的计算机,那么访问您的服务器是非常危险的(我认为这就是您需要使用浏览器插件的原因)

OpenVPN 可以设置为与 HTTP/HTTPS 服务器共享 TCP 端口,从其手册页

--port-share host port  
    When run in TCP server mode, share the OpenVPN port with another
    application, such as an HTTPS server.
    If OpenVPN senses a connection to its port which is using a non-OpenVPN
    protocol, it will proxy the connection to the server at host:port.  
    Currently only designed to work with HTTP/HTTPS, though it would 
    be theoretically possible to extend to other protocols such as ssh.
Run Code Online (Sandbox Code Playgroud)

由于其开销(TCP 3 次握手),不建议将 OpenVPN 与 TCP 连接一起使用。如果你别无选择,你可以试一试。

使用 OpenVPN,您可以避免对您施加的任何端口限制并保护连接。请参阅如何设置 OpenVPN 以便我可以从不安全的热点安全地使用互联网?有关设置 OpenVPN 的指南。

除非应用程序支持它(如 OpenVPN),否则您不能共享端口,所以我必须让您失望。

SSH服务器

不限制连接尝试的基于密码的身份验证是自找麻烦。因此,最好使用基于密钥的身份验证并完全禁用基于密码的身份验证。

  1. 安装openssh-server安装 openssh-server 通过跑步 sudo apt-get install openssh-server

  2. 通过编辑配置文件禁用基于密码的身份验证/etc/ssh/sshd_config。要开始编辑,请运行sudo nano /etc/ssh/sshd_config. 找到该行#PasswordAuthentication yes并将其更改为PasswordAuthentication no. 默认情况下,SSH 侦听端口 22。如果要更改它,出于安全原因,请使用 1024 以下的端口。(用 更改行Port 22

  3. 为了提高安全性,您可以配置允许登录的用户列表。添加一行:

    AllowUsers someuser
    
    Run Code Online (Sandbox Code Playgroud)

    替换someuser为允许登录的账号的用户名。多个用户名之间用空格隔开。

  4. 使用命令在您的计算机上生成一个密钥ssh-keygen -t rsa。输入您想要的任何值并选择一个安全的密码。

  5. ~/.ssh/id_rsa.pub文件的内容复制到/home/someuser/.ssh/authorized_keys服务器上的文件。someuser是应该允许登录的用户。(应该复制一行,永远不要复制以-----BEGIN RSA PRIVATE KEY

  6. 重新加载 SSH 服务器的配置:

    sudo reload ssh
    
    Run Code Online (Sandbox Code Playgroud)
  7. 如果您通过 SSH 远程访问您的服务器,请确认您可以建立新的 SSH 连接以避免将自己锁定。