apache2+ssl+ddns+webdav搭建NAS

Apache2+ssl+ddns+webdav搭建数据安全的NAS

最近买一个树莓派4B(8G)来玩一玩,打算先做一个个人云网盘。以下记录搭建过程和踩过的坑。

一、树莓派安装Ubuntu server20

这个部分直接参考官网的步骤来就好了:

[How to install Ubuntu Server on your Raspberry Pi]

网络配置踩坑

1.网络连接不上

当按照官网步骤配置network-config后,比如

wifis:
  wlan0:
    dhcp4: true
    optional: true
    access-points:
      "home network":
        password: "123456789"

装入系统后,会发现网络是连不上的,打开网络配置文件 /etc/netplan/50-cloud-init.yaml 后发现:

wifis:
	wlan0:
    	dhcp4: true
    	optional: true
    	access-points:
      		home network:
        		password: 123456789

网络名和密码的" "都没了,需要重新加上,运行sudo netplan generat检查配置是否正确后,运行sudo netplan apply重启网络,发现网连上了。

2.安装桌面后,WiFi搜索无结果

当用命令行配置好网络,安装桌面后,发现WiFi搜索没有结果,按照网上的一些方法重新配置网络文件也没有用。最后我自己试了下以下方法,可以起作用:

修改文件/etc/netplan/50-cloud-init.yaml,将wifis部分的配置全部删除,重启网络即可。

wifis:
	wlan0:
    	dhcp4: true
    	optional: true
    	access-points:
      		"home network":
        		"password": 123456789

二、申请个人域名+ddns

域名申请

这里我申请的是阿里云的域名,便宜的8元一年。

ddns(动态域名解析)

申请好域名(现在需要实名认证)后,首先在阿里云控制台云解析DNS页面做一个A类解析,记录值随便填。

image-20211201145055220

然后在主机上使用docker和阿里云API进行域名解析,注意网上有一些镜像,比如chenhw2/aiyun-ddns-cli是基于非arm64架构编译的,所以pull下来运行后会报类似以下错误:

standard_init_linux.go:211: exec user process caused "exec format error"

解决方法:

1、自己下载源码,用docker bulid 重新编译(具体实现自行搜索)

2、寻找支持arm64的镜像,这里推荐一个,地址为https://gitee.com/sanjusss/aliyun-ddns或者直接运行

sudo docker run -d --restart=always --name= ddns --net=host \
    -e "AKID=[ALIYUN's AccessKey-ID]" \
    -e "AKSCT=[ALIYUN's AccessKey-Secret]" \
    -e "DOMAIN=ddns.aliyun.win" \
    -e "REDO=30" \
    -e "TTL=600" \
    -e "TIMEZONE=8.0" \
    -e "TYPE=A,AAAA" \
    sanjusss/aliyun-ddns

使用命令sudo docker logs ddns查看是否运行成功,出现image-20211201145728200说明动态解析dns成功,或者在阿里云控制台直接查看,ip从1.1.1.1变成了其他的ip,说明解析成功。

三、获取ssl证书

我们想在远程程访问我们的网盘,是通过httpx协议的,但是http是铭文传输,数据安全得不到保证,所以需要进行加密,也就是添加ssl证书进行https方式传输。

现在获取ssl证书的话,一般有三种方式:

  1. 通过openssl生成自己的ssl证书,供个人使用是可以的,但是其他人访问可能会显示不安全状态
  2. 通过购买公司的ssl证书,如阿里云的,安全性较高,有钱的同志可以考虑。注:阿里云有一年免费的ssl证书
  3. 通过公益性组织获取免费的但时长有限的ssl证书,比如 ==Lets Encrypt==网站。这种到期后也可以免费更新。

这里我是用的是第三种方式,并通过Shell方式获取,也就是通过certbot获取。

如果你的主机连的网的80端口开放,可以选择http验证,否则使用DNS验证。这里通过cerbot+dns验证获取ssl,步骤参考:

how-to-acquire-a-let-s-encrypt-certificate-using-dns-validation-with-acme-dns-certbot-on-ubuntu-18-04。如果访问不了,参考国内csdn某博主翻译的https://blog.csdn.net/cukw6666/article/details/107986947

