-
在Ubuntu上设置无密码SSH登录的2个简单步骤
本教程介绍如何在Ubuntu桌面上设置无密码SSH登录。使用OpenSSH服务器验证用户登录基本上有两种方法:密码验证和公钥验证。后者也称为无密码SSH登录,因为您不需要输入密码。 设置无密码SSH登录的2个简单步骤 第一步:在你的Ubuntu桌面上生成一个公共/私有密钥对 在Ubuntu桌面(而不是服务器)上,在终端窗口中输入以下命令。 ssh-keygen -t rsa -b 4096 哪里: -t代表类型。上面的命令生成RSA类型的密钥对。RSA是默认类型。 -b代表比特。默认情况下,密钥长度为3072位。我们使用4096位的密钥来增强安全性。 当被问及要保存密钥的文件时,只需按Enter键即可使用默认文件。接下来,输入至少20个字符长的好密码短语。密码短语用于加密私钥。 私钥(您的身份证)将保存在中。主目录下的ssh/id_rsa文件。 公钥将保存在中。ssh/id_rsa。酒吧档案。 从randomart图像中,我们可以看到密钥的长度(RSA 4096)。现在运行以下命令。 file ~/.ssh/id_rsa 您应该会看到以下输出: /home/username/.ssh/id_rsa: OpenSSH private key 如果您看到“没有这样的文件或目录”错误,这意味着没有创建SSH密钥对。运行ssh-keygen-t rsa-b4096命令再次创建它。 第2步:将公钥上传到远程Linux服务器 提示:远程服务器可以运行任何Linux发行版:Debian、Ubuntu、RHEL、CentOS等等,只要它运行OpenSSH服务器,就可以使用以下方法。 使用openssh客户端软件包附带的ssh copy id命令可以轻松完成这一点。 ssh-copy-id remote-user@server-ip 输入远程用户的密码。 公钥将存储在中。ssh/authorized_keys文件位于远程用户的主目录下。现在SSH进入远程服务器。 ssh remote-user@server-ip 这一次,您需要输入RSA密钥密码来解锁私钥。您可以在登录时选择自动解锁密钥,这样以后就不必输入密码。 输入正确的密钥密码短语后,即可登录到远程Linux服务器。现在从远程服务器退出。 exit 然后再次将SSH连接到远程服务器: ssh remote-user@server-ip 这一次,您将自动登录到远程服务器,尽管您没有键入密码或密钥密码短语。此外,在使用scp命令传输文件时,不必键入密码或密钥密码短语。scp命令也由openssh客户端软件包提供,该软件包默认安装在Ubuntu桌面上。 禁用密码身份验证 虽然默认情况下使用SSH密钥登录服务器,但您仍然可以使用普通密码登录另一台计算机上的服务器。您不希望黑客发起暴力攻击来侵入您的服务器,因此在OpenSSH服务器中禁用密码验证是一种很好的做法。 要禁用密码身份验证,请在远程服务器上编辑/etc/ssh/sshd_config文件。 sudo nano /etc/ssh/sshd_config 找到这一行: #PasswordAuthentication yes 将其更改为: PasswordAuthentication no 然后找到ChallengeResponseAuthentication热线。确保它的值设置为no,如下所示。如果设置为“是”,您仍然可以使用密码登录。 ChallengeResponseAuthentication no 保存文件并重新启动SSH服务。 Debian/Ubuntu sudo systemctl restart ssh 瑞尔/森托斯 sudo systemctl restart sshd 现在如果~/中没有相应的私钥。在ssh目录下,当您尝试ssh到远程服务器时,您将看到以下错误。 Permission denied (publickey). 或 Read: Connection reset by peer 这意味着远程服务器只允许使用SSH密钥进行SSH登录,不允许密码身份验证。请注意,如果您将PasswordAuthentication设置为no,将ChallengeResponseAuthentication设置为yes,则仍然可以使用password登录。要禁用密码登录,必须将两者都设置为“否”。 备份您的公钥/私钥对 禁用SSH密码身份验证后,备份SSH密钥非常重要。如果丢失密钥,您将被锁定在服务器之外。将您的公钥/私钥对备份到USB驱动器等安全位置。 cp ~/.ssh/id_rsa* /path/to/safe/location/ 您还可以将密钥对存储在一个文件夹中,然后用加密压缩该文件夹,并将其发送到云存储,如NextCloud。 您还可以将密钥对(私钥和公钥)复制到新的Linux计算机上,并使用SSH密钥将SSH复制到服务器上。将密钥对复制到新计算机后,将其移动到新计算机。ssh/新用户的目录。 mv id_rsa* ~/.ssh/ 您需要将密钥对的所有者更改为新计算机上的用户。 sudo chown new-user:new-user ~/.ssh/id_rsa* 现在,您可以使用SSH密钥登录到新计算机上的远程服务器。 有时,我想在本地Ubuntu计算机上创建两个用户帐户来执行不同的任务。但是,我仍然希望在登录到其他用户帐户时使用SSH密钥。只需将SSH密钥对(私钥和公钥)复制到新用户的~/。ssh/folder。您需要输入RSA密钥密码短语才能解锁私钥。您可以在登录时选择自动解锁密钥,这样以后就不必输入密码。 在SSH代理中存储密钥密码短语 如果您使用的是仅限命令行的Linux框,您可能会发现每次SSH到其他Linux服务器时都需要输入密钥密码短语。这是因为SSH代理没有存储密钥密码短语。 在SSH客户端上安装并配置keychain。 sudo apt install keychain 然后编辑。bash_简介或。档案文件。在其中添加以下文本,以便用户每次登录时都会执行这两个命令。 /usr/bin/keychain $HOME/.ssh/id_rsa source $HOME/.keychain/$HOSTNAME-sh 现在注销并重新登录。你会看到这样的情况: Last login: Thu Dec 17 20:38:39 2015 from 74.125.128.103 * keychain 2.7.1 ~ http://www.funtoo.org * Found existing ssh-agent: 17651 * Adding 1 ssh key(s): /home/<username>/.ssh/id_rsa Enter passphrase for /home/<username>/.ssh/id_rsa: * ssh-add: Identities added: /home/<username>/.ssh/id_rsa 当密钥链启动时,它会检查正在运行的ssh代理,否则会启动一个。这次需要输入密钥密码短语。用户登录时会记住密钥密码,但当系统重新启动时,您必须再次输入。 现在,只要ssh服务器具有公钥,并且您正在使用的ssh客户端成功配置了私钥/公钥对和密钥链,您就可以通过ssh连接到ssh服务器,而无需键入密钥密码短语。 更改私钥密码短语 如果需要更改私钥密码短语,可以使用以下命令: ssh-keygen -f ~/.ssh/id_rsa -p 输入旧密码,然后输入新密码。 专业提示:使用屏幕让你的会话保持活跃 您是否一直在远程服务器上工作,突然您的计算机与Internet断开连接,无法继续在服务器上运行作业?您可以使用精彩的屏幕实用程序来保持会话的活力。在Ubuntu服务器上安装屏幕: sudo apt install screen 然后启动屏幕: screen 第一次启动时,您将看到一个介绍文本,只需按Enter键即可结束。然后你就可以像往常一样运行命令了。 如果您在服务器上有一个长时间运行的作业,现在不需要在服务器上执行其他操作,可以按Ctrl+a,释放这些键,然后按D键从当前屏幕会话中分离。您将看到如下消息。 [detached from 32113.pts-1.focal] 这表明上一屏幕会话ID为32113。您可以从SSH会话中注销,甚至可以关闭计算机。别担心,服务器上的作业仍在运行。当需要返回并检查进度时,请将SSH连接到服务器并运行以下命令以获取上一个屏幕会话ID。 screen -ls 样本输出: There is a screen on: 32113.pts-1.focal (05/19/2020 03:45:29 PM) (Detached) 1 Socket in /run/screen/S-linuxbabe. 然后可以重新连接到上一个屏幕会话。 screen -r 32113 如果您正在屏幕会话中,Internet连接突然中断,那么当您再次连接Internet时,可以在服务器上运行以下命令。 screen -d -r 32113 这次我们需要-d选项,因为之前的屏幕会话没有分离。我们需要先拆下它(-d),然后再重新连接到它(-r)。 下一步 我希望本教程能帮助您在Ubuntu上设置无密码ssh登录。您可能还需要设置自动安全更新。 在Ubuntu上设置自动安全更新(无人参与升级) 和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心。
-
在Debian 10 Buster上设置绑定权威DNS服务器
本教程将向您展示如何使用广泛使用的BIND 9软件在Debian 10 Buster上设置和运行自己的权威名称服务器。 注意:本教程展示了命令行方法。如果您想从web GUI编辑DNS记录,我建议使用Webmin设置权威DNS服务器,这是一个免费的开源服务器控制面板。 什么是权威DNS服务器? 如果您拥有一个域名,并且希望您自己的DNS服务器为您的域名处理名称解析,而不是使用您的域名注册商的DNS服务器,那么您需要设置一个权威的DNS服务器。 域名所有者使用权威DNS服务器来存储DNS记录。它为DNS解析程序(如8.8.8.8或1.1.1.1)提供权威答案,这些解析程序代表终端用户在PC、智能手机或平板电脑上查询DNS记录。 关于BIND BIND(Berkeley Internet Name Domain)是一款开源、灵活、功能齐全的DNS软件,由于其稳定性和高质量,在Unix/Linux上得到了广泛应用。它最初是由加州大学伯克利分校开发的,后来在1994年,它的开发转移到了互联网系统联盟(ISC)。 BIND可以同时充当区域的权威DNS服务器和DNS解析程序。DNS解析程序也可以称为递归名称服务器,因为它为最终用户执行递归DNS查找。然而,同时扮演两个角色并不有利。在两台不同的机器上分离这两个角色是一种很好的做法。 在前一篇文章中,我解释了在Debian 10 Buster上设置本地DNS解析器的步骤。本教程将向您展示如何在Debian 10 Buster上将BIND9设置为仅限权威的DNS服务器,并禁用递归。 先决条件 要学习本教程,您应该已经购买了域名。我在namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 你还需要两台服务器。一台服务器用于主DNS服务器,另一台用于从DNS服务器。理想情况下,这两台服务器应该位于不同的物理位置。如果一个DNS服务器处于脱机状态,另一个DNS服务器仍然可以回答您的域名的DNS查询。 每台服务器只需要512MB内存,以下是我推荐的主机提供商。我都用过了。 Vultr:起价为每月2.5美元。需要信用卡。你可以通过我的推荐链接在Vultr创建一个账户,获得50美元的免费信用。 DigitalOcean:起价为每月5美元。不需要信用卡。你可以用贝宝。你可以通过我的推荐链接在DigitalOcean创建一个帐户,获得50美元的免费信用。 购买两台服务器后,在其上安装Debian 10,并按照以下说明操作。 请注意,在Debian上安装软件时,您需要拥有root权限。可以在命令开头添加sudo,或者使用su-command切换到root用户。 使用BIND9在Debian 10 Buster上设置权威DNS服务器 您需要在两台服务器上运行本节中的命令。 通过SSH登录这两台服务器,并运行以下命令,从默认存储库在Debian 10服务器上安装BIND 9。BIND 9是当前版本,BIND 10是一个死项目。 sudo apt update sudo apt install bind9 bind9utils bind9-doc 检查版本号。 named -v 样本输出: BIND 9.11.5-P4-5.1-Debian (Extended Support Version) <id:998753c> 要检查版本号和生成选项,请运行 named -V 默认情况下,绑定在安装后自动启动。您可以通过以下方式检查其状态: systemctl status bind9 输出: ● bind9.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: en Active: active (running) since Sun 2019-07-14 10:27:56 UTC; 4min 6s ago Docs: man:named(8) Main PID: 1481 (named) Tasks: 4 (limit: 1149) Memory: 13.7M CGroup: /system.slice/bind9.service └─1481 /usr/sbin/named -u bind 提示:如果上述命令没有立即退出,请按Q。 如果它没有运行,那么从以下内容开始: sudo systemctl start bind9 并在启动时启用自动启动: sudo systemctl enable bind9 BIND服务器将以BIND用户的身份运行,该用户是在安装过程中创建的,并在TCP和UDP端口53上侦听,如运行以下命令所示: sudo netstat -lnptu | grep named 绑定守护进程被称为named。(守护进程是在后台运行的软件。)命名的二进制文件由bind9包安装,还有另一个重要的二进制文件:rndc,远程名称守护程序控制器,由bind9utils包安装。rndc二进制文件用于重新加载/停止和控制绑定守护进程的其他方面。通信通过TCP端口953完成。 例如,我们可以检查绑定名称服务器的状态。 sudo rndc status 主绑定配置文件/etc/BIND/named。conf从其他3个文件中获取设置。 /etc/bind/named。形态选项 /etc/bind/named。conf.local /etc/bind/named。conf.default-zones Debian上的BIND9服务器提供了本地主机和本地网络客户端的递归服务。由于我们正在设置权威DNS服务器,因此需要禁用递归。编辑/etc/bind/named。conf.options文件。 sudo nano /etc/bind/named.conf.options 在options{…}子句中添加以下行。 // hide version number from clients for security reasons. version "not currently available"; // disable recursion on authoritative DNS server. recursion no; // enable the query log querylog yes; // disallow zone transfer allow-transfer { none; }; 从技术上讲,您只需要添加递归no;禁用递归,但最好添加其他3条指令。保存并关闭文件。然后重启BIND。 sudo systemctl restart bind9 主DNS服务器配置 从两台服务器中选择一台作为主DNS服务器。我们将把它命名为ns1。实例通用域名格式。 主DNS服务器保存区域文件的主副本。在此服务器上更改DNS记录。一个域可以有一个或多个DNS区域。每个DNS区域都有一个区域文件,其中包含该区域中的每个DNS记录。为了简单起见,本文假设您希望使用单个DNS区域来管理您的域名的所有DNS记录。 /etc/bind/named。conf.default-zones文件定义根区域和本地主机区域。要为域名添加区域,请编辑/etc/bind/named。conf.local文件。 sudo nano /etc/bind/named.conf.local 将以下行添加到此文件。替换示例。使用你自己的域名。将12.34.56.78替换为从属DNS服务器的IP地址。 zone "example.com" { type master; file "/etc/bind/db.example.com"; allow-query { any; }; allow-transfer { 12.34.56.78; }; }; 在上述配置中,我们使用zone子句创建了一个新区域,并指定这是主区域。区域文件是/etc/bind/db。实例com,我们将在其中添加DNS记录。仅允许从DNS服务器进行区域传输。 我们可以使用区域模板文件,而不是从头创建区域文件。复制数据库的内容。空到一个新文件。 sudo cp /etc/bind/db.empty /etc/bind/db.example.com 区域文件可以包含3种类型的条目: 注释:以分号(;)开头 指令:以美元符号($)开头 资源记录:又名DNS记录 区域文件通常由以下类型的DNS记录组成。 SOA(授权开始)记录:定义区域的关键特征。这是区域文件中的第一个DNS记录,是必需的。 NS(名称服务器)记录:指定用于存储DNS记录和回答域名DNS查询的服务器。区域文件中必须至少有两条NS记录。 MX(邮件交换器)记录:指定哪些主机负责域名的电子邮件传递。 (地址)记录:将DNS名称转换为IPv4地址。 AAAA(Quad A)记录:将DNS名称转换为IPv6地址。 CNAME记录(规范名称):用于为DNS名称创建别名。 TXT记录:SPF、DKIM、DMARC等。 现在,让我们编辑区域文件。 sudo nano /etc/bind/db.example.com 默认情况下,它如下所示: 你可以改成这个。 哪里 $TTL指令定义区域的默认生存时间值,即DNS记录可以缓存在DNS解析程序上的时间。该指令是强制性的。时间以秒为单位。 $ORIGIN指令定义基本域。 域名必须以点(.)结尾,这是根域。当域名以点结尾时,它是一个完全限定的域名(FQDN)。 @符号引用基本域。 在DNS类中。它代表互联网。存在其他DNS类,但很少使用。 区域文件中的第一条记录是SOA(授权开始)记录。此记录包含以下信息: 主DNS服务器。 区域管理员的电子邮件地址。RFC 2142建议使用电子邮件地址[email ;protected]。在区域文件中,此电子邮件地址采用以下形式:hostmaster。实例com,因为@符号在区域文件中有特殊含义。 区域序列号。序列号是从DNS服务器跟踪区域变化的一种方式。按照惯例,序列号采用日期格式:yyyymmddss,其中yyyy是四位数字的年份号,mm是月份,dd是日期,ss是日期的序列号。更改区域文件时,必须更新序列号。 刷新值。当达到刷新值时,从DNS服务器将尝试从主DNS服务器读取SOA记录。如果序列号变高,则启动区域传输。 重试值。定义从DNS服务器无法连接到主DNS服务器时的重试间隔(以秒为单位)。 到期:如果从属DNS服务器在这段时间内未能与主DNS服务器联系,则从属DNS服务器将停止响应此区域的DNS查询。 负缓存TTL:为不存在的DNS名称(NXDOMAIN)定义DNS响应的生存时间值。 TXT记录通常用双引号括起来。如果添加DKIM记录,还需要用括号括起该值。 保存并关闭文件。然后运行以下命令检查主配置文件中是否存在语法错误。无声输出表示未发现错误。 sudo named-checkconf 然后检查区域文件的语法。 sudo named-checkzone example.com /etc/bind/db.example.com 如果区域文件中存在语法错误,则需要修复它,否则将无法加载此区域。以下消息表示没有语法错误。 zone example.com/IN: loaded serial 2019011503 OK 然后重启BIND9。 sudo systemctl restart bind9 如果您使用的是简单防火墙(UFW),请打开TCP和UDP端口53。 sudo ufw allow 53/tcp sudo ufw allow 53/udp 如果您直接使用iptables防火墙,请运行以下命令。 sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT 从DNS服务器配置 现在我们使用另一台服务器作为从DNS服务器,它将被命名为ns2。实例通用域名格式。 首先,编辑命名文件。conf.local文件。 sudo nano /etc/bind/named.conf.local 添加一个如下所示的区域。将12.34.56.78替换为主DNS服务器的IP地址。 zone "example.com" { type slave; file "db.example.com"; allow-query { any; }; masters { 12.34.56.78; }; }; 在上面的配置中,我们指定这是示例中的从属DNS服务器。它将只接受来自主DNS服务器的区域传输。 保存并关闭文件。然后运行以下命令检查主配置文件中是否存在语法错误。 sudo named-checkconf 如果没有发现错误,请重新启动BIND9。 sudo systemctl restart bind9 从DNS服务器上的区域文件是从区域传输加载的,该传输用于同步从主DNS服务器到从DNS服务器的DNS记录更改。BIND9重新启动后,区域传输将立即启动。使用以下命令检查BIND9日志。 sudo journalctl -eu bind9 您可以看到如下消息,这表明区域传输成功。 named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec) 区域文件将另存为/var/cache/bind/db。实例从DNS服务器上的com。 如果您使用的是简单防火墙(UFW),请打开TCP和UDP端口53。 sudo ufw allow 53/tcp sudo ufw allow 53/udp 如果您直接使用iptables防火墙,请运行以下命令。 sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT 更多关于区域转移的信息 当达到SOA记录中的刷新时间时,从属DNS服务器将再次联系主服务器,如果主服务器上的序列号大于从属服务器上的序列号,则将启动区域传输。有两种类型的区域转移: 完整区域传输(AXFR):传输区域文件的完整副本。 增量区域传输(IXFR):仅传输更改的DNS记录。 两种类型的区域传输都使用TCP端口53。默认情况下,从属DNS服务器上的绑定将请求增量区域传输,而主DNS服务器上的绑定仅在区域是动态的情况下才允许增量区域传输。 区域传输间隔是DNS记录更改传播速度的主要因素。当区域发生更改时,绑定主机将通知从属DNS服务器,而不是等待从属DNS服务器联系。这可以大大缩短将区域更改传播到Internet的时间。 反向区 反向区域包含将IP地址映射到DNS名称的PTR记录。它是DNS A记录的对应项。PTR记录通常是邮件服务器通过垃圾邮件过滤器所必需的。此记录不属于域。您需要在主机提供商的控制面板上创建PTR记录,或者询问您的ISP,所以我不打算在BIND中介绍创建反向区域。 更改NS记录并创建胶水记录 现在你需要去你的域名注册商的网站更改你的域名的NS记录,这样互联网就会知道你现在正在使用自己的DNS服务器。通常在NS记录中使用主机名,比如ns1。实例com和ns2。实例通用域名格式。 name server 1: ns1.example.com name server 2: ns2.example.com 如果你有一个域名的例子。com,您使用一个子域作为权威DNS服务器(ns1.example.com和ns2.example.com),然后您还需要在您的域注册器上创建一个粘合记录,以便Internet可以知道您的DNS服务器的IP地址。胶水记录是ns1的A记录。实例com和ns2。实例通用域名格式。 ns1.example.com IP-address-of-master-server ns2.example.com IP-address-of-slave-server 上述信息将通过可扩展配置协议(EPP)发送给运行TLD DNS服务器的注册运营商,以便TLD DNS服务器知道您的域名的权威DNS服务器的名称和IP地址。根据您使用的域注册器,您的NS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io检查您的新NS记录是否处于活动状态。 我将向你展示如何在namescapet上实现这一点。 如果你在NameCheap购买了域名,请登录你的NameCheap帐户。选择左侧边栏上的域列表菜单,然后单击最右侧的管理按钮。 选择高级DNS。 滚动到页面底部,您将找到个人DNS服务器部分。单击添加名称服务器按钮添加您自己的名称服务器:ns1。实例com和ns2。实例通用域名格式。您需要输入名称服务器的IP地址。 添加两个名称服务器后,单击搜索按钮检查它们是否已成功添加。如果是这样,胶水记录将显示在此页面底部。 现在单击“域”选项卡,并使用自定义DNS服务器。 根据您使用的域注册器,您的NS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io检查您的新NS记录是否处于活动状态。 胶水记录和NS记录传播到Internet后,DNS服务器将响应域名的DNS查询。您可以通过以下方式查看查询日志: sudo journalctl -eu bind9 您还可以使用dig实用程序检查域名的NS记录。 dig NS example.com 如果NS记录和glue记录已传播到Internet,您应该在“答案”部分看到您的名称服务器。如果您看到SERVFAIL错误,可能是因为您没有在名称服务器上打开UDP端口53。 需要知道的事情 术语主DNS服务器仅表示此服务器存储区域文件的主副本。在DNS解析方面,它没有更高的优先级。 更改区域文件时,请始终更新SOA序列号。 启用解析器 BIND可以同时充当区域的权威DNS服务器和DNS解析程序。在两台不同的机器上分离这两个角色是一种很好的做法,在本文中,我们在BIND中禁用了解析器。如果您真的想启用解析器,请按照以下说明操作。 编辑绑定配置文件。 sudo nano /etc/bind/named.conf.options 找到下面几行。 // disable recursion on authoritative DNS server. recursion no; 将它们更改为以下内容,这样只有受信任的IP地址才能向DNS解析程序发送递归查询,而您的服务器将不会是开放的解析程序。 // allow recursion for trusted clients only. recursion yes; allow-query { localhost; 12.34.56.78; }; 将12.34.56.78替换为您自己的IP地址。保存并关闭文件。确保在/etc/bind/named中定义区域。conf.local文件具有以下选项,因此Internet可以查询您所在区域的DNS记录。 allow-query { any; }; 然后重启BIND。 sudo systemctl restart bind9 去https://openresolver.com/测试绑定服务器是否为开放式解析程序。 收尾 就这样!我希望本教程能帮助您使用BIND9在Debian 10 Buster上设置权威DNS服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何使用iRedMail在CentOS 7上轻松设置全功能邮件服务器
在Linux上从头开始设置自己的电子邮件服务器是一个漫长而乏味的过程,如果你不是高级用户,这将是一个痛苦的过程。本教程将向您展示如何使用iRedMail在CentOS 7上快速设置功能齐全的邮件服务器,从而为您节省大量时间和麻烦。 什么是iRedMail? iRedMail是一个shell脚本,可以在Linux/BSD服务器上自动安装和配置所有必要的邮件服务器组件,从而消除手动安装和配置。使用iRedMail,您可以在基于web的管理面板中轻松创建无限邮箱和无限邮件域。邮箱可以存储在MariaDB/MySQL、PostgreSQL数据库或OpenLDAP中。以下是iRedMail将自动安装和配置的开源软件列表。 后缀SMTP服务器 Dovecot IMAP服务器 Nginx web服务器为管理面板和webmail提供服务 用于存储用户信息的OpenLDAP、MySQL/MariaDB或PostgreSQL 一个用于DKIM签名和验证的新版本 SpamAssassin用于反垃圾邮件 ClamAV用于抗病毒 Roundcube网络邮件 用于保护SSH的Fail2ban 邮件列表管理器 Netdata服务器监控 iRead Postfix策略服务器用于GreyList 第一步:选择合适的主机提供商并购买域名 要使用iRedMail设置一个功能齐全的电子邮件服务器,您需要一个至少有3GB内存的服务器,因为安装后,您的服务器将使用超过2GB的内存。 强烈建议您在干净的CentOS 7服务器上安装iRedMail。 本教程是在每月9美元的Kamatera VPS(虚拟专用服务器)上完成的,该服务器具有1个CPU和3GB RAM。他们提供30天的免费试用期。 Kamatera是运行邮件服务器的一个非常好的选择,因为 它们不会阻止端口25,因此您可以发送无限量的电子邮件(事务性电子邮件和时事通讯),而无需在SMTP中继服务上花钱。Kamatera没有任何SMTP限制。你每天可以发送一百万封电子邮件。 IP地址不在任何电子邮件黑名单上。(至少对我来说是这样。我选择了达拉斯数据中心。)你肯定不想被列入可怕的微软Outlook IP黑名单或spamrats黑名单。有些黑名单会屏蔽整个IP范围,你无法从此类黑名单中删除你的IP地址。 您可以编辑PTR记录以提高电子邮件的可交付性。 它们允许你向你的电子邮件订阅者发送时事通讯,而不受每小时或每天的限制。 您可以为一台服务器订购多个IP地址。这对需要发送大量电子邮件的人非常有用。您可以在多个IP地址上传播电子邮件流量,以实现更好的电子邮件交付。 其他VPS提供商,如DigitalOcean阻止了端口25。DigitalOcean不会解锁端口25,因此您需要设置SMTP中继以绕过阻止,这可能会增加您的费用。如果您使用Vultr VPS,则默认情况下端口25被阻止。如果您打开支持票证,他们可以解除阻止,但如果他们决定不允许您的电子邮件发送活动,他们可能会在任何时候再次阻止。如果你使用他们的服务器发送时事通讯,Vultr实际上可能会重新阻止它。 转到Kamatera网站创建帐户,然后在帐户仪表板中创建服务器。 我建议遵循下面链接的教程,在Kamatera上正确设置Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 创建服务器后,Kamatera将向您发送一封包含服务器SSH登录详细信息的电子邮件。要登录到服务器,可以使用SSH客户端。如果您在计算机上使用Linux或macOS,只需打开一个终端窗口并运行以下命令即可登录服务器。将12.34.56.78替换为服务器的IP地址。 ssh [email protected] 系统将要求您输入密码。 你还需要一个域名。我从namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 第2步:创建DNS MX记录 MX记录指定哪个或多个主机处理特定域名的电子邮件。例如,为linuxbabe处理电子邮件的主机。com是邮件。利努克斯宝贝。通用域名格式。如果拥有Gmail账户的人向[email ;protected]发送电子邮件,Gmail服务器将查询linuxbabe的MX记录。通用域名格式。当它发现那封邮件。利努克斯宝贝。com负责接收电子邮件,然后查询邮件记录。利努克斯宝贝。com获取IP地址,从而可以发送电子邮件。 在DNS管理器中,为域名创建MX记录。在名称字段中输入@代表主域名,然后输入mail。你的领域。com在值字段中。 注意:MX记录的主机名不能是其他名称的别名。此外,强烈建议您使用主机名,而不是MX记录的裸IP地址。 DNS管理员可能会要求您输入首选项值(也称为优先级值)。它可以是0到65356之间的任何数字。小数字的优先级高于大数字。建议将该值设置为0,以便此邮件服务器具有接收电子邮件的最高优先级。创建MX记录后,还需要为邮件创建一个记录。你的领域。com,以便将其解析为IP地址。如果您的服务器使用IPv6地址,请确保添加AAAA记录。 提示:如果使用Cloudflare DNS服务,则在创建邮件记录时不应启用CDN功能。你的领域。通用域名格式。Cloudflare不支持SMTP代理。 第3步:配置主机名 通过SSH登录服务器,然后运行以下命令更新现有软件包。 sudo yum update -y 我强烈建议创建一个sudo用户来管理服务器,而不是使用默认的root用户来提高服务器安全性。运行以下命令创建用户。将用户名替换为首选用户名。 sudo adduser username 设置此用户的密码。 sudo passwd username 将此用户添加到控制盘组以使用sudo。 sudo gpasswd -a username wheel 切换到新用户。 su - username 接下来,使用以下命令为服务器设置完全限定的域名(FQDN)。 sudo hostnamectl set-hostname mail.your-domain.com 我们还需要使用命令行文本编辑器(如Nano)更新/etc/hosts文件。 sudo nano /etc/hosts 像下面那样编辑它。(使用箭头键在文件中移动光标。) 127.0.0.1 mail.your-domain.com localhost 保存并关闭文件。(要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要关闭文件,请按Ctrl+X。) 要查看更改,请重新登录并运行以下命令以查看主机名。 hostname -f 第4步:使用iRedMail在CentOS 7上设置邮件服务器 运行以下命令从其Github存储库下载最新版本的iRedMail脚本安装程序。 sudo dnf install wget tar -y wget 提取存档文件。 tar xvf 1.5.1.tar.gz 然后将cd放入新创建的目录中。 cd iRedMail-1.5.1/ 向iRedMail添加可执行权限。sh脚本。 chmod +x iRedMail.sh 接下来,使用sudo权限运行Bash脚本。 sudo bash iRedMail.sh 邮件服务器安装向导将出现。使用Tab键选择Yes,然后按Enter键。 下一个屏幕将要求您选择邮件存储路径。您可以使用默认的/var/vmail,只需按Enter键即可。 然后选择是否要运行web服务器。强烈建议您选择运行web服务器,因为您需要基于web的管理面板来添加电子邮件帐户。它还允许您访问Roundcube网络邮件。默认情况下,Nginx web服务器处于选中状态,因此只需按Enter键即可。(星号表示该项目已被选中。) 然后为电子邮件帐户选择存储后端。选择一个你熟悉的。本教程选择了MariaDB。按向上和向下箭头键,然后按空格键进行选择。 如果选择了MariaDB或MySQL,则需要设置MySQL根密码。 接下来,输入您的第一个邮件域。您可以稍后在基于web的管理面板中添加其他邮件域。本教程假设您想要一个像[email ;protected]这样的电子邮件帐户。在这种情况下,你需要进入你的域名。com在这里,没有子域。不要在域名后按空格键。我认为iRedMail会将空格字符与域名一起复制,这可能会导致安装失败。 接下来,为邮件域管理员设置密码。 选择可选组件。默认情况下,这4个项目都被选中。所以只需按回车键。 现在,您可以查看您的配置。键入Y开始安装所有邮件服务器组件。 确保在安装过程中没有看到错误。如果出现错误,最好重新安装操作系统,然后在服务器上重新安装iRedMail,否则邮件服务器可能无法正常工作。 在安装结束时,选择y以使用iRedMail提供的防火墙规则并重新启动防火墙。 现在iRedMail安装完成了。您将收到webmail的URL、web管理面板和登录凭据的通知。iRedMail。提示文件包含有关iRedMail服务器的重要信息。 重新启动CentOS 7服务器。 sudo shutdown -r now 服务器重新联机后,您可以访问web管理面板。 https://mail.your-domain.com/iredadmin/ 注意,在上面的URL中,访问管理面板的子目录是/IREDAMIN/,而不是/iredmail/。因为它使用的是自签名TLS证书,所以需要在web浏览器中添加安全异常。 步骤5:安装Let's Encrypt TLS证书 由于邮件服务器正在使用自签名TLS证书,桌面邮件客户端用户和webmail客户端用户都将看到警告。为了解决这个问题,我们可以获得并安装免费的Let's Encrypt TLS证书。 获取证书 首先,通过SSH再次登录服务器,并运行以下命令在CentOS 7上安装Let's Encrypt(certbot)客户端。 sudo yum install certbot python-certbot-nginx -y iRedMail已经在默认的Nginx虚拟主机中配置了TLS设置,因此我建议使用webroot插件而不是Nginx插件来获取证书。运行以下命令。用红色文本替换为您自己的电子邮件地址和主机名。 sudo certbot certonly --webroot --agree-tos --email [email protected] -d mail.your-domain.com -w /var/www/html/ 当它询问您是否希望接收EFF的通信时,您可以选择否。 如果一切顺利,您将看到以下文本,表明您已成功获得TLS证书。您的证书和链已保存在/etc/letsencrypt/live/mail。你的领域。com/directory。 未能获得TLS证书 如果certbot无法获得TLS证书,可能是因为您的DNS记录没有传播到Internet。根据您使用的域注册器,您的DNS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io,输入邮件服务器的主机名(mail.your domain.com)以检查DNS传播。 在Nginx中安装证书 获得TLS证书后,让我们配置Nginx web服务器以使用它。编辑SSL模板文件。 sudo nano /etc/nginx/templates/ssl.tmpl 找到下面两行。 ssl_certificate /etc/pki/tls/certs/iRedMail.crt; ssl_certificate_key /etc/pki/tls/private/iRedMail.key; 替换为: ssl_certificate /etc/letsencrypt/live/mail.your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mail.your-domain.com/privkey.pem; 保存并关闭文件。然后测试nginx配置并重新加载。 sudo nginx -t sudo systemctl reload nginx 再次访问iRedMail管理面板,您的web浏览器将不再警告您,因为Nginx现在使用的是有效的TLS证书。 在Postfix和Dovecot中安装TLS证书 我们还需要配置Postfix SMTP服务器和Dovecot IMAP服务器来使用Let's Encrypt颁发的证书,这样桌面邮件客户端就不会显示安全警告。编辑Postfix的主配置文件。 sudo nano /etc/postfix/main.cf 找到下面三行。(第95、96、97行)。 smtpd_tls_key_file = /etc/pki/tls/private/iRedMail.key smtpd_tls_cert_file = /etc/pki/tls/certs/iRedMail.crt smtpd_tls_CAfile = /etc/pki/tls/certs/iRedMail.crt 替换为: smtpd_tls_key_file = /etc/letsencrypt/live/mail.your-domain.com/privkey.pem smtpd_tls_cert_file = /etc/letsencrypt/live/mail.your-domain.com/cert.pem smtpd_tls_CAfile = /etc/letsencrypt/live/mail.your-domain.com/chain.pem 保存并关闭文件。然后重新加载后缀。 sudo systemctl reload postfix 接下来,编辑Dovecot的主配置文件。 sudo nano /etc/dovecot/dovecot.conf 好的,下面两行。(第47、48行) ssl_cert = </etc/pki/tls/certs/iRedMail.crt ssl_key = </etc/pki/tls/private/iRedMail.key 替换为: ssl_cert = </etc/letsencrypt/live/mail.your-domain.com/fullchain.pem ssl_key = </etc/letsencrypt/live/mail.your-domain.com/privkey.pem 保存并关闭文件。然后重新装好多佛科特。 sudo systemctl reload dovecot 从现在起,桌面邮件用户将不会看到安全警告。 第6步:发送测试电子邮件 使用邮政局长邮件帐户([email ;protected])登录iredadmin面板。在“添加”选项卡中,可以添加其他域或电子邮件地址。 如果您看到“无控制域”错误,请参阅本文。 创建用户后,您可以访问Roundcube webmail地址,并使用新的邮件用户帐户登录。 https://mail.your-domain.com/mail/ 现在,您可以测试电子邮件的发送和接收。请注意,您可能需要等待几分钟才能收到电子邮件,因为iRedMail默认情况下会启用灰色列表,这是一种通知其他发送SMTP服务器在几分钟后重试的方式。邮件日志文件/var/log/maillog中的以下行表示启用了灰色列表。 Recipient address rejected: Intentional policy rejection, please try again later; 检查ClamAV是否正在运行 ClamAV用于扫描电子邮件中的病毒。ClamAV可以使用相当数量的RAM。如果您的服务器上没有足够的RAM,ClamAV将无法正常工作,这将阻止您的邮件服务器发送电子邮件。您可以通过以下方式检查其状态: systemctl status [email protected] 如果你的ClamAV总是像下面这样激活,你就有问题了。 查看ClamAV日志。 sudo journalctl -eu [email protected] 如果您在日志中看到以下行,这意味着您的服务器没有足够的RAM来运行ClamAV。 daemonize() failed: Cannot allocate memory 您可以向服务器添加交换文件,以增加服务器上的总RAM。(请注意,在服务器上使用交换空间可能会大大降低服务器性能。如果您想要更好的性能,应该升级物理RAM,而不是使用交换空间。) 要在服务器上添加交换空间,首先,使用fallocate命令创建一个文件。例如,在根文件系统中创建一个名为swapfile、容量为1G的文件: sudo fallocate -l 1G /swapfile 然后确保只有root用户可以读写它。 sudo chmod 600 /swapfile 将其格式化为交换: sudo mkswap /swapfile 输出: Setting up swapspace version 1, size = 2014 MiB (536866816 bytes) no label, UUID=0aab5886-4dfb-40d4-920d-fb1115c67433 启用交换文件 sudo swapon /swapfile 等几秒钟,你的ClamAV应该处于活动状态(正在运行),它不会阻止你的邮件服务器发送电子邮件。 systemctl status [email protected] 要在系统启动时装载交换空间,请编辑/etc/fstab文件。 sudo nano /etc/fstab 在该文件底部添加以下行。 /swapfile swap swap defaults 0 0 保存并关闭文件。然后重新加载系统D。 sudo systemctl daemon-reload 步骤7:检查端口25(出站)是否被阻止 您的ISP或主机服务提供商不会阻止与服务器端口25的传入连接,这意味着您可以接收来自其他邮件服务器的电子邮件。然而,许多ISP/主机提供商会阻止与其他邮件服务器端口25的传出连接,这意味着您无法发送电子邮件。 如果您的电子邮件没有到达您的其他电子邮件地址,例如Gmail,那么您可以使用telnet实用程序检查端口25(出站)是否被阻止。在CentOS 7上安装telnet时使用: sudo yum install telnet 然后在邮件服务器上运行以下命令。 telnet gmail-smtp-in.l.google.com 25 如果端口25(出站)未被阻止,您将看到如下消息,这表示已成功建立连接。(提示:输入quit并按Enter键关闭连接。) Trying 74.125.68.26... Connected to gmail-smtp-in.l.google.com. Escape character is '^]'. 220 mx.google.com ESMTP y22si1641751pll.208 - gsmtp 如果端口25(出站)被阻止,您将看到如下情况: Trying 2607:f8b0:400e:c06::1a... Trying 74.125.195.27... telnet: Unable to connect to remote host: Connection timed out 在这种情况下,您的Postfix无法向其他SMTP服务器发送电子邮件。请您的ISP/主机提供商为您打开它。如果他们拒绝您的请求,您需要设置SMTP中继以绕过端口25阻塞。 还是不能发邮件? 如果端口25(出站)未被阻止,但您仍然无法从自己的邮件服务器向Gmail等其他电子邮件地址发送电子邮件,那么您应该检查邮件日志(/var/log/mail.log)。 sudo nano /var/log/mail.log 例如,有些人可能会在文件中看到以下几行。 host gmail-smtp-in.l.google.com[2404:6800:4003:c03::1b] said: 550-5.7.1 [2a0d:7c40:3000:b8b::2] Our system has detected that 550-5.7.1 this message does not meet IPv6 sending guidelines regarding PTR 550-5.7.1 records and authentication. Please review 550-5.7.1 for more information 这意味着您的邮件服务器正在使用IPv6发送电子邮件,但您没有设置IPv6记录。你应该去你的DNS管理员那里,为邮件设置AAAA记录。你的领域。com,那么您应该为IPv6地址设置PTR记录,这将在步骤9中讨论。 如何禁用灰色列表 默认情况下,iRedMail已启用GreyList,这会告诉其他发送SMTP的服务器在几分钟后重试。这主要有助于阻止垃圾邮件,但也会降低用户体验。如果您希望禁用灰色列表,请按照以下说明操作。 向/opt/iredapd/settings添加写入权限。py文件。 sudo chmod 600 /opt/iredapd/settings.py 然后编辑配置文件。 sudo nano /opt/iredapd/settings.py 找到下面这行。 plugins = ["reject_null_sender", "wblist_rdns", "reject_sender_login_mismatch", "greylisting", "throttle", "amavisd_wblist", "sql_alias_access_policy"] 从列表中删除“灰色列表”。保存并关闭文件。然后重新启动iRedApp。 sudo systemctl restart iredapd 将配置文件更改回只读模式。 sudo chmod 400 /opt/iredapd/settings.py 第8步:在计算机或移动设备上使用邮件客户端 启动你的桌面电子邮件客户端,比如Mozilla Thunderbird,并添加一个邮件帐户。如果Thunderbird发现您的邮件服务器配置如下,只需单击“完成”按钮,您就可以阅读和发送电子邮件。 如果Thunderbird没有找到您的邮件服务器配置,请单击手动配置按钮输入您的邮件服务器详细信息。 在“传入服务器”部分,选择IMAP协议,输入mail。你的领域。com作为服务器名,选择端口143和STARTTLS。选择普通密码作为身份验证方法。 在“发送”部分,选择SMTP协议,输入mail。你的领域。com作为服务器名,选择端口587和STARTTLS。选择普通密码作为身份验证方法。 提示:您还可以在端口993上使用带有SSL/TLS加密的IMAP。 故障2阻止您自己的IP地址 如果您犯了一个错误,多次登录邮件服务器失败,那么邮件服务器上的Fail2ban服务可能会阻止您的IP地址。你可以通过编辑监狱将你的IP地址添加到白名单中。本地文件。 sudo nano /etc/fail2ban/jail.local 将您自己的IP地址添加到忽略列表中,如下所示。将12.34.56.78替换为您的真实IP地址。 ignoreip = 12.34.56.78 127.0.0.1 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 保存并关闭文件。然后重启Fail2ban。 sudo systemctl restart fail2ban 第9步:提高电子邮件交付能力 为了防止您的电子邮件被标记为垃圾邮件,您应该设置PTR、SPF、DKIM和DMARC记录。 PTR记录 指针记录或PTR记录将IP地址映射到FQDN(完全限定域名)。它与A记录相对应,用于反向DNS查找,这有助于阻止垃圾邮件发送者。如果没有找到发送服务器的PTR记录,许多SMTP服务器会拒绝电子邮件。 要检查PTR记录中的IP地址,请运行以下命令: dig -x IP-address +short 或 host IP-address PTR记录不由您的域注册器管理。它由提供IP地址的人管理。由于您从主机提供商或ISP获得IP地址,而不是从域注册商获得,因此您必须在主机提供商的控制面板中为您的IP设置PTR记录,或者询问ISP。它的值应该是邮件服务器的主机名:mail。你的领域。通用域名格式。如果您的服务器使用IPv6地址,请确保也为您的IPv6地址添加PTR记录。 要编辑Kamatera VP的反向DNS记录,请登录Kamatera客户端区域,然后打开支持票证,告诉他们为服务器IP地址添加PTR记录,以将IP地址指向邮件。你的领域。通用域名格式。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。 SPF记录 SPF(发件人策略框架)记录指定允许哪些主机或IP地址代表域发送电子邮件。您应该只允许您自己的电子邮件服务器或ISP的服务器为您的域发送电子邮件。在DNS管理界面中,创建一个新的TXT记录,如下所示。 哪里: TXT表示这是一条TXT记录。 在名称字段中输入@代表主域名。 v=spf1表示这是一条SPF记录,版本为spf1。 mx意味着mx记录中列出的所有主机都被允许为您的域发送电子邮件,而所有其他主机都被禁止。 ~all表示来自您域的电子邮件应该只来自SPF记录中指定的主机。来自其他主机的电子邮件将被标记为伪造。 要检查您的SPF记录是否传播到公共互联网,您可以在Linux机器上使用dig实用程序,如下所示: dig your-domain.com txt txt选项告诉dig我们只想查询txt记录。 DKIM记录 DKIM(DomainKeys Identified Mail)使用私钥对从您的域发送的电子邮件进行数字签名。接收SMTP服务器使用在DNS DKIM记录中发布的公钥验证签名。 iRedMail脚本会自动为服务器配置DKIM。唯一要做的就是在DNS管理器中创建DKIM记录。运行以下命令以显示DKIM公钥。 sudo amavisd -c /etc/amavisd/amavisd.conf showkeys DKIM公钥在括号中。 然后在DNS管理器中,创建一个TXT记录,输入dkim_名称字段中的domainkey。复制括号中的所有内容并粘贴到值字段中。删除所有双引号和换行符。 保存更改后,运行以下命令测试DKIM记录是否正确。 sudo amavisd -c /etc/amavisd/amavisd.conf testkeys 如果DKIM记录正确,测试将通过。 TESTING#1 linuxbabe.com: dkim._domainkey.linuxbabe.com => pass 请注意,您的DKIM记录可能需要一些时间才能传播到Internet。根据您使用的域注册器,您的DNS记录可能会立即传播,或者传播可能需要24小时。你可以去https://www.dmarcanalyzer.com/dkim/dkim-check/,输入dkim作为选择器,并输入您的域名以检查dkim记录传播。 DMARC记录 DMARC代表基于域的消息身份验证、报告和一致性。DMARC可以帮助接收电子邮件服务器识别合法电子邮件,并防止电子邮件欺骗使用您的域名。 要创建DMARC记录,请转到DNS管理器并添加TXT记录。在名称字段中,输入_dmarc。在“值”字段中,输入以下内容。(您应该创建[email ;protected]电子邮件地址。) v=DMARC1; p=none; pct=100; rua=mailto:[email protected] 上述DMARC记录是一个安全的起点。如果你想阅读DMARC的完整解释,请查看以下文章。请注意,这是可选的。 创建DMARC记录以保护您的域名免受电子邮件欺骗 第10步:测试电子邮件分数和位置 创建PTR、SPF、DKIM记录后,转到https://www.mail-tester.com.你会看到一个独特的电子邮件地址。从你的域名发送电子邮件到此地址,然后检查你的分数。如你所见,我得了满分。在测试结果中,您应该检查您的PTR记录、SPF和DKIM记录是否有效。 邮件测试员。com只能显示发件人分数。还有另一个名为GlockApps的服务,可以让你检查你的电子邮件是否被放在收件人的收件箱或垃圾邮件文件夹中,或者被直接拒绝。它支持许多流行的电子邮件提供商,如Gmail、Outlook、Hotmail、YahooMail、iCloud mail等。 如果你的电子邮件仍被标记为垃圾邮件呢? 在这篇文章中,我有更多提示:如何阻止你的电子邮件被标记为垃圾邮件。虽然这需要一些时间和精力,但在应用这些技巧后,你的电子邮件最终会被放入收件箱。 如果您的电子邮件被Microsoft邮箱拒绝怎么办? 微软似乎正在使用一个内部黑名单来屏蔽许多合法的IP地址。如果您的电子邮件被Outlook或Hotmail拒绝,您需要提交发件人信息表。之后,Outlook/Hotmail将接受您的电子邮件。 添加多个邮件域 我写这篇文章是为了向您展示如何在iRedMail中添加多个邮件域。 启用SMTPS端口465 如果要使用Microsoft Outlook客户端,则需要在Postfix SMTP服务器中启用SMTPS端口465。 故障排除 首先,请使用至少4GB内存的VPS。在1GB RAM VPS上运行iRedMail会导致数据库、SpamAssassin或ClamAV因内存不足而被终止。如果你真的想使用1GB内存的VPS,你会丢失收到的电子邮件,并有其他不良后果。 如果无法访问iRedMail web界面,如502网关错误,则应检查/var/log/Nginx/目录中的Nginx日志以找到线索。您可能还需要检查邮件日志/var/log/maillog。 检查各种服务是否正在运行。 systemctl status postfix systemctl status dovecot systemctl status nginx systemctl status mariadb systemctl status [email protected] systemctl status amavisd 如果启用了防火墙,则应在防火墙中打开以下端口。 HTTP port: 80 HTTPS port: 443 SMTP port: 25 Submission port: 587 (and 465 if you are going to use Microsoft Outlook mail client) IMAP port: 143 and 993 如果你想使用UFW防火墙,请查看我的指南:Debian和Ubuntu上的UFW防火墙入门。 如何更新TLS证书 让我们加密颁发的TLS证书仅在90天内有效,设置Cron作业以自动续订证书非常重要。您可以运行以下命令来续订证书。 sudo certbot renew -w /var/www/html 您可以使用--dry run选项来测试更新过程,而不是进行真正的更新。 sudo certbot renew -w /var/www/html --dry-run 如果在续订TLS证书时看到以下错误。 The client lacks sufficient authorization :: Invalid response 然后需要创建隐藏目录。 sudo mkdir -p /var/www/html/.well-known/acme-challenge 并将www数据设置为webroot的所有者。 sudo chown www-data:www-data /var/www/html/ -R 另外,编辑SSL虚拟主机/etc/nginx/sites enabled/00默认SSL。conf.添加以下行。 location ~ /.well-known/acme-challenge { root /var/www/html/; allow all; } 保存并关闭文件。测试Nginx配置并重新加载。 sudo nginx -t sudo systemctl reload nginx 创建Cron作业 如果现在试运行成功,您可以创建Cron作业来自动续订证书。只需打开root用户的crontab文件。 sudo crontab -e 然后在文件底部添加以下行。 @daily certbot renew -w /var/www/html/ --quiet && systemctl reload postfix dovecot nginx 重新加载Postfix、Dovecot和Nginx是使这些程序获取新证书和私钥所必需的。 面向高级用户 您可能需要自定义SpamAssassin内容过滤器,以便更好地检测垃圾邮件。 通过检查Postfix/SpamAssassin中的标题和正文来阻止垃圾邮件 如果您的网站和邮件服务器运行在两个不同的VP(虚拟专用服务器)上,您可以在网站和邮件服务器之间设置SMTP中继,以便您的网站可以通过邮件服务器发送电子邮件。请参阅下面的文章。 在CentOS/RHEL上的2台后缀SMTP服务器之间设置SMTP中继 收尾 就这样!我希望本教程能帮助您使用iRedMail在CentOS 7上设置邮件服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
设置SMTP&;带有HAProxy的IMAP代理(Debian、Ubuntu、CentOS)
在之前的教程中,我们讨论了如何在Linux(Ubuntu版本、CentOS/RHEL版本)上从头开始设置邮件服务器,以及如何使用iRedMail或Modoboa快速设置自己的邮件服务器,而无需手动配置邮件服务器堆栈的每个组件。本教程将向您展示如何使用HAProxy为邮件服务器设置SMTP和IMAP代理。 什么时候需要SMTP和IMAP代理? 有些人在家里运行电子邮件服务器,但可能存在以下问题: 端口25被阻塞。 它们没有静态IP地址。 他们无法创建PTR记录。 如果端口25被阻止,则无法直接向收件人发送电子邮件。如果你没有静态IP地址或PTR记录,你的电子邮件很可能会被拒绝或进入垃圾邮件文件夹。如果遇到这种情况,可以在数据中心运行VPS(虚拟专用服务器),并将其用作邮件服务器的代理。VPS有一个静态IP地址,您可以为该IP地址创建PTR记录。其他电子邮件服务器会认为VPS运行您的邮件服务,当您发送电子邮件时,他们会认为电子邮件来自您的VPS。 是的,您也可以使用SMTP中继服务(如Sendinblue)来解决这些问题,但每天和每月可以发送多少电子邮件是有限制的。如果你升级到Mailjet的付费账户,每月至少要花25美元。你发送的电子邮件越多,你每月的花费就越高。如果你运行VPS并设置邮件代理,无论你要发送多少封邮件,每月都要花费大约10美元。 如果为很多人运行邮件服务器,可能需要设置邮件代理以实现负载平衡和高可用性。在本文中,我将使用HAProxy设置SMTP和IMAP代理,这是一个免费、开源的高可用性负载平衡器和代理服务器,用于基于TCP和HTTP的应用程序。 步骤1:为邮件代理选择正确的VP 你需要一个副总裁 允许您创建PTR记录 不会阻塞端口25 允许您无限制地发送无限电子邮件。 并非所有VPS提供商都满足上述3个要求。例如,DigitalOcean会阻塞端口25,但不会解锁端口25。另一个问题是,像DigitalOcean这样的大型知名主机提供商被垃圾邮件发送者滥用。通常,服务器IP地址在几个黑名单上。 我在ScalaHost和Kamatera VPS上运行邮件服务器。在设置邮件服务器时,我总是推荐它们。对于不需要太多CPU和RAM的邮件代理,可以选择Kamatera VPS。单CPU 1GB内存计划每月只需花费4美元,您将获得一个月的免费服务。您可以按照下面的教程创建Kamatera VPS。 如何在Kamatera上创建Linux VPS服务器 您可以为VPS选择任何Linux发行版,但我建议您使用Debian、Ubuntu或CentOS。 要登录到服务器,可以使用SSH客户端。如果您在计算机上使用Linux或macOS,只需打开一个终端窗口并运行以下命令即可登录服务器。将12.34.56.78替换为VPS的IP地址。 ssh [email protected]12.34.56.78 系统将要求您输入密码。如果您使用的是Windows,请阅读下面关于如何使用SSH客户端的文章。 在Windows上使用SSH登录Linux服务器的3种方法 第2步:在VPS上设置VPN服务器 如果你家里有一个动态IP地址,那么你需要在你的VPS上设置一个VPN服务器,这样你的VPS就可以与你的邮件服务器通信,而不会因为IP地址的改变而中断。VPN服务器还可以帮助您绕过端口25阻塞。 您可以按照以下教程之一在VPS上设置WireGuard VPN。为什么我要选择WireGuard而不是像OpenVPN这样的其他VPN协议?因为WireGuard允许您为VPN客户端分配静态专用IP地址。 在Ubuntu上设置自己的WireGuard VPN服务器 在Debian上设置自己的WireGuard VPN服务器 在CentOS上设置自己的WireGuard VPN服务器 按照上述文章中的说明操作时,您的VPS是VPN服务器,而您的邮件服务器是VPN客户端。VPS将成为邮件服务器的默认网关,邮件服务器上的所有出站流量将通过VPN进行隧道传输,因此接收SMTP服务器(Gmail、Hotmail、Yahoo mail等)时会认为您的邮件来自VPS。如果你想通过VPS发送邮件,但让其他类型的流量使用原始网关,WireGuard还允许你通过启用策略路由来实现。 你应该为你的VPS设置一个PTR记录,也就是反向DNS记录。Kamatera不允许您在控制面板中编辑PTR记录。相反,你需要打开一张支持票,告诉他们为你添加PTR记录。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。告诉支持团队将服务器IP地址的PTR记录更新为mail。你的领域。通用域名格式。 第3步:在防火墙中打开端口并设置权限 VPS需要在防火墙中打开端口25、587、465、143和993。运行以下命令打开这些端口。 Debian/Ubuntu: sudo ufw allow 25,587,465,143,993/tcp CentOS: sudo firewall-cmd --permanent --add-service={smtp,smtp-submission,smtps,imap,imaps} sudo systemctl reload firewalld 邮件服务器需要向VPS打开各种端口。运行以下命令。 Debian/Ubuntu: sudo ufw insert 1 allow in from 10.10.10.0/24 CentOS: sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" accept' sudo systemctl reload firewalld 10.10.10.0/24是VPN服务器创建的专用IP范围,因此VPS可以访问邮件服务器上的所有端口。 在CentOS上配置SELinux 在本教程的后面部分,VPS上的HAProxy需要绑定到各种电子邮件端口,如25、587、465、143和993,但SELinux禁止这样做。如果在VPS上使用CentOS,则需要运行以下命令以允许HAProxy绑定到这些端口。 sudo setsebool -P haproxy_connect_any 1 第4步:设置SMTP代理以接收电子邮件 现在,您需要设置SMTP代理,以便其他邮件服务器可以通过VPS向您自己的邮件服务器发送电子邮件。SSH到VPS中并安装HAProxy。 Debian/Ubuntu sudo apt install haproxy 森托斯 sudo dnf install haproxy 然后编辑HAProxy主配置文件。 sudo nano /etc/haproxy/haproxy.cfg 在文件末尾添加以下行。将12.34.56.78替换为VPS的公共IP地址。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。 frontend ft_smtp bind 12.34.56.78:25 mode tcp timeout client 1m log global option tcplog default_backend bk_smtp backend bk_smtp mode tcp log global option tcplog timeout server 1m timeout connect 7s server postfix 10.10.10.101:2525 send-proxy 上述配置将使HAProxy监听端口25,并将SMTP连接传递到邮件服务器的端口2525。保存并关闭文件。重新启动HAProxy。 sudo systemctl restart haproxy 并在启动时启用自动启动。 sudo systemctl enable haproxy 要使用HAProxy作为Postfix SMTP服务器的反向代理,需要在Postfix中启用Postscreen。SSH连接到邮件服务器并编辑Postfix主配置文件。 sudo nano /etc/postfix/master.cf 在该文件开头添加以下行。将10.10.10.101替换为VPN服务器分配的邮件服务器的专用IP地址。这将在端口2525上启用Postscreen,它可以接受来自VPS的HAProxy连接。Postfix能够从HAProxy获得SMTP客户端的原始IP地址。 10.10.10.101:2525 inet n - - - 1 postscreen -o postscreen_upstream_proxy_protocol=haproxy -o postscreen_cache_map=btree:$data_directory/postscreen_2525_cache -o syslog_name=postfix/2525 然后取消对以下三行的注释。(注意:如果您使用iRedMail或Moboba来运行邮件服务器,那么默认情况下,以下三行是未注释的。) smtpd pass - - y - - smtpd dnsblog unix - - y - 0 dnsblog tlsproxy unix - - y - 0 tlsproxy 哪里: 第一行将使Postscreen将SMTP连接传递到smtpd守护进程。 dnsblog(DNS黑名单记录器)服务允许记录DNS黑名单检查。 tlsproxy服务为postscreen启用STARTTLS支持,因此当postscreen启用时,远程SMTP客户端可以建立加密连接。 保存并关闭文件。重新启动Postfix以使更改生效。 sudo systemctl restart postfix 现在为你的域名添加一个新的MX记录,如下所示,你的邮件服务器可以通过VPS接收电子邮件。 Record Type Name Mail Server Priority MX @ hostname-of-your-VPS 0 您可以为VPS使用任何主机名,只要它可以解析为VPS的IP地址。为了简单起见,您可以使用邮件服务器的主机名(mail.yourdomain.com)。别忘了为VPS的主机名添加DNS记录。 第5步:设置提交代理 您的用户可以在不使用代理的情况下向邮件服务器提交发送电子邮件,但如果您希望用户能够通过VPS提交发送电子邮件,该怎么办?您需要为Postfix提交服务设置代理。 在VPS上编辑HAProxy主配置文件。 sudo nano /etc/haproxy/haproxy.cfg 在文件末尾添加以下行。将12.34.56.78替换为VPS的公共IP地址。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。 frontend ft_submission bind 12.34.56.78:587 mode tcp timeout client 1m log global option tcplog default_backend bk_submission backend bk_submission mode tcp log global option tcplog timeout server 1m timeout connect 7s server postfix 10.10.10.101:10587 send-proxy frontend ft_smtps bind 12.34.56.78:465 mode tcp timeout client 1m log global option tcplog default_backend bk_smtps backend bk_smtps mode tcp log global option tcplog timeout server 1m timeout connect 7s server postfix 10.10.10.101:10465 send-proxy 通常有两个端口可以接受经过身份验证的用户提交的电子邮件:587和465。在上面的配置中,我们在HAProxy中定义了两个前端,监听端口587和465。它们将分别连接到邮件服务器的端口10587和10465。 保存并关闭文件。重新启动HAProxy。 sudo systemctl restart haproxy 然后在邮件服务器上编辑Postfix主配置文件。 sudo nano /etc/postfix/master.cf 在该文件末尾添加以下行。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。请在-o之前至少允许一个空格(制表符或空格键)。在后缀配置中,前面的空格字符表示此行是前一行的延续。但是,不应在等号(=)之前或之后添加空格。 10.10.10.101:10587 inet n - y - - smtpd -o syslog_name=postfix/10587 -o smtpd_tls_security_level=encrypt -o smtpd_tls_wrappermode=no -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_upstream_proxy_protocol=haproxy 10.10.10.101:10465 inet n - y - - smtpd -o syslog_name=postfix/10465 -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_upstream_proxy_protocol=haproxy 在上面的配置中,我们启用了两个在端口10587和10465上侦听的提交服务,它们支持haproxy协议,因此能够接受来自haproxy的连接。保存并关闭文件。重新启动Postfix以使更改生效。 sudo systemctl restart postfix 第6步:设置IMAP代理 我们还希望用户能够通过VPS登录IMAP服务器,因此我们需要设置IMAP代理。 在VPS上编辑HAProxy主配置文件。 sudo nano /etc/haproxy/haproxy.cfg 在文件末尾添加以下行。将12.34.56.78替换为VPS的公共IP地址。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。 frontend ft_imap bind 12.34.56.78:143 mode tcp default_backend bk_imap backend bk_imap mode tcp balance leastconn stick store-request src stick-table type ip size 200k expire 30m server imap1 10.10.10.101:10143 send-proxy-v2 frontend ft_imaps bind 12.34.56.78:993 mode tcp default_backend bk_imaps backend bk_imaps mode tcp balance leastconn stick store-request src stick-table type ip size 200k expire 30m server imaps1 10.10.10.101:10993 send-proxy-v2 IMAP服务有两个端口:143和993。端口143可以使用STARTTLS,端口993使用隐式TLS,因此在上述配置中,我们在端口143和993的HAproxy监听中添加了两个前端。它们将分别连接到邮件服务器的端口10143和10993。保存并关闭文件。重新启动HAProxy。 sudo systemctl restart haproxy 在邮件服务器上编辑Dovecot配置文件。 sudo nano /etc/dovecot/conf.d/10-master.conf 添加对IMAP和IMAP的HAProxy支持,如下所示。 service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } inet_listener imap_haproxy { port = 10143 haproxy = yes } inet_listener imaps_haproxy { port = 10993 ssl = yes haproxy = yes } } 在上述配置中,我们启用了两个IMAP服务:IMAP_haproxy和imaps_haproxy,分别监听端口10143和10993。它们支持haproxy协议,因此能够接受来自haproxy的连接。保存并关闭文件。 然后我们需要在Dovecot中添加受信任的代理主机。编辑Dovecot主配置文件。 sudo nano /etc/dovecot/dovecot.conf 在该文件末尾添加以下两行。将10.10.10.1替换为VPN服务器的专用IP地址。 haproxy_trusted_networks = 10.10.10.1 haproxy_timeout = 3s 保存并关闭文件。重新启动Dovecot以使更改生效。 sudo systemctl restart dovecot 现在,您应该能够登录IMAP服务器,并通过VPS提交发送的电子邮件。 第7步:设置HTTPS代理 如果希望通过VPS访问Roundcube等网络邮件,请在VPS上编辑HAProxy主配置文件。 sudo nano /etc/haproxy/haproxy.cfg 在文件末尾添加以下行。将12.34.56.78替换为VPS的公共IP地址。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。替换邮件。你的地盘。com与您的网络邮件使用的域名。 frontend https bind 12.34.56.78:443 mode tcp tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } use_backend webmail if { req_ssl_sni -i mail.yourdomain.com } default_backend webmail backend webmail mode tcp option ssl-hello-chk server webmail 10.10.10.101:443 check 保存并关闭文件。然后重启HAProxy。 sudo systemctl restart haproxy 请注意,如果在certbot中使用默认的http-01质询,HTTPS代理可能会干扰Let's Encrypt TLS证书续订。建议在使用certbot续订Let's Encrypt TLS证书时使用dns-01 challenge。 最后的想法 请注意,我们通过添加更多侦听端口(252510587104651014310993),启用了对Postfix和Dovecot的代理支持。我们没有为现有端口(25、587、465、143和993)启用代理支持,因为如果启用,Postfix和Dovecot将只接受来自HAProxy的连接,并拒绝来自其他IP地址(包括本地主机)的连接。这可以防止邮件服务器上运行的webmail或web应用程序使用127.0.0.1:25发送电子邮件,并防止webmail客户端从Dovecot获取电子邮件。发生这种情况时,您可能会看到以下错误。 host mail.example.com refused to talk to me: 421 4.3.2 No system resources 您的Postfix SMTP服务器将在邮件日志中记录以下消息。 postfix/postscreen[1479]: warning: haproxy read: time limit exceeded 配置HAProxy自动重启 我找到了haproxy。CentOS/RHEL上的服务在启动时可能无法启动。错误如下。 Starting frontend ft_smtp: cannot bind socket [23.254.225.226:25] 如果我手动启动服务,它就会工作,这让我很困惑。为了解决这个问题,我们可以编辑haproxy。服务,使其在出现故障时自动重新启动。为了覆盖默认的systemd服务配置,我们创建了一个单独的目录。 sudo mkdir -p /etc/systemd/system/haproxy.service.d/ 然后创建一个文件。 sudo nano /etc/systemd/system/haproxy.service.d/restart.conf 在文件中添加以下行。 [Service] Restart=always RestartSec=5s 保存并关闭文件。然后重新加载系统D。 sudo systemctl daemon-reload Postfix/Dovecot自动重启 还建议在邮件服务器上配置Postfix和Dovecot,以便在出现故障时自动重启。 后缀 创建一个单独的目录。 sudo mkdir -p /etc/systemd/system/postfix.service.d/ 然后创建一个文件。 sudo nano /etc/systemd/system/postfix.service.d/restart.conf 在文件中添加以下行。请注意,在Debian/Ubuntu上,后缀是。服务是一个一次性服务,不允许重启=始终。 [Service] Restart=on-failure RestartSec=5s 保存并关闭文件。然后重新加载系统D。 sudo systemctl daemon-reload 多佛科特 创建一个单独的目录。 sudo mkdir -p /etc/systemd/system/dovecot.service.d/ 然后创建一个文件。 sudo nano /etc/systemd/system/dovecot.service.d/restart.conf 在文件中添加以下行。 [Service] Restart=always RestartSec=5s 保存并关闭文件。然后重新加载系统D。 sudo systemctl daemon-reload 删除IP黑名单 如果你的VPS的IP地址被某个特定的电子邮件服务提供商列入黑名单怎么办?您可以阅读下面的文章,了解如何将您的IP地址从黑名单中删除。 邮件服务器IP黑名单删除提示,以提高电子邮件的可交付性 故障排除提示 如果您向邮件服务器发送电子邮件,但收到以下错误, lost connection with mail.yourdomain.com[xx.xx.xx.xx] while receiving the initial server greeting 这可能是因为VPN连接中断,请验证是否可以从VPN服务器ping到VPN客户端(邮件服务器)。 ping 10.10.10.101 也可能是您没有将邮件服务器防火墙配置为允许从VPN连接(10.10.10.0/24)。在VPN服务器上运行以下命令,查看端口是否打开。Nmap可以通过sudo apt install Nmap安装在VPN服务器上。 sudo nmap 10.10.10.101 验证是否可以远程登录到端口2525上的邮件服务器。 telnet 10.10.10.101 2525 有时,您的HAProxy配置可能会出错。例如,我曾经在HAProxy中有两个默认的_后端指令,如下所示。 frontend ft_smtp bind 12.34.56.78:25 mode tcp timeout client 1m log global option tcplog default_backend bk_smtp default_backend ocserv 这是错误的。如果在前端部分中定义了默认的_后端,则无法在全局部分中定义另一个默认的_后端。相反,您应该像本文中那样,将每个默认的_后端指令放在相应的前端部分。 另一个配置错误是,您可能会意外地在https前端插入其他指令。 frontend https bind 12.34.56.78:443 mode tcp tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } some_other_directives use_backend webmail if { req_ssl_sni -i mail.yourdomain.com } default_backend webmail 替代方法 如果您无法找出服务器环境中的问题,还可以在VPN服务器上使用UFW防火墙设置端口转发。流量将由UFW转发,因此HAProxy根本不会被使用。(无需移除HAProxy。) 如何在UFW中设置端口转发 应将以下端口从VPN服务器转发到邮件服务器。 TCP 25 TCP 587 TCP 465 TCP 143 TCP 993 TCP 80 TCP 443 TCP 110 TCP 995 结论 我希望本教程能帮助您设置SMTP和IMAP代理。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何使用Modoboa在Ubuntu18.04上快速设置邮件服务器
本教程将向您展示如何使用Modoboa在Ubuntu18.04上快速设置自己的电子邮件服务器,这是一个免费的开源邮件托管和管理平台,旨在与Postfix SMTP服务器和Dovecot IMAP/POP3服务器配合使用。 Modoboa是用Python编写的,根据ISC许可条款发布。最新版本是v1。14.0,于2019年7月5日发布。Modoboa的主要特点如下: 默认情况下,Modoboa使用Nginx web服务器为webmail客户端和基于web的管理面板提供服务。 与Postfix和Dovecot兼容。 支持MySQL/MariaDB或PostgreSQL数据库。 在基于web的管理面板中轻松创建无限邮箱和无限邮件域。 在基于web的管理面板中轻松创建电子邮件别名。 webmail客户端提供了一个易于使用的邮件过滤器,帮助您将邮件组织到不同的文件夹。 它可以通过监控电子邮件黑名单和生成DMARC报告来帮助你保护你的域名声誉,这样你的电子邮件就有更好的机会进入收件箱而不是垃圾邮件文件夹。 包括amavis前端,用于阻止垃圾邮件和检测电子邮件中的病毒。 日历和通讯录。 与Let’s Encrypt集成。 包括AutoMX,允许最终用户在桌面或移动邮件客户端中轻松配置邮件帐户。 第一步:选择合适的主机提供商并购买域名 要使用Modoboa设置一个完整的电子邮件服务器,您需要一个至少有3GB内存的服务器,因为安装后,您的服务器将使用超过2GB的内存。 强烈建议您在Ubuntu 18.04服务器的干净安装上安装Modoboa。 本教程是在每月9美元的Kamatera VPS(虚拟专用服务器)上完成的,该服务器具有1个CPU和3GB RAM。他们提供30天的免费试用期。 Kamatera是运行邮件服务器的一个非常好的选择,因为 它们不会阻止端口25,因此您可以发送无限量的电子邮件(事务性电子邮件和时事通讯),而无需在SMTP中继服务上花钱。Kamatera没有任何SMTP限制。你每天可以发送一百万封电子邮件。 IP地址不在任何电子邮件黑名单上。(至少对我来说是这样。我选择了达拉斯数据中心。)你肯定不想被列入可怕的微软Outlook IP黑名单或spamrats黑名单。有些黑名单会屏蔽整个IP范围,你无法从此类黑名单中删除你的IP地址。 您可以编辑PTR记录以提高电子邮件的可交付性。 它们允许你向你的电子邮件订阅者发送时事通讯,而不受每小时或每天的限制。 您可以为一台服务器订购多个IP地址。这对需要发送大量电子邮件的人非常有用。您可以在多个IP地址上传播电子邮件流量,以实现更好的电子邮件交付。 其他VPS提供商,如DigitalOcean阻止了端口25。DigitalOcean不会解锁端口25,因此您需要设置SMTP中继以绕过阻止,这可能会增加您的费用。如果您使用Vultr VPS,则默认情况下端口25被阻止。如果您打开支持票证,他们可以解除阻止,但如果他们决定不允许您的电子邮件发送活动,他们可能会在任何时候再次阻止。如果你使用他们的服务器发送时事通讯,Vultr实际上可能会重新阻止它。 转到Kamatera网站创建帐户,然后在帐户仪表板中创建服务器。 我建议遵循下面链接的教程,在Kamatera上正确设置Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 创建服务器后,Kamatera将向您发送一封包含服务器SSH登录详细信息的电子邮件。要登录到服务器,可以使用SSH客户端。如果您在计算机上使用Linux或macOS,只需打开一个终端窗口并运行以下命令即可登录服务器。将12.34.56.78替换为服务器的IP地址。 ssh [email protected] 系统将要求您输入密码。 你还需要一个域名。我从namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 第2步:创建DNS MX记录 MX记录指定哪个或多个主机处理特定域名的电子邮件。例如,为linuxbabe处理电子邮件的主机。com是邮件。利努克斯宝贝。通用域名格式。如果拥有Gmail账户的人向[email ;protected]发送电子邮件,Gmail服务器将查询linuxbabe的MX记录。通用域名格式。当它发现那封邮件。利努克斯宝贝。com负责接收电子邮件,然后查询邮件记录。利努克斯宝贝。com获取IP地址,从而可以发送电子邮件。 在DNS管理器中,为域名创建MX记录。在名称字段中输入@代表主域名,然后输入mail。你的领域。com在值字段中。 注意:MX记录的主机名不能是其他名称的别名。此外,强烈建议您使用主机名,而不是MX记录的裸IP地址。 DNS管理员可能会要求您输入首选项值(也称为优先级值)。它可以是0到65356之间的任何数字。小数字的优先级高于大数字。您可以为电子邮件服务器输入0,或接受默认值。 创建MX记录后,还需要为邮件创建一个记录。你的领域。com,以便将其解析为IP地址。如果您的服务器使用IPv6地址,请确保添加AAAA记录。 如果使用Cloudflare DNS服务,则在为邮件服务器创建记录时不应启用CDN功能。 第3步:使用Modoboa安装程序在Ubuntu18.04上设置邮件服务器 通过SSH登录服务器,然后运行以下命令来更新软件包。 sudo apt update sudo apt upgrade -y 我强烈建议创建一个sudo用户来管理服务器,而不是使用默认的root用户来提高服务器安全性。运行以下命令创建用户。将用户名替换为首选用户名。 adduser username 然后将用户添加到sudo组。 adduser username sudo 切换到新用户。 su - username 从Github下载modoboa安装程序。 git clone https://github.com/modoboa/modoboa-installer Modoboa是用Python编写的。运行以下命令安装必要的Python软件。 sudo apt-get install python3-virtualenv python3-pip 然后导航到modoboa安装程序目录并创建一个配置文件。替换示例。使用你自己的域名。 cd modoboa-installer sudo ./run.py --stop-after-configfile-check example.com 编辑配置文件安装程序。使用命令行文本编辑器,如nano。 sudo nano installer.cfg 要从Let's Encrypt为邮件服务器获取有效的TLS证书,请在[certificate]部分,将type的值从self signed更改为letsencrypt。 type = letsencrypt 并将电子邮件地址从[email ;protected]更改为您的真实电子邮件地址,用于帐户恢复和重要通知。如果使用默认电子邮件地址,您将无法获取并安装Let's Encrypt certificate。 默认情况下,Modoboa安装程序将安装PostgreSQL数据库服务器,如配置文件中的以下行所示。 [database] engine = postgres host = 127.0.0.1 install = true 如果您想使用MariaDB数据库服务器,那么将引擎从postgres更改为mysql。(Modoboa将安装MariaDB而不是MySQL。) 保存并关闭文件。(要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要退出,请按Ctrl+X。) 接下来,应该使用完全限定的域名(FQDN)作为邮件服务器(如mail)的主机名。实例通用域名格式。运行以下命令设置主机名。 sudo hostnamectl set-hostname mail.example.com 现在我们需要验证DNS记录是否已传播到Internet。根据您使用的域注册器,您的DNS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io,输入邮件服务器的主机名(mail.example.com)以检查DNS传播。 如果DNS记录已传播,请运行以下命令开始安装。(请用主域名(如linuxbabe.com)替换example.com。不要在此命令中使用mail.example.com这样的子域)。 sudo ./run.py --interactive example.com 安装过程可能需要一段时间。在我的服务器上花了10分钟。如果在安装过程中看到错误,可以使用--debug选项查看更详细的输出。 sudo ./run.py --interactive --debug example.com 在Modoboa完成安装后,您可以使用用户名admin和密码登录管理面板。 登录后,您应该转到管理员->;设置->;配置文件以更改密码。 第4步:在Modoboa管理面板中添加邮箱 转到“域”选项卡,然后单击“添加”按钮添加新域。 然后在“名称”字段中输入主域名。强烈建议您启用DKIM签名,这有助于提高您的域声誉。在键选择器字段中,您可以输入一个随机单词,如modoboa。选择2048作为密钥长度。 在下一个屏幕中,您可以选择为您的域创建管理员帐户。SMTP协议要求邮件服务器应该有一个[email ;protected]地址。 点击提交按钮,你的域名将被添加到Modoboa中。 要添加电子邮件地址,请转到“域”选项卡,然后单击您的域名。 然后单击邮箱。 单击添加按钮并选择帐户。 然后选择简单用户作为角色。在用户名字段中输入电子邮件地址,然后输入密码。 在下一个屏幕中,您可以选择为此电子邮件地址创建别名。 单击提交按钮后,将创建电子邮件地址。 第5步:发送测试电子邮件 要登录到网络邮件,您需要先注销管理员帐户,然后输入用户凭据。 登录Modoboa webmail后,您可以将测试电子邮件从您的私人电子邮件服务器发送到其他电子邮件地址,反之亦然。 入站邮件将延迟几分钟,因为默认情况下,Modoboa会启用greylisting,这会告诉其他发送SMTP的服务器在几分钟后重试。这对阻止垃圾邮件很有用。下面的消息位于/var/log/mail中。日志表明已启用灰色列表。 postfix/postscreen[20995]: NOQUEUE: reject: RCPT from [34.209.113.130]:36980: 450 4.3.2 Service currently unavailable; 然而,灰色列表可能相当烦人。您可以通过编辑后缀主配置文件来禁用它。 sudo nano /etc/postfix/main.cf 在文件末尾找到以下几行并注释掉。(在每行开头添加#字符。) postscreen_pipelining_enable = yes postscreen_pipelining_action = enforce postscreen_non_smtp_command_enable = yes postscreen_non_smtp_command_action = enforce postscreen_bare_newline_enable = yes postscreen_bare_newline_action = enforce 保存并关闭文件。然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix 现在你应该可以不用等几分钟就能收到电子邮件了。 添加交换空间 ClamAV用于扫描电子邮件中的病毒。ClamAV可以使用相当数量的RAM。如果您的服务器上没有足够的RAM,ClamAV将无法正常工作,这将阻止您的邮件服务器发送电子邮件。您可以向服务器添加交换文件,以增加服务器上的总RAM。(请注意,在服务器上使用交换空间会降低服务器性能。如果希望获得更好的性能,应升级物理RAM,而不是使用交换空间。) 要在服务器上添加交换空间,首先,使用fallocate命令创建一个文件。例如,在根文件系统中创建一个名为swapfile、容量为1G的文件: sudo fallocate -l 1G /swapfile 然后确保只有root用户可以读写它。 sudo chmod 600 /swapfile 将其格式化为交换: sudo mkswap /swapfile 输出: Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=0aab5886-4dfb-40d4-920d-fb1115c67433 启用交换文件 sudo swapon /swapfile 要在系统启动时装载交换空间,请编辑/etc/fstab文件。 sudo nano /etc/fstab 在该文件底部添加以下行。 /swapfile swap swap defaults 0 0 保存并关闭文件。然后重新加载systemd并重新启动ClamAV。 sudo systemctl daemon-reload sudo systemctl restart clamav-daemon 步骤6:检查端口25(出站)是否被阻止 您的ISP或主机服务提供商不会阻止与服务器端口25的传入连接,这意味着您可以接收来自其他邮件服务器的电子邮件。然而,许多ISP/主机提供商会阻止与其他邮件服务器端口25的传出连接,这意味着您无法发送电子邮件。 如果你的电子邮件没有到达你的其他电子邮件地址,比如Gmail,那么在你的邮件服务器上运行以下命令,检查端口25(出站)是否被阻止。 telnet gmail-smtp-in.l.google.com 25 如果未被阻止,您将看到如下消息,这表明已成功建立连接。(提示:输入quit并按Enter键关闭连接。) Trying 74.125.68.26... Connected to gmail-smtp-in.l.google.com. Escape character is '^]'. 220 mx.google.com ESMTP y22si1641751pll.208 - gsmtp 如果端口25(出站)被阻止,您将看到如下情况: Trying 2607:f8b0:400e:c06::1a... Trying 74.125.195.27... telnet: Unable to connect to remote host: Connection timed out 在这种情况下,您的Postfix无法向其他SMTP服务器发送电子邮件。请您的ISP/主机提供商为您打开它。如果他们拒绝您的请求,您需要设置SMTP中继以绕过端口25阻塞。 还是不能发邮件? 如果端口25(出站)未被阻止,但您仍然无法从自己的邮件服务器向Gmail等其他电子邮件地址发送电子邮件,那么您应该检查邮件日志(/var/log/mail.log)。 sudo nano /var/log/mail.log 例如,有些人可能会在文件中看到以下几行。 host gmail-smtp-in.l.google.com[2404:6800:4003:c03::1b] said: 550-5.7.1 [2a0d:7c40:3000:b8b::2] Our system has detected that 550-5.7.1 this message does not meet IPv6 sending guidelines regarding PTR 550-5.7.1 records and authentication. Please review 550-5.7.1 for more information 这意味着您的邮件服务器正在使用IPv6发送电子邮件,但您没有设置IPv6记录。你应该去你的DNS管理员那里,为邮件设置AAAA记录。你的领域。com,那么您应该为IPv6地址设置PTR记录,这将在步骤8中讨论。 第7步:在计算机或移动设备上使用邮件客户端 启动你的桌面电子邮件客户端,比如Mozilla Thunderbird,并添加一个邮件帐户。 在“传入服务器”部分,选择IMAP协议,输入mail。你的领域。com作为服务器名,选择端口143和STARTTLS。选择普通密码作为身份验证方法。 在“发送”部分,选择SMTP协议,输入mail。你的领域。com作为服务器名,选择端口587和STARTTLS。选择普通密码作为身份验证方法。 您还可以在端口993上使用带有SSL/TLS加密的IMAP。 第8步:提高电子邮件交付能力 为了防止您的电子邮件被标记为垃圾邮件,您应该设置PTR、SPF、DKIM和DMARC记录。 PTR记录 指针记录或PTR记录将IP地址映射到FQDN(完全限定域名)。它与A记录相对应,用于反向DNS查找,这有助于阻止垃圾邮件发送者。如果没有找到发送服务器的PTR记录,许多SMTP服务器会拒绝电子邮件。 要检查PTR记录中的IP地址,请运行以下命令: dig -x IP-address +short 或 host IP-address PTR记录不由您的域注册器管理。它由提供IP地址的组织管理。因为您从主机提供商或ISP获得IP地址,而不是从域注册商获得,所以您必须在主机提供商的控制面板中为您的IP设置PTR记录,或者询问ISP。它的值应该是邮件服务器的主机名:mail。你的领域。通用域名格式。如果您的服务器使用IPv6地址,请确保也为您的IPv6地址添加PTR记录。 要编辑Kamatera VP的反向DNS记录,请登录Kamatera客户端区域,然后打开支持票证,告诉他们为服务器IP地址添加PTR记录,以将IP地址指向邮件。你的领域。通用域名格式。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。 SPF记录 SPF(发件人策略框架)记录指定允许哪些主机或IP地址代表域发送电子邮件。您应该只允许您自己的电子邮件服务器或ISP的服务器为您的域发送电子邮件。在DNS管理界面中,创建一个新的TXT记录,如下所示。 说明: TXT表示这是一条TXT记录。 在名称字段中输入@代表主域名。 v=spf1表示这是一条SPF记录,版本为spf1。 mx意味着mx记录中列出的所有主机都被允许为您的域发送电子邮件,而所有其他主机都被禁止。 ~all表示来自您域的电子邮件应该只来自SPF记录中指定的主机。来自其他主机的电子邮件将被标记为伪造。 要检查您的SPF记录是否传播到公共互联网,您可以在Linux机器上使用dig实用程序,如下所示: dig your-domain.com txt txt选项告诉dig我们只想查询txt记录。 DKIM记录 DKIM(DomainKeys Identified Mail)使用私钥对从您的域发送的电子邮件进行数字签名。接收SMTP服务器使用在DNS DKIM记录中发布的公钥验证签名。 当我们之前在Moboba管理面板中添加域名时,我们启用了DKIM签名,所以签名部分得到了处理。唯一要做的就是在DNS管理器中创建DKIM记录。首先进入Modoboa管理面板,选择你的域名。在DNS部分,单击显示密钥按钮。 公开密钥将被公开。有两种格式。我们只需要绑定/命名格式。 转到DNS管理器,创建一个TXT记录,输入modoboa_名称字段中的domainkey。(回想一下,在管理面板中添加域名时,我们使用了modoboa作为选择器。)复制括号中的所有内容并粘贴到值字段中。删除所有双引号。DNS管理器可能会要求您删除其他无效字符,例如回车符。 请注意,您的DKIM记录可能需要一些时间才能传播到Internet。根据您使用的域注册器,您的DNS记录可能会立即传播,或者传播可能需要24小时。你可以去https://www.dmarcanalyzer.com/dkim/dkim-check/,输入modoboa作为选择器,并输入您的域名以检查DKIM记录传播。 对于感兴趣的人,Modoboa使用OpenDKIM为您的域密钥生成私钥,并验证入站电子邮件的签名。 DMARC记录 DMARC代表基于域的消息身份验证、报告和一致性。DMARC可以帮助接收电子邮件服务器识别合法电子邮件,并防止电子邮件欺骗使用您的域名。 要创建DMARC记录,请转到DNS管理器并添加TXT记录。在名称字段中,输入_dmarc。在“值”字段中,输入以下内容: v=DMARC1; p=none; pct=100; rua=mailto:[email protected] 上述DMARC记录是一个安全的起点。要查看DMARC的完整解释,请查看以下文章。 创建DMARC记录以保护您的域名免受电子邮件欺骗 第7步:测试电子邮件分数和位置 创建PTR、SPF、DKIM记录后,转到https://www.mail-tester.com.你会看到一个独特的电子邮件地址。从你的域名发送电子邮件到此地址,然后检查你的分数。如你所见,我得了满分。 邮件测试员。com只能显示发件人分数。还有另一个名为GlockApps的服务,可以让你检查你的电子邮件是否放在收件人的收件箱或垃圾邮件文件夹中,或者直接被拒绝。它支持许多流行的电子邮件提供商,如Gmail、Outlook、Hotmail、YahooMail、iCloud mail等 如果你的电子邮件仍被标记为垃圾邮件呢? 在这篇文章中,我有更多提示:如何阻止你的电子邮件被标记为垃圾邮件。虽然这需要一些时间和精力,但在应用这些技巧后,你的电子邮件最终会被放入收件箱。 如果您的电子邮件被Microsoft邮箱拒绝怎么办? 微软似乎正在使用一个内部黑名单来屏蔽许多合法的IP地址。如果您的电子邮件被Outlook或Hotmail拒绝,您需要提交发件人信息表。之后,Outlook/Hotmail将接受您的电子邮件。 自动续订让我们加密TLS证书 Modoboa将最新版本的Let's Encrypt client(certbot)安装为/opt/certbot auto。通过执行以下命令,可以找到certbot二进制文件的位置。 sudo find / -name "*certbot*" 让我们加密TLS证书的有效期为90天。要自动续订证书,请编辑root用户的crontab文件。 sudo crontab -e 在该文件末尾添加以下行。 @daily /opt/certbot-auto renew -q && systemctl reload nginx postfix dovecot 保存并关闭文件。这会告诉Cron每天运行certbot续订命令。如果证书还有30天,certbot将续订证书。有必要重新加载Nginx web服务器、Postfix SMTP服务器和Dovecot IMAP服务器,以便他们能够获取新证书。 启用SMTPS端口465 如果要使用Microsoft Outlook客户端,则需要在Postfix SMTP服务器中启用SMTPS端口465。 故障排除 首先,请使用至少有2GB内存的VPS。在1GB RAM VPS上运行Modoboa会导致数据库、SpamAssassin或ClamAV因内存不足而被终止。如果你真的想使用1GB内存的VPS,你会丢失收到的电子邮件,并有其他不良后果。 如果无法访问Modoboa web界面,例如502网关错误,则应检查/var/log/Nginx/目录中的Nginx日志以找到线索。您可能还需要检查邮件日志/var/log/mail。日志 检查各种服务是否正在运行。 systemctl status postfix systemctl status dovecot systemctl status nginx systemctl status mariadb systemctl status clamav-daemon systemctl status amavis systemctl status uwsgi systemctl status supervisor 如果启用了防火墙,则应在防火墙中打开以下端口。 HTTP port: 80 HTTPS port: 443 SMTP port: 25 Submission port: 587 (and 465 if you are going to use Microsoft Outlook mail client) IMAP port: 143 and 993 如果你想使用UFW防火墙,请查看我的指南:Debian和Ubuntu上的UFW防火墙入门。 自动关机 我发现clamav守护进程服务有一种趋势,即使有足够的RAM,也会在没有明确原因的情况下停止。这将使电子邮件延迟1分钟。我们可以通过systemd服务单元将其配置为在停止时自动重启。将原始服务单元文件复制到/etc/systemd/system/目录。 sudo cp /lib/systemd/system/clamav-daemon.service /etc/systemd/system/clamav-daemon.service 然后编辑服务单元文件。 sudo nano /etc/systemd/system/clamav-daemon.service 在[service]部分添加以下两行。 Restart=always RestartSec=3 这样地: [Service] ExecStart=/usr/sbin/clamd --foreground=true # Reload the database ExecReload=/bin/kill -USR2 $MAINPID StandardOutput=syslog Restart=always RestartSec=3 保存并关闭文件。然后重新加载systemd并重新启动clamav守护进程。服务 sudo systemctl daemon-reload sudo systemctl restart clamav-daemon 抱歉,发生内部错误 如果在尝试登录Modoboa管理面板时看到内部错误消息,请编辑设置。py文件。 sudo nano /srv/modoboa/instance/instance/settings.py 打开调试模式。 DEBUG = True 重新启动uwsgi以使更改生效。 sudo systemctl restart uwsgi 接下来,再次尝试登录Modoboa管理面板。这一次,您将看到确切的内部错误。例如,在我的邮件服务器上 database connection isn't set to UTC
-
如何在Ubuntu 20.04服务器上安装AVideo/YouPHPTube
本教程将向您展示如何在Ubuntu20.04上使用AVideo(以前的YouPHPTube)运行自己的视频共享网站。AVideo是YouTube、Vimeo等视频共享网站的开源自托管替代品。有了AVideo,用户可以将视频上传到服务器并与互联网共享。 AVideo功能 无限和同步的直播流,你可以有无限的用户连接到每个直播流。 直接从互联网导入和编码其他网站的视频 从本地视频目录批量编码 制作私人视频 与Youtube完全集成,将视频与Youtube同步 将多种格式的多媒体文件转换为MP4、WebM和MP3文件 支持Amazon S3(简单存储服务) 响应性网站布局。AVideo在任何设备上都令人难以置信。(您可以选择YouTube或Netfilx样式的布局。) 用户频道和用户播放列表 订阅你喜欢的频道 您可以使用AVideo Statistics中的最新指标和报告监控视频的性能。 使用插件扩展站点功能。 搜索引擎优化 iOS和安卓应用可用 AVideo服务器要求 首先,你应该知道,对于视频共享网站来说,单核CPU是不可行的,因为编码过程会占用大量CPU资源。 然后根据站点的用户数量选择服务器规格。 如果你只想用它来分享你自己的视频,你需要一个至少有2个CPU核和4GB内存的服务器。您可以从Contabo购买功能强大的VPS(虚拟专用服务器),成本很低。 如果你希望你的站点有几十个用户,那么你可以考虑Cababo特大VPS,它有10个CPU内核,60GB RAM,1Gb/s端口速度,1.6TB磁盘空间,无限流量,但成本只有26.99欧元/月。 当你的站点增长超过这个范围时,你应该购买一台专用服务器。 在Ubuntu 20.04上安装AVideo的软件要求 AVideo需要PHP和MySQL/MariaDB。要学习本教程,您应该已经设置了灯堆栈或LEMP堆栈。如果您更喜欢使用ApacheWeb服务器,请安装LAMP堆栈。 如何在Ubuntu 20.04上安装LAMP(Apache、MariaDB、PHP)堆栈 如果您更喜欢使用Nginx web服务器,请安装LEMP stack。 如何在Ubuntu 20.04上安装LEMP(Nginx、MariaDB、PHP)堆栈 注:AVideo对Nginx的支持只是实验性的。如果使用Nginx,您的网站可能会出现问题。 你还需要一个域名。我在namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 AVideo由两部分组成。 主要部分是前端流服务器,它允许用户观看现有的视频。 另一部分是编码器,它允许用户上传他们的视频。 公共编码器使用域名https://encoder1.avideo.com.如果你不想让用户在上传视频时离开你的网站,你需要设置你的私人编码器。在本文中,我将向您展示如何进行。不用麻烦了,我们开始吧。 第一步:在Ubuntu 20.04服务器上下载AVideo 通过SSH登录Ubuntu 20.04服务器。然后转到web根目录。 cd /var/www/ 从Github克隆AVideo streamer存储库。 sudo apt install git sudo git clone https://github.com/WWBN/AVideo.git 然后进入目录。 cd AVideo/ 从Github克隆AVideo编码器存储库。 sudo git clone https://github.com/WWBN/AVideo-Encoder.git 它将被保存为AVideo编码器。我们将其重命名为upload,以便用户在上传视频时更好地了解此URL的用途。 sudo mv AVideo-Encoder upload 接下来,我们需要将www数据(web服务器用户)作为web根的所有者。 sudo chown www-data:www-data /var/www/AVideo/ -R 第2步:安装依赖项 AVideo使用FFmpeg对视频进行编码。我们可以从默认的Ubuntu存储库轻松安装FFmpeg。 sudo apt install ffmpeg 要在多媒体文件中读写元信息,我们需要安装libimage exiftool perl包。 sudo apt install libimage-exiftool-perl 您还需要安装一些常见的PHP扩展。 sudo apt install php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-curl php7.4-gd php7.4-xml 要从其他网站获取视频,我们需要安装YouTube DL。虽然它包含在Ubuntu存储库中,但已经过时了。我们将从Python包索引安装YouTube DL,该索引始终包含最新版本的YouTube DL。 sudo apt install python3-pip sudo -H pip3 install youtube-dl 使用最新版本非常重要,否则可能无法从其他网站下载视频。我们可以创建一个Cron作业来自动检查并安装最新版本。 sudo crontab -e 在Crontab文件的末尾添加以下行,尝试每天升级YouTube DL。 @daily sudo -H pip3 install --upgrade youtube-dl > /dev/null 第3步:在MariaDB中创建数据库和用户 使用以下命令登录MariaDB数据库服务器。由于MariaDB现在使用unix_socket插件来验证用户登录,因此无需输入MariaDB根密码。我们只需要在mysql命令前面加上sudo。 sudo mysql 然后为AVideo创建一个数据库。本教程将数据库命名为AVideo。你可以用任何你喜欢的名字。 create database AVideo; 创建数据库用户。同样,您可以使用此用户的首选名称。用首选密码替换密码。 create user AVideo@localhost identified by 'your-password'; 授予此用户在AVideo数据库上的所有权限。 grant all privileges on AVideo.* to AVideo@localhost; 我们还需要为编码器创建一个单独的数据库。 create database AVideoEncoder; 为此数据库创建一个用户。 create user AVideoEncoder@localhost identified by 'your-password'; 授予特权。 grant all privileges on AVideoEncoder.* to AVideoEncoder@localhost; 刷新特权表并退出。 flush privileges; exit; 第4步:设置Web服务器 我们可以使用Apache或Nginx web服务器。 阿帕奇 如果您喜欢Apache,可以使用命令行文本编辑器(如Nano)为AVideo创建一个虚拟主机文件。 sudo nano /etc/apache2/sites-available/avideo.conf 将以下文本放入文件中。用实际数据替换红色文本。我在本教程中使用了一个子域。如果你愿意,你可以使用你的主域名。不要忘记在DNS记录管理器中为域名创建DNS记录。另外,请注意文档根目录区分大小写,不应在末尾添加正斜杠。 <VirtualHost *:80> ServerName tube.yourdomain.com DocumentRoot /var/www/AVideo <Directory /var/www/AVideo> DirectoryIndex index.php Options +FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/avideo.error.log CustomLog ${APACHE_LOG_DIR}/avideo.access.log combined </VirtualHost> 保存并关闭文件。然后启用这个虚拟主机。 sudo a2ensite avideo.conf 我们需要启用重写模块。 sudo a2enmod rewrite 重新启动Apache以使更改生效。 sudo systemctl restart apache2 现在参观地铁。你的地盘。com,您将被重定向到安装向导页面(tube.yourdomain.com/install/index.php)。如果看到的是默认的Apache页面而不是安装向导,则需要禁用默认的虚拟主机。 sudo a2dissite 000-default.conf 然后重启Apache。 在安装向导中输入任何信息之前,我们需要启用HTTPS。 Nginx 如果你更喜欢Nginx,那就创建一个avideo。conf文件位于/etc/nginx/conf.d/目录中。 sudo nano /etc/nginx/conf.d/avideo.conf 将以下文本放入文件中。用实际数据替换红色文本。我在本教程中使用了一个子域。如果你愿意,你可以使用你的主域名。不要忘记在DNS记录管理器中为域名创建DNS记录。还要注意,文档根目录区分大小写。 server { listen 80; server_name tube.yourdomain.com; root /var/www/AVideo; index index.php index.html index.htm; charset utf-8; client_max_body_size 2G; access_log /var/log/nginx/avideo.access.log; error_log /var/log/nginx/avideo.error.log; location ~ /.php$ { fastcgi_split_path_info ^(.+/.php)(/.+)$; fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } # translating Apache rewrite rules in the .htaccess file to Nginx rewrite rules location / { rewrite ^/$ /view/ last; } location /bootstrap { rewrite ^/bootstrap/(.+)$ /view/bootstrap/$1 last; } location /js { rewrite ^/js/(.+)$ /view/js/$1 last; } location /css { rewrite ^/css/(.+)$ /view/css/$1 last; } location /img { rewrite ^/img/(.+)$ /view/img/$1 last; } location /page { rewrite ^/page/([0-9]+)/?$ /view/?page=$1 last; } location /videoOnly { rewrite ^/videoOnly/?$ /view/?type=video last; } location /audioOnly { rewrite ^/audioOnly/?$ /view/?type=audio last; } location = /download { rewrite ^(.*)$ /view/downloadExternalVideo.php last; } location = /downloadNow { rewrite ^(.*)$ /objects/downloadVideo.php last; } location = /getDownloadProgress { rewrite ^(.*)$ /objects/downloadVideoProgress.php last; } location = /about { rewrite ^(.*)$ /view/about.php last; } location = /contact { rewrite ^(.*)$ /view/contact.php last; } location = /sendEmail { rewrite ^(.*)$ /objects/sendEmail.json.php last; } location = /captcha { rewrite ^(.*)$ /objects/getCaptcha.php last; } location /monitor { rewrite ^/monitor/(.+)$ /objects/ServerMonitor/$1 last; } location /cat { rewrite ^/cat/([A-Za-z0-9-]+)/?$ /view/?catName=$1 last; } location /video { rewrite ^/video/([A-Za-z0-9-_.]+)/?$ /view/?videoName=$1 last; } location /videoEmbeded { rewrite ^/videoEmbeded/([A-Za-z0-9-_.]+)/?$ /view/videoEmbeded.php?videoName=$1 last; } location = /upload { rewrite ^(.*)$ /view/mini-upload-form/ last; } location = /fileUpload { rewrite ^(.*)$ /view/mini-upload-form/upload.php last; } location /uploadStatu { rewrite ^/uploadStatus /view/mini-upload-form/videoConversionStatus.php last; } location = /user { rewrite ^(.*)$ /view/user.php last; } location = /users { rewrite ^(.*)$ /view/managerUsers.php last; } location = /users.json { rewrite ^(.*)$ /objects/users.json.php last; } location = /updateUser { rewrite ^(.*)$ /objects/userUpdate.json.php last; } location = /savePhoto { rewrite ^(.*)$ /objects/userSavePhoto.php last; } location = /addNewUser { rewrite ^(.*)$ /objects/userAddNew.json.php last; } location = /deleteUser { rewrite ^(.*)$ /objects/userDelete.json.php last; } location = /recoverPass { rewrite ^(.*)$ /objects/userRecoverPass.php last; } location = /saveRecoverPassword { rewrite ^(.*)$ /objects/userRecoverPassSave.json.php last; } location = /signUp { rewrite ^(.*)$ /view/signUp.php last; } location = /createUser { rewrite ^(.*)$ /objects/userCreate.json.php last; } location = /usersGroups { rewrite ^(.*)$ /view/managerUsersGroups.php last; } location = /usersGroups.json { rewrite ^(.*)$ /objects/usersGroups.json.php last; } location = /addNewUserGroups { rewrite ^(.*)$ /objects/userGroupsAddNew.json.php last; } location = /deleteUserGroups { rewrite ^(.*)$ /objects/userGroupsDelete.json.php last; } location = /ads { rewrite ^(.*)$ /view/managerAds.php last; } location = /addNewAd { rewrite ^(.*)$ /objects/video_adsAddNew.json.php last; } location = /ads.json { rewrite ^(.*)$ /objects/video_ads.json.php last; } location = /deleteVideoAd { rewrite ^(.*)$ /objects/video_adDelete.json.php last; } location /adClickLo { rewrite ^/adClickLog /objects/video_adClickLog.php last; } location = /categories { rewrite ^(.*)$ /view/managerCategories.php last; } location = /categories.json { rewrite ^(.*)$ /objects/categories.json.php last; } location = /addNewCategory { rewrite ^(.*)$ /objects/categoryAddNew.json.php last; } location = /deleteCategory { rewrite ^(.*)$ /objects/categoryDelete.json.php last; } location = /orphanFiles { rewrite ^(.*)$ /view/orphanFiles.php last; } location = /mvideos { rewrite ^(.*)$ /view/managerVideos.php last; } location = /videos.json { rewrite ^(.*)$ /objects/videos.json.php last; } location = /deleteVideo { rewrite ^(.*)$ /objects/videoDelete.json.php last; } location = /addNewVideo { rewrite ^(.*)$ /objects/videoAddNew.json.php last; } location = /refreshVideo { rewrite ^(.*)$ /objects/videoRefresh.json.php last; } location = /setStatusVideo { rewrite ^(.*)$ /objects/videoStatus.json.php last; } location = /reencodeVideo { rewrite ^(.*)$ /objects/videoReencode.json.php last; } location = /addViewCountVideo { rewrite ^(.*)$ /objects/videoAddViewCount.json.php last; } location = /saveComment { rewrite ^(.*)$ /objects/commentAddNew.json.php last; } location /comments { rewrite ^/comments.json/([0-9]+)$ /objects/comments.json.php?video_id=$1 last; } location = /login { rewrite ^(.*)$ /objects/login.json.php last; } location = /logoff { rewrite ^(.*)$ /objects/logoff.php last; } location = /like { rewrite ^(.*)$ /objects/like.json.php?like=1 last; } location = /dislike { rewrite ^(.*)$ /objects/like.json.php?like=-1 last; } location /update { rewrite ^/update/?$ /update/update.php last; } location = /siteConfigurations { rewrite ^(.*)$ /view/configurations.php last; } location = /updateConfig { rewrite ^(.*)$ /objects/configurationUpdate.json.php last; } location = /charts { rewrite ^(.*)$ /view/charts.php last; } location = /upload/index.php { rewrite ^(.*)$ /upload/view/index.php last; } location = /upload/isAdmin { rewrite ^(.*)$ /upload/view/isAdmin.php last; } location = /upload/removeStreamer { rewrite ^(.*)$ /upload/view/removeStreamer.php last; } location = /upload/priority { rewrite ^(.*)$ /upload/view/priority.php last; } location = /upload/status { rewrite ^(.*)$ /upload/view/status.php last; } location = /upload/serverStatus { rewrite ^(.*)$ /upload/view/status.php?serverStatus=1 last; } location = /upload/upload { rewrite ^(.*)$ /upload/view/upload.php last; } location = /upload/listFiles.json { rewrite ^(.*)$ /upload/view/listFiles.json.php last; } location = /upload/deleteQueue { rewrite ^(.*)$ /upload/view/deleteQueue.php last; } location = /upload/saveConfig { rewrite ^(.*)$ /upload/view/saveConfig.php last; } location = /upload/youtubeDl.json { rewrite ^(.*)$ /upload/view/youtubeDl.json.php last; } location = /upload/send.json { rewrite ^(.*)$ /upload/view/send.json.php last; } location = /upload/streamers.json { rewrite ^(.*)$ /upload/view/streamers.json.php last; } location = /upload/queue.json { rewrite ^(.*)$ /upload/view/queue.json.php last; } location = /upload/queue { rewrite ^(.*)$ /upload/view/queue.php last; } location = /upload/login { rewrite ^(.*)$ /upload/objects/login.json.php last; } location = /upload/logoff { rewrite ^(.*)$ /upload/objects/logoff.json.php last; } location /upload/ { rewrite "^/getImage/([A-Za-z0-9=/]+)/([A-Za-z0-9]{3})$" /upload/objects/getImage.php?base64Url=$1&format=$2 last; rewrite "^/getImageMP4/([A-Za-z0-9=/]+)/([A-Za-z0-9]{3})/([0-9.]+)$" /upload/objects/getImageMP4.php?base64Url=$1&format=$2&time=$3 last; } location /upload/getSpiritsFromVideo { rewrite ^/getSpiritsFromVideo/([A-Za-z0-9=/]+)/([0-9]+)/([0-9]+)$ /upload/objects/getSpiritsFromVideo.php?base64Url=$1&tileWidth=$2&totalClips=$3 last; } location /upload/getLinkInfo { rewrite ^/getLinkInfo/([A-Za-z0-9=/]+)$ /upload/objects/getLinkInfo.json.php?base64Url=$1 last; } } 保存并关闭文件。然后测试Nginx配置。 sudo nginx -t 如果测试成功,请重新加载Nginx以使更改生效。 sudo systemctl reload nginx 现在参观地铁。你的地盘。com,您将被重定向到安装向导页面(tube.yourdomain.com/install/index.php)。在安装向导中输入任何信息之前,我们需要启用HTTPS。 第5步:启用HTTPS 为了加密HTTP流量,我们可以通过安装Let's encrypt颁发的免费TLS证书来启用HTTPS。运行以下命令在Ubuntu20.04服务器上安装Let's Encrypt client(certbot)。 sudo apt install certbot 如果使用Apache,还需要安装Certbot Apache插件。 sudo apt install python3-certbot-apache 并运行此命令以获取并安装TLS证书。 sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d tube.yourdomain.com 如果使用Nginx,请安装Certbot Nginx插件。 sudo apt install python3-certbot-nginx 接下来,运行以下命令获取并安装TLS证书。 sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d tube.yourdomain.com 哪里 --nginx:使用nginx插件。 --apache:使用apache插件。 --同意:同意服务条款。 --重定向:通过301重定向强制HTTPS。 --hsts:为每个HTTP响应添加严格的传输安全头。强制浏览器始终对域使用TLS。防止SSL/TLS剥离。 --装订ocsp:启用ocsp装订。有效的OCSP响应被绑定到服务器在TLS期间提供的证书上。 现在应获得证书并自动安装。 第6步:使用安装向导完成安装 现在去看电视。你的地盘。com和安装向导将出现。在左侧,您可以看到服务器是否满足要求。 如果使用Nginx,可以忽略以下消息。 Your server is nginx/1.14.2, you must install Apache. 如您所见,PHP post_max_大小应至少为100M,upload_max_文件大小应至少为100M。我们需要编辑php。ini文件来更改这两个值。如果使用ApacheWeb服务器,那么 sudo nano /etc/php/7.4/apache2/php.ini 如果将Nginx与PHP-FPM一起使用,则需要编辑PHP的FPM版本。ini文件。 sudo nano /etc/php/7.4/fpm/php.ini 找到下面两行。 post_max_size = 8M upload_max_filesize = 2M 根据要上传的视频文件大小更改值。例如,如果允许上传1G视频文件,则 post_max_size = 1024M upload_max_filesize = 1024M 保存并关闭文件。重新启动Apache以使更改生效。 sudo systemctl restart apache2 如果将Nginx与PHP-FPM一起使用,则重新启动PHP-FPM。 sudo systemctl restart php7.4-fpm 现在刷新AVideo安装向导页面。你的服务器应该通过所有要求。现在,在右侧,您可以输入视频网站的标题,并设置系统管理员密码。输入之前创建的AVideo数据库名称、用户和密码。(注意:应该使用主数据库,而不是编码器数据库。还要注意区分大小写。)  ; 单击“立即安装”按钮,AVideo应该已成功安装。 现在我们需要删除/var/www/AVideo/install/目录。 sudo rm /var/www/AVideo/install/ -r 单击转到主页按钮,您将看到AVideo主页。 您可以单击左侧的下拉菜单,以管理员用户身份登录,并使用刚才设置的密码。 第7步:设置编码器 去https://tube.yourdomain.com/upload/.您将被重定向到编码器设置向导。如果没有自动重定向,则可以手动输入安装向导URL。 https://tube.yourdomain.com/upload/install/index.php/ 左侧将显示您的服务器是否满足AVideo编码器的要求。 如果使用Nginx,可以忽略以下消息。 Your server is nginx/1.14.2, you must install Apache. 如您所见,PHP最大执行时间应至少为7200,PHP内存限制应至少为512M。我们需要编辑php。ini文件来更改这两个值。如果使用ApacheWeb服务器,那么 sudo nano /etc/php/7.4/apache2/php.ini 如果将Nginx与PHP-FPM一起使用,则需要编辑PHP的FPM版本。ini文件。 sudo nano /etc/php/7.4/fpm/php.ini 找到下面两行。 max_execution_time = 30 memory_limit = 128M 更改值。 max_execution_time = 7200 memory_limit = 512M 请注意,如果稍后的视频编码中途停止,则需要增加最大执行时间,或升级CPU。 保存并关闭文件。重新启动Apache以使更改生效。 sudo systemctl restart apache2 如果将Nginx与PHP-FPM一起使用,则重新启动PHP-FPM。 sudo systemctl restart php7.4-fpm 现在刷新AVideo编码器安装向导页面。你的服务器应该通过所有要求。现在,在右侧,您需要输入之前创建的AVideoEncoder数据库名称、用户和密码。注意区分大小写,并输入拖缆站点的管理员密码。  ; 单击“立即安装”按钮,将安装AVideo编码器。 删除安装目录。 sudo rm /var/www/AVideo/upload/install/ -r 然后转到主页。 第8步:更改编码器URL 默认情况下,AVideo使用公共编码器上传视频。要使用自己的编码器,请以管理员身份登录AVideo(不是AVideo encoder),然后从左侧栏进入管理面板。 转到设置->;网站设置->;高级配置。将编码器URL更改为https://tube.yourdomain.com/upload/.保存设置,清除缓存目录并生成新的站点地图。 现在退出并重新登录。如果你点击右上角的“视频和音频编码”按钮,你将被带到自己的编码器上传视频。需要注意的是,编码速度取决于服务器的CPU能力。它不需要太多RAM,因为编码器会将视频复制到上传目录(/var/www/AVideo/upload/videos)中的临时文件中。 第9步:配置SMTP 要发送电子邮件(如帐户注册、密码重置等),需要配置SMTP服务器。如果您想使用自己的邮件服务器向客户发送电子邮件,请查看以下文章以设置自己的邮件服务器。请注意,我强烈建议在全新干净的操作系统上运行iRedMail邮件服务器。在具有其他web应用程序的操作系统上安装iRedMail可能会失败,并可能破坏现有的应用程序。 如何使用iRedMail在Ubuntu20.04上轻松设置电子邮件服务器 如果你想使用SMTP中继服务,我建议使用Mailjet。您可以按照下面的教程在AVideo服务器上设置SMTP中继。 如何使用Mailjet在Ubuntu上设置后缀SMTP中继 您可以通过进入管理面板测试电子邮件发送->;设置->;网站设置->;高级配置,您可以找到SMTP配置。使用以下设置。 启用SMTP。 启用SMTP验证。 在SMTP安全中使用tls。 使用587作为SMTP端口。 输入邮件服务器的主机名。 输入SMTP用户名和密码。 单击“保存”按钮保存设置,然后单击“测试电子邮件”查看其是否工作。  ; 启用TCP BBR 对于视频流服务器,建议按照本文中的说明在Linux内核中启用TCP BBR拥塞控制算法。 如何通过启用TCP BBR轻松提升Ubuntu网络性能 移动应用 你可以在谷歌Play Store上搜索AVideo,或在Apple Store上搜索YPT Mobile,下载免费的android应用程序或iOS应用程序。白标移动应用需要付费许可证。 故障排除 如果你的AVideo主页未能加载一些CSS和JavaScript资源, 很可能您在Apache或Nginx虚拟主机文件中为web根目录添加了额外的正斜杠。而不是使用 DocumentRoot /var/www/AVideo/ 你应该使用 DocumentRoot /var/www/AVideo 如果主网站工作不正常,可以查看日志文件/var/www/AVideo/videos/youphptube。日志如果编码器工作不正常,可以在/var/www/AVideo/upload/videos/youphptube上查看日志文件。日志 其他花絮 编码视频时,可以选择分辨率(低分辨率、SD分辨率、HD分辨率)。如果你使用AVideo作为个人视频流网站,我建议你只选择高清分辨率,以减少编码时间和节省磁盘空间。如果您已经将视频编码为所有3种分辨率,则可以转到AVideo视频目录(/var/www/AVideo/videos),删除低分辨率和SD分辨率的视频。 cd /var/www/AVideo/videos/ sudo rm *Low.mp4 sudo rm *SD.mp4 如何从视频网站下载所有视频 您可以使用youtube dl命令行实用程序下载所有视频。首先,你需要转到AVideo dashboard,然后转到视频列表页面并向下滚动到底部,单击下载视频列表(permalink.txt文件)按钮。您将看到所有视频的URL列表。 接下来,打开一个终端,用文本编辑器创建一个txt文件,从网页复制URL并粘贴到文件中。然后可以运行以下命令下载视频。替换视频列表。使用您自己的文件名。 youtube-dl -a video-list.txt 收尾 我希望本教程能帮助您在Ubuntu 20.04服务器上安装AVideo。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
在Debian 10 Buster上设置OpenConnect VPN服务器(ocserv)
本教程将向您展示如何通过在Debian 10 Buster上安装OpenConnect VPN服务器来运行自己的VPN服务器。OpenConnect VPN服务器,又名ocserv,是Cisco AnyConnnect VPN协议的开源实现,广泛应用于企业和大学。AnyConnect是一种基于SSL的VPN协议,允许单个用户连接到远程网络。 为什么要设置自己的VPN服务器? 也许你是VPN服务提供商或系统管理员,这就要求你设置自己的VPN服务器。 你不信任VPN服务提供商的禁止登录策略,所以你选择了自主机路径。 您可以使用VPN来实施网络安全策略。例如,如果您运行自己的电子邮件服务器,则可以通过在防火墙中创建IP地址白名单,要求用户仅从VPN服务器的IP地址登录。因此,您的电子邮件服务器经过加固以防止黑客活动。 也许你只是想知道VPN服务器是如何工作的。 OpenConnect VPN服务器的功能 轻便快速。在我的测试中,我可以通过OpenConnect VPN观看YouTube 4K视频。YouTube在我的国家(中国)被屏蔽。 在Linux和大多数BSD服务器上运行。 与Cisco AnyConnect客户端兼容 有针对Linux、macOS、Windows和OpenWRT的OpenConnect客户端软件。对于Android和iOS,您可以使用Cisco AnyConnect客户端。 支持密码身份验证和证书身份验证 支持RADIUS记帐。 易于设置 我特别喜欢这样一个事实:与其他VPN技术相比,最终用户使用OpenConnect VPN非常简单方便。每当我在我的计算机上安装Linux发行版,并想快速解锁网站或隐藏我的IP地址时,我就会安装OpenConnect客户端,只需两行命令即可连接到服务器: sudo apt install openconnect sudo openconnect -b vpn.mydomain.com 此外,还有用于Fedora、RHEL、CentOS、Arch Linux和OpenSUSE的OpenConnect VPN客户端。您可以使用软件包管理器轻松安装它。 sudo dnf install openconnect sudo yum install openconnect sudo pacman -S openconnect 要求 要学习本教程,您需要一个VPS(虚拟专用服务器),可以自由访问被屏蔽的网站(在您的国家或互联网过滤系统之外)。我推荐Kamatera VPS,其特点是: 30天免费试用。 起价为每月4美元(1GB内存) 基于KVM的高性能VPS 世界各地的9个数据中心,包括美国、加拿大、英国、德国、荷兰、香港和ISRALL。 按照下面链接的教程在Kamatera创建Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 一旦你有了一个运行Debian 10 buster的VPS,请按照下面的说明操作。 您还需要一个域名来为OpenConnect VPN启用HTTPS。我从namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 步骤1:在Debian 10 Buster上安装OpenConnect VPN服务器 通过SSH登录Debian 10 Buster服务器。然后使用apt从Debian存储库安装ocserv包。 sudo apt update sudo apt install ocserv 一旦安装,OpenConnect VPN服务器将自动启动。您可以通过以下方式检查其状态: systemctl status ocserv 样本输出: ● ocserv.service - OpenConnect SSL VPN server Loaded: loaded (/lib/systemd/system/ocserv.service; enabled; vendor preset: enabled Active: active (running) since Thu 2017-11-30 05:45:07 UTC; 11s ago Docs: man:ocserv(8) Main PID: 19235 (ocserv-main) CGroup: /system.slice/ocserv.service ├─19235 ocserv-main └─19242 ocserv-secm 提示:如果上述命令没有立即退出,您可以按Q键重新控制终端。 如果它没有运行,则可以从以下内容开始: sudo systemctl start ocserv 默认情况下,OpenConnect VPN服务器监听TCP和UDP端口443。如果web服务器正在使用它,则VPN服务器无法启动。稍后我们将在OpenConnect VPN配置文件中看到如何更改端口。 如果你的服务器上有防火墙,那么你需要打开端口80和443。例如,如果使用UFW,则运行以下命令。 sudo ufw allow 80/tcp sudo ufw allow 443/tcp 第2步:在Debian 10 Buster服务器上安装Let's Encrypt Client(Certbot) 与ocserv一起安装的gnutls bin包提供了创建您自己的CA和服务器证书的工具,但我们将获取并安装Let's Encrypt certificate。使用Let’s Encrypt证书的优点是,它是免费的,更容易设置,并且受VPN客户端软件的信任。 运行以下命令在Debian 10上安装Let's Encrypt client(certbot)。 sudo apt install certbot 要检查版本号,请运行 certbot --version 样本输出: certbot 0.31.0 步骤3:从Let's Encrypt获取受信任的TLS证书 我建议使用standalone或webroot插件来获取TLS证书。 独立插件 如果Debian 10 Buster服务器上没有运行web服务器,并且您希望OpenConnect VPN服务器使用端口443,那么您可以使用独立插件从Let's Encrypt获取TLS证书。为vpn设置DNS记录。你的地盘。com,然后运行以下命令以获取证书。 sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email [email protected] -d vpn.example.com 说明: certonly:获取证书,但不要安装它。 --standalone:使用standalone插件获取证书 --首选挑战http:执行http-01挑战以验证我们的域,该域将使用端口80。 --同意:同意让我们加密服务条款。 --电子邮件:电子邮件地址用于帐户注册和恢复。 -d:指定你的域名。 从下面的截图可以看出,我成功地获得了证书。 使用webroot插件 如果Debian 10 Buster服务器的web服务器监听端口80和443,那么最好使用webroot插件来获取证书,因为webroot插件几乎适用于所有web服务器,我们不需要在web服务器中安装证书。 首先,您需要为vpn创建一个虚拟主机。实例通用域名格式。 阿帕奇 如果您使用的是Apache web服务器,则在/etc/apache2/sites available/目录下创建虚拟主机。 sudo nano /etc/apache2/sites-available/vpn.example.com.conf 并将以下行粘贴到文件中。 <VirtualHost *:80> ServerName vpn.example.com DocumentRoot /var/www/ocserv </VirtualHost> 保存并关闭文件。然后创建web根目录。 sudo mkdir /var/www/ocserv 将www数据(Apache用户)设置为web根目录的所有者。 sudo chown www-data:www-data /var/www/ocserv -R 启用此虚拟主机。 sudo a2ensite vpn.example.com 重新加载Apache以使更改生效。 sudo systemctl reload apache2 创建并启用虚拟主机后,运行以下命令以获取使用webroot插件加密证书。 sudo certbot certonly --webroot --agree-tos --email [email protected] -d vpn.example.com -w /var/www/ocserv/ Nginx 如果您使用的是Nginx web服务器,那么在/etc/Nginx/conf.d/下创建虚拟主机。 sudo nano /etc/nginx/conf.d/vpn.example.com.conf 将以下行粘贴到文件中。 server { listen 80; server_name vpn.example.com; root /var/www/ocserv/; location ~ /.well-known/acme-challenge { allow all; } } 保存并关闭文件。然后创建web根目录。 sudo mkdir /var/www/ocserv 将www数据(Nginx用户)设置为web根目录的所有者。 sudo chown www-data:www-data /var/www/ocserv -R 重新加载Nginx以使更改生效。 sudo systemctl reload nginx 创建并启用虚拟主机后,运行以下命令以获取使用webroot插件加密证书。 sudo certbot certonly --webroot --agree-tos --email [email protected] -d vpn.example.com -w /var/www/ocserv/ 第4步:编辑OpenConnect VPN服务器配置文件 编辑ocserv配置文件。 sudo nano /etc/ocserv/ocserv.conf 首先,配置密码身份验证。默认情况下,通过PAM(可插拔认证模块)进行密码认证是启用的,这允许您使用Debian系统帐户从VPN客户端登录。可以通过注释掉以下行来禁用此行为。 auth = "pam[gid-min=1000]" 如果我们希望用户使用单独的VPN帐户而不是系统帐户登录,我们需要添加以下行以启用密码文件的密码身份验证。 auth = "plain[passwd=/etc/ocserv/ocpasswd]" 编辑完这个配置文件后,我们将看到如何使用ocpasswd工具生成/etc/ocserv/ocpasswd文件,其中包含用户名和编码密码的列表。 注意:Ocserv支持客户端证书身份验证,但我们来加密它不会颁发客户端证书。如果要启用证书身份验证,则需要设置自己的CA以颁发客户端证书。 接下来,如果您不想让ocserv使用TCP和UDP端口443(有一个web服务器使用端口443),请找到以下两行并更改端口号。否则就别管他们。 tcp-port = 443 udp-port = 443 然后找出下面两行。我们需要改变它们。 server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem server-key = /etc/ssl/private/ssl-cert-snakeoil.key 将默认设置替换为让我们加密服务器证书和服务器密钥文件的路径。 server-cert = /etc/letsencrypt/live/vpn.example.com/fullchain.pem server-key = /etc/letsencrypt/live/vpn.example.com/privkey.pem 然后,设置客户端的最大数量。默认值为128。设置为零表示无限。 max-clients = 128 设置用户可以同时登录的设备数量。默认值为2。设置为零表示无限。 max-same-clients = 2 默认情况下,keepalive数据包每300秒(5分钟)发送一次。我更喜欢使用短时间(30秒)来减少VPN连接中断的机会。 keepalive = 30 接下来,找到下面这行。将false更改为true以启用MTU发现。 try-mtu-discovery = false 您可以通过以下两个参数设置在断开连接之前允许客户端保持空闲的时间。如果您希望客户端无限期地保持连接,那么请注释掉这两个参数。 idle-timeout=1200 mobile-idle-timeout=1800 之后,将默认域设置为vpn。实例通用域名格式。 default-domain = vpn.example.com 默认情况下,IPv4网络配置如下所示。这将导致问题,因为大多数家庭路由器还将IPv4网络范围设置为192.168.1.0/24。 ipv4-network = 192.168.1.0 ipv4-netmask = 255.255.255.0 我们可以使用另一个专用IP地址范围(如10.10.10.0/24)来避免IP地址冲突,因此将ipv4网络的值更改为 ipv4-network = 10.10.10.0 现在取消注释下面这行,通过VPN隧道所有DNS查询。 tunnel-all-dns = true 更改DNS解析程序地址。你可以使用谷歌的公共DNS服务器。 dns = 8.8.8.8 dns = 8.8.4.4 或者Cloudflare的公共DNS服务器。 dns = 1.1.1.1 dns = 1.0.0.1 注意:如果您是VPN服务提供商,最好运行自己的DNS解析器。如果在同一台服务器上运行DNS解析程序,请将DNS指定为 dns = 10.10.10.1 10.10.10.1是VPN LAN中OpenConnect VPN服务器的IP地址。这将稍微加快客户端的DNS查找,因为VPN服务器和DNS解析程序之间的网络延迟已消除。 然后注释掉所有路由参数(在下面几行的开头添加#字符),这将把服务器设置为客户端的默认网关。 #route = 10.0.0.0/8 #route = 172.16.0.0/12 #route = 192.168.0.0/16 #route = fd00::/8 #route = default #no-route = 192.168.5.0/255.255.255.0 保存并关闭文件,然后重新启动VPN服务器,以使更改生效。 sudo systemctl restart ocserv 第5步:创建VPN帐户 现在使用ocpasswd工具生成VPN帐户。 sudo ocpasswd -c /etc/ocserv/ocpasswd username 系统将要求您为用户设置密码,信息将保存到/etc/ocserv/ocpasswd文件中。要重置密码,只需再次运行上述命令。 步骤6:在Linux内核中启用IP转发 为了让VPN服务器在VPN客户端和Internet之间路由数据包,我们需要启用IP转发。编辑sysctl。conf文件。 sudo nano /etc/sysctl.conf 在该文件末尾添加以下行。 net.ipv4.ip_forward = 1 保存并关闭文件。然后使用下面的命令应用更改。p选项将从/etc/sysctl加载sysctl设置。conf文件。此命令将在系统重新启动时保留所做的更改。 sudo sysctl -p 第7步:在防火墙中配置IP伪装 我们需要在服务器防火墙中设置IP伪装,以便服务器成为VPN客户端的虚拟路由器。我将使用UFW,它是iptables防火墙的前端。在Debian上安装UFW时使用: sudo apt install ufw 首先,需要允许SSH通信。 sudo ufw allow 22/tcp 接下来,找到服务器主网络接口的名称。 ip addr 正如你所看到的,在我的Debian服务器上它的名字是ens3。 要配置IP伪装,我们必须在UFW配置文件中添加iptables命令。 sudo nano /etc/ufw/before.rules 默认情况下,过滤器表有一些规则。在该文件末尾添加以下行。将ens3替换为您自己的网络接口名称。 # NAT table rules *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.10.10.0/24 -o ens3 -j MASQUERADE # End each table with the 'COMMIT' line or these rules won't be processed COMMIT 在Nano文本编辑器中,按Ctrl+W,然后按Ctrl+V,可以转到文件的末尾。 以上几行将在nat表的后路由链的末尾附加(-A)条规则。它将把你的虚拟专用网络与互联网连接起来。同时也会对外界隐藏你的人际网络。所以互联网只能看到VPN服务器的IP,却看不到VPN客户端的IP,就像你的家庭路由器隐藏了你的私人家庭网络一样。 默认情况下,UFW禁止数据包转发。我们可以允许为我们的专用网络转发。在该文件中找到ufw BEFORT forward链,并添加以下3行,如果源IP或目标IP在10.10.10.0/24范围内,这3行将接受数据包转发。 # allow forwarding for trusted network -A ufw-before-forward -s 10.10.10.0/24 -j ACCEPT -A ufw-before-forward -d 10.10.10.0/24 -j ACCEPT 保存并关闭文件。然后启用UFW。 sudo ufw enable 如果以前启用过UFW,那么可以使用systemctl重新启动UFW。 sudo systemctl restart ufw 现在,如果使用以下命令列出NAT表的后路由链中的规则: sudo iptables -t nat -L POSTROUTING 你可以看到化装规则。 UFW处理防火墙规则可能需要一些时间。如果伪装规则未显示,则再次重新启动UFW(sudo systemctl restart UFW)。 步骤8:打开防火墙中的443端口 运行以下命令打开TCP和UDP端口443。如果您为ocserv配置了不同的端口,则将443更改为您配置的端口。 sudo ufw allow 443/tcp sudo ufw allow 443/udp 现在,OpenConnect VPN服务器已准备好接受客户端连接。 对于运行本地DNS解析程序的用户,如果指定10.10.10.1作为VPN客户端的DNS服务器,则必须允许VPN客户端使用以下UFW规则连接到端口53。 sudo ufw insert 1 allow in from 10.10.10.0/24 您还需要编辑绑定DNS服务器的配置,以允许VPN客户端发送如下递归DNS查询。 allow-recursion { 127.0.0.1; 10.10.10.0/24; }; 如何在Debian 10 Buster桌面上安装和使用OpenConnect VPN客户端 运行以下命令在Debian桌面上安装OpenConnect VPN命令行客户端。 sudo apt install openconnect 您可以从下面的命令行连接到VPN-b标志将使其在连接建立后在后台运行。 sudo openconnect -b vpn.example.com 默认情况下,openconnect客户端将联系服务器的端口443。如果为服务器配置了其他端口,则可以添加端口号。 sudo openconnect -b vpn.example.com:port-number 您将被要求输入VPN用户名和密码。如果成功建立连接,您将看到以下消息。 Got CONNECT response: HTTP/1.1 200 CONNECTED CSTP connected. DPD 60, Keepalive 300 Connected as 10.10.10.139, using SSL + LZ4, with DTLS + LZ4 in progress Continuing in background; pid 17050 如果连接失败,可以查看ocserv日志以了解原因。(可能您没有正确输入密码。) sudo journaltcl -eu ocserv 要停止连接,请运行: sudo pkill openconnect 要以非交互方式运行客户端,请使用以下语法。 echo -n password | sudo openconnect -b vpn.example.com -u username --passwd-on-stdin 如果要使用Network Manager管理VPN连接,则需要安装这些软件包。 sudo apt install network-manager-openconnect network-manager-openconnect-gnome 如果您成功连接到VPN服务器,但您的公共IP地址没有更改,这是因为IP转发或IP伪装不起作用。我的iptables命令有一次输入错误,导致我的电脑无法浏览互联网。 系统启动时自动连接 为了让OpenConnect VPN客户端在启动时自动连接到服务器,我们可以创建一个systemd服务单元。 sudo nano /etc/systemd/system/openconnect.service 将以下行放到文件中。替换红色文本。 [Unit] Description=OpenConnect VPN Client After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/bin/bash -c '/bin/echo -n password | /usr/sbin/openconnect vpn.example.com -u username --passwd-on-stdin' KillSignal=SIGINT Restart=always RestartSec=2 [Install] WantedBy=multi-user.target 保存并关闭文件。然后启用此服务,使其在引导时启动。 sudo systemctl enable openconnect.service 文件内容说明: After=网络在线。目标和需求=网络在线。目标使此服务在网络启动后运行。 实际上,这项服务仍然可以在网络开通之前运行。如果服务失败,我们添加Restart=always和RestartSec=2以在2秒后重新启动该服务。 Systemd无法识别管道重定向。因此,在ExecStart指令中,我们将命令用单引号括起来,并使用Bash shell运行它。 由于OpenConnect VPN客户端将作为在后台运行的systemd服务运行,因此不需要在OpenConnect命令中添加-b标志。 当发出systemctl stop openconnect命令时,KillSignal指令告诉Systemd发送SIGINT信号。这将通过注销会话、恢复DNS服务器设置和Linux内核路由表来执行完全关闭。 要立即启动此Systemd服务,请运行 sudo systemctl start openconnect 要停止此Systemd服务,请运行 sudo systemctl stop openconnect VPN连接中断时自动重启 有时VPN连接会由于各种原因而中断。要使VPN客户端自动重新启动,请编辑根用户的crontab文件。 sudo crontab -e 在该文件末尾添加以下行。 * * * * * ping -c 10 10.10.10.1 > /dev/null || systemctl restart openconnect 此Cron作业将每分钟运行一次,以检查VPN客户端是否可以ping VPN服务器的专用IP地址(10.10.10.1)。如果ping失败,则将执行右侧的命令以重新启动VPN客户端。|是Bash中的OR运算符。只有当左边的命令返回错误时,它才会执行右边的命令。 保存并关闭文件。 适用于Windows和MacOS的OpenConnect GUI客户端 它们可以从OpenConnect GUI Github页面下载。 速度 OpenConnect VPN非常快。我可以用它在YouTube上观看4k视频。如您所见,连接速度为63356kbps,相当于61Mbit/s。 这是速度测试的测试结果。网 速度优化 OpenConnect默认使用TLS over UDP协议(DTLS)来实现更快的速度,但UDP无法提供可靠的传输。TCP比UDP慢,但可以提供可靠的传输。我可以给你的一个优化技巧是禁用DTL,使用标准TLS(通过TCP),然后启用TCP BBR以提高TCP速度。 要禁用DTL,请在ocserv配置文件中注释掉以下行(在开头添加#符号)。 udp-port = 443 保存并关闭文件。然后重启ocserv服务。 sudo systemctl restart ocserv.service 要启用TCP BBR,请查看以下教程。请注意,您需要在ocserv中禁用DTL,否则TCP BBR将无法工作。 如何通过启用TCP BBR轻松提升Debian网络性能 在我的测试中,启用TCP BBR的标准TLS比DTL快两倍。 影响速度的另一个非常重要的因素是本地计算机和VPN服务器之间的连接有多好。如果你住在中东和VPN服务器位于美国,速度将是缓慢的。选择一个离你住的地方近的数据中心。 自动续订让我们加密证书 编辑root用户的crontab文件。 sudo crontab -e 在文件末尾添加以下行以每天运行Cron作业。如果证书将在30天后过期,certbot将尝试续订证书。VPN服务器需要重新启动ocserv服务才能获取新的证书和密钥文件。 @daily certbot renew --quiet && systemctl restart ocserv 故障排除提示 请注意,如果您使用的是OpenVZ VPS,请确保在VPS控制面板中启用TUN虚拟网络设备。(如果你使用Kamatera VPS,那么你有基于KVM的VPS,所以你不必担心这一点。) 如果遇到任何问题,请查看OpenConnect VPN服务器日志。 sudo journalctl -eu ocserv.service 我发现如果我把443端口换成另一个端口,中国的防火长城会阻止这个VPN连接。 如果ocserv告诉您它无法加载/etc/ocserv/ocserv。conf文件,您可以停止ocserv。 sudo systemctl stop ocserv 然后在前台运行它,并启用调试。 sudo /usr/sbin/ocserv --foreground --pid-file /run/ocserv.pid --config /etc/ocserv/ocserv.conf --debug=10 然后,输出可能会给您一些ocserv不工作的线索。 使OpenConnect VPN服务器和Web服务器同时使用端口443 请阅读以下文章: 运行OpenConnect VPN服务器&;Apache/Nginx与HAProxy在同一个盒子上 如何在ocserv中禁用TLS 1.0和TLS 1.1 PCI理事会在2018年6月30日否决了TLS 1.0,主流网络浏览器将在2020年禁用TLS 1.0和TLS 1.1。对于VPN服务器,我们也应该这样做。编辑主配置文件。 sudo nano /etc/ocserv/ocserv.conf 找到以下行: tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128" 要在OpenConnect VPN服务器中禁用TLS 1.0和TLS 1.1,只需添加-VERS-TLS1。0和-VERS-TLS1。1号排队。 tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1" 保存并关闭文件。然后重启ocserv。 sudo systemctl restart ocserv 现在ocserv只接受TLS1.3和TLS1.2。有关在ocserv中配置TLS参数的更多信息,请参阅GnuTLS优先级字符串。 要检查OpenConnect VPN服务器是否支持TLS 1.0,请运行以下命令。 openssl s_client -connect vpn.your-domain.com:443 -tls1 并检查TLS 1.1 openssl s_client -connect vpn.your-domain.com:443 -tls1_1 如果在输出中看到以下消息,则表示不支持TLS版本。 New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported 每用户或每组配置 Ocserv允许按用户和按组配置。要启用此功能,请取消注释/etc/ocserv/ocserv中的以下两行。conf文件。 config-per-user = /etc/ocserv/config-per-user/ config-per-group = /etc/ocserv/config-per-group/ 保存并关闭文件。然后创建每个用户和每个组的配置目录。 sudo mkdir /etc/ocserv/config-per-user/ sudo mkdir /etc/ocserv/config-per-group/ 接下来,您可以在这两个目录下创建一个文件。例如,创建user1文件以允许对user1进行自定义配置。 sudo nano /etc/ocserv/config-per-user/user1 还可以创建group1文件,以允许对名为group1的组进行自定义配置。 sudo nano /etc/ocserv/config-per-group/group1 您可以在文件中添加如下内容。 route = 10.10.10.0/255.255.255.0 这意味着,在user1连接到此VPN服务器后,只有到10.10.10.0/24网络的流量将通过VPN服务器路由。到其他IP地址的流量通过原始网关路由。这被称为分裂隧道,在以下情况下非常有用: 您只希望VPN客户端能够浏览内部资源,而不希望所有流量都通过VPN服务器。 你需要为云服务器构建一个专用网络。 客户端需要连接到多个VPN。一个VPN可以使用拆分隧道,另一个使用完整隧道。 保存并关闭文件。重新启动ocserv以使更改生效。 如何运行ocserv的多个实例 一个ocserv进程只能绑定到服务器上的一个TCP或UDP端口。如果希望允许ocserv绑定到多个TCP或UDP端口,则需要运行多个ocserv进程。这很简单。复制/lib/systemd/system/ocserv。新文件的服务。 sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv2.service 然后编辑新文件。 sudo nano /etc/systemd/system/ocserv2.service 改变 /etc/ocserv/ocserv.conf 到 /etc/ocserv/ocserv2.conf 保存并关闭文件。接下来,您可以编辑/etc/ocserv/ocserv2。conf文件并添加自定义配置。完成后,启动第二个ocserv服务。 sudo systemctl start ocserv2 收尾 就这样!我希望本教程能帮助您在Debian 10 Buster服务器上安装和配置OpenConnect VPN。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
从命令行将Debian 9 Stretch升级为Debian 10 Buster
代号为Buster的Debian 10于2019年7月6日发布。本教程将介绍如何从命令行将Debian 9升级到Debian 10。您可以在Debian 9桌面或Debian 9服务器上学习本教程。与每个Debian版本一样,Debian 10将支持5年。代号“巴斯特”是以《玩具总动员》电影中安迪的狗命名的。 正式建议 如果你在Debian 9桌面上安装了专有的英伟达驱动程序,我建议在升级之前删除它,因为NVIDIA驱动程序在我试图升级Debian扩展到BuST时引起了包冲突。 sudo apt remove *nvidia* 使用命令行将Debian 9 Stretch升级为Debian 10 Buster 您可以使用命令行升级Debian desktop或无头服务器。如果使用SSH登录Debian服务器,最好在服务器上的/etc/SSH/sshd_config文件中添加以下行,以保持OpenSSH会话的活动状态。 ClientAliveInterval 60 保存并关闭文件。然后重启SSH守护进程。 sudo systemctl restart ssh 要升级到Debian 10,请使用以下命令切换到root用户。您需要输入root用户的密码。 su - 然后使用以下两个命令更新现有软件。 apt update apt upgrade 如果在运行上述命令时安装了新内核,则需要重新启动系统以继续升级过程。要重新启动Debian,请运行以下命令。(请记住重新启动后再次切换到root用户。) shutdown -r now 接下来,我们需要编辑源代码。使用命令行文本编辑器(如Nano)列出文件。 nano /etc/apt/sources.list 将“拉伸”的所有实例更改为buster。如果不喜欢逐个更改,则可以退出Nano文本编辑器(按Ctrl+X)并运行以下命令进行批量替换。 sed -i 's/stretch/buster/g' /etc/apt/sources.list 然后,我们需要使用以下命令禁用第三方存储库,这将在每行的开头添加一个#字符。在/etc/apt/sources中列出文件。列表d/目录。 sed -i 's/^/#/' /etc/apt/sources.list.d/*.list 接下来,更新软件源并将软件升级到buster存储库中提供的最新版本。这一步叫做最小升级。 apt update apt upgrade 如果您看到以下错误, The following packages have unmet dependencies: inetutils-ping : Conflicts: ping 然后可以卸载inetutils ping。 apt remove inetutils-ping 然后再次运行apt升级命令。如果在升级过程中显示apt listchanges,您可以按Q键返回主屏幕。 升级软件包时,系统会询问您是否希望在没有询问的情况下重新启动服务。如果要手动重启服务,请选择“否”。本教程选择“是”,因为my Debian box没有需要公众访问的服务。 还可能会询问您是否要安装新版本的配置文件。为了安全起见,我总是选择“否”(只需按Enter键)。(新配置文件将以相同的文件名保存,但扩展名为.ucf dist或.dpkg dist,您可以在升级后进行检查。) 完成最小升级后,运行以下命令开始完全升级。 apt dist-upgrade 现在,您可以从Debian系统中删除过时/不需要的软件包。 apt autoremove apt clean 最后,重新启动系统。 shutdown -r now 检查你的Debian版本。 lsb_release -a 你应该看到下面的文字。 No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 10 (buster) Release: 10 Codename: buster 恭喜!您已成功升级到Debian 10 Buster。 下一步 我希望本教程能帮助您将Debian 9升级到Debian 10。你也可以参加Debian发布派对来庆祝它!和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何在Ubuntu 20.04上设置OpenStreetMap Tile服务器
OpenStreetMap(OSM)是一个用户贡献的、可自由编辑的世界地图。你可以把它看作是谷歌地图的开源和自托管替代品。本教程将向您展示如何在Ubuntu20.04上构建自己的OpenStreetMap tile服务器,这样您就不必使用专有的地图服务。 OpenStreetMap功能 OpenStreetMap的数据覆盖了全世界,因此可以方便地支持任何国家或每个国家的用户。 OpenStreetMap每天每小时每分钟都会更新,您可以实时获得这些更新。 OpenStreetMap数据是免费和开放的,不收取订阅费和页面浏览费。 OpenStreetMap数据丰富而详细,包含大量与地面人员相关的数据——收集数据的人员。 先决条件/硬件要求 所需的RAM和磁盘空间取决于要使用哪个国家的地图。例如 英国地图至少需要12G内存和100GB磁盘空间。 整个行星地图至少需要32G RAM和1TB SSD(固态驱动器)。用旋转硬盘来绘制整个地球地图是不可行的。 如果要在web浏览器中预渲染分幅以加快地图加载速度,则需要更多磁盘空间,这是强烈建议的。查看此磁贴磁盘使用情况页面,查看预渲染磁贴需要多少磁盘空间。例如,如果要为行星地图预渲染从缩放级别0到缩放级别15的平铺,则需要额外的460 GB磁盘空间。 另外需要注意的是,将大型地图数据(如整个地球)导入PostgreSQL数据库需要很长时间。考虑添加更多的RAM,特别是使用SSD,而不是旋转硬盘来加速导入过程。 如果你打算主持整个世界地图,我建议你从康塔博购买超大VPS,康塔博以 10核CPU 60 GB内存 1.6 TB英特尔Optane SSD 每月只需26.99欧元。 第一步:升级软件 在服务器上进行任何主要工作之前,更新服务器软件始终是一种好的做法。通过SSH登录服务器并运行以下命令。 sudo apt update; sudo apt upgrade 第2步:安装PostgreSQL数据库服务器和PostGIS扩展 我们将使用PostgreSQL存储地图数据。PostGIS是PostgreSQL的地理空间扩展。运行以下命令来安装它们。 sudo apt install postgresql postgresql-contrib postgis postgresql-12-postgis-3 PostgreSQL数据库服务器将自动启动并侦听127.0.0.1:5432。安装过程中将在操作系统上创建postgres用户。它是PostgreSQL数据库服务器的超级用户。默认情况下,该用户没有密码,也不需要设置密码,因为您可以使用sudo切换到postgres用户并登录到PostgreSQL server。 sudo -u postgres -i 现在可以创建PostgreSQL数据库用户osm。 createuser osm 然后创建一个名为gis的数据库,同时让osm成为数据库的所有者-UTF8指定数据库中使用的字符编码方案为UTF8。 createdb -E UTF8 -O osm gis 接下来,为gis数据库创建postgis和hstore扩展。 psql -c "CREATE EXTENSION postgis;" -d gis psql -c "CREATE EXTENSION hstore;" -d gis 将osm设置为表所有者。 psql -c "ALTER TABLE spatial_ref_sys OWNER TO osm;" -d gis 退出postgres用户。 exit 在操作系统上创建osm用户,以便平铺服务器可以作为osm用户运行。以下命令将创建一个没有密码的系统用户。 sudo adduser --system --group osm 第3步:下载地图样式表和地图数据 切换到osm的主目录。 cd /home/osm/ 使用git将最新的CartoCSS地图样式表下载到osm用户的主目录。 sudo apt install git git clone https://github.com/gravitystorm/openstreetmap-carto.git 如果在运行上述命令时看到“权限被拒绝”错误,则可以使用以下命令授予权限。用真实用户名替换用户名。 sudo apt install acl sudo setfacl -R -m u:username:rwx /home/osm/ 接下来,运行以下命令以PBF(ProtoBufBinary)格式下载整个行星(50G)的地图数据。 wget -c http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf 请注意openstreetmap的下载速度。org当前限制为2048kb/s。您可以从另一个镜像下载植物地图,如 wget -c https://download.bbbike.org/osm/planet/planet-latest.osm.pbf 如果你想要一张各个国家/州/省/市的地图,请访问http://download.geofabrik.de.还有,自行车。org以不同的格式提供了全球200多个城市和地区的摘录。例如,使用以下命令下载英国地图数据(1.1G)。 wget -c http://download.geofabrik.de/europe/great-britain-latest.osm.pbf 第4步:优化PostgreSQL Server性能 导入过程可能需要一些时间。为了加快这个过程,我们可以调整一些PostgreSQL server设置以提高性能。编辑PostgreSQL主配置文件。 sudo nano /etc/postgresql/12/main/postgresql.conf 首先,我们应该更改共享缓冲区的值。默认设置为: shared_buffers = 128MB 这个太小了。经验法则是将其设置为总RAM的25%(不包括交换空间)。例如,我的VPS有60G RAM,所以我将其设置为: shared_buffers = 15GB 找到下面这行。 #work_mem = 4MB #maintenance_work_mem = 64MB 同样,该值太小。我使用以下设置。 work_mem = 1GB maintenance_work_mem = 8GB 然后找到下面一行。 #effective_cache_size = 4GB 如果你像我一样有很多RAM,你可以为有效的缓存大小设置一个更高的值,比如20G。 effective_cache_size = 20GB 保存并关闭文件。重新启动PostgreSQL以使更改生效。 sudo systemctl restart postgresql 默认情况下,PostgreSQL会尝试在RAM中使用巨大的页面。然而,Linux默认情况下不会分配巨大的页面。检查PostgreSQL的进程ID。 sudo head -1 /var/lib/postgresql/12/main/postmaster.pid 样本输出: 7031 然后检查该进程ID的峰值。 grep ^VmPeak /proc/7031/status 样本输出: VmPeak: 16282784 kB 这是PostgreSQL将使用的峰值内存大小。现在检查Linux中巨大页面的大小。 cat /proc/meminfo | grep -i huge 样本输出: AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB Hugetlb: 0 kB 我们可以计算出我们需要多少巨大的页面。将VmPeak值除以巨大页面的大小:16282784KB/2048KB=7950。编辑/etc/sysctl。conf文件。 sudo nano /etc/sysctl.conf 在该文件末尾添加以下行以分配7950个大页面。 vm.nr_hugepages = 7950 保存并关闭文件。然后应用更改。 sudo sysctl -p 如果你再次查看meminfo, cat /proc/meminfo | grep -i huge 我们可以看到有7950个巨大的页面可用。 AnonHugePages: 0 kB ShmemHugePages: 0 kB HugePages_Total: 7950 HugePages_Free: 7950 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB 重新启动PostgreSQL以使用大型页面。 sudo systemctl restart postgresql 在远程服务器上使用屏幕 由于导入过程可能需要很长时间,并且您的计算机可能已断开与Internet的连接,因此建议使用screen实用程序保持会话的活动状态。在Ubuntu 20.04服务器上安装屏幕: sudo apt install screen 然后启动屏幕: screen 第一次启动时,您将看到一个介绍文本,只需按Enter键即可结束。然后你就可以像往常一样运行命令了。 步骤5:将地图数据导入PostgreSQL 要导入地图数据,我们需要安装osm2pgsql,将OpenStreetMap数据转换为支持postGIS的PostgreSQL数据库。 sudo apt install osm2pgsql 向postgres用户授予权限。 sudo setfacl -R -m u:postgres:rwx /home/osm/ 切换到postgres用户。 sudo -u postgres -i 运行以下命令将地图样式表和地图数据加载到gis数据库中。最新取代英国。奥斯曼。pbf与您自己的地图数据文件。 osm2pgsql --slim -d gis --hstore --multi-geometry --number-processes 10 --tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto/openstreetmap-carto.style -C 32000 /home/osm/great-britain-latest.osm.pbf 哪里 --苗条模式:在苗条模式下运行,而不是在正常模式下运行。如果希望将来使用OSM更改文件(OSC)更新地图数据,则需要此选项。 -d gis:选择数据库。 --hstore:将不带列的标记添加到PostgreSQL表的另一个hstore(key/value)列中 --多重几何图形:在postgresql表中生成多重几何图形特征。 --样式:指定样式文件的位置 --进程数:服务器上的CPU核心数。我有10个。 -C标志以兆字节为单位指定缓存大小。它应该是你机器上可用内存的70%左右。缓存大小越大,导入速度越快。例如,我的服务器有60GB的空闲RAM,所以我可以指定-C 32000。请注意,PostgreSQL将需要用于共享缓冲区的RAM。使用此公式计算缓存大小应该有多大:(总RAM-PostgreSQL共享_缓冲区)*70% 最后,需要指定地图数据文件的位置。 命令输出: 如果要导入完整的行星地图数据,请使用--drop选项和--flat nodes选项来提高导入速度。请注意--flat nodes选项不适用于小贴图。 osm2pgsql --slim -d gis --drop --flat-nodes /home/osm/nodes.cache --hstore --multi-geometry --number-processes 10 --tag-transform-script /home/osm/openstreetmap-carto/openstreetmap-carto.lua --style /home/osm/openstreetmap-carto/openstreetmap-carto.style -C 32000 /home/osm/planet-latest.osm.pbf 在导入过程中,RAM的使用将逐渐增加。 现在,您可能不需要在服务器上执行其他操作。由于您使用的是Screen,所以可以按Ctrl+A,释放这些键,然后按D键从当前屏幕会话中分离。您将看到如下消息。 [detached from 32113.pts-1.focal] 这告诉我之前的屏幕会话ID是32113。您可以从SSH会话中注销,甚至可以关闭计算机。别担心,OSM导入过程仍在运行。当需要返回并检查导入进度时,请将SSH连接到服务器并运行以下命令以获取上一个屏幕会话ID。 screen -ls 样本输出: There is a screen on: 32113.pts-1.focal (05/19/2020 03:45:29 PM) (Detached) 1 Socket in /run/screen/S-linuxbabe. 然后可以重新连接到上一个屏幕会话。 screen -r 32113 这样你就能继续工作了。导入完成后,将gis数据库的所有权限授予osm用户。 psql -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" -d gis 退出postgres用户。 exit 注意:如果osm2pgsql导入尚未完成,请不要继续执行步骤6。 故障排除 如果从PBF文件导入地图数据时遇到以下错误, PBF error : invalid Blobheader size (> max_blob_header_size) 这可能是因为您的PBF文件已损坏。验证PBF文件的md5sum,如下所示。 md5sum great-britain-latest.osm.pbf 将结果与PBF文件下载页面上的md5sum值进行比较。 第6步:安装Renderd和mod_tile renderd是一个后台程序,用于从PostgreSQL数据库呈现OpenStreetMap分幅。 mod_tile是一个Apache模块,用于向客户端(例如web浏览器)提供tile服务 默认的Ubuntu存储库不包括mod_tile和renderd,但我们可以从OSM PPA安装它们。 sudo apt install software-properties-common sudo add-apt-repository ppa:osmadmins/ppa sudo apt install apache2 libapache2-mod-tile renderd 将安装Apache web服务器,并在/etc/apache2/conf available/renderd上创建renderd的配置文件。形态。 启用平铺模块。 sudo a2enmod tile 接下来,为磁贴服务器创建一个虚拟主机。 sudo nano /etc/apache2/sites-available/tileserver_site.conf 在此文件中添加以下行。更换瓷砖。你的领域。使用你的真实域名。别忘了记录。 <VirtualHost *:80> ServerName tile.your-domain.com LogLevel info Include /etc/apache2/conf-available/renderd.conf </VirtualHost> 保存并关闭文件。启用此虚拟主机。 sudo a2ensite tileserver_site.conf 重新启动Apache以使更改生效。 sudo systemctl restart apache2 渲染守护进程将自动启动,如下所示: systemctl status renderd 第7步:生成Mapnik样式表 安装所需的软件包。 sudo apt install curl unzip gdal-bin mapnik-utils libmapnik-dev python3-pip 我们还需要使用以下命令从上游存储库安装nodejs和npm。 curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - sudo apt-get install -y nodejs 然后用npm安装carto软件包。 sudo npm install -g carto 安装psycopg2 Python模块。 sudo -H pip3 install psycopg2==2.8.5 切换到postgres用户。 sudo -u postgres -i 将Cd放入carto style目录。 cd /home/osm/openstreetmap-carto/ 获取形状文件。 scripts/get-external-data.py 如果在运行上述命令时遇到以下错误消息,则说明您存在DNS问题。只需等待几分钟,然后再次运行Python脚本。 Failed to establish a new connection: [Errno -3] Temporary failure in name resolution 现在使用carto map样式表编译器构建Mapnik XML样式表。 carto project.mml > style.xml 将gis数据库的所有权限授予osm用户。 psql -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO osm;" -d gis 退出postgres用户。 exit 第8步:安装字体 您需要安装ttf dejavu软件包。 sudo apt install ttf-dejavu 要显示非拉丁字符,请安装以下软件包。 sudo apt install fonts-noto-cjk fonts-noto-cjk-extra fonts-noto-hinted fonts-noto-unhinted ttf-unifont 步骤9:配置renderd 编辑渲染配置文件。 sudo nano /etc/renderd.conf 在[renderd]部分,根据服务器上的CPU内核数更改线程数。 num_threads=10 添加默认图层。以分号(;)开头的行这些都是评论。 ; ADD YOUR LAYERS: [default] URI=/osm/ XML=/home/osm/openstreetmap-carto/style.xml HOST=tile.your-domain.com 保存并关闭文件。然后为renderd服务创建一个新目录。 sudo mkdir /etc/systemd/system/renderd.service.d/ 在此目录下创建自定义配置文件。 sudo nano /etc/systemd/system/renderd.service.d/custom.conf 在此文件中添加以下行。 [Service] User=osm 保存并关闭文件。更改/run/renderd/和/var/cache/renderd/tiles/目录的所有权。 sudo chown osm /run/renderd/ -R sudo chown osm /var/cache/renderd/tiles/ -R 然后重新启动renderd服务。 sudo systemctl daemon-reload sudo systemctl restart renderd 你需要查看renderd的日志。 sudo journalctl -eu renderd 确保renderd在重启后不会在日志中产生任何错误,否则地图将不会显示。 第10步:测试 在web浏览器地址栏中,键入 tile.your-domain.com/osm/0/0/0.png 你应该看到世界地图的瓷砖。恭喜!您刚刚成功构建了自己的OSM磁贴服务器。 如果已启用UFW防火墙,请确保使用以下命令打开端口80和443。 sudo ufw allow 80,443/tcp 如果您看到404 not found错误,只需等待几分钟,在浏览器中刷新页面,它应该能够加载世界地图的平铺。如果仍然无法加载,则重新启动renderd服务(sudo systemctl restart renderd)。 第11步:显示平铺的网络地图 现在您有了一个工作的OSM tile服务器,您需要使用JavaScript映射库在其他服务器上显示映射。在本教程中,我将在tile服务器上创建web地图,但您可以在任何其他服务器上创建。 平铺网络地图在OpenStreetMap术语中也称为slippy地图。有两个免费的开源JavaScript地图库可用于tile服务器:OpenLayer和传单。传单的优点是使用简单,而且地图便于移动。 露天层 要使用OpenLayer显示你的slippy地图,请从OpenLayer下载JavaScript和CSS。组织并将其解压缩到webroot文件夹。 cd /var/www/html/ sudo wget https://github.com/openlayers/openlayers/releases/download/v5.3.0/v5.3.0.zip sudo unzip v5.3.0.zip 接下来,创建索引。html文件。 sudo nano /var/www/html/index.html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Accessible Map</title> <link rel="stylesheet" href="http://tile.your-domain.com/v5.3.0/css/ol.css" type="text/css"> <script src="http://tile.your-domain.com/v5.3.0/build/ol.js"></script> <style> a.skiplink { position: absolute; clip: rect(1px, 1px, 1px, 1px); padding: 0; border: 0; height: 1px; width: 1px; overflow: hidden; } a.skiplink:focus { clip: auto; height: auto; width: auto; background-color: #fff; padding: 0.3em; } #map:focus { outline: #4A74A8 solid 0.15em; } </style> </head> <body> <a class="skiplink" href="#map">Go to map</a> <div id="map" class="map" tabindex="0"></div> <button id="zoom-out">Zoom out</button> <button id="zoom-in">Zoom in</button> <script> var map = new ol.Map({ layers: [ new ol.layer.Tile({ source: new ol.source.OSM({ url: 'http://tile.your-domain.com/osm/{z}/{x}/{y}.png' }) }) ], target: 'map', controls: ol.control.defaults({ attributionOptions: /** @type {olx.control.AttributionOptions} */ ({ collapsible: false }) }), view: new ol.View({ center: [244780.24508882355, 7386452.183179816], zoom:5 }) }); document.getElementById('zoom-out').onclick = function() { var view = map.getView(); var zoom = view.getZoom(); view.setZoom(zoom - 1); }; document.getElementById('zoom-in').onclick = function() { var view = map.getView(); var zoom = view.getZoom(); view.setZoom(zoom + 1); }; </script> </body> </html> 保存并关闭文件。现在你可以通过在浏览器地址栏中输入你的子域来查看你的拖拉地图。 tile.your-domain.com 或 tile.your-domain.com/index.html 传单 要使用Leftlet显示slippy地图,请从leftletjs下载JavaScript和CSS。com并将其解压缩到webroot文件夹。 cd /var/www/html/ sudo wget http://cdn.leafletjs.com/leaflet/v1.7.1/leaflet.zip sudo unzip leaflet.zip 接下来,创建索引。html文件。如果已经有索引。html文件,然后删除原始内容。 sudo nano /var/www/html/index.html 在文件中粘贴以下HTML代码。替换红色文本,并根据需要调整经度、纬度和缩放级别。 <html> <head> <meta charset="UTF-8"> <title>My first osm</title> <link rel="stylesheet" type="text/css" href="leaflet.css"/> <script type="text/javascript" src="leaflet.js"></script> <style> #map{width:100%;height:100%} </style> </head> <body> <div id="map"></div> <script> var map = L.map('map').setView([55,0.8],6); L.tileLayer('http://tile.your-domain.com/osm/{z}/{x}/{y}.png',{maxZoom:18}).addTo(map); </script> </body> </html> 保存并关闭文件。现在,您可以通过在浏览器中键入服务器IP地址来查看拖沓的地图。 tile.your-domain.com 或 tile.your-domain.com/index.html 步骤12:预渲染瓷砖 动态渲染平铺将增加在web浏览器中加载地图的时间。要预渲染平铺而不是动态渲染,请使用以下render_list命令。使用-z和-z标志指定缩放级别,并根据服务器上的CPU内核数替换线程数。Render_list通过向渲染守护进程发送请求来渲染贴图分幅列表。预渲染的磁贴将缓存在/var/lib/mod_tile目录中。 render_list -m default -a -z 0 -Z 19 --num-threads=10 如果以后更新了贴图数据,可以使用--force选项再次预渲染所有分片。 render_list -m default -a -z 0 -Z 19 --num-threads=10 --force 要在背景中渲染贴图分幅,请添加&;结尾的符号。 render_list -m default -a -z 0 -Z 19 --num-threads=10 & 现在你可以关闭终端窗口了。要检查呈现进度,请打开另一个SSH会话,然后运行以下命令。 sudo journalctl -eu renderd 上面的命令将显示renderd服务的最新日志。以下几行显示我的OSM服务器现在正在以缩放级别12渲染地图分幅。 renderd[20838]: DEBUG: START TILE default 12 1008-1015 4056-4063, new metatile renderd[20838]: Rendering projected coordinates 12 1008 4056 -> -10175297.205328|-19724422.274944 -10097025.688364|-19646150.757980 to a 8 x 8 tile renderd[20838]: DEBUG: DONE TILE default 12 1008-1015 3984-3991 in 0.799 seconds renderd[20838]: DEBUG: Sending render cmd(3 default 12/1008/3984) with protocol version 2 to fd 18 renderd[20838]: DEBUG: Got incoming request with protocol version 2 renderd[20838]: DEBUG: Got command RenderBulk fd(18) xml(default), z(12), x(1008), y(4064), mime(image/png), options() renderd[20838]: DEBUG: START TILE default 12 1008-1015 4064-4071, new metatile renderd[20838]: Rendering projected coordinates 12 1008 4064 -> -10175297.205328|-19802693.791908 -10097025.688364|-19724422.274944 to a 8 x 8 tile 步骤13:启用HTTPS 为了加密HTTP流量,我们可以从Let's encrypt获得并安装免费的TLS证书。osmadmins/ppa ppa包含一个出现故障的certbot二进制文件,因此我建议从快照存储安装certbot。 sudo apt install snapd sudo snap install --classic certbot 然后运行以下命令获取并安装TLS证书。 sudo /snap/bin/certbot --apache --agree-tos --redirect --hsts --staple-ocsp --must-staple --email [email protected] -d tile.your-domain.com 安装证书后,刷新网页,您将在地址栏中看到一个锁。 如果你在Firefox地址栏中看到一个黄色的三角形,这意味着tile URL仍在使用HTTP。你需要编辑索引。html文件,并使用以下命令将所有HTTP协议替换为HTTPS。 sudo sed -i 's/http/https/g' /var/www/index.html 步骤14:启用HTTP2 为了进一步提高映射加载性能,可以启用HTTP2协议。首先,需要启用HTTP2模块。 sudo a2enmod http2 然后打开SSL虚拟主机文件。 sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf 在打开后放置以下指令<;VirtualHost*:443>;标签 Protocols h2 http/1.1 保存并关闭文件。然后重启Apache,使更改生效。 sudo systemctl restart apache2 使用HTTP Referrer标头限制对OSM磁贴服务器的访问 默认情况下,任何人都可以使用OpenLayer或传单创建一个带有tile服务器URL的滑动地图。要限制对tile服务器的访问,请编辑Apache虚拟主机文件。 sudo nano /etc/apache2/sites-enabled/tileserver_site-le-ssl.conf 在<;VirtualHost>;标签。 <Location /osm> SetEnvIf Referer example/.com trusted_referer Order deny,allow Deny from all Allow from env=trusted_referer </Location> 上面的代码检查HTTP referer头是否包含您自己的域。否则,将拒绝访问/osm目录。反斜杠用于转义点字符。要将多个主机名添加为受信任的引用程序,请使用以下语法。 SetEnvIf Referer (example/.com|www/.example/.com|map/.example/.com) trusted_referer 保存并关闭文件。然后测试语法。 sudo apache2ctl -t 如果语法正确,请重新加载Apache以使更改生效。 sudo systemctl reload apache2 自动更新TLS证书 您可以创建Cron作业来自动续订TLS证书。只需打开root用户的crontab文件。 sudo crontab -e 在文件底部添加以下行。 @daily /snap/bin/certbot renew --quiet && systemctl reload apache2 不同主机上的PostgreSQL数据库和Web服务器 如果PostgreSQL和Apache web服务器位于不同的主机上,则需要编辑该项目。Apache主机上的mml文件。 nano /home/osm/openstreetmap-carto-4.20.0/project.mml 找到以下几行: osm2pgsql: &osm2pgsql type: "postgis" dbname: "gis" key_field: "" geometry_field: "way" extent: "-20037508,-20037508,20037508,20037508" 指定PostgreSQL数据库服务器的IP地址。 osm2pgsql: &osm2pgsql type: "postgis" host: "10.0.0.2" dbname: "gis" key_field: "" geometry_field: "way" extent: "-20037508,-20037508,20037508,20037508" 保存并关闭文件。然后使用carto map样式表编译器构建Mapnik XML样式表。 carto project.mml > style.xml 在PostgreSQL数据库服务器上,编辑主配置文件。 sudo nano /etc/postgresql/12/main/postgresql.conf 添加以下行,将PostgreSQL设置为在所有接口上侦听。 listen_addresses = '*' 保存并关闭文件。然后编辑PostgreSQL客户端身份验证配置文件。 sudo nano /etc/postgresql/12/main/pg_hba.conf 在文件末尾添加以下行,以允许osm用户从Apache主机登录。将10.0.0.1替换为Apache主机的IP地址。 host gis osm 10.0.0.1/32 trust 保存并关闭文件。然后重新启动PostgreSQL。 sudo systemctl restart postgresql 在Apache主机上重新启动渲染守护程序。 sudo systemctl restart renderd 你需要查看renderd的日志。确保renderd不会在日志中产生任何错误,否则地图将不会显示。 sudo journalctl -eu renderd 还应限制对PostgreSQL数据库服务器端口5432的访问。例如,您可以使用以下UFW命令只允许Apache主机的IP地址。 sudo ufw allow in from 10.0.0.1 to any port 5432 下一步 我希望本教程能帮助您在Ubuntu 20.04上安装OpenStreetMap tile服务器。您可能还需要设置Namingm地理编码服务器,以提供地址查找功能。 在Ubuntu20.04上设置OSM地理编码服务器 您可以使用开源路由机器(OSRM)为地图提供导航功能。 如何在Ubuntu 20.04上安装OSRM——开源路由机器 和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何使用Apache/Nginx在Ubuntu18.04服务器上安装InvoiceNinja
本教程将向您展示如何使用Apache或Nginx web服务器在Ubuntu18.04上安装InvoiceNinja。InvoiceNinja是一款开源、自托管的发票软件,是Freshbooks等商业在线发票平台的低成本替代品。InvoiceNinja提供托管发票服务,但如果您想自行托管该软件,可以按照以下说明操作。 忍者特征 使用InvoiceNinja,您可以使用自己的域名和品牌向客户发送发票。 在一个账户下管理多个业务的发票。 通过使用定期发票自动向长期客户计费,节省时间。 轻松创建并向客户发送漂亮的建议。 将第三方文件附加到发票上。 创建项目任务&;追踪时间。 使用可视化项目管理工具组织和规划客户的工作。 让你的客户一眼就能看到他们与你的所有交易。 Zapier automation允许您在发票账户和流行应用程序之间传输数据,包括Gmail、Google Sheets、QuickBooks Online、Slack、Pipeline、MailChimp等。 申请存款;多次使用同一发票支付部分款项。 使用预先编写的自动提醒电子邮件序列提醒客户需要支付发票。 当客户查看并支付发票时接收通知。 还有更多 预演 首先,你需要一台至少有512MB内存的Linux服务器。你可以点击这个特殊链接在DigitalOcean上获得100美元的免费积分。(仅限新用户使用)。如果您已经是DigitalOcean用户,那么您可以单击此特殊链接在Vultr上获得50美元的免费积分(仅限新用户)。一旦你在DigitalOcean或Vultr拥有了一个帐户,请在你的服务器上安装Ubuntu18.04,并按照以下说明操作。 InvoiceNinja需要PHP和MySQL/MariaDB。要学习本教程,您应该已经设置了灯堆栈或LEMP堆栈。如果您还没有这样做,请使用以下指南之一。 如何在Ubuntu 18.04上安装LAMP(Apache、MariaDB、PHP)堆栈 如何在Ubuntu18.04上安装LEMP(Nginx、MariaDB、PHP)堆栈 你还需要一个域名,这样你的客户就可以通过你的域名看到发票。我在namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 现在让我们安装InvoiceNinja。 第一步:在Ubuntu 18.04服务器上下载InvoiceNinja安装Zip文件 通过SSH登录Ubuntu 18.04服务器。然后运行以下命令将最新版本的InvoiceNinja zip文件下载到服务器上。 wget -O invoice-ninja.zip https://download.invoiceninja.com/ 下载后,使用解压功能提取归档文件。 sudo apt install unzip sudo unzip invoice-ninja.zip -d /var/www/ -d选项指定目标目录。InvoiceNinja web文件将被提取到/var/www/ninja。为了更好地识别每个目录,可以将其重命名为invoice ninja。 sudo mv /var/www/ninja /var/www/invoice-ninja 然后我们需要将该目录的所有者更改为www数据,以便web服务器可以写入该目录。 sudo chown www-data:www-data /var/www/invoice-ninja/ -R 我们还需要更改存储目录的权限。 sudo chmod 755 /var/www/invoice-ninja/storage/ -R 第2步:在MariaDB中创建数据库和用户 使用以下命令登录MariaDB数据库服务器。由于MariaDB现在使用unix_socket插件来验证用户登录,因此无需输入MariaDB根密码。我们只需要在mysql命令前面加上sudo。 sudo mysql 然后为Ninja创建一个数据库。本教程将数据库命名为invoiceninja。你可以用任何你喜欢的名字。 create database invoiceninja; 创建数据库用户。同样,您可以使用此用户的首选名称。用首选密码替换密码。 create user ninja@localhost identified by 'your-password'; 授予此用户在invoiceninja数据库上的所有权限。 grant all privileges on invoiceninja.* to ninja@localhost; 刷新权限并退出。 flush privileges; exit; 第3步:设置Web服务器 我们可以使用Apache或Nginx web服务器。 阿帕奇 如果您更喜欢Apache,请为Invoice Ninja创建一个虚拟主机文件。 sudo nano /etc/apache2/sites-available/invoice-ninja.conf 将以下文本放入文件中。用实际数据替换红色文本。别忘了为域名设置一个记录。(请注意,web根目录设置为/var/www/invoice ninja/public/,而不是/var/www/invoice ninja/) <VirtualHost *:80> ServerName invoice.yourdomain.com DocumentRoot /var/www/invoice-ninja/public <Directory /var/www/invoice-ninja/public> DirectoryIndex index.php Options +FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/invoice-ninja.error.log CustomLog ${APACHE_LOG_DIR}/invoice-ninja.access.log combined </VirtualHost> 保存并关闭文件。然后启用这个虚拟主机。 sudo a2ensite invoice-ninja.conf 我们需要启用重写模块。 sudo a2enmod rewrite 重新启动Apache以使更改生效。 sudo systemctl restart apache2 现在访问发票。你的地盘。com,您将被重定向到Invoice Ninja安装向导页面(Invoice.yourdomain.com/setup)。如果看到的是默认的Apache页面而不是安装向导,则需要禁用默认的虚拟主机。 sudo a2dissite 000-default.conf 然后重启Apache。 在安装向导中输入任何信息之前,我们需要启用HTTPS。 Nginx 如果你更喜欢Nginx,创建一个发票忍者。conf文件位于/etc/nginx/conf.d/目录中。 sudo nano /etc/nginx/conf.d/invoice-ninja.conf 将以下文本放入文件中。用实际数据替换红色文本。别忘了为域名设置一个记录。(请注意,web根目录设置为/var/www/invoice ninja/public/,而不是/var/www/invoice ninja/) server { listen 80; server_name invoice.yourdomain.com; root /var/www/invoice-ninja/public/; index index.php index.html index.htm; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log /var/log/nginx/invoiceninja.access.log; error_log /var/log/nginx/invoiceninja.error.log; location ~ /.php$ { fastcgi_split_path_info ^(.+/.php)(/.+)$; fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } location ~ //.ht { deny all; } } 保存并关闭文件。然后测试Nginx配置。 sudo nginx -t 如果测试成功,请重新加载Nginx以使更改生效。 sudo systemctl reload nginx 现在访问发票。你的地盘。com,您将被重定向到Invoice Ninja安装向导页面(Invoice.yourdomain.com/setup)。在安装向导中输入任何信息之前,我们需要启用HTTPS。 第4步:启用HTTPS 为了加密HTTP流量,我们可以通过安装Let's encrypt颁发的免费TLS证书来启用HTTPS。运行以下命令在Ubuntu18.04服务器上安装Let's Encrypt client(certbot)。 sudo apt install certbot 如果您使用Nginx,那么您还需要安装Certbot Nginx插件。 sudo apt install python3-certbot-nginx 接下来,运行以下命令获取并安装TLS证书。 sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d invoice.yourdomain.com 如果使用Apache,请安装Certbot Apache插件。 sudo apt install python3-certbot-apache 并运行此命令以获取并安装TLS证书。 sudo certbot --apache --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d invoice.yourdomain.com 哪里 --nginx:使用nginx插件。 --apache:使用apache插件。 --同意:同意服务条款。 --重定向:通过301重定向强制HTTPS。 --hsts:为每个HTTP响应添加严格的传输安全头。强制浏览器始终对域使用TLS。防止SSL/TLS剥离。 --装订ocsp:启用ocsp装订。有效的OCSP响应被绑定到服务器在TLS期间提供的证书上。 现在应获得证书并自动安装。 第5步:安装PHP模块 运行以下命令安装InvoiceNinja所需或推荐的PHP模块。 sudo apt install php-imagick php7.2-common php7.2-gd php7.2-json php7.2-curl php7.2-zip php7.2-xml php7.2-mbstring php7.2-bz2 php7.2-intl php7.2-gmp 然后重启Apache。(如果使用Nginx,则无需重新启动Nginx。) sudo systemctl restart apache2 如果未安装这些模块,登录后将看到以下错误。 Whoops, looks like something went wrong. 第6步:使用安装向导完成安装 现在转到发票。你的地盘。com并输入数据库信息、SMTP设置和创建管理员用户。 如果您想使用自己的邮件服务器向客户发送电子邮件,请查看以下文章以设置自己的邮件服务器。请注意,我强烈建议在全新干净的操作系统上运行iRedMail邮件服务器。在具有其他web应用程序的操作系统上安装iRedMail可能会失败,并可能破坏现有的应用程序。 如何使用iRedMail在Ubuntu18.04上轻松设置功能齐全的邮件服务器 使用自己的电子邮件服务器时,有两个驱动程序可供选择:SMTP和Sendmail。 如果邮件服务器和发票忍者在两台不同的主机上运行,请选择SMTP。 如果邮件服务器和发票忍者在同一台主机上运行,请选择Sendmail。 如果选择SMTP,请使用如下设置。 主持人:邮件。你的地盘。com端口:587加密:TLS。然后输入用户名和密码。 如果选择Sendmail,请使用如下设置。 主机:127.0.0.1端口:25加密:无。你不需要输入用户名或密码。 创建管理员用户后,您可以登录到InvoiceNinja。 设置Cron作业 我们需要设置Cron作业来发送定期发票和电子邮件提醒。编辑根用户的crontab文件。 sudo crontab -e 在该文件末尾添加以下行。 #InvoiceNinja 0 8 * * * /usr/bin/php7.2 /var/www/invoice-ninja/artisan ninja:send-invoices > /dev/null 0 8 * * * /usr/bin/php7.2 /var/www/invoice-ninja/artisan ninja:send-reminders > /dev/null 保存并关闭文件。这两个Cron作业将在每天早上8点运行。您还可以手动运行以下作业。 sudo /usr/bin/php7.2 /var/www/invoice-ninja/artisan ninja:send-invoices 删除发票忍者品牌 默认情况下,您的发票将具有发票忍者品牌,您可以以每年30美元的价格购买白标签许可证,以从发票和客户端门户中删除发票忍者品牌。转到设置->;发票设计,点击底部的白色标签链接购买。 结论 我希望本教程能帮助您在Ubuntu 18.04服务器上安装Invoice Ninja。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?