-
Firewalld出入站策略配置
FirewallD 是 iptables 的一个封装,可以让你更容易地管理 iptables 规则 - 它并不是 iptables 的替代品。虽然 iptables 命令仍可用于 FirewallD,但建议使用 FirewallD 时仅使用 FirewallD 命令。 Firewalld基本管理命令(CentOS7已默认安装firewalld) #查看firewall状态 firewall-cmd --state #安装 yum -y install firewalld yum -y install firewall-config #启动, systemctl start firewalld #设置开机启动 systemctl enable firewalld #关闭 systemctl stop firewalld #取消开机启动 systemctl disable firewalld 端口开放相关命令 #查询已经开放的端口 firewall-cmd --list-port #查询某个端口是否开放 firewall-cmd --query-port=80/tcp #开启端口(可以是一个端口范围,如1000-2000/tcp) firewall-cmd --zone=public --add-port=80/tcp --permanent #移除端口 firewall-cmd --zone=public --remove-port=80/tcp --permanent 封禁某一个IP或IP段 #单个ip firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xx.xx.xx.xx' reject" #ip段 firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='xx.xx.xx.0/24' reject" 使用上是没什么问题,只不过一旦大量ip需要拉黑,管理上就会很混乱。因此这里介绍firewalld配置ipset来实现。 创建ipset firewall-cmd --permanent --zone=public --new-ipset=blacklist --type=hash:net #创建一个名为blacklist的库 执行完命令可在/etc/firewalld/ipsets路径下看到生成的blacklist.xml文件。 添加/删除要禁止的IP或IP段 #添加单ip firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=xxx.x.x.xx #添加ip段 firewall-cmd --permanent --zone=public --ipset=blacklist --add-entry=xxx.xx.xx.0/24 #删除ip firewall-cmd --permanent --zone=public --ipset=blacklist --remove-entry=xxx.x.x.xx #删除ip段 firewall-cmd --permanent --zone=public --ipset=blacklist --remove-entry=xxx.xx.xx.0/24 备注: –permanent参数表示永久生效,内容会写入blacklist.xml文件且需要重启防火墙firewall-cmd --reload生效,如果不加该参数,则立即生效,内容不会写入blacklist.xml文件,服务重启则规则失效。 封禁ipset 前面只是创建了名为blacklist的ipset,而且也往里面增加了内容,最后一步即防火墙封禁该ipset即可,这样的好处是防火墙只是一条规则就封禁了文件里管理的大量IP。 #封禁名为blacklist的ipset firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset=blacklist drop' 禁止本机向外访问某个IP或IP段 #单IP firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -d 10.10.10.22/32 -j REJECT #IP段 firewall-cmd --direct --add-rule ipv4 filter OUTPUT 0 -d 10.10.10.0/24 -j REJECT 最后重新载入防火墙即可生效 firewall-cmd --reload
-
如何使用iRedMail在Ubuntu20.04上轻松设置完整的邮件服务器
在Linux上从头开始设置自己的电子邮件服务器是一个漫长而乏味的过程,如果你不是高级用户,这将是一个痛苦的过程。本教程将向您展示如何使用iRedMail在Ubuntu20.04上快速设置一个功能齐全的邮件服务器,为您节省大量时间和麻烦。 什么是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网络邮件 SOGo群件,提供网络邮件、日历(CalDAV)、联系人(CardDAV)、任务和ActiveSync服务。 用于保护SSH的Fail2ban 邮件列表管理器 Netdata服务器监控 iRead Postfix策略服务器用于GreyList 第一步:选择合适的主机提供商并购买域名 要使用iRedMail设置一个功能齐全的电子邮件服务器,您需要一个至少有3GB内存的服务器,因为安装后,您的服务器将使用超过2GB的内存。 强烈建议您在Ubuntu 20.04服务器的干净安装上安装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托管服务(通常是你的域名注册)创建DNS记录。在DNS管理器中,为域名创建MX记录。在名称字段中输入@代表主域名,然后输入mail。你的领域。com在值字段中。 注意:MX记录的主机名不能是其他名称的别名。此外,强烈建议您使用主机名,而不是MX记录的裸IP地址。 DNS管理员可能会要求您输入首选项值(也称为优先级值)。它可以是0到65356之间的任何数字。小数字的优先级高于大数字。建议将该值设置为0,以便此邮件服务器具有接收电子邮件的最高优先级。创建MX记录后,还需要为邮件创建一个记录。你的领域。com,以便将其解析为IP地址。如果您的服务器使用IPv6地址,请确保添加AAAA记录。 提示:如果使用Cloudflare DNS服务,则在创建邮件记录时不应启用CDN功能。你的领域。通用域名格式。Cloudflare不支持SMTP代理。 第3步:配置主机名 通过SSH登录服务器,然后运行以下命令更新现有软件包。 sudo apt update sudo apt upgrade -y 在升级过程中,它可能会问您以下问题。如果要继续使用端口6543进行SSH,请选择保持当前安装的本地版本。如果您想将端口22用于SSH,那么选择install the package maintainer's version(安装软件包维护者版本)。 我强烈建议创建一个sudo用户来管理服务器,而不是使用默认的root用户。运行以下命令创建用户。将用户名替换为首选用户名。 adduser username 然后将用户添加到sudo组。 adduser username sudo 切换到新用户。 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在Ubuntu20.04上设置邮件服务器 运行以下命令从其Github存储库下载最新版本的iRedMail脚本安装程序。 wget https://github.com/iredmail/iRedMail/archive/1.5.0.tar.gz 提取存档文件。 tar xvf 1.5.0.tar.gz 然后将cd放入新创建的目录中。 cd iRedMail-1.5.0/ 向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个项目。如果您想使用SOGo群件(网络邮件、日历、通讯簿、ActiveSync),请按向下箭头键和空格键进行选择。按Enter键进入下一个屏幕。 现在,您可以查看您的配置。键入Y开始安装所有邮件服务器组件。 在安装结束时,选择y以使用iRedMail提供的防火墙规则并重新启动防火墙。 现在iRedMail安装完成了。您将收到webmail的URL、web管理面板和登录凭据的通知。iRedMail。提示文件包含有关iRedMail服务器的重要信息。 重新启动Ubuntu 20.04服务器。 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再次登录服务器,并运行以下命令在Ubuntu 20.04上安装Let's Encrypt(certbot)客户端。 sudo apt install certbot 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传播。 如果certbot无法获取证书,并且您看到以下消息, Failed authorization procedure. mail.linuxbabe.com (http-01): urn:ietf:params:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching : Timeout during connect (likely firewall problem) 这可能是因为你创造了AAAA的邮件记录。你的领域。com,但Nginx web服务器不监听IPv6地址。要修复此错误,请编辑/etc/nginx/sites enabled/00默认值。配置文件 sudo nano /etc/nginx/sites-enabled/00-default.conf 找到下面这行。 #listen [::]:80; 删除#字符以为此Nginx虚拟主机启用IPv6。 listen [::]:80; 保存并关闭文件。然后编辑SSL虚拟主机/etc/nginx/sites enabled/00默认SSL。形态。 sudo nano /etc/nginx/sites-enabled/00-default-ssl.conf 添加以下行。 listen [::]:443 ssl http2; 保存并关闭文件。然后测试Nginx配置。 sudo nginx -t 如果测试成功,请重新加载Nginx以使更改生效。 sudo systemctl reload nginx 再次运行以下命令以获取TLS证书。用实际数据替换红色文本。 sudo certbot certonly --webroot --agree-tos --email [email protected] -d mail.your-domain.com -w /var/www/html/ 现在您应该能够成功获得TLS证书。 在Nginx中安装证书 获得TLS证书后,让我们配置Nginx web服务器以使用它。编辑SSL模板文件。 sudo nano /etc/nginx/templates/ssl.tmpl 找到下面两行。 ssl_certificate /etc/ssl/certs/iRedMail.crt; ssl_certificate_key /etc/ssl/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/ssl/private/iRedMail.key smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt smtpd_tls_CAfile = /etc/ssl/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/ssl/certs/iRedMail.crt ssl_key = </etc/ssl/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/mail中的以下行。日志表明已启用灰色列表。 Recipient address rejected: Intentional policy rejection, please try again later; 添加交换空间 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 步骤7:检查端口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记录,这将在步骤9中讨论。 第8步:在计算机或移动设备上使用邮件客户端 启动你的桌面电子邮件客户端,比如Mozilla Thunderbird,并添加一个邮件帐户。 在“传入服务器”部分,选择IMAP协议,输入mail。你的领域。com作为服务器名,选择端口143和STARTTLS。选择普通密码作为身份验证方法。 在“发送”部分,选择SMTP协议,输入mail。你的领域。com作为服务器名,选择端口587和STARTTLS。选择普通密码作为身份验证方法。 故障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-new showkeys DKIM公钥在括号中。 然后在DNS管理器中,创建一个TXT记录,输入dkim_名称字段中的domainkey。复制括号中的所有内容并粘贴到值字段中。删除所有双引号和换行符。 保存更改后,运行以下命令测试DKIM记录是否正确。 sudo amavisd-new 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中添加多个邮件域。 如何禁用灰色列表 默认情况下,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 启用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/mail。日志 检查各种服务是否正在运行。 systemctl status postfix systemctl status dovecot systemctl status nginx systemctl status mariadb systemctl status clamav-daemon systemctl status amavis 如果启用了防火墙,则应在防火墙中打开以下端口。 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是使这些程序获取新证书和私钥所必需的。 设置备份邮件服务器 主邮件服务器有时可能会关闭。如果您将邮件服务器托管在数据中心,那么停机时间非常短,因此您不必担心丢失入站邮件。如果您在家中托管邮件服务器,则无法预测停机时间,因此在数据中心运行备份邮件服务器是一种很好的做法,以防止丢失入站邮件。备份邮件服务器只需要512MB内存即可运行。请在下面的文章中查看全部细节。 如何在Ubuntu上设置带有后缀的备份电子邮件服务器(完整指南) 面向高级用户 iRedMail不包括DMARC验证服务,您可以查看以下教程来设置OpenDMARC以阻止电子邮件欺骗。 在Ubuntu上安装带有后缀的OpenDMARC,以阻止电子邮件欺骗/垃圾邮件 您可能需要自定义SpamAssassin内容过滤器,以便更好地检测垃圾邮件。 通过检查Postfix/SpamAssassin中的标题和正文来阻止垃圾邮件 如果您的网站和邮件服务器运行在两个不同的VP(虚拟专用服务器)上,您可以在网站和邮件服务器之间设置SMTP中继,以便您的网站可以通过邮件服务器发送电子邮件。请参阅下面的文章。 如何在Ubuntu上的两个Postfix SMTP服务器之间设置SMTP中继 收尾 就这样!我希望本教程能帮助你用iRedMail在Ubuntu20.04上安装邮件服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
如何使用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上设置邮件服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
在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。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
在Ubuntu 20.04/18.04上设置自己的WireGuard VPN服务器
本教程将向您展示如何在Ubuntu上设置自己的WireGuard VPN服务器。WireGuard是专门为Linux内核设计的。它运行在Linux内核中,允许您创建快速、现代、安全的VPN隧道。 WireGuard VPN功能 轻量级和超高速,将OpenVPN吹出水面。 跨平台。WireGuard可以在Linux、BSD、macOS、Windows、Android、iOS和OpenWRT上运行。 用户身份验证是通过交换公钥来完成的,类似于SSH密钥。 它将静态隧道IP地址分配给VPN客户端。有些人可能不喜欢它,但在某些情况下它可能非常有用。 移动设备可以在Wi-Fi和移动网络之间无缝切换,而不会中断任何连接。 它的目标是在大多数使用情况下取代OpenVPN和IPSec。 WireGuard是我选择的VPN协议,无需为我的专用网络设置TLS加密。 要求 要学习本教程,您需要一个VPS(虚拟专用服务器),可以自由访问被屏蔽的网站(在您的国家或互联网过滤系统之外)。我推荐Kamatera VPS,其特点是: 30天免费试用。 起价为每月4美元(1GB内存) 基于KVM的高性能VPS 世界各地的9个数据中心,包括美国、加拿大、英国、德国、荷兰、香港和ISRALL。 按照下面链接的教程在Kamatera创建Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 一旦你有了运行Ubuntu的VPS,请按照下面的说明操作。 本教程假设VPN服务器和VPN客户端都运行Ubuntu操作系统。 第一步:在Ubuntu服务器和桌面上安装WireGuard 登录Ubuntu服务器,然后运行以下命令安装WireGuard。 Ubuntu 20.04 Ubuntu20.04附带Linux内核5.4,它有一个内置的wireguard模块。 sudo apt update sudo apt install wireguard wireguard-tools Ubuntu 18.04 Ubuntu18.04附带Linux内核4.15,因此用户需要先安装硬件支持内核(HWE),它将在您的系统上安装内核5.4。 sudo apt update sudo apt install linux-generic-hwe-18.04-edge 重新启动Ubuntu 18.04服务器并安装WireGuard。 sudo shutdown -r now sudo apt install wireguard wireguard-tools wireguard-dkms 然后使用相同的命令在本地Ubuntu计算机(VPN客户端)上安装WireGuard。请注意,您还需要在客户端上安装openresolv包来配置DNS服务器。 sudo apt install openresolv 第2步:生成公钥/私钥对 服务器 在Ubuntu服务器上运行以下命令,创建一个公钥/私钥对,它将保存在/etc/wireguard/目录下。 wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key 客户 运行以下命令在本地Ubuntu计算机(VPN客户端)上创建公钥/私钥对。 wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key 步骤3:创建WireGuard配置文件 服务器 使用命令行文本编辑器(如Nano)在Ubuntu服务器上创建WireGuard配置文件。wg0将是网络接口名称。 sudo nano /etc/wireguard/wg0.conf 复制以下文本并将其粘贴到配置文件中。您需要使用自己的服务器私钥和客户端公钥。 [Interface] Address = 10.10.10.1/24 ListenPort = 51820 PrivateKey = cD+ZjXiVIX+0iSX1PNijl4a+88lCbDgw7kO78oXXLEc= [Peer] PublicKey = AYQJf6HbkQ0X0Xyt+cTMTuJe3RFwbuCMF46LKgTwzz4= AllowedIPs = 10.10.10.2/32 哪里: 地址:指定VPN服务器的专用IP地址。这里我使用的是10.10.10.0/24网络范围,所以它不会与您的家庭网络范围冲突。(大多数家庭路由器使用192.168.0.0/24或192.168.1.0/24)。10.10.10.1是VPN服务器的专用IP地址。 PrivateKey:VPN服务器的私钥,可在/etc/wireguard/server_private中找到。服务器上的密钥文件。 ListenPort:WireGuard VPN服务器将在默认的UDP端口51820上侦听。 公钥:VPN客户端的公钥,可以在/etc/wireguard/client_public中找到。客户端计算机上的密钥文件。 AllowedIP:VPN客户端允许使用的IP地址。在本例中,客户端只能在VPN隧道内使用10.10.10.2 IP地址。 保存并关闭文件。(要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。按Ctrl+X退出。) 更改文件权限模式,以便只有root用户可以读取文件。 sudo chmod 600 /etc/wireguard/ -R 客户 使用命令行文本编辑器(如Nano)在本地Ubuntu计算机上创建WireGuard配置文件。wg-client0将是网络接口名称。 sudo nano /etc/wireguard/wg-client0.conf 复制以下文本并将其粘贴到配置文件中。您需要使用自己的客户端私钥和服务器公钥。 [Interface] Address = 10.10.10.2/24 DNS = 10.10.10.1 PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI= [Peer] PublicKey = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I= AllowedIPs = 0.0.0.0/0 Endpoint = 12.34.56.78:51820 PersistentKeepalive = 25 哪里: 地址:指定VPN客户端的专用IP地址。 DNS:指定10.10.10.1(VPN服务器)作为DNS服务器。它将通过resolvconf命令进行配置。您还可以为冗余指定多个DNS服务器,如下所示:DNS=10.10.10.1 8.8.8.8 PrivateKey:客户端的私钥,可以在/etc/wireguard/client_private中找到。客户端计算机上的密钥文件。 公钥:服务器的公钥,可以在/etc/wireguard/server_public中找到。服务器上的密钥文件。 AllowedIPs:0.0.0.0/0代表整个互联网,这意味着所有到互联网的流量都应该通过VPN路由。 端点:VPN服务器的公共IP地址和端口号。将12.34.56.78替换为服务器的真实公共IP地址。 PersistentKeepalive:每25秒向对等方发送一个经过身份验证的空数据包,以保持连接有效。如果未启用PersistentKeepalive,VPN服务器可能无法ping VPN客户端。 保存并关闭文件。 更改文件模式,以便只有root用户可以读取文件。 sudo chmod 600 /etc/wireguard/ -R 步骤4:在服务器上启用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 步骤5:在服务器上配置IP伪装 我们需要在服务器防火墙中设置IP伪装,以便服务器成为VPN客户端的虚拟路由器。我将使用UFW,它是iptables防火墙的前端。在Ubuntu上通过以下方式安装UFW: sudo apt install ufw 首先,需要允许SSH通信。 sudo ufw allow 22/tcp 接下来,找到服务器主网络接口的名称。 ip -c a 正如你所看到的,在我的Ubuntu服务器上,它被命名为enp3s0。 要配置IP伪装,我们必须在UFW配置文件中添加iptables命令。 sudo nano /etc/ufw/before.rules 默认情况下,过滤器表有一些规则。在该文件末尾添加以下行。用您自己的网络接口名称替换enp3s0。 # NAT table rules *nat :POSTROUTING ACCEPT [0:0] -A POSTROUTING -s 10.10.10.0/24 -o enp3s0 -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)。 步骤6:在服务器上安装DNS解析程序 由于我们将VPN服务器指定为客户端的DNS服务器,因此需要在VPN服务器上运行DNS解析器。我们可以安装bind9 DNS服务器。 sudo apt install bind9 一旦安装,BIND将自动启动。您可以通过以下方式检查其状态: systemctl status bind9 样本输出: ● named.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2020-05-17 08:11:26 UTC; 37s ago Docs: man:named(8) Main PID: 13820 (named) Tasks: 5 (limit: 1074) Memory: 14.3M CGroup: /system.slice/named.service └─13820 /usr/sbin/named -f -u bind 如果没有运行,请从以下内容开始: sudo systemctl start bind9 编辑绑定DNS服务器的配置文件。 sudo nano /etc/bind/named.conf.options 添加以下行以允许VPN客户端发送递归DNS查询。 allow-recursion { 127.0.0.1; 10.10.10.0/24; }; 保存并关闭文件。重新启动BIND9以使更改生效。 sudo systemctl restart bind9 然后,您需要运行以下命令以允许VPN客户端连接到端口53。 sudo ufw insert 1 allow in from 10.10.10.0/24 第7步:打开防火墙中的WireGuard端口 运行以下命令打开服务器上的UDP端口51820。 sudo ufw allow 51820/udp 第8步:启动WireGuard 服务器 在服务器上运行以下命令以启动WireGuard。 sudo systemctl start [email protected] 在系统启动时启用自动启动。 sudo systemctl enable [email protected] 使用以下命令检查其状态。其状态应为活动(已退出)。 systemctl status [email protected] 现在WireGuard服务器已准备好接受客户端连接。 客户 启动铁丝网。 sudo systemctl start [email protected] 在系统启动时启用自动启动。 sudo systemctl enable [email protected] 检查其状态: systemctl status [email protected] 现在进入这个网站:https://icanhazip.com/检查你的公共IP地址。如果一切顺利,它应该显示VPN服务器的公共IP地址,而不是客户端计算机的公共IP地址。 您还可以运行以下命令来获取当前的公共IP地址。 curl https://icanhazip.com 故障排除提示 不能用ping 您可以从VPN服务器ping到VPN客户端(ping 10.10.10.2),查看隧道是否工作。如果在ping中看到以下错误消息, ping: sendmsg: Required key not available 可能是AllowedIPs参数错误,比如输入错误。修复错误后,重新启动VPN服务器和VPN客户端。 另一个原因可能是您忘记在服务器配置文件中添加ListenPort=51820。 公共IP不会改变 如果VPN隧道成功建立,但客户端公共IP地址没有更改,那是因为UFW配置文件中的伪装或转发规则不起作用。我以前在/etc/ufw/中有一次输入错误。规则文件,这导致我的电脑无法浏览互联网。 请注意,我不建议在WireGuard配置文件的[Interface]部分使用SaveConfig=true。SaveConfig告诉WireGuard在关机时保存运行时配置。因此,如果在配置文件中添加额外的[Peer],然后重新启动WireGuard,新添加的配置将被覆盖。 在Linux内核中启用调试日志记录 如果使用Linux内核5.6+,可以使用以下命令启用WireGuard的调试日志记录。 sudo su - echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control 然后可以使用查看调试日志 sudo dmesg -wH 或 sudo journalctl -kf 重新启动 如果VPN仍然无法工作,请尝试重新启动VPN服务器。 sudo systemctl restart [email protected] 然后停止VPN客户端。 sudo systemctl stop [email protected] 并升级VPN客户端上的软件包。 sudo apt update; sudo apt upgrade 接下来,重新启动VPN客户端。 sudo shutdown -r now sudo systemctl start [email protected] 如果您的WiReGueVPN只能在重新启动之后工作,请考虑添加CRON作业来自动重新启动服务。 sudo crontab -e 在此文件中添加以下行。 @daily systemctl restart [email protected] WireGuard和;OpenConnect 在我的一台VPS服务器上,我安装了WireGuard和OpenConnect VPN服务器。速度测试如下。对你来说可能不会很快,因为我的电脑和VPN服务器之间的连接非常差。速度取决于VPN客户端和VPN服务器之间的延迟和数据包丢失率。 WireGuard是赢家。它比OpenConnect快近3倍。 TCP上的OpenConnect比UDP上的OpenConnect更快。惊喜 WireGuard在播放YouTube视频时可以达到52296kbps(约51Mbit/s)。 OpenConnect(采用TCP BBR算法的TLS)在播放YouTube视频时能够达到16504kbps(约16Mbit/s)。 在播放YouTube视频时,OpenConnect(UDP上的TLS)能够达到12997 Kbps(约12.7 Mbit/s)。 添加其他VPN客户端 WireGuard设计用于将一个IP地址与一个VPN客户端相关联。要添加更多VPN客户端,需要为每个客户端创建唯一的私钥/公钥对,然后在服务器的配置文件(/etc/wireguard/wg0.conf)中添加每个VPN客户端的公钥,如下所示: [Interface] Address = 10.10.10.1/24 PrivateKey = UIFH+XXjJ0g0uAZJ6vPqsbb/o68SYVQdmYJpy/FlGFA= ListenPort = 51820 [Peer] PublicKey = 75VNV7HqFh+3QIT5OHZkcjWfbjx8tc6Ck62gZJT/KRA= AllowedIPs = 10.10.10.2/32 [Peer] PublicKey = YYh4/1Z/3rtl0i7cJorcinB7T4UOIzScifPNEIESFD8= AllowedIPs = 10.10.10.3/32 [Peer] PublicKey = EVstHZc6QamzPgefDGPLFEjGyedJk6SZbCJttpzcvC8= AllowedIPs = 10.10.10.4/32 每个VPN客户端将有一个静态专用IP地址(10.10.10.2、10.10.10.3、10.10.10.4等)。重新启动WireGuard服务器,使更改生效。 sudo systemctl restart [email protected] 然后像往常一样在每个VPN客户端上添加WireGuard配置。 VPN连接中断时自动重启 有时VPN连接会由于各种原因而中断。您可以运行以下命令来检查VPN客户端是否可以ping VPN服务器的私有IP地址(10.10.10.1)。如果ping失败,则将执行右侧的命令以重新启动VPN客户端。|是Bash中的OR运算符。只有当左边的命令返回错误时,它才会执行右边的命令。 ping -c9 10.10.10.1 > /dev/null || systemctl restart [email protected] ping将进行9次,即9秒。可以在Bash shell中使用for循环,使整个命令运行6次,即54秒。 for ((i=1; i<=6; i++)) do (ping -c9 10.10.10.1 > /dev/null || systemctl restart [email protected]) done 现在,我们可以创建一个Cron作业来自动化这项任务。在VPN客户端上编辑根用户的crontab文件。 sudo crontab -e Bash不是Cron中的默认shell。可以在Crontab文件的开头添加以下行,使其成为默认值。 SHELL=/bin/bash 然后在文件末尾添加以下行。 * * * * * for ((i=1; i<=6; i++)) do (ping -c9 10.10.10.1 > /dev/null || systemctl restart [email protected]) done 这个Cron作业每分钟运行一次,每分钟有6次检查。保存并关闭文件。 高级用法 现在,我将向您展示如何在WireGuard VPN中使用策略路由、拆分隧道和VPN终止开关。请注意,不建议将它们相互结合使用。如果使用策略路由,则不应启用拆分隧道或VPN kill switch,反之亦然。本节面向高级用户。如果你是一个刚开始使用WireGuard的人,不知道它们的用途,那么就不要使用本节中的说明。 策略路由 默认情况下,VPN客户端上的所有流量都将通过VPN服务器路由。有时,您可能只希望根据传输层协议和目标端口路由特定类型的流量。这就是所谓的策略路由。 在客户端计算机上配置了策略路由,我们需要先停止VPN连接。 sudo systemctl stop [email protected] 然后编辑客户端配置文件。 sudo nano /etc/wireguard/wg-client0.conf 例如,如果在[interface]部分添加以下3行,WireGuard将创建一个名为“1234”的路由表,并将ip规则添加到路由表中。在本例中,只有当TCP用作传输层协议且目标端口为25时,即当客户端计算机发送电子邮件时,流量才会通过VPN服务器路由。 Table = 1234 PostUp = ip rule add ipproto tcp dport 25 table 1234 PreDown = ip rule delete ipproto tcp dport 25 table 1234 注意:为了配置策略路由,客户端应该运行Ubuntu20.04或更高版本。Ubuntu 18.04上的ip实用程序不支持ipproto和dport参数。 保存并关闭文件。然后启动WireGuard客户端。 sudo systemctl start [email protected] 如果要为TCP端口80和443路由流量,请使用以下语法。 Table = 1234 PostUp = ip rule add ipproto tcp dport 80 table 1234; ip rule add ipproto tcp dport 443 table 1234 PreDown = ip rule delete ipproto tcp dport 80 table 1234; ip rule delete ipproto tcp dport 443 table 1234 请记住,在更改策略路由规则之前,应该停止WireGuard VPN连接。 还可以指定如下所示的端口范围(TCP端口26到TCP端口10240)。 Table = 1234 PostUp = ip rule add ipproto tcp dport 26-10240 table 1234 PreDown = ip rule delete ipproto tcp dport 26-10240 table 1234 如果要同时指定TCP和UDP端口,请删除ipproto TCP。 Table = 1234 PostUp = ip rule add dport 26-10240 table 1234 PreDown = ip rule delete dport 26-10240 table 1234 您可能希望将VPN客户端配置为仅当通信量发送到特定IP地址时才使用VPN隧道。您可以使用to选项来实现这一点。 Table = 1234 PostUp = ip rule add to 10.0.0.0/24 table 1234 PreDown = ip rule delete to 10.0.0.0/24 table 1234 隧道分离 默认情况下,VPN客户端上的所有流量都将通过VPN服务器路由。下面介绍如何启用拆分隧道,这样只有到10.10.10.0/24 IP范围的流量才会通过WireGuard VPN进行隧道传输。当您想要为多个云服务器构建专用网络时,这非常有用,因为VPN客户端将在云服务器上运行,如果使用完整的VPN隧道,则可能会失去与云服务器的连接。 编辑客户端配置文件。 sudo nano /etc/wireguard/wg-client0.conf 改变 AllowedIPs = 0.0.0.0/0 到 AllowedIPs = 10.10.10.0/24 因此,只有当目标地址在10.10.10.0/24 IP范围内时,流量才会通过VPN路由。保存并关闭文件。然后重启WireGuard客户端。 sudo systemctl restart [email protected] 您还可以允许多个IP范围。假设VPN服务器还管理10.10.20.0/24网络,那么您可以在VPN客户端上配置AllowedIP,如下所示: AllowedIPs = 10.10.10.0/24, 10.10.20.0/24 因此VPN客户端可以通过VPN服务器访问10.10.20.0/24网络,反之亦然。 要添加单个IP地址,请使用以下语法。 AllowedIPs = 10.10.10.0/24, 10.10.20.0/24, 8.8.8.8/32 这会告诉客户端在与8.8.8.8通信时使用VPN服务器。 VPN终止开关 默认情况下,当VPN连接中断时,您的计算机可以通过普通网关访问Internet。您可能希望启用kill switch功能,它可以防止未加密的数据包通过非WireGuard接口流动。 停止WireGuard客户端进程。 sudo systemctl stop [email protected] 编辑客户端配置文件。 sudo nano /etc/wireguard/wg-client0.conf 在[interface]部分添加以下两行。 PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT 这样地: [Interface] Address = 10.10.10.2/24 DNS = 10.10.10.1 PrivateKey = cOFA+x5UvHF+a3xJ6enLatG+DoE3I5PhMgKrMKkUyXI= PostUp = iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT PreDown = iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL -j REJECT [Peer] PublicKey = RaoAdsIEIwgV9DHNSubxWVG+nZ1GP/c3OU6A/efBJ0I= AllowedIPs = 0.0.0.0/0 Endpoint = 12.34.56.78:51820 PersistentKeepalive = 25 保存并关闭文件。然后启动WireGuard客户端。 sudo systemctl start [email protected] WireGuard接口中的多个地址 WireGuard接口可以有多个IP地址。例如,VPN客户端上可以有两个IP地址。 [Interface] Address = 10.10.10.2/24 Address = 10.10.10.3/24 .... 在这种情况下,您需要在VPN服务器上为此特定客户端允许多个IP地址,否则VPN客户端可能无法连接到VPN服务器。 [Peer] ... AllowedIPs = 10.10.10.2/32, 10.10.10.3/32 您可以使用以下命令检查属于网络接口的IP地址。 ip -c a 笔记 ifconfig命令只能显示网络接口的IP地址。 如果您在新系统中设置了另一个WireGuard接口。conf文件,然后它需要绑定到51820以外的端口,否则您将看到“地址已在使用”错误。 收尾 就这样!我希望本教程能帮助你在Ubuntu上安装和配置WireGuard。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门?
-
如何在Ubuntu18.04 LTS上安装LEMP堆栈(Nginx、MariaDB、PHP7.2)
本教程将向您展示如何安装Nginx、MariaDB和PHP7。2(LEMP)在Ubuntu 18.04上。软件堆栈是捆绑在一起的一组软件工具。LEMP代表Linux、Nginx(Engine-X)、MariaDB/MySQL和PHP,它们都是开源的,可以免费使用。它是为动态网站和web应用程序提供动力的最常见的软件堆栈。Linux是操作系统;Nginx是web服务器;MariaDB/MySQL是数据库服务器,PHP是负责生成动态网页的服务器端脚本语言。 先决条件 要学习本教程,您需要在本地计算机或远程服务器上运行Ubuntu 18.04操作系统。如果您正在寻找VPS(虚拟专用服务器),那么您可以单击此特殊链接在DigitalOcean上获得50美元的免费积分。(仅限新用户使用)。如果您已经是DigitalOcean用户,那么您可以单击此特殊链接在Vultr上获得50美元的免费积分(仅限新用户)。不用麻烦了,我们开始吧。 步骤1:更新软件包 在安装LEMP堆栈之前,最好在Ubuntu 18.04操作系统上运行以下命令来更新存储库和软件包。 sudo apt update sudo apt upgrade 步骤2:安装Nginx Web服务器 Nginx是一款高性能的web服务器,目前非常流行。它还可以用作反向代理和缓存服务器。输入此命令以安装Nginx Web服务器。 sudo apt install nginx 安装完成后,我们可以通过运行以下命令,使Nginx在Ubuntu启动时自动启动。 sudo systemctl enable nginx 然后使用以下命令启动Nginx: sudo systemctl start nginx 现在查看它的状态。 systemctl status nginx 输出: ● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-05-17 02:20:05 UTC; 2min 56s ago Docs: man:nginx(8) Main PID: 19851 (nginx) Tasks: 2 (limit: 2059) CGroup: /system.slice/nginx.service ├─19851 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─19853 nginx: worker process “Enabled”表示启动时自动启动已启用,我们可以看到Nginx正在运行。请注意,上述命令在运行后不会立即退出。你需要按“q”键让它退出。 检查Nginx版本。 nginx -v 输出: nginx version: nginx/1.14.0 (Ubuntu) 现在在浏览器地址栏中输入Ubuntu18.04服务器的公共IP地址。您应该会看到“欢迎使用Nginx”网页,这意味着Nginx Web服务器正在正常运行。如果要在本地Ubuntu 18.04计算机上安装LEMP,请在浏览器地址栏中键入127.0.0.1或localhost。 请注意,默认情况下,一些云服务器提供商可能会阻止所有传入流量,因此,如果浏览器无法连接到Nginx web服务器,您可能需要在控制面板中设置防火墙规则。 最后,我们需要使www数据(Nginx用户)成为web目录的所有者。默认情况下,它归root用户所有。 sudo chown www-data:www-data /usr/share/nginx/html -R 步骤3:安装MariaDB数据库服务器 MariaDB是MySQL的替代品。它是由MySQL团队的前成员开发的,他们担心Oracle可能会将MySQL变成一个封闭源代码的产品。输入以下命令在Ubuntu 18.04上安装MariaDB。 sudo apt install mariadb-server mariadb-client 安装后,MariaDB服务器应自动启动。使用systemctl检查其状态。 systemctl status mariadb 输出: ● mariadb.service - MariaDB database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2018-05-17 02:39:57 UTC; 49s ago Main PID: 21595 (mysqld) Status: "Taking your SQL requests now..." Tasks: 27 (limit: 2059) CGroup: /system.slice/mariadb.service └─21595 /usr/sbin/mysqld 如果未运行,请使用以下命令启动: sudo systemctl start mariadb 要使MariaDB在启动时自动启动,请运行 sudo systemctl enable mariadb 现在运行安装后安全脚本。 sudo mysql_secure_installation 当它要求您输入根密码时,请按enter键,因为根密码尚未设置。然后输入y设置MariaDB服务器的根密码。 接下来,您可以按Enter键回答所有剩余的问题,这将删除匿名用户、禁用远程根登录并删除测试数据库。这一步是MariaDB数据库安全的基本要求。(请注意,Y是大写的,这意味着它是默认答案。) 默认情况下,Ubuntu上的MaraiDB包使用unix_socket对用户登录进行身份验证,这基本上意味着您可以使用操作系统的用户名和密码登录到MariaDB控制台。因此,您可以运行以下命令登录,而无需提供MariaDB root密码。 sudo mariadb -u root 要退出,快跑 exit; 检查MariaDB服务器版本信息。 mariadb --version 如您所见,我们已经安装了MariaDB 10.1.29。 mariadb Ver 15.1 Distrib 10.1.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 第4步:安装PHP7。2. PHP7。2包含在Ubuntu18.04存储库中,与PHP7相比,性能略有提高。1.输入以下命令以安装php7。2和一些常见的扩展。 sudo apt install php7.2 php7.2-fpm php7.2-mysql php-common php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-readline php7.2-mbstring php7.2-xml php7.2-gd php7.2-curl 像WordPress这样的内容管理系统(CMS)通常需要PHP扩展。例如,如果您的安装缺少php7。2-xml,则WordPress网站的某些页面可能是空白的,您可以在Nginx错误日志中找到错误,如: PHP message: PHP Fatal error: Uncaught Error: Call to undefined function xml_parser_create() 安装这些PHP扩展可以确保CMS顺利运行。现在启动php7。2-fpm。 sudo systemctl start php7.2-fpm 启动时启用自动启动。 sudo systemctl enable php7.2-fpm 检查状态: systemctl status php7.2-fpm 样本输出: ● php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor prese Active: active (running) since Thu 2018-05-17 03:04:46 UTC; 2min 43s ago Docs: man:php-fpm7.2(8) Main PID: 31922 (php-fpm7.2) Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/se Tasks: 3 (limit: 2059) CGroup: /system.slice/php7.2-fpm.service ├─31922 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf) ├─31939 php-fpm: pool www └─31940 php-fpm: pool www 步骤5:创建Nginx服务器块 Nginx服务器块就像Apache中的虚拟主机。我们不会使用默认服务器块,因为它不足以运行PHP代码,如果我们修改它,它就会变得一团糟。因此,通过运行以下命令,删除sites enabled目录中的默认符号链接。(它仍然以/etc/nginx/sites available/default的形式提供。) sudo rm /etc/nginx/sites-enabled/default 然后在/etc/nginx/conf.d/目录下创建一个全新的服务器块文件。 sudo nano /etc/nginx/conf.d/default.conf 将以下文本粘贴到文件中。以下代码片段将使Nginx在IPv4端口80和IPv6端口80上侦听,并使用一个全包服务器名称。 server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php; } location ~ /.php$ { fastcgi_pass unix:/run/php/php7.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } # A long browser cache lifetime can speed up repeat visits to your page location ~* /.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ { access_log off; log_not_found off; expires 360d; } # disable access to hidden files location ~ //.ht { access_log off; log_not_found off; deny all; } } 保存并关闭文件。然后测试Nginx配置。 sudo nginx -t 如果测试成功,请重新加载Nginx。 sudo systemctl reload nginx 第6步:测试PHP 要使用Nginx Web服务器测试PHP-FPM,我们需要创建一个info。文件根目录中的php文件。 sudo nano /usr/share/nginx/html/info.php 将以下PHP代码粘贴到文件中。 <?php phpinfo(); ?> 保存并关闭文件。现在在浏览器地址栏中,输入服务器ip地址/信息。php。用实际ip替换服务器ip地址。如果您在本地计算机上遵循本教程,请键入127.0.0.1/info。php或localhost/info。php。 您应该可以看到服务器的PHP信息。这意味着PHP脚本可以在Nginx web服务器上正常运行。 恭喜!您已经成功安装了Nginx、MariaDB和PHP7。2在Ubuntu18.04上。为了服务器的安全,您应该删除信息。php文件,以防止黑客看到它。 sudo rm /usr/share/nginx/html/info.php 下一步 您可能需要安装phpMyAdmin,这是一个用于MySQL/MariaDB数据库服务器的基于web的管理面板。 如何在Ubuntu18.04 LTS上安装带有Nginx(LEMP)的phpMyAdmin 您还可以在LEMP堆栈的顶部安装WordPress,创建自己的网站或博客。 使用Nginx、MariaDB和PHP7在Ubuntu18.04上安装WordPress。2(LEMP) 就这样!我希望本教程能帮助你在Ubuntu18.04 LTS上安装LEMP堆栈。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心。
-
在Debian/Ubuntu上的绑定解析程序中设置响应策略区域(RPZ)
本教程将向您展示如何使用Debian/Ubuntu上的响应策略区域(RPZ)覆盖绑定DNS解析程序中的公共DNS记录。 什么是响应策略区? 响应策略区域(RPZ)允许DNS解析程序修改DNS记录。它最初是为了阻止访问危险网站而开发的。例如,如果计算机查询传播恶意软件的已知危险站点的IP地址,DNS解析程序可以返回127.0.0.1作为DNS响应,因此计算机无法连接到危险站点。这是最初的用例。因此,响应策略区域也称为DNS防火墙。 你可以用其他方式使用RPZ。例如 如果您在本地网络中拥有像Nextcloud这样的自托管服务,您可以使用RPZ将您的Nextcloud域(Nextcloud.your domain.com)指向本地IP地址,这样您就不必访问Internet,然后返回本地网络访问Nextcloud服务器。 家长可以使用RPZ阻止孩子访问色情网站。 你可以屏蔽不需要的广告。 我在VPS上安装了许多web应用程序。当该web应用程序不用于公共访问时,我只在BIND RPZ中添加DNS记录,不在我的域注册器中发布DNS记录以防止黑客攻击。 是的,您可以在本地计算机上的/etc/hosts文件中创建一个DNS条目来覆盖公共DNS记录,但它不能很好地扩展。此外,iOS和Android不允许您创建本地DNS条目。如果绑定DNS解析程序覆盖公共DNS记录,那么网络中使用绑定解析程序的所有设备都可以使用自定义DNS记录,这不是很好吗? 先决条件 为了学习本教程,假设您在Debian/Ubuntu服务器上运行了一个绑定DNS解析器。如果没有,请阅读以下教程之一来设置绑定解析器。 在Debian 10 Buster上设置自己的BIND9 DNS解析器 在Ubuntu 16.04/18.04上设置自己的BIND9 DNS解析器 在Ubuntu 20.04上设置自己的BIND9 DNS解析器 一旦绑定解析程序启动并运行,请按照以下说明操作。 如何在Debian/Ubuntu服务器上设置绑定响应策略区域 首先,编辑命名文件。conf.options文件。 sudo nano/etc/bind/named。形态选项 在选项{…}中添加以下行子句来启用响应策略区域。(第一行是评论。) //启用响应策略区域。响应策略{zone“rpz.local”;}; 保存并关闭文件。然后打开命名的。conf.local文件。 sudo nano/etc/bind/named。conf.local 在此文件中添加RPZ区域。 区域“rpz.local”{type master;file”/etc/bind/db.rpz.local”;允许查询{localhost;};允许转移{12.34.56.78;};}; 笔记: 在file指令中使用绝对路径而不是简单的文件名很重要,否则BIND会假定文件位于/var/cache/BIND/中。 RPZ区域应仅允许来自localhost的查询。您不需要添加本地网络客户端。 将12.34.56.78替换为从属绑定DNS解析程序的IP地址,该解析程序允许进行区域传输。如果只有一个DNS解析程序,可以像这样使用localhost:allow transfer{localhost;}; 保存并关闭文件。然后我们需要创建区域文件。我们可以使用区域模板文件,而不是从头创建区域文件。复制数据库的内容。空到一个新文件。 sudo cp/etc/bind/db。空/etc/bind/db。rpz。地方的 然后编辑数据库。rpz文件。 sudo nano/etc/bind/db。rpz。地方的 无需更改现有内容。我们只需添加自定义DNS记录。例如,如果您在本地网络上有一台IP地址为192.168.0.103的Nextcloud服务器,那么您可以添加以下DNS记录,这样Nextcloud客户端就不必为了连接到Nextcloud服务器而去互联网。 下个星期。你的领域。com A 192.168.0.103 如果你不想让你的孩子访问像pornhub这样的色情网站。com,在此文件中添加以下行以阻止整个pornhub。com域。 *.色情中心。com CNAME。 如果你不喜欢在网页上看到谷歌Adsense广告,你可以添加以下行来阻止双击。net域,用于发送Adsense广告。 *.双击。net CNAME。 下面是一些可以阻止的更多广告服务器域。 *.公共的。com CNAME.*。莫布。com CNAME.*。爱斯基米人。com CNAME.*。adcolony。xyz CNAME.*。adsrvr。org CNAME.*。无症状的。com CNAME.*。由buysellads提供服务。com CNAME。srv。buysellads。com CNAME.*。powerinboxedge。com CNAME.*。迪福。com CNAME.*。利卡斯德。com CNAME.*。利亚姆。com CNAME。 要覆盖域名的MX记录,请添加一行,如下所示。 实例com MX 0邮件。实例通用域名格式。 请注意,所有左手名不得以点结尾,所有右手名必须以点结尾。 如果需要主机名的负载平衡,那么可以创建一个包含多个值的记录,如下所示。DNS客户端将随机使用这两个IP地址,流量将分布在它们之间。 主办实例com A 12.34.56.78 A 12.34.56.79 保存并关闭文件。建议RPZ使用单独的日志文件,以便更好地分析日志。要进行配置,请编辑绑定主配置文件。 sudo nano/etc/bind/named。形态 将以下行添加到文件中。 记录{channel rpzlog{file”/var/log/named/rpz.log“版本大小不限100m;打印时间是;打印类别是;打印严重性是;严重性信息;};范畴rpz{rpzlog;};}; 保存并关闭文件。然后创建/var/log/named/目录,并将bind作为所有者。 sudo mkdir/var/log/named/sudo chown bind:bind/var/log/named/-R 接下来,运行以下命令检查主配置文件中是否存在语法错误。无声输出表示未发现错误。 sudo命名为checkconf 然后检查RPZ区域文件的语法。 sudo命名为checkzone rpz/etc/bind/db。rpz。地方的 如果没有发现错误,则重新启动BIND9。 sudo systemctl重启bind9 现在可以在绑定服务器上运行dig命令,查看RPZ是否正常工作。例如,查询响应策略区域中包含的域名的DNS记录。 再挖一块。你的领域。com@127.0.0.1 您应该在命令输出中看到如下内容,这表明DNS响应来自本地RPZ。 ;; 授权部门:rpz。NS localhost中的本地86400。 您还可以查看BIND9查询日志。 sudo tail/var/log/named/rpz。日志 您会看到下面这样的内容,这意味着响应来自本地RPZ。 (example.com):rpz QNAME本地数据重写示例。com的例子。通用域名格式。rpz。地方的 Fedora客户端不使用RPZ? 默认情况下,Fedora不使用RPZ。您可以使用dig命令行实用程序在RPZ区域中查找主机名的IP地址,但如果ping主机名,它将找不到IP地址。 要解决这个问题,需要更改/etc/nsswitch中的hosts参数。Fedora客户端上的conf文件。 sudo nano/etc/nswitch。形态 默认情况下,hosts参数定义为: 主机:文件myhostname mdns4_minimal[NOTFOUND=return]解析[!unail=return]dns 将其更改为: 主机:文件mdns4_minimal[NOTFOUND=return]dns myhostname mymachines 保存并关闭文件。RPZ现在应该可以工作了。 与转发器一起使用RPZ 如果在/etc/bind/named中的options子句中添加如下fowarders指令。conf.options文件,则绑定解析程序成为转发器,它将DNS请求转发到上游DNS解析程序,如8.8.8.8。 选项{directory”/var/cache/bind;//如果您和想要//对话的名称服务器之间有防火墙,您可能需要修复防火墙以允许多个//端口对话。请参阅http://www.kb.cert.org/vuls/id/800113//如果您的ISP为稳定的//名称服务器提供了一个或多个IP地址,您可能希望将其用作转发器。//取消对以下块的注释,并插入地址替换//all-0的占位符。货代{8.8.8.8;8.8.4.4;};..}; 响应策略区域与此转发器设置配合使用。Bind将首先查询本地响应策略区域。如果在RPZ中找不到DNS记录,则请求将转发到上游DNS解析程序。当您自己的绑定解析程序解析DNS名称花费太多时间时,您可能希望使用转发器来加速DNS解析。 配置区域传输 如果您有另一个绑定DNS解析程序,可以将其配置为从属解析程序,以自动接收来自主DNS解析程序的更新。 首先,需要编辑/etc/bind/named。主DNS解析程序上的conf.local文件。 sudo nano/etc/bind/named。conf.local 将从属DNS解析程序的IP地址添加到allow transfer指令。 区域“rpz.local”{type master;file”/etc/bind/db.rpz.local”;允许查询{localhost;};允许转移{12.34.56.78;};同时通知{12.34.56.78;};}; 如果您有多个从属DNS解析程序,请添加多个IP地址,如下所示。 允许转移{12.34.56.78;12.34.56.79;}; ALLOW notify指令将使主DNS解析程序在RPZ区域更改时向从解析程序发送通知消息。保存并关闭文件。重新启动BIND以使更改生效。 sudo systemctl重启bind9 如果主DNS解析程序上运行防火墙,则需要允许从DNS解析程序连接到端口53。例如,如果使用UFW防火墙,请运行以下命令。 sudo ufw插件1允许从12.34.56.78插入任何端口53 接下来,编辑已命名的。从DNS解析程序上的conf.options文件。 sudo nano/etc/bind/named。形态选项 在选项{…}中添加以下行子句来启用响应策略区域。(第一行是评论。) //启用响应策略区域。响应策略{zone“rpz.local”;}; 保存并关闭文件。然后编辑命名的。conf.local文件。 sudo nano/etc/bind/named。conf.local 在此文件中添加从属RPZ区域。将11.22.33.44替换为主DNS解析程序的IP地址。 区域“rpz.local”{type slave;文件“db.rpz.local”;masters{11.22.33.44;};允许通知{11.22.33.44;};允许传输{none;};允许查询{localhost;};}; 保存并关闭文件。 您还需要配置从属解析程序的防火墙,以允许主DNS解析程序发送通知消息。 sudo ufw插件1允许从11.22.33.44进入任何端口53 接下来,运行以下命令检查主配置文件中是否存在语法错误。无声输出表示未发现错误。 sudo命名为checkconf 如果没有发现错误,则重新启动BIND9。 sudo systemctl重启bind9 BIND9重新启动后,区域传输将立即启动。使用以下命令检查BIND9日志。 sudo journalctl-eu bind9 或 sudo journalctl-欧盟命名 您可以看到如下消息,这表明区域传输成功。 转移rpz。本地/来自xx。xx。xx。xx#53:转移状态:成功转移“rpz”。本地/来自xx。xx。xx。xx#53:传输完成:1条消息,34条记录,899字节,0.248秒(3625字节/秒) 注意:无论何时修改主解析器上的RPZ区域,都需要更新序列号。使其更大,以便从属解析器知道RPZ区域已更改。 创建多个RPZ区域 有时,您可能不希望将某些DNS记录传输到从属解析程序。您可以创建一个单独的RPZ区域。编辑命名文件。conf.options文件。 sudo nano/etc/bind/named。形态选项 添加一个新的RPZ区域。 //启用响应策略区域。响应策略{zone“rpz.local”zone“rpz.local.nottransfer”;}; 注意:如果两个RPZ区域有冲突的DNS记录,则以第一个条目为准。如果要反转优先级,请切换其位置,如下所示: //启用响应策略区域。响应策略{zone“rpz.local.nottransfer”;zone“rpz.local”;}; 保存并关闭文件。然后打开命名的。conf.local文件。 sudo nano/etc/bind/named。conf.local 在此文件中添加新分区的定义。 区域“rpz.local.nottransfer”{type master;文件“/etc/bind/db.rpz.local.nottransfer”;允许查询{localhost;};允许传输{localhost;};}; 保存并关闭文件。然后我们需要创建区域文件。我们可以使用区域模板文件,而不是从头创建区域文件。复制数据库的内容。空到一个新文件。 sudo cp/etc/bind/db。空/etc/bind/db。rpz。地方的不转移 然后编辑数据库。rpz文件并添加自定义DNS记录。 sudo nano/etc/bind/db。rpz。地方的转移 故障排除提示 如果辅助DNS解析程序未能从主DNS解析程序复制RPZ记录,则辅助DNS解析程序上可能存在以下情况: 防火墙规则是错误的。 绑定解析程序未运行。 BIND未在所需的网络接口上侦听。 如何将RPZ与绑定中的视图一起使用 如果你想让你的RPZ只能被内部的可信网络访问,你可以使用BIND中的视图来实现。此设置将与主从区传输兼容。 首先,编辑命名文件。conf.options文件。 sudo nano/etc/bind/named。形态选项 使用acl指令定义内部网络和来宾网络。 选项{….}acl内部{10.10.10.0/24;};acl来宾{10.10.20.0/24;}; 这里的10.10.10.0/24网络是内部可信网络。10.10.20.0/24是来宾网络。另外,从该文件中删除以下行。 响应策略{zone“rpz.local”;}; 保存并关闭文件。 接下来,编辑已命名的。conf.local文件。 sudo nano/etc/bind/named。conf.local 您需要将分区定义放在如下所示的视图子句中。注意,我们需要在view子句中启用响应策略区域。 查看“内部”{match clients{internal;}//启用响应策略区域。响应策略{zone“rpz.local”;};区域“rpz.local”{type master;file”/etc/bind/db.rpz.local”;允许查询{localhost;};允许转移{12.34.56.78;};};};}; 保存并关闭文件。然后编辑命名的。conf文件。 sudo nano/etc/bind/named。conf.default-zones 在来宾视图中放置默认区域。 查看来宾{match clients{guest;};允许递归{any;};区域”{键入提示;文件“/usr/share/dns/root.hints”;};区域“localhost”{type master;file“/etc/bind/db.local”;};…}; 保存并关闭文件。运行以下命令检查配置文件中是否存在语法错误。无声输出表示未发现错误。 sudo命名为checkconf 如果没有发现错误,则重新启动BIND9以使更改生效。 sudo systemctl重启bind9 收尾 我希望本教程能帮助您在Debian/Ubuntu上设置响应策略区域/DNS防火墙。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
在Ubuntu20.04上用Let's Encrypt设置OpenConnect VPN服务器(ocserv)
本教程将向您展示如何在Ubuntu 20.04上安装OpenConnect VPN服务器来运行自己的VPN服务器。OpenConnect VPN服务器,又名ocserv,是Cisco AnyConnnect VPN协议的开源实现,广泛应用于企业和大学。AnyConnect是一种基于SSL的VPN协议,允许单个用户连接到远程网络。 注意:本教程也适用于Ubuntu20.10和Ubuntu21.04。 为什么要设置自己的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安装openconnect sudo openconnect-b vpn。我的域名。通用域名格式 此外,还有用于Fedora、RHEL、CentOS、Arch Linux和OpenSUSE的OpenConnect VPN客户端。您可以使用软件包管理器轻松安装它。 sudo dnf安装openconnect sudo yum安装openconnect sudo pacman-S openconnect 要求 要学习本教程,您需要一个VPS(虚拟专用服务器),可以自由访问被屏蔽的网站(在您的国家或互联网过滤系统之外)。我推荐Kamatera VPS,其特点是: 30天免费试用。 起价为每月4美元(1GB内存) 基于KVM的高性能VPS 世界各地的9个数据中心,包括美国、加拿大、英国、德国、荷兰、香港和ISRALL。 按照下面链接的教程在Kamatera创建Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 一旦你有了一个运行Ubuntu20.04的VPS,请按照下面的说明操作。 您还需要一个域名来为OpenConnect VPN启用HTTPS。我从namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 第一步:在Ubuntu 20.04上安装OpenConnect VPN服务器 登录你的Ubuntu 20.04服务器。然后使用apt从默认的Ubuntu存储库安装ocserv包。 sudo apt更新sudo apt安装ocserv 一旦安装,OpenConnect VPN服务器将自动启动。您可以通过以下方式检查其状态: 系统CTL状态ocserv 样本输出: ● ocserv。服务-OpenConnect SSL VPN服务器已加载:已加载(/lib/systemd/system/ocserv.service;已启用;供应商预置:已启用)活动:自Sun 2020-04-12 19:57:08 HKT起活动(正在运行);12秒前的文档:man:ocserv(8)Main PID:216409(ocserv Main)任务:2(限制:9451)内存:1.6M CGroup:/system。切片/ocserv。服务├─216409 ocserv main└─216429 ocserv sm 提示:如果上述命令没有立即退出,您可以按Q键重新控制终端。 如果它没有运行,则可以从以下内容开始: sudo系统CTL启动ocserv 默认情况下,OpenConnect VPN服务器监听TCP和UDP端口443。如果web服务器正在使用它,那么VPN服务器可能无法启动。稍后我们将在OpenConnect VPN配置文件中看到如何更改端口。 如果你的服务器上有防火墙,那么你需要打开端口80和443。例如,如果使用UFW,则运行以下命令。 sudo ufw允许80443/tcp 第2步:在Ubuntu20.04服务器上安装Let's Encrypt Client(Certbot) 与ocserv一起安装的gnutls bin包提供了创建您自己的CA和服务器证书的工具,但我们将获取并安装Let's Encrypt certificate。使用Let’s Encrypt证书的优点是,它是免费的,更容易设置,并且受VPN客户端软件的信任。 运行以下命令从默认的Ubuntu存储库安装Let's Encrypt client(certbot)。 sudo apt安装certbot 要检查版本号,请运行 certbot——版本 样本输出: certbot 0.40.0 步骤3:从Let's Encrypt获取受信任的TLS证书 我建议使用standalone或webroot插件来获取ocserv的TLS证书。 独立插件 如果您的Ubuntu 20.04服务器上没有运行web服务器,并且您希望OpenConnect VPN服务器使用端口443,那么您可以使用独立插件从Let's Encrypt获取TLS证书。运行以下命令。别忘了为你的域名设置一个记录。 sudo certbot certonly--独立--首选挑战http--同意tos--电子邮件[email ;protected]-d vpn。实例通用域名格式 哪里: certonly:获取证书,但不要安装它。 --standalone:使用standalone插件获取证书 --首选挑战http:执行http-01挑战以验证我们的域,该域将使用端口80。 --同意:同意让我们加密服务条款。 --电子邮件:电子邮件地址用于帐户注册和恢复。 -d:指定你的域名。 从下面的截图可以看到,我成功地获得了证书。 使用webroot插件 如果你的Ubuntu20.04服务器有一个web服务器监听端口80和443,那么最好使用webroot插件来获取证书,因为webroot插件几乎适用于所有web服务器,我们不需要在web服务器上安装证书。 首先,您需要为vpn创建一个虚拟主机。实例通用域名格式。 阿帕奇 如果您使用的是Apache,那么 sudo nano/etc/apache2/可用站点/vpn。实例通用域名格式。形态 并将以下行粘贴到文件中。 <;虚拟主机*:80>;服务器名vpn。实例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。实例通用域名格式 重新加载Apache以使更改生效。 sudo systemctl重新加载apache2 创建并启用虚拟主机后,运行以下命令以获取使用webroot插件加密证书。 sudo certbot certonly--webroot--同意tos--电子邮件[email ;protected]-d vpn。实例com-w/var/www/ocserv Nginx 如果您使用的是Nginx,那么 sudo nano/etc/nginx/conf.d/vpn。实例通用域名格式。形态 将以下行粘贴到文件中。 服务器{listen 80;server_name vpn.example.com;root/var/www/ocserv/;location ~/.well-known/acme challenge{allow all;} 保存并关闭文件。然后创建web根目录。 sudo mkdir-p/var/www/ocserv 将www数据(Nginx用户)设置为web根目录的所有者。 sudo chown www-data:www-data/var/www/ocserv-R 重新加载Nginx以使更改生效。 sudo systemctl重新加载nginx 创建并启用虚拟主机后,运行以下命令以获取使用webroot插件加密证书。 sudo certbot certonly--webroot--同意tos--电子邮件[email ;protected]-d vpn。实例com-w/var/www/ocserv 第4步:编辑OpenConnect VPN服务器配置文件 编辑ocserv主配置文件。 sudo nano/etc/ocserv/ocserv。形态 首先,我们需要配置密码身份验证。默认情况下,通过PAM(可插拔认证模块)进行密码认证是启用的,这允许您使用Ubuntu系统帐户从VPN客户端登录。可以通过注释掉以下行来禁用此行为。 auth=“pam[gid min=1000]” 如果我们希望用户使用单独的VPN帐户而不是系统帐户登录,我们需要添加以下行以启用密码文件的密码身份验证。 auth=“plain[passwd=/etc/ocserv/ocpasswd]” 编辑完这个配置文件后,我们将看到如何使用ocpasswd工具生成/etc/ocserv/ocpasswd文件,其中包含用户名和编码密码的列表。 注意:Ocserv支持客户端证书身份验证,但我们来加密它不会颁发客户端证书。您需要设置自己的CA来颁发客户端证书。 接下来,如果您不希望ocserv使用TCP和UDP端口443,请找到以下两行并更改端口号。否则就别管他们。 tcp端口=443 udp端口=443 然后找出下面两行。我们需要改变它们。 服务器证书=/etc/ssl/certs/ssl证书蛇油。pem服务器密钥=/etc/ssl/private/ssl cert snakeoil。钥匙 将默认设置替换为让我们加密服务器证书和服务器密钥文件的路径。 服务器证书=/etc/letsencrypt/live/vpn。实例com/fullchain。pem服务器密钥=/etc/letsencrypt/live/vpn。实例com/privkey。佩姆 然后,设置客户端的最大数量。默认值为128。设置为零表示无限。 最大客户端数=128 设置用户可以同时登录的设备数量。默认值为2。设置为零表示无限。 最大相同客户端数=2 默认情况下,keepalive数据包每300秒(5分钟)发送一次。我更喜欢使用短时间(30秒)来减少VPN连接中断的机会。 keepalive=30 接下来,找到下面这行。将false更改为true以启用MTU发现,这可以优化VPN性能。 尝试mtu发现=false 您可以通过以下两个参数设置在断开连接之前允许客户端保持空闲的时间。如果您希望客户端无限期地保持连接,那么请注释掉这两个参数。 空闲超时=1200移动空闲超时=1800 之后,将默认域设置为vpn。实例通用域名格式。 默认域=vpn。实例通用域名格式 默认情况下,IPv4网络配置如下所示。这将导致问题,因为许多家庭路由器还将IPv4网络范围设置为192.168.1.0/24。 ipv4网络=192.168.1.0 ipv4网络掩码=255.255.255.0 我们可以使用另一个专用IP地址范围(10.10.10.0/24)来避免IP地址冲突,因此将ipv4网络的值更改为 ipv4网络=10.10.10.0 现在取消注释下面这行,通过VPN隧道所有DNS查询。 隧道所有dns=true 默认DNS解析程序地址如下所示,这很好。 dns=8.8.8.8 dns=1.1.1.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.0 保存并关闭文件,然后重新启动VPN服务器,以使更改生效。 sudo systemctl重启ocserv 第5步:创建VPN帐户 现在使用ocpasswd工具生成VPN帐户。 sudo ocpasswd-c/etc/ocserv/ocpasswd用户名 系统将要求您为用户设置密码,信息将保存到/etc/ocserv/ocpasswd文件中。要重置密码,只需再次运行上述命令。 步骤6:启用IP转发 为了让VPN服务器在VPN客户端和Internet之间路由数据包,我们需要启用IP转发。编辑sysctl。conf文件。 sudo nano/etc/sysctl。形态 在该文件末尾添加以下行。 网ipv4。ip_forward=1 保存并关闭文件。然后使用下面的命令应用更改。p选项将从/etc/sysctl加载sysctl设置。conf文件。此命令将在系统重新启动时保留所做的更改。 sudo sysctl-p 第7步:在防火墙中配置IP伪装 我们需要在服务器防火墙中设置IP伪装,以便服务器成为VPN客户端的虚拟路由器。我将使用UFW,它是iptables防火墙的前端。在Ubuntu上通过以下方式安装UFW: sudo apt安装ufw 首先,需要允许SSH通信。 sudo ufw允许22/tcp 然后找到服务器主网络接口的名称。 ip地址 正如你所看到的,它在我的Ubuntu服务器上被命名为ens3。 要配置IP伪装,我们必须在UFW配置文件中添加iptables命令。 sudo nano/etc/ufw/before。规则 默认情况下,过滤器表有一些规则。在该文件末尾添加以下行。将ens3替换为您自己的网络接口名称。 #NAT表规则*NAT:POSTROUTING ACCEPT[0:0]-一个POSTROUTING-s 10.10.0/24-o ens3-j伪装#用“提交”行结束每个表,否则这些规则将不会被处理提交 在Nano文本编辑器中,按Ctrl+W,然后按Ctrl+V,可以转到文件的末尾。 以上几行将在nat表的后路由链的末尾附加(-A)条规则。它将把你的虚拟专用网络与互联网连接起来。同时也会对外界隐藏你的人际网络。所以互联网只能看到VPN服务器的IP,却看不到VPN客户端的IP,就像你的家庭路由器隐藏了你的私人家庭网络一样。 默认情况下,UFW禁止数据包转发。我们可以允许为我们的专用网络转发。在该文件中找到ufw BEFORT forward链,并添加以下3行,如果源IP或目标IP在10.10.10.0/24范围内,这3行将接受数据包转发。 #允许受信任网络的转发-转发前的ufw-s 10.10.10.0/24-j接受-转发前的ufw-d 10.10.10.0/24-j接受 保存并关闭文件。然后启用UFW。 sudo ufw启用 如果以前启用过UFW,那么可以使用systemctl重新启动UFW。 sudo systemctl重启ufw 现在,如果使用以下命令列出NAT表的后路由链中的规则: sudo iptables-t nat-L后路由 你可以看到化装规则。 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解析程序 对于运行本地DNS解析程序的用户,如果指定10.10.10.1作为VPN客户端的DNS服务器,则必须允许VPN客户端使用以下UFW规则连接到端口53。 sudo ufw插件1允许从10.10.10.0/24进入 您还需要编辑绑定DNS服务器的配置文件(/etc/BIND/named.conf.options),以允许VPN客户端发送如下递归DNS查询。 允许递归{127.0.0.1;10.10.10.0/24;}; 然后重启BIND。 sudo systemctl重新启动已命名 如何在Ubuntu 20.04桌面上安装和使用OpenConnect VPN客户端 运行以下命令在Ubuntu桌面上安装OpenConnect VPN命令行客户端。 sudo apt安装openconnect 您可以从下面的命令行连接到VPN-b标志将使其在连接建立后在后台运行。 sudo openconnect-b vpn。实例com:端口号 您将被要求输入VPN用户名和密码。如果成功建立连接,您将看到以下消息。 获得连接响应:HTTP/1.1 200已连接CSTP已连接。DPD 90,使用SSL建立的DTLS连接(使用GnuTLS),将32400连接到tun0的端口保持为192.168.1.139。密码套件(DTLS1.2)-(RSA)-(AES-256-GCM)。 要停止连接,请运行: sudo pkill openconnect 要以非交互方式运行客户端,请使用以下语法。 echo-n密码| sudo openconnect-b vpn。实例com-u用户名--stdin上的passwd 如果要使用Network Manager管理VPN连接,则还需要安装这些软件包。 sudo apt安装网络管理器openconnect网络管理器openconnect gnome 如果您成功连接到VPN服务器,但您的公共IP地址没有更改,这是因为IP转发或IP伪装不起作用。我的iptables命令有一次输入错误(使用了错误的IP地址范围),这导致我的计算机无法浏览互联网。 如果遇到以下错误,则应禁用ocserv中的UDP端口,这将在后面的速度优化部分中解释。 DTLS握手失败:资源暂时不可用,请重试 如果出现以下错误,则可能是VPN帐户密码错误。 fgets(标准输入):设备的ioctl不合适 系统启动时自动连接 为了让OpenConnect VPN客户端在启动时自动连接到服务器,我们可以创建一个systemd服务单元。 sudo nano/etc/systemd/system/openconnect。服务 将以下行放到文件中。替换红色文本。 [Unit]Description=OpenConnect VPN Client After=网络在线。目标系统已解决。服务需求=网络在线。target[Service]Type=simple ExecStart=/bin/bash-c'/bin/echo-n password |/usr/sbin/openconnect vpn。实例com-u username--passwd on stdin'KillSignal=SIGINT Restart=always RestartSec=2[Install]WantedBy=multi-user。目标 保存并关闭文件。然后启用此服务,使其在引导时启动。 sudo systemctl启用openconnect。服务 文件内容说明: After=网络在线。目标系统已解决。服务和需求=网络在线。目标使此服务在网络启动后运行。我们想要openconnect。系统故障排除后,服务将启动。服务,因为这将确保OpenConnect设置的DNS服务器地址不会被systemd覆盖。服务 实际上,这项服务仍然可以在网络开通之前运行。如果服务失败,我们添加Restart=always和RestartSec=2以在2秒后重新启动该服务。 Systemd无法识别管道重定向,因此在ExecStart指令中,我们用单引号将comand括起来,并使用Bash shell运行它。 由于OpenConnect VPN客户端将作为在后台运行的systemd服务运行,因此不需要在OpenConnect命令中添加-b标志。 当发出systemctl stop openconnect命令时,KillSignal指令告诉Systemd发送SIGINT信号。这将通过注销会话、恢复DNS服务器设置和Linux内核路由表来执行完全关闭。 要立即启动此Systemd服务,请运行 sudo systemctl启动openconnect 要停止此Systemd服务,请运行 sudo systemctl stop openconnect 如何在从挂起恢复时自动重新启动OpenConnect客户端 如果你的Ubuntu桌面进入暂停状态,OpenConnect客户端将失去与VPN服务器的连接。为了让它在从暂停恢复时自动重启,我们需要创建另一个systemd服务单元。 sudo nano/etc/systemd/system/openconnect重启。服务 在文件中添加以下行。 [Unit]Description=暂停后从暂停恢复时重新启动OpenConnect客户端=暂停。target[Service]Type=simple ExecStart=/bin/systemctl——无块重启openconnect。service[Install]WantedBy=挂起。目标 保存并关闭文件。然后启用此服务。 sudo systemctl启用openconnect重启。服务 VPN连接中断时自动重启 有时VPN连接会由于其他原因而中断。您可以运行以下命令来检查VPN客户端是否可以ping VPN服务器的私有IP地址(10.10.10.1)。如果ping失败,则将执行右侧的命令以重新启动VPN客户端。|是Bash中的OR运算符。只有当左边的命令返回错误时,它才会执行右边的命令。 ping-c9 10.10.10.1 | | systemctl重新启动openconnect ping将进行9次,即9秒。可以在Bash shell中使用无限循环,使整个命令永远运行。按Ctrl+C组合键停止。 对于(;))完成(ping-c9 10.10.10.1 | | systemctl重启openconnect) 现在我们可以为这个任务创建一个systemd服务。 sudo nano/etc/systemd/system/openconnect检查。服务 将以下行添加到此文件。我们指定此服务应在openconnect之后运行。服务 [Unit]Description=OpenConnect VPN连接检查器After=OpenConnect。服务[service]Type=simple ExecStart=/bin/bash-c'for(;;))do(ping-c9 10.10.10.1 | | systemctl restart openconnect)done'[Install]WantedBy=multi-user。目标 保存并关闭文件。然后启动这项服务。 sudo systemctl启动openconnect检查 启动时启用自动启动。 sudo systemctl启用openconnect检查 一旦启动此服务,ping命令将永远运行。如果VPN连接断开,它将自动重新启动openconnect。服务 适用于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端口=443 保存并关闭文件。然后重启ocserv服务。 sudo systemctl重启ocserv。服务 要启用TCP BBR,请查看以下教程。请注意,您需要在ocserv中禁用DTL,否则TCP BBR将无法工作。 如何通过启用TCP BBR轻松提升Ubuntu网络性能 在我的测试中,启用TCP BBR的标准TLS比DTL快两倍。 影响速度的另一个非常重要的因素是本地计算机和VPN服务器之间的连接有多好。如果你住在中东和VPN服务器位于美国,速度将是缓慢的。选择一个离你住的地方近的数据中心。 另外,检查你的CPU平均负载。(htop可由sudo apt install htop安装)。 htop 确保CPU平均负载低于1。我曾经的CPU平均负载为3,这导致VPN客户端和VPN服务器之间的延迟很高。 自动续订让我们加密证书 编辑root用户的crontab文件。 sudo crontab-e 在文件末尾添加以下行。VPN服务器需要重新加载ocserv服务才能获取新的证书和密钥文件。 @每日certbot更新——安静与&;systemctl重新加载ocserv 故障排除提示 OpenVZ 请注意,如果您使用的是OpenVZ VPS,请确保在VPS控制面板中启用TUN虚拟网络设备。(如果你使用Vultr VPS,那么你有基于KVM的VPS,所以你不必担心这一点。) 日志文件 如果遇到任何问题,请查看OpenConnect VPN服务器日志。 sudo journalctl-eu ocserv。服务 我发现如果我把443端口换成另一个端口,中国的防火长城会阻止这个VPN连接。 调试模式 如果ocserv告诉您它无法加载/etc/ocserv/ocserv。conf文件,您可以停止ocserv。 sudo systemctl stop ocserv 然后在前台运行它,并启用调试。 sudo/usr/sbin/ocserv——前台——pid文件/run/ocserv。pid——config/etc/ocserv/ocserv。conf--debug=10 然后,输出可能会给您一些ocserv不工作的线索。 无法浏览互联网 如果您成功连接到VPN服务器,但无法浏览Internet,那是因为IP转发或IP伪装不起作用。我记得我的VPS提供商曾经进行过一次平台升级,将主网络接口的名称从ens3更改为enp3s0,因此我必须更新UFW文件(/etc/UFW/before.rules)中的名称。 语法错误 如果在尝试建立VPN连接时看到以下错误,可能是因为ocserv配置文件中存在语法错误。查看日志(sudo journalctl-eu ocserv)以了解情况。 得到不适当的HTTP连接响应:HTTP/1.1 401 Cookie不可接受 重新启动计算机 如果在尝试建立VPN连接时看到以下错误,则可能是本地计算机出现问题。试着重新启动你的电脑。 服务器的vpn。你的领域。com请求的基本身份验证在默认情况下被禁用 TLS连接未正确终止 如果在尝试建立VPN连接时在客户端上看到以下错误, SSL连接失败:TLS连接未正确终止。 您可能应该在VPN服务器上重新启动ocserv服务。 sudo systemctl重启ocserv 您可以创建一个cron作业,在每天凌晨4点自动重新启动ocserv一次。 sudo crontab-e 添加以下行。 0 4***系统CTL重新启动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。形态 找到以下行: tls priorities=“正常:%SERVERu优先级:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128” 要在OpenConnect VPN服务器中禁用TLS 1.0和TLS 1.1,只需添加-VERS-TLS1。0和-VERS-TLS1。1号排队。 tls priorities=“正常:%SERVERu优先级:%COMPAT:-RSA:-VERS-SSL3.0:-ARCFOUR-128:-VERS-TLS1.0:-VERS-TLS1.1” 保存并关闭文件。然后重启ocserv。 sudo systemctl重启ocserv 现在ocserv只接受TLS1.3和TLS1.2。有关在ocserv中配置TLS参数的更多信息,请参阅GnuTLS优先级字符串。 要检查OpenConnect VPN服务器是否支持TLS 1.0,请运行以下命令。 openssl s_客户端-连接vpn。你的领域。通讯:443-tls1 并检查TLS 1.1 openssl s_客户端-连接vpn。你的领域。通讯:443-tls1_1 如果在输出中看到以下消息,则表示不支持TLS版本。 新建,(无),密码为(无)不支持安全重新协商 每用户或每组配置 Ocserv允许按用户和按组配置。要启用此功能,请取消注释/etc/ocserv/ocserv中的以下两行。conf文件。 每个用户配置=/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 可以在文件中添加如下内容以启用拆分隧道。 路由=10.10.10.0/255.255.255.0隧道所有dns=false dns=8.8.8.8 dns=1.1.1 哪里: 第一行表示在user1或group1中的用户连接到此VPN服务器后,只有到10.10.10.0/24网络的流量将通过VPN服务器路由。到其他IP地址的流量通过原始网关路由。 第二行禁用隧道DNS查询。 第三行和第四行为VPN客户端设置DNS服务器。 我使用这个技巧允许我的另一个VPS(虚拟专用服务器)连接到此VPN服务器,而不会中断正常通信,因此我的VPN服务器的TUN设备(vpns0)始终处于打开状态,这意味着我的VPN服务器将始终具有专用IP地址10.10.10.1。 保存并关闭文件。重新启动ocserv以使更改生效。 sudo systemctl重启ocserv 请注意,如果在ocserv中启用IPv6,则还需要添加IPv6网络范围,以便使用拆分隧道。 route=10.10.10.0/255.255.255.0 route=fda9:4efe:7e3b:03ea::/48隧道所有dns=false dns=8.8.8 dns=1.1.1 如果要从默认路由中排除IP地址,请使用“无路由”。 无路线=12.34.56.78/32 这意味着除IP 12.34.56.78之外的所有其他流量都将通过VPN隧道。route和no route参数同时接受网络掩码符号(10.10.10.0/255.255.255.0)和CIDR符号(12.34.56.78/32) 如果在启用拆分隧道后看到以下错误,可能是因为没有使用网络掩码或CIDR符号。 无法分析代理协议头;丢弃连接 按国家划分 比方说,你只想通过VPN隧道传输到外国国家的流量。前往自己国家的交通应使用正常路线。可以使用ocserv配置文件中的no route指令来实现这一点。 首先,您需要通过以下网页下载您所在国家的IP范围:https://www.ip2location.com/free/visitor-blocker,它允许您以CIDR格式下载IP地址范围。 将IP范围保存在文本文件IP2位置。txt,并在Linux终端中运行以下命令,将no route=指令添加到每行的开头。 sed's/^/no route=/'-i ip2localtion。txt 现在在文本编辑器中打开文件并复制其中的所有行。我们需要在ocserv配置文件中添加这些行。如果行太多,可以将这些行添加到每用户配置文件中。 sudo nano/etc/ocserv/config per user/user1 您还可以将它们添加到每个组的配置文件中,然后将用户添加到组中。 重新启动ocserv以使更改生效。 sudo systemctl重启ocserv 如何在OpenConnect VPN中启用IPv6 如果VPN服务器具有公共IPv6地址,则可以在OpenConnect VPN中启用IPv6。编辑ocserv配置文件。 sudo nano/etc/ocserv/ocserv。形态 找到下面两行并取消注释。 ipv6网络=fda9:4efe:7e3b:03ea::/48 ipv6子网前缀=64 保存并关闭文件。重新启动ocserv以使更改生效。 sudo systemctl重启ocserv 然后我们需要为IPv6启用IP转发。编辑sysctl。conf文件。 sudo nano/etc/sysctl。形态 在该文件末尾添加以下行。 网ipv6。好的。转发=1 保存并关闭文件。然后使用下面的命令应用更改。 sudo sysctl-p 接下来,我们需要在服务器防火墙中设置IPv6伪装,以便服务器成为VPN客户端的虚拟路由器。 sudo nano/etc/ufw/before6。规则 默认情况下,过滤器表有一些规则。在该文件末尾添加以下行。将ens3替换为您自己的网络接口名称。 #NAT表格规则*NAT:POSTROUTING ACCEPT[0:0]-一个POSTROUTING-o ens3-j伪装#用“提交”行结束每个表格,否则这些规则将不会被提交处理 在Nano文本编辑器中,按Ctrl+W,然后按Ctrl+V,可以转到文件的末尾。 默认情况下,UFW禁止数据包转发。我们可以允许我们的专用IPv6网络进行转发。在该文件中找到ufw6 before forward链,并添加以下3行,如果源IP或目标IP在fda9:4efe:7e3b:03ea::/48范围内,这3行将接受数据包转发。 保存并关闭文件。重新启动UFW以使更改生效。 sudo systemctl重启ufw 现在,如果使用以下命令列出NAT表的后路由链中的规则: sudo ip6tables-t nat-L后路由 你可以看到化装规则。 断开当前VPN连接,为VPN添加AAAA记录。实例com并重新建立VPN连接。那就去https://test-ipv6.com/检查你的IPv6连接。 如果在VPN服务器上运行自己的绑定DNS解析器,可以在/etc/ocserv/ocserv中添加以下行。conf文件,将VPN服务器设置为VPN客户端的DNS解析程序。 dns=fda9:4efe:7e3b::1 保存并关闭文件。要在IPv6中查询DNS名称,我们需要将BIND配置为允许IPv6 VPN客户端。 sudo nano/etc/bind/named。形态选项 找到allow recursion参数并将其更改为: 允许递归{127.0.0.1;10.10.10.0/24;fda9:4efe:7e3b:03ea::/48;}; 保存并关闭文件。重新启动BIND9。 sudo systemctl重新启动已命名 我们还需要在防火墙中允许IPv6 VPN客户端。 sudo ufw允许从fda9:4efe:7e3b:03ea::/48进入 虚拟主机 注意:如果您只想为VPN服务器使用多个主机名,可以使用certbot获取多域证书。然后重启ocserv,就完成了。 要在ocserv中添加新的虚拟主机,首先需要使用步骤3中的方法为新的虚拟主机获取TLS证书。然后编辑ocserv配置文件。 sudo nano/etc/ocserv/ocserv。形态 转到这个文件的底部。在Nano文本编辑器中,可以按Ctrl+W,然后按Ctrl+V跳转到文件底部。添加以下行。更换vpn2。实例com与第二个虚拟主机的主机名。 [vhost:vpn2.example.com]#允许密码身份验证和证书身份验证启用auth=“plain[passwd=/etc/ocserv/ocpasswd]”auth=“certificate”tcp port=443#如果ocserv在HAProxy后面运行,请取消对这两行的注释#侦听主机=127.0.0.1#侦听代理协议=true#SSL/TLS配置ca证书=/etc/ocserv/SSL/ca-cert.pem服务器证书=/etc/letsencrypt/live/vpn2。实例com/fullchain。pem服务器密钥=/etc/letsencrypt/live/vpn2。实例com/privkey。pem证书用户oid=0.9.2342.19200300.100.1.1#网络配置。为此虚拟主机使用不同的网络范围。设备=VPN ipv4网络=10.10.20.0 ipv4网络掩码=255.255.255.0路由=默认dns=8.8.8.8隧道所有dns=真压缩=真最大客户端=0最大相同客户端=0尝试mtu发现=真空闲超时=1200移动空闲超时=每个用户2400配置=/etc/ocserv/config/每个组=/etc/ocserv/config/每个组/ 保存并关闭文件。然后重启ocserv。 sudo systemctl重启ocserv 编辑UFW配置文件。 sudo nano/etc/ufw/before。规则 在该文件中找到ufw BEFORT forward链,并添加以下两行,如果源IP或目标IP在10.10.20.0/24范围内,这两行将接受数据包转发。 -转发前的ufw-S10.10.20.0/24-j接受-D10.10.20.0/24-j接受前的ufw-d接受 保存并关闭文件。然后重启UFW。 sudo systemctl重启ufw 请注意,ocserv守护进程可能会告诉您,虚拟主机的一些参数将被忽略。然而,我发现一些被忽略的参数实际上是需要的。例如,如果从虚拟主机中删除device=vpns行,则在建立到虚拟主机的VPN连接时可能会遇到以下错误。 VPN服务不可用;原因:服务器配置错误 VPN服务器将在日志中生成以下错误消息。 没有配置网络;拒绝客户 还要注意,iOS上的AnyConnect VPN客户端不支持TLS SNI,因此iOS用户将连接到默认虚拟主机。 如何运行ocserv的多个实例 一个ocserv进程只能绑定到服务器上的一个TCP或UDP端口。如果希望允许ocserv绑定到多个TCP或UDP端口,则需要运行多个ocserv进程。这很简单。复制/lib/systemd/system/ocserv。新文件的服务。 sudo cp/lib/systemd/system/ocserv。service/etc/systemd/system/ocserv2。服务 然后编辑新文件。 sudo nano/etc/systemd/system/ocserv2。服务 改变 /etc/ocserv/ocserv。形态 到 /etc/ocserv/ocserv2。形态 保存并关闭文件。接下来,您可以编辑/etc/ocserv/ocserv2。conf文件并添加自定义配置。完成后,启动第二个ocserv服务。 sudo systemctl启动ocserv2 收尾 就这样!我希望本教程能帮助您在Ubuntu 20.04上安装和配置OpenConnect VPN。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门?
-
使用BIND9在Ubuntu 20.04上设置本地DNS解析器
本教程将向您展示如何使用广泛使用的BIND9 DNS软件在Ubuntu 20.04上设置本地DNS解析程序。DNS解析程序有许多名称,下面列出了其中一些名称。它们都指同一件事。 全解析程序(与存根解析程序相反) DNS递归器 递归DNS服务器 递归解析器 另外,请注意,DNS服务器也可以称为名称服务器。DNS解析器的示例有8.8.8.8(谷歌公共DNS服务器)和1.1.1.1(Cloudflare公共DNS服务器)。计算机上的操作系统也有一个解析器,尽管由于其功能有限,它被称为存根解析器。存根解析程序是终端用户计算机上的一个小型DNS客户端,它接收来自Firefox等应用程序的DNS请求,并将请求转发给递归解析程序。几乎每个解析器都可以缓存DNS响应以提高性能,因此它们也被称为缓存DNS服务器。 为什么要运行自己的本地DNS解析程序 通常,您的计算机或路由器使用ISP的DNS解析程序来查询DNS名称,那么为什么要运行本地DNS解析程序呢? 它可以加快DNS查找,因为本地DNS解析程序只侦听您的DNS请求,而不应答其他人的DNS请求,因此您直接从解析程序上的缓存中获取DNS应答的几率要高得多。您的计算机和DNS解析器之间的网络延迟被消除(几乎为零),因此DNS查询可以更快地发送到根DNS服务器。 如果您运行邮件服务器并使用DNS黑名单(DNSBL)阻止垃圾邮件,那么您应该运行自己的DNS解析程序,因为一些DNS黑名单(如URIBL)会拒绝来自公共DNS解析程序的请求。 如果您在VPS(虚拟专用服务器)上运行自己的VPN服务器,那么在同一个VPS上安装DNS解析器也是一个很好的做法。 如果你不喜欢你的互联网浏览历史记录存储在第三方服务器上,你可能还想运行自己的DNS解析器。 如果你拥有一个网站,并希望你自己的DNS服务器处理域名的名称解析,而不是使用你的域名注册商的DNS服务器,那么你需要设置一个权威的DNS服务器,这与DNS解析程序不同。BIND可以同时充当权威DNS服务器和DNS解析程序,但最好在不同的框中分离这两个角色。 本教程介绍如何设置本地DNS解析器,因为它将在本地主机/本地网络上使用,所以不需要加密(通过TLS的DNS或通过HTTPS的DNS)。设置点解析器或DoH解析器将在以后的文章中讨论。 提示:本地并不意味着你的家用电脑。相反,这意味着DNS解析程序与DNS客户端在同一个机器上运行。您可以在家庭计算机上安装绑定DNS解析程序。这是你家电脑的本地版本。您可以在云服务器上安装绑定DNS解析器,它位于云服务器的本地。 使用BIND9在Ubuntu 20.04上设置本地DNS解析器 BIND(Berkeley Internet Name Domain)是一款开源DNS服务器软件,由于其稳定性和高质量,在Unix/Linux上得到了广泛应用。它最初由加州大学伯克利分校(UC Berkeley)开发,后来在1994年被转移到互联网系统联盟(Internet Systems Consortium,Inc.)进行开发。 从默认存储库运行以下命令在Ubuntu 20.04上安装BIND 9。BIND 9是当前版本,BIND 10是一个死项目。 sudo apt更新sudo apt安装bind9 bind9utils bind9 dnsutils bind9 doc bind9主机 检查版本。 命名为-v 样本输出: BIND 9.16.1-Ubuntu(稳定版)<;id:d497c32>; 要检查版本号和生成选项,请运行 命名为-V 默认情况下,绑定在安装后自动启动。您可以通过以下方式检查其状态: systemctl状态已命名 如果它没有运行,那么从以下内容开始: sudo systemctl启动名为 并在启动时启用自动启动: sudo systemctl enable named BIND服务器将以BIND用户的身份运行,该用户是在安装过程中创建的,并在TCP和UDP端口53上侦听,如运行以下命令所示: sudo netstat-lnptu | grep命名 通常DNS查询被发送到UDP端口53。TCP端口53用于大小大于512字节的响应。 绑定守护进程被称为named。(守护进程是在后台运行的软件。)命名的二进制文件由bind9包安装,还有另一个重要的二进制文件:rndc,远程名称守护程序控制器,由bind9utils包安装。rndc二进制文件用于重新加载/停止和控制绑定守护进程的其他方面。通信通过TCP端口953完成。 例如,我们可以检查绑定名称服务器的状态。 sudo rndc状态 本地DNS解析程序的配置 /etc/bind/是包含bind配置的目录。 命名的。conf:主配置文件,包括其他三个文件的配置。 db。127:本地主机IPv4反向映射区域文件。 db。本地:本地主机转发IPv4和IPv6映射区域文件。 db。空:一个空的区域文件 Ubuntu 20.04上的bind9软件包没有附带db。根文件,它现在使用位于/usr/share/dns/root的根提示文件。提示。DNS解析程序使用根提示文件来查询根DNS服务器。有13组根DNS服务器,来自a.root-servers。net到m.root服务器。网 Ubuntu上的BIND9服务器开箱即用,只为本地主机和本地网络客户端提供递归服务。外界的质疑将被拒绝。所以你不必编辑配置文件。为了让您熟悉BIND 9配置,我将向您展示如何启用递归服务。 主绑定配置文件/etc/BIND/named。conf从其他3个文件中获取设置。 /etc/bind/named。形态选项 /etc/bind/named。conf.local /etc/bind/named。conf.default-zones 要启用递归服务,请编辑第一个文件。 sudo nano/etc/bind/named。形态选项 在options子句中,添加以下行。将allow recursion语句中的IP地址替换为您自己的本地网络地址。 //出于安全原因,对客户端隐藏版本号。版本“当前不可用”;//可选-绑定默认行为为递归递归是;//向受信任的客户端提供递归服务只允许递归{127.0.0.1;192.168.0.0/24;10.10.10.0/24;};//启用查询日志querylog yes; 保存并关闭文件。然后测试配置文件语法。 sudo命名为checkconf 如果测试成功(由静默输出指示),则重新启动BIND9。 sudo systemctl重新启动已命名 如果绑定服务器上运行UFW防火墙,则需要打开端口53以允许LAN客户端发送DNS查询。 sudo ufw允许从192.168.0.0/24进入任何端口53 这将打开专用网络192.168.0.0/24的TCP和UDP端口53。然后从同一局域网内的另一台计算机上,我们可以运行以下命令来查询google的A记录。通用域名格式。用绑定解析程序的IP地址替换192.168.0.102。 挖一个谷歌。com@192.168.0.102 现在,在绑定解析器上,使用以下命令检查查询日志。 sudo journalctl-欧盟命名 这将显示bind9服务单元的最新日志消息。我在日志中找到了下面一行,这表明谷歌的DNS查询。com的A记录已从192.168.0.103的57806端口收到。 命名为[1162]:client@0x7F4D2406F0F0192.168.0.103#57806(google.com):query:google。A+E(0)K(192.168.0.102)中的com 在Ubuntu 20.04服务器上设置默认DNS解析程序 Systemd resolved在Ubuntu 20.04上提供了存根解析器。正如本文开头提到的,存根解析器是最终用户计算机上的一个小型DNS客户端,它接收来自Firefox等应用程序的DNS请求,并将请求转发给递归解析器。 使用此命令可以看到默认的递归解析器。 系统解析——状态 提示:如果上述命令没有立即退出,您可以按Q键使其退出。 正如您所见,BIND不是默认值。如果在绑定服务器上运行以下命令, 挖一个facebook。通用域名格式 在绑定日志中找不到此DNS查询。相反,您需要明确地告诉dig使用BIND。 挖一个facebook。com@127.0.0.1 要将BIND设置为默认解析程序,请打开systemd解析的配置文件。 sudo nano/etc/systemd/resolved。形态 在[Resolve]部分,添加以下行。这将为您的服务器设置一个全局DNS服务器。 DNS=127.0.0.1 保存并关闭文件。然后重新启动systemd解析服务。 sudo systemctl重启systemd已解决 现在运行以下命令检查默认DNS解析器。 系统解析——状态 现在在不指定127.0.0.1的情况下执行DNS查询。 挖一个facebook。通用域名格式 您将在BIND日志中看到DNS查询,这意味着BIND现在是默认的递归解析器。如果在绑定日志中没有看到任何查询,则可能需要配置每个链接的DNS服务器。 在Ubuntu 20.04上配置每链接DNS服务器 您还可以配置每链路DNS服务器,这将覆盖全局DNS服务器。有两种方法可以配置每链路DNS服务器: 通过systemd解决 通过网络计划 系统解决 列出/etc/systemd/network/目录下的文件。 ls/etc/systemd/network/ 样本输出: 05-0。网络99默认值。链接 如你所见,我有两个链接配置文件。05-0。网络文件是我的主网络接口,所以我编辑这个文件。 sudo nano/etc/systemd/network/05-eth0。网络 你的文件名可能不同。如果此目录下没有文件,则您的每链接DNS配置不受systemd resolved控制。 注释掉默认的DNS和域条目,并添加您自己的DNS条目。 DNS=127.0.0.1 保存并关闭文件。然后重新启动systemd resolved和systemd networkd服务。 sudo systemctl重启systemd已解决systemd networkd 网络计划 一些Ubuntu服务器可能正在使用netplan来配置每链接网络。在这种情况下,您需要在中配置DNS服务器。/etc/netplan/目录下的yaml文件。列出此目录中的文件。 ls/etc/netplan/ 样本输出: 01 netcfg。亚马尔 所以我编辑了这个文件。 sudo nano/etc/netplan/01 netcfg。亚马尔 在nameservers部分设置DNS服务器地址。 名称服务器:搜索:[无效]地址:-127.0.0.1 您可以像下面这样指定多个DNS解析程序,这可以减少DNS失败的机会。 名称服务器:搜索:[无效]地址:-127.0.0.1-8.8.8-1.1.1.1 保存并关闭文件。然后应用更改。 sudo网络计划申请 注意:如果您看到以下错误消息,则netplan无法处理配置文件。 位于/etc/netplan/01 netcfg的YAML无效。yaml不一致压痕 您应该修复不一致的缩进,然后再次运行sudo netplan apply命令。 故障排除 检查/etc/resolv的内容。形态。 cat/etc/resolv。形态 如您所见,127.0.0.1(BIND)是默认的DNS解析器。如果看到不同的值,这意味着BIND仍然不是默认的DNS解析程序。您可以使用resolveconf实用程序将BIND设置为默认解析器。 安装resolvconf包 sudo apt安装resolvconf 然后启动命名的resolvconf服务。 sudo systemctl启动名为resolvconf。服务 启动时启用自动启动。 sudo systemctl启用命名的resolvconf。服务 现在检查/etc/resolv。再次提交conf文件。BIND现在应该是Ubuntu服务器上的默认DNS解析程序。 cat/etc/resolv。形态 请注意,像Linode这样的主机提供商可能会使用网络助手自动生成/etc/resolv。conf文件。要更改默认DNS解析程序,需要在主机控制面板中禁用该网络帮助程序。 如果这个方法仍然不起作用,可能是因为/etc/resolv。Ubuntu服务器上的conf文件不是指向/run/resolvconf/resolv的符号链接。conf.您需要删除/etc/resolv。并创建一个符号链接。 sudo rm/etc/resolv。conf sudo ln-s/run/resolvconf/resolv。conf/etc/resolv。形态 您还可以手动创建此文件并将其设为只读,以防止同一服务器上的其他应用程序覆盖它。 sudo rm/etc/resolv。conf echo“nameserver 127.0.0.1”| sudo tee/etc/resolv。conf sudo chmod 444/etc/resolv。形态 systemd resolved没有运行 如果在执行systemd resolve--status命令后看到以下错误, 无法获取全局数据:单位dbus org。免费桌面。决心1。找不到服务。 可能是因为系统没有运行。首先: sudo systemctl状态systemd已解决 启用自动启动。 sudo systemctl enable systemd已解决 在客户端计算机上设置默认DNS解析程序 在Ubuntu桌面上,您可以按照上面的说明设置默认DNS解析程序,但请记住将127.0.0.1替换为绑定服务器的IP地址。在MacOS和Windows上设置默认DNS解析器的步骤可以在Internet上找到。 如何在绑定中禁用IPv6 如果您的网络中没有使用IPv6,那么最好在BIND中关闭IPv6,否则,BIND日志中会出现很多关于IPv6的错误,如下所示。 “网络无法访问”镜像。软呢帽项目。org/A/IN':2001:4178:2:1269:dead:beef:cafe:fed5#53网络无法访问的解析“镜像”。软呢帽项目。org/AAAA/IN:2001:4178:2:1269:dead:beef:cafe:fed5#53网络无法访问的解析“镜像”。软呢帽项目。org/A/IN':2610:28:3090:3001:dead:beef:cafe:fed5#53网络无法访问的解析镜像。软呢帽项目。org/AAAA/IN':2610:28:3090:3001:死亡:牛肉:咖啡馆:fed5#53 要在Ubuntu上的BIND中禁用IPv6,只需打开/etc/default/named文件 sudo nano/etc/default/named 在选项中添加-4。 选项=“-u绑定-4” 保存并关闭文件。然后重启BIND,就完成了。 sudo systemctl重新启动已命名 绑定服务失败 如果绑定解析程序无法回答DNS查询(SERVFAIL),并且在绑定日志中看到以下行。 dnssec:警告:托管密钥区域:无法获取DNSKEY集合“”:超时 这可能是因为您的服务器没有可用的IPv6连接。这发生在我的一台服务器上。我以为IPv6连接正常工作,但由于我不知道的原因,它突然中断了。一旦我在BIND中禁用了IPv6,DNS解析将再次工作。 命名为自动重启 如果由于任何原因您的命名进程被终止,您需要运行以下命令来重新启动它。 sudo systemctl重新启动已命名 我们不需要手动输入这个命令,而是可以通过编辑Named命令使Named自动重启。服务系统服务单位。为了覆盖默认的systemd服务配置,我们创建了一个单独的目录。 sudo mkdir-p/etc/systemd/system/named。服务d/ 然后在这个目录下创建一个文件。 sudo nano/etc/systemd/system/named。服务d/重启。形态 在文件中添加以下行,这将使Named在检测到故障5秒后自动重新启动。 [服务]重新启动=始终重新启动秒=5s 保存并关闭文件。然后重新加载系统D。 sudo systemctl后台程序重新加载 要检查这是否有效,请使用以下命令终止命名: 苏多·普吉尔 然后检查命名状态。你会发现命名自动重启。 systemctl状态已命名 绑定最大缓存大小 BIND可以在服务器上缓存DNS结果,以加快客户端的DNS查找。BIND假设您正在运行一个专用的DNS解析程序,即没有其他web服务在同一台主机上运行,因此默认缓存大小(由最大缓存大小定义)设置为总RAM的90%,以实现最佳性能。绑定启动时,可以在绑定日志(sudo journalctl-eu named)中看到下面这样的一行。 无:100:“最大缓存大小90%”-设置为7165MB(共7961MB) 请注意,BIND不会立即使用90%的RAM。如果只有几个DNS请求,BIND只使用少量RAM,因为缓存的DNS结果不多。如果有大量DNS请求,那么它将使用大量RAM来存储DNS缓存。 如果RAM有限,您可能不希望BIND将90%的RAM用于缓存。编辑绑定配置文件/etc/BIND/named。形态选项。 sudo nano/etc/bind/named。形态选项 在options子句中添加以下指令。将50%更改为您的首选值。 最大缓存大小为50%; 重新启动BIND以使更改生效。 sudo systemctl重新启动已命名 注意:重新启动BIND时,它的整个缓存都将被刷新。 无法联系到任何服务器 如果在客户端计算机上使用dig命令时看到以下错误 ;; 连接超时;无法联系到任何服务器 可能是这样 你的防火墙规则是错误的。检查防火墙日志。 绑定解析程序未运行。 BIND没有监听网络接口。 你能从DNS客户端ping到DNS解析程序吗? 结论 我希望本教程能帮助您在Ubuntu 20.04上使用BIND9设置本地DNS解析器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?
-
在Ubuntu 20.04服务器上设置未绑定DNS解析程序
本教程将向您展示如何使用Unbound在Ubuntu20.04上设置本地DNS解析器。DNS解析程序有许多名称,下面列出了其中一些名称。它们都指同一件事。 全解析程序(与存根解析程序相反) 递归DNS服务器 递归名称服务器 递归解析器 DNS递归器 DNS解析器的示例有8.8.8.8(谷歌公共DNS服务器)和1.1.1.1(Cloudflare公共DNS服务器)。计算机上的操作系统也有一个解析器,尽管由于其功能有限,它被称为存根解析器。存根解析程序是终端用户计算机上的一个小型DNS客户端,它接收来自Firefox等应用程序的DNS请求,并将请求转发给递归解析程序。几乎每个解析器都可以缓存DNS响应以提高性能,因此它们也被称为缓存DNS服务器。 为什么要运行自己的DNS解析程序 通常,您的计算机、路由器或服务器使用ISP的DNS解析程序来查询DNS名称,那么为什么要运行本地DNS解析程序呢? 它可以加快DNS查找,因为本地DNS解析程序只侦听您的DNS请求,而不应答其他人的DNS请求,因此您直接从解析程序上的缓存中获取DNS应答的几率要高得多。您的计算机和DNS解析器之间的网络延迟被消除(几乎为零),因此DNS查询可以更快地发送到根DNS服务器。 如果您运行邮件服务器并使用DNS黑名单(DNSBL)阻止垃圾邮件,那么您应该运行自己的DNS解析程序,因为一些DNS黑名单(如URIBL)会拒绝来自公共DNS解析程序的请求。 如果您在VPS(虚拟专用服务器)上运行自己的VPN服务器,那么在同一个VPS上安装DNS解析器也是一个很好的做法。 如果你不喜欢你的互联网浏览历史记录存储在第三方服务器上,你可能还想运行自己的DNS解析器。 提示:本地并不意味着你的家用电脑。相反,这意味着DNS解析程序与DNS客户端运行在同一个盒子或同一个网络上。您可以在家庭计算机上安装未绑定的DNS解析器。这是你家电脑的本地版本。您还可以在云服务器上安装未绑定的DNS解析器,它位于云服务器的本地。 未绑定DNS解析程序 Unbound是一个开源的DNS验证解析器,这意味着它可以进行DNSSEC验证,以确保DNS响应是真实的。未绑定功能: 轻量级且速度极快,因为它不提供全面的权威DNS服务器功能。在我的一台服务器上,Unbound使用了BIND9所需内存的四分之一。 DNS响应缓存 预取:获取即将过期的数据,这样当TTL在数据上过期时,当需要重新进行查找时,客户端就不会出现延迟峰值。 TLS上的DNS HTTPS上的DNS 查询名称最小化:向上游服务器发送最小数量的信息以增强隐私。 积极使用DNSSEC验证的缓存 权限区域,用于根区域的本地副本 DNS64 DNSCrypt DNSSEC验证:在Ubuntu上默认启用? EDNS客户端子网 可以作为DNS转发器运行。 支持本地数据和响应策略区域为特定域名提供自定义回复。 第一步:在Ubuntu 20.04上安装未绑定的DNS解析器 从默认存储库运行以下命令在Ubuntu 20.04上安装Unbound。 sudo apt更新sudo apt安装未绑定 检查版本。 未绑定-V 样本输出: 默认情况下,“解除绑定”会在安装后自动启动。您可以通过以下方式检查其状态: systemctl状态未绑定 如果它没有运行,那么从以下内容开始: sudo systemctl启动解除绑定 并在启动时启用自动启动: sudo systemctl启用解除绑定 注意:如果有另一个服务在UDP端口53上侦听,则unbound可能无法启动。您需要在开始解除绑定之前停止该服务。要找出哪个服务已经在使用UDP端口53,请运行以下命令。 sudo ss-lnptu | grep 53 如果之前安装了BIND9解析器,那么需要运行以下命令停止并禁用它,以便Unbound可以侦听UDP端口53。默认情况下,Unbound监听127.0.0.1:53和[::1]:53 sudo systemctl disable named--now 第2步:配置未绑定 Unbound的主配置文件是/etc/Unbound/Unbound。配置:开箱即用,Ubuntu上的未绑定服务器仅为localhost提供递归服务。外界的质疑将被拒绝。 编辑配置文件。 sudo nano/etc/unbound/unbound。形态 默认情况下,该文件中只有一行配置。 包括:“/etc/unbound/unbound.conf.d/*.conf” 这将包括/etc/unbound/unbound下的配置文件。conf.d/目录,其中包含两个配置文件。 qname最小化。conf:启用QNAME最小化。 根自动信任锚文件。conf:启用DNSSEC验证。 你不必碰这两个文件。只需知道它们将有助于您的DNS解析。现在我们需要添加自定义配置。您可以查看示例配置文件/usr/share/doc/unbound/examples/unbound。conf以了解如何配置未绑定。为了方便起见,我为您编译了一个最小配置。在/etc/unbound/unbound中添加以下行。conf文件。 服务器:#工作目录。目录:“/etc/unbound”#作为未绑定的用户用户名运行:unbound verbosity:2#取消注释并增加以获得更多日志记录。#监听所有接口,回答本地子网的查询。接口:0.0.0.0#如果您的系统没有IPv6,请注释掉以下行。接口:::0#对几乎过期的DNS缓存项执行预取。预取:是访问控制:10.0.0.0/8允许访问控制:127.0.0.1/24允许访问控制:2001:DB8::/64允许#从客户端隐藏服务器信息隐藏身份:是隐藏版本:是远程控制:#在此处启用带未绑定控制的远程控制(8)。控制启用:无#远程控制监听哪些接口。#给出0.0.0.0和::0来监听所有接口设置为绝对路径以使用unix本地名称管道,证书#不用于该管道,因此密钥和证书文件不需要存在。控制接口:127.0.0.1#控制接口:1#远程控制操作的端口号。控制端口:8953 以上配置不言自明。有两件事你可能需要考虑。 (1) 默认情况下,Ubuntu运行systemd解析的存根解析器,它监听127.0.0.53:53。您需要停止它,以便unbound可以绑定到0.0.0.0:53。 sudo systemctl disable systemd已解决--现在 (2) 如果您的本地网络范围不是10.0.0.0/8,您需要更改它,例如, 访问控制:192.168.0.0/24允许 因此unbound将接受来自192.168.0.0/24网络的DNS查询。 保存并关闭文件。然后重新绑定。 sudo systemctl重新启动解除绑定 检查状态。确保它在运行。 systemctl状态未绑定 如果在未绑定的服务器上运行UFW防火墙,则需要打开端口53以允许LAN客户端发送DNS查询。 sudo ufw允许从10.0.0.0/8进入任何端口53 这将打开专用网络10.0.0.0/8的TCP和UDP端口53。 第3步:在Ubuntu 20.04服务器上设置默认DNS解析程序 我们需要让Ubuntu20.04服务器使用127.0.0.1作为DNS解析器,这样unbound将回答DNS查询。Ubuntu上的unbound包附带一个systemd服务unbound resolvconf。应该帮助我们实现这一目标的服务。然而,我发现它不起作用。 相反,您可以创建自定义的未绑定resolvconf。服务文件。 sudo nano/etc/systemd/system/unbound resolvconf。服务 在此文件中添加以下行。 [Unit]Description=local unbound via resolvconf After=unbound。服务条件文件可执行=/sbin/resolvconf[service]Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh-c'echo nameserver 127.0.0.1 |/sbin/resolvconf-a lo。unbound'ExecStop=/sbin/resolvconf-d lo。unbound[安装]WantedBy=未绑定。服务 保存并关闭此文件。然后重新加载系统D。 sudo systemctl后台程序重新加载 确保您的系统具有resolvconf二进制文件。 sudo apt安装openresolv 接下来,重新启动此服务。 sudo systemctl重新启动未绑定的resolvconf。服务 现在检查/etc/resolv的内容。形态。 cat/etc/resolv。形态 如您所见,127.0.0.1(未绑定)是默认的DNS解析器。 故障排除 如果在/etc/resolv中看到不同的值。conf文件,这意味着Unbound仍然不是默认的DNS解析程序。请注意,像Linode这样的主机提供商可能会使用网络助手自动生成/etc/resolv。conf文件。要更改默认DNS解析程序,需要在主机控制面板中禁用该网络帮助程序。 如果这个方法仍然不起作用,可能是因为/etc/resolv。Ubuntu服务器上的conf文件不是指向/run/resolvconf/resolv的符号链接。conf.您需要删除/etc/resolv。并创建一个符号链接。 sudo rm/etc/resolv。conf sudo ln-s/run/resolvconf/resolv。conf/etc/resolv。形态 如果在Ubuntu服务器上运行WireGuard VPN客户端,则需要在WireGuard客户端配置文件中使用以下DNS设置。 DNS=127.0.0.1 然后重新启动WireGuard VPN客户端。 第4步:在客户端计算机上设置默认DNS解析程序 在Ubuntu桌面上,您可以按照上面的说明设置默认DNS解析程序,但请记住将127.0.0.1替换为未绑定服务器的IP地址。在MacOS和Windows上设置默认DNS解析器的步骤可以在Internet上找到。 如何在未绑定状态下禁用IPv6 如果您的服务器没有IPv6连接,最好在未绑定状态下关闭IPv6,以减少在IPv6上不必要的DNS查找。要在Ubuntu的Unbound中禁用IPv6,只需在/etc/Unbound/Unbound中的server:子句中添加以下行。conf文件。 do-ip6:没有 保存并关闭文件。然后重新绑定。 sudo systemctl重新启动解除绑定 未绑定的DNSSEC DNSSEC是一种验证DNS响应未被篡改的方法。如果您的安装未绑定到默认的Ubuntu存储库,则默认情况下会启用该功能。让我们在Ubuntu 20.04服务器上快速进行DNS查询。 挖一个利努克斯宝贝。通用域名格式 您可以在DNS响应中看到ad标志。广告意味着真实的数据。 请注意,域名必须启用DNSSEC才能进行验证。如果你没有看到广告标志,这可能意味着域名没有启用DNSSEC。 本地数据 您可以使用Unbound中的本地数据功能来提供本地内部主机名或覆盖公共DNS记录。 例如,如果我在博客web服务器上安装unbound,我可以在unbound配置文件的server:子句中添加以下四行,以便域始终解析为localhost。 本地数据:“linuxbabe.com A 127.0.0.1”本地数据:“www.linuxbabe.com A 127.0.0.1”本地数据:“linuxbabe.com AAAA::1”本地数据:“www.linuxbabe.com AAAA::1” 无法联系到任何服务器 如果在客户端计算机上使用dig命令时看到以下错误 ;; 连接超时;无法联系到任何服务器 可能是防火墙规则错误或未绑定解析程序未运行。 结论 我希望本教程能帮助您在Ubuntu20.04上使用Unbound设置本地DNS解析器。因为它将在本地主机/本地网络上使用,所以不需要加密(TLS上的DNS或HTTPS上的DNS)。要设置点解析器或DoH解析器,请阅读以下教程。 如何在Ubuntu上使用Nginx轻松设置DNS over TLS解析器 使用DNSdist在Ubuntu上设置DNS over HTTPS(DoH)解析器 和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?