踩坑记录

踩坑1

我们知道有一些路由器,比如TP-LINK,可以获取唯一的二级域名,并支持ddns,那么就可以省去[步骤二](# 二、申请个人域名+ddns )了。但是在获取ssl的时候会遇到无法解决的问题。一是通过DNS验证方式获取时,需要具有tpddns.cn管理权限的用户给你授权,但是打电话给客服,客服反馈说没有权限,操作不了。二是通过http验证方式获取时,由于电信网把80端口封了,所以验证不了,无法获取。

踩坑2

有一些自动帮你获取ssl的网站,比如Easy Https ,会较为方便的帮你获取ssl证书,但是,当你需要下载下来时,就找你收费了,套路深呀。

四、搭建并配置Apache服务器

1、 启用 WebDAV Apache 和 ssl Apache模块

Apache Web 服务器提供了许多作为可选模块的功能。您可以启用和禁用这些模块以从 Apache 添加和删除它们的功能。它的 WebDAV 和ssl功能包含在与 Apache 一起安装的模块中,但默认情况下未启用。

使用a2enmod实用程序为 Apache 启用 WebDAV 模块。以下命令将启用 WebDAV和ssl 模块:

sudo a2enmod dav_fs
sudo a2enmod dav
sudo a2enmod ssl

现在,重新启动 Apache 以加载新模块:

sudo systemctl restart apache2.service

WebDAV和ssl 模块现在已加载并运行。在下一步中,配置 Apache 以通过 WebDAV 为文件提供服务。

2、配置 Apache

在此步骤中,将创建 Apache 实现 WebDAV 服务器所需的所有配置。

首先,创建 WebDAV 根文件夹,/var/www/webdav该文件夹将保存您要通过 WebDAV 提供的文件:

sudo mkdir /var/www/webdav

然后,将 Apache 的用户www-data 设置为 WebDAV 目录的所有者:

sudo chown www-data:www-data /var/www/webdav

接下来,为 Apache 用来管理和锁定 WebDAV 用户正在访问的文件的数据库文件创建一个位置。该文件需要 Apache 可读和可写,但不能从网站上获取,因为这可能会泄露敏感信息。

使用mkdir数据库文件的实用程序在以下位置创建一个新目录/usr/local/apache/var/

sudo mkdir -p /usr/local/apache/var/

-p选项告诉mkdir实用程序在指定的路径中创建所有目录(如果它们不存在)。

接下来,使用该chown实用程序将新目录的所有者和组设置为 Apache 的用户和组:

sudo chown www-data:www-data /usr/local/apache/var

现在,编辑包含有关域名的 Apache 配置的VirtualHost文件。使用文本编辑器打开 VirtualHost 文件:

sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

在第一行,添加DavLockDB指令:

DavLockDB /usr/local/apache/var/DavLock

接下来,在所有其他指令之后的标签中添加以下AliasDirectory 指令:

Alias /webdav /var/www/webdav
<Directory /var/www/webdav>
    DAV On
</Directory>

Alias指令将请求映射http://your.server/webdav/var/www/webdav文件夹。

Directory指令告诉 Apache 为该/var/www/webdav文件夹启用 WebDAV 。您可以mod_dav从 Apache 文档中找到更多信息。

最终的虚拟主机文件将作如下安排,其中包括DavLockDBAliasDirectory指令:

DavLockDB /usr/local/apache/var/DavLock
<IfModule mod_ssl.c>
<VirtualHost *:443>
        ServerAdmin admin@your_domain
        ServerName your_domain
        ServerAlias your_domain
        DocumentRoot /var/www/your_domain
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf

        Alias /webdav /var/www/webdav

        <Directory /var/www/webdav>
            DAV On
        </Directory>

</VirtualHost>
</IfModule>

如果在编辑 Apache 的配置时出现任何语法错误,它将拒绝启动。在重新启动 Apache 之前检查 Apache 配置是一个很好的做法。

使用该apachectl实用程序检查配置:

sudo apachectl configtest

如果配置没有错误,apachectl将打印Syntax OK. 收到此消息后,可以安全地重新启动 Apache 以加载新配置:

sudo systemctl restart apache2.service

现在已经将 Apache 配置为 WebDAV 服务器来提供来自/var/www/webdav。但是,尚未配置或启用身份验证,因此可以访问该服务器的任何人都可以读取、写入和编辑服务器的文件。在下一部分中,将启用和配置 WebDAV 身份验证。

3、向 WebDAV 添加身份验证

这里使用的身份验证方法称为摘要身份验证。摘要式身份验证是更安全的 WebDAV 身份验证方法,尤其是与 HTTPS 结合使用时。

摘要式身份验证使用一个文件,该文件存储允许访问 WebDAV 服务器的用户的用户名和密码。就像DavLockDB摘要文件需要存储在 Apache 可以读取和写入且无法从您的网站提供服务的位置一样。

由于已经/usr/local/apache/var/为此目的创建了摘要文件,因此也将在那里放置摘要文件。

首先,使用该实用程序创建一个名为users.password的空文件:

sudo touch /usr/local/apache/var/users.password

然后将所有者和组更改为,www-data以便 Apache 可以对其进行读写:

sudo chown www-data:www-data /usr/local/apache/var/users.password

使用该htdigest实用程序将新用户添加到 WebDAV 。以下命令添加用户Bob

sudo htdigest /usr/local/apache/var/users.password webdav Bob

webdav在此是指领域,应该被认为是该组要添加新用户的。它也是用户在访问 WebDAV 服务器时输入用户名和密码时向用户显示的文本。

htdigest 运行时会提示你输入密码并确认:

OutputAdding user sammy in realm webdav
New password:
Re-type new password:

接下来,告诉 Apache 要求对 WebDAV 访问进行身份验证并使用该users.password文件。

打开您的 VirtualHost 文件:

sudo nano /etc/apache2/sites-enabled/your_domain-le-ssl.conf

然后,在Directory指令块中添加以下几行:

AuthType Digest
AuthName "webdav"
AuthUserFile /usr/local/apache/var/users.password
Require valid-user

这些指令执行以下操作:

  • AuthType Digest:使用摘要认证方法。
  • AuthName "webdav": 只允许来自webdav领域的用户。
  • AuthUserFile /usr/local/apache/var/users.password:使用包含在/usr/local/apache/var/users.password.
  • Require valid-user:允许访问users.password文件中列出的提供正确密码的任何用户。

接下来,启用auth_digestApache 模块,以便 Apache 知道如何使用摘要式身份验证方法:

sudo a2enmod auth_digest

最后,重新启动 Apache 以加载所有新配置:

sudo systemctl restart apache2.service

现在已将 WebDAV 服务器配置为使用 HTTPS 和摘要式身份验证。在下一部分中,将从androd、 Windows、Linux 或 macOS 访问 WebDAV 服务器。

五、路由器端口映射

如果您用的ip是公网ip,且端口443没有被封,此步骤可省略

由于我的树莓派连的是路由器的WiFi,所以需要端口映射,将路由器的外网端口8443映射到树莓派内网端口443上。这里需要登录路由器进行操作。启动端口映射应用(不同品牌的路由器名称不同,TP-LINK的叫虚拟服务器,华为的叫NAT服务),添加端口记录即可。这里以华为路由器为例,一般只要填主机IP、内部端口、外部端口,其他默认即可。

image-20211202202732620

六、访问 WebDAV

使用 Windows 和Android的本机文件浏览器访问 WebDAV 服务器。

windows

打开文件资源管理器,点击映射网络驱动器,弹出窗口后,文件夹输入https://demain:port,点击完成,输入用户和密码,确定后即可添加本个人云盘。

image-20211202194839424 image-20211202195421930 image-20211202195648960

Android

下载ES文件管理器,进入软件,点击菜单后点击FTP,然后点击新建,选择webdav;最后新建WEBDAV服务器,勾选加密,输入域名、端口、用户和密码,点击确认后即可创建个人云盘。

Screenshot_2021-12-02-19-59-20-842_com.estrongs.aScreenshot_2021-12-02-19-59-48-324_com.estrongs.aScreenshot_2021-12-02-20-01-22-542_com.estrongs.a

你可能感兴趣的:(ssl,网络,ubuntu)