• 国内有合法的VPN吗,有什么VPN能用

    由于“被迫宅”,员工要远程访问公司办公系统,学生要远程访问学校图书馆······而凡是涉及到远程访问、远程传输的场景,就少不了VPN的身影。很多人有疑问:国内有合法的VPN吗,有什么VPN能用? 谈到VPN(“Virtual Private Network”,“虚拟专用网”)这一词,人们往往会将其与“翻墙”相关联,或认为这是一个IT问题而不是法律问题,又或者将使用VPN的行为与违法行为相等同。 网络监管日益制度化,如何合规使用VPN也逐渐成为外资企业在中国经营时经常产生的疑问。 2016年11月7日,我国通过了《中华人民共和国网络安全法》(以下简称“《网络安全法》”),2017年1月,工信部出台了《关于清理规范互联网网络结构服务市场的通知》。 笔者试图从现有法规出发,结合自身向多家跨国公司提供合规使用VPN的咨询经验,就我国政府对VPN的监管制度进行理清和梳理,并对在中国尝试使用VPN的企业,尤其是外资企业提出一定的合规意见和建议,避免法律风险。 1、VPN技术简介 VPN(Virtual Private Network),即虚拟专用网络,功能是在公用网络上建立专用网络,进行加密通讯。VPN网关通过对数据包的加密和数据包目标地址的转换实现远程访问。该转化可以通过VPN服务器、软件VPN、硬件VPN、集成VPN四种方式实现。 在大多数情况下,网络的通信信息为明文信息,即未加密的信息。而明文信息容易被他人截获,导致企业的内部信息和文件被他人窃取。通过VPN技术,这些通信信息将可以通过加密方式进行传输。即使加密的数据被第三人获取,其也不能了解信息具体的内容。 现如今,VPN这项技术经常被外资企业用于远程连接企业服务器以及安全连接企业的服务器等目的。在目前情况下,大多数的跨国公司为了保证员工通过网络连接公司获取数据的安全性,会要求员工必须使用VPN方能连接公司服务器,访问公司邮件、员工文件等内部资料,以确保连接的安全性。 2、 我国对于VPN的监管现状 在《网络安全法》出台后,我们注意到,我国政府对于VPN的监管力度日益趋严。在2017年的1月,工信部发布了《关于清理规范互联网网络接入服务市场的通知》(以下简称“《通知》”)。《通知》明确:未经电信主管部门批准,不得自行建立或租用专线(含虚拟专用网络VPN)等其他信道开展跨境经营活动。民间可以使用的非法“梯子”越发稀少,跨国企业租用VPN逐步实现规范化管理。 通过该文我们可以看出,未经批准的VPN跨境经营活动被明确禁止。但基础电信企业提供的国际专线服务,则在用户内部办公专用的范围内被允许。 在之后的答记者问中,工信部官员就VPN回答了记者提出的问题,再一次明确了政府对于VPN的监管态度和原则,即:“外贸企业、跨国企业因办公自用等原因,需要通过专线等方式跨境联网时,可以向依法设置国际通信出入口局的电信业务经营者租用,《通知》的相关规定不会对其正常运转造成影响。”根据该官员的回答,我们可以得出,我国政府对于外资企业使用VPN的态度为:外资企业只要通过合法租用,即可自由使用该项技术,不会受到政府监管影响。 随着《网络安全法》正式生效以及VPN相关政策的出台,工信部就未经批准设立的VPN开始了整治活动。一些没有资质的VPN服务提供商不得不终止提供服务。 据报道,美国苹果公司在中国的应用商店也依据中国政府要求,将部分VPN应用下架。然而,有些企业和个人为了追求经济利益,不惜火中取栗,盗用工信部名号,并通过使用“PS”手段用于宣传自身的商用VPN服务。尽管该虚假新闻被工信部紧急辟谣,但VPN服务对于网络用户,尤其是企业商用的重要性可见一斑。VPN这一技术是否合法,以及如何合法合规地使用该技术,成为了每一个企业和个人用户均需要面对的问题。 3、我国VPN相关法规的梳理 在分析VPN如何在中国合法合规地使用之前,我们应先了解我国对于VPN的相关法律法规。 首先,我国并未单就VPN相关服务或者技术出台过相关规定,但VPN作为一项经常被使用的电子通信的服务,受到我国电信相关的法律规制。由于企业在使用VPN时主要进行跨地区的信息加密传输。因此,跨境VPN应当被认定为一种国际的通信业务和服务,属于电信业务中的一种。《中华人民共和国电信条例》第五十八条和第六十四条明确禁止组织和个人擅自经营国际电信业务,并且要求在我国境内从事国际通信业务必须通过国际通信出入口局进行。 其次,《电信业务分类目录》2015年版就VPN进行了更加明确的规定。对国内虚拟专用网业务,增值电信业务的B13项进行了明确界定,即“国内互联网虚拟专用网业务(IP-VPN)是指经营者利用自有或租用的互联网网络资源,采用TCP/IP协议,为国内用户定制互联网闭合用户群网络的服务。” 而国际虚拟专用网则出现在了目录中的基础电信业务A14-4下。根据该项,国际数据通信业务是……利用国际线路或国际专线提供的数据或图像传送业务。尽管在该项中并未出现虚拟专用网或者VPN字样,但该项包含“利用国际线路提供数据的业务”,因此相较于基础电信其他子类,跨境VPN更应归入该项。 另外,《国际通信出入口局管理办法》 第二十二条则要求,“以经营电信业务为目的,通过互联网国际出入口设置虚拟网络的,应当报信息产业部批准。以内部使用为目的,通过互联网国际出入口设置虚拟专用网的,应当报信息产业部备案。”以上即为VPN有关的主要法律法规。综上可以看出,我国相关法规对于VPN的查处依据为,“未经电信主管部门批准,无国际通信业务经营资质的企业或个人,租用国际专线或VPN,私自开展跨境的电信业务经营活动。”即,只要经中国电信主管部门批准的有经营国际通信业务资质的企业和个人,可以依法合规在中国提供VPN服务,而以内部使用为目的的企业,备案后可以在中国依法使用跨境VPN服务。 根据上述分析我们可以发现,我国对于VPN服务根据是否跨境进行了划分。如果VPN服务只是为境内互联使用,则应当归属在增值电信业务分类下,而如果是外资企业需要使用跨境VPN,则服务的提供商必须具备基础电信业务的资质。即,外资企业如需使用跨境VPN,必须向有国际通信业务经营资质的企业或者个人租用。该观点也与根据工信部答记者问观点一致,即 “外贸企业、跨国企业因办公自用等原因,需要通过专线等方式跨境联网时,可以向依法设置国际通信出入口局的电信业务经营者租用,《通知》的相关规定不会对其正常运转造成影响”。 4、国内有合法的VPN吗,有什么VPN能用 那么,在中国合规使用VPN服务的问题关键则成为谁才是在中国有资质提供服务的企业。根据上述分析,如果服务商仅提供国内互联的VPN服务,则服务商仅需申请增值电信经营许可证。而对于外资企业所需使用的跨境VPN服务,则需要寻找具备国际通信业务经营资质的企业,或是设置国际通信出入口局的电信业务经营者。 因此,我们可以认为,凡是没有具备国际通信业务经营资质的企业或是个人,其在中国开展相关经营活动均存在合规性的法律风险。而根据《电信业务分类目录》,跨境VPN应当被归为基础电信业务,我国目前基础电信运营商有中国移动、中国联通、中国电信以及中国广电。那么,是否可以粗略地认为,在中国目前仅有这四家企业有资格合规地提供跨境VPN服务。 笔者曾试图在工信部网站寻找跨境VPN的运营商名单,但工信部并未就此信息进行公开。通过互联网进行搜索,我们找到工信部同意中国联通、中国移动、中国电信设置在不同地区的国际通信信道出入口批复 可见,中国的三大运营商在部分地区具备合规运营国际通信信道的资质。为了确认,笔者向三大运营商进行了咨询,并且得到肯定的答复;三大运营商在不同地区、城市提供国际的VPN专线服务,而收费则按照不同宽带速率进行调整。需要注意的是,一些地区可能仅批准一到两家基础运营商运营,因此在该地区可能仅有一到两家公司能够提供跨境VPN服务。 笔者于2017年曾为美国某物联网企业就在中国合规使用VPN向某城市三大运营商进行咨询,并将运营商提供的VPN模式进行总结。 由于时间间隔较长,相关信息可能因时间而变化。根据咨询结果,运营商目前提供点对点专线以及MPLS-VPN两种服务模式。具体而言,MPLS-VPN是指主要采用多协议标记交换(MPLS)技术,构建企业内部专网,实现企业国内、外多个分支机构之间内部数据、语音、图像等多业务宽带连接。MPLS-VPN提供灵活的策略控制,可以满足不同用户的特殊要求,在带宽价格比、性能价格比上,相比其他广域VPN也具有较大的优势。 点对点专线是指网络服务提供商给用户提供专用的信道,让用户的数据传输变得可靠可信,专线的优点就是安全性好,服务质量可以得到保证。不过,专线租用价格也相对比较高,而且管理也需要专业人员。 目前三大运营商对接入外网的收费大概为2m每年2万左右,10m带宽每年约5万左右,500m的费用大概为每年140万左右。这个费用对个人而言还是很贵的,所以个人根本不要想了,现在光纤入户,家庭宽带都是100m起,年资费才几百元,国际带宽2m的小水管能干什么?看个网页可能都会卡。 另,由于跨境VPN需要搭建专线网络,需要外资企业提供在其他国家、地区的地址,方便运营商估算线路成本和具体费用。 5、总结 说了这么多简单总结下,我国有没有合法的VPN?答案是“有”,在我国目前只有基础电信运营商可以提供合规的跨境VPN服务,由其他企业或者境外公司提供的跨境VPN服务则存在合规的风险。而如果服务商具备增值电信相关业务等相关许可,则可以依法提供仅支持中国境内互联的VPN服务。而作为VPN服务使用者的外资企业,在中国可以向运营商合法合规地租用跨境VPN服务,由基础电信运营商为其搭建VPN服务。 但需要注意的是,该VPN服务只能在企业内部使用,且部分运营商要求VPN所连接的服务器不得具备公网IP地址,以及不得转租或是用于经营性的目的。此外,按照《国际通信出入口局管理办法》,以内部使用为目的,通过互联网国际出入口设置虚拟专用网的,应当报信息产业部备案。因此,使用VPN的企业应当依法进行备案。还需要注意的是,由于跨境VPN需要境内外服务器以及运营商的合作,还需要外资企业的公司技术人员实际与当地运营商进行沟通,并可能存在工期缓慢,在当地无相关合作运营商来搭建设备的情况。这些都是外资企业在中国合规使用VPN所应当要考虑的问题。  

    2021.10.12 浏览:175
  • 在Debian、Ubuntu和CentOS上设置自己的PPTP VPN服务器

    在本教程中,我将向您展示如何在Debian、Ubuntu和CentOS上设置自己的PPTP VPN服务器。所以你不必再购买VPN服务了。 注意:PPTP不再是安全的VPN解决方案。我不建议使用它。(2017年4月20日)。相反,您可以使用OpenConnect VPN或WireGuard VPN。 1.安装pptpd Debian/Ubuntu sudo apt-get install pptpd -y 森托斯 由于PPTP VPN守护程序包在EPEL(企业Linux的额外软件包)存储库中可用,我们必须添加存储库,然后安装pptpd。 sudo yum install epel-release sudo yum install -y pptpd 2.添加DNS服务器 Debian/Ubuntu sudo vi /etc/ppp/pptpd-options 森托斯 sudo vi /etc/ppp/options.pptpd 找到以下行: #ms-dns 10.0.0.1 #ms-dns 10.0.0.2 换成 ms-dns 8.8.8.8 ms-dns 8.8.4.4 8.8.8.8和8.8.4.4是谷歌的DNS服务器。如果谷歌的DNS服务器在你所在地区被屏蔽,那么你可以使用OpenDNS服务器:208.67.222.222和208.67.220.220 3.添加VPN用户帐户 打开/etc/ppp/chap机密文件 sudo vi /etc/ppp/chap-secrets 按如下方式添加用户和密码。使用tab键将它们分开。 user1 pptpd user1-password * user2 pptpd user2-password * 4.为VPN服务器和客户端分配专用IP 编辑/etc/pptpd。conf文件。 sudo vi /etc/pptpd.conf 在文件的enf处添加以下行。 localip 10.0.0.1 remoteip 10.0.0.100-200 保存并关闭文件。localip是VPN服务器的IP。remoteip用于VPN客户端。 5.启用IP转发 为了让VPN服务器在VPN客户端和外部世界之间路由数据包,我们需要启用IP转发。因此,VPN服务器成为路由器。 sudo vi /etc/sysctl.conf 添加以下行。 net.ipv4.ip_forward = 1 保存并关闭文件。然后使用下面的命令应用更改。p选项将从/etc/sysctl加载sysctl设置。conf文件。此命令将在系统重新启动之间保留我们的设置。 sudo sysctl -p 6.为IP伪装配置防火墙 sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 上面的命令将(-A)规则附加到nat表的后路由链的末尾。它将把你的虚拟专用网络与互联网连接起来。同时也会对外界隐藏你的人际网络。因此,Internet只能看到VPN服务器的IP,但看不到VPN客户端的IP。就像你的家庭路由器隐藏你的私人家庭网络一样。 服务器的以太网卡名称可能不是eth0。您可以使用ip地址或ip链接命令来检查。为了永久保存这个iptables规则,可以将上面的命令放在/etc/rc中。本地文件,因此该命令将在系统引导时由root自动执行。顺便说一句,你不必在rc中的命令中添加sudo。地方的 在ubuntu上,从rc的第一行删除-e部分可能是个好主意。本地文件。如果您有-e选项,那么当在rc中执行命令时。local无法运行,下面的任何命令都不会执行。 7.启动PPTPD守护进程 sudo systemctl start pptpd or sudo service pptpd start 如果服务器上有Systemd,则在系统启动时启用pptpd服务: sudo systemctl enable pptpd 现在设置vpn客户端,您应该能够连接到vpn服务器。 在Debian/Ubuntu桌面上安装PPTP VPN客户端 打开终端窗口并运行此命令以安装PPTP VPN客户端。 sudo apt-get install pptp-linux network-manager-pptp network-manager-pptp-gnome 在Fedora Gnome桌面上安装PPTP VPN客户端 sudo dnf install NetworkManager-pptp NetworkManager-pptp-gnome pptp pptp-setup

    2022.03.24 浏览:64
  • 在Debian上从头开始构建电子邮件服务器——基本的后缀设置

    为什么要运行自己的电子邮件服务器?也许你有一个需要向用户发送电子邮件的网站,或者你想将电子邮件存储在自己的服务器上以保护隐私。然而,构建自己的电子邮件服务器可能会让人头疼,因为有太多软件组件需要正确安装和配置。为了让这段旅程变得简单,我将创建一个关于如何在Debian上构建自己的电子邮件服务器的教程系列。 我有信心地说,这是关于在互联网上从头开始构建电子邮件服务器的最好、最全面的教程系列。你不仅会有一个工作的电子邮件服务器,而且你会更好地了解电子邮件的工作原理。本系列教程分为14个部分。 设置基本的Postfix SMTP服务器 设置Dovecot IMAP服务器和TLS加密 使用PostfixAdmin创建虚拟邮箱 创建SPF和DKIM记录以通过垃圾邮件过滤器 创建DMARC记录以保护您的域声誉 设置Roundcube Webmail(尚未发布) 7个有效的建议,防止你的电子邮件被标记为垃圾邮件 用后缀阻止垃圾邮件(尚未发布) 设置OpenDMARC以阻止电子邮件欺骗(尚未发布) 使用SpamAssassin阻止垃圾邮件(尚未发布) 在Debian邮件服务器上设置Amavis和ClamAV以扫描病毒(尚未发布) 如何使用自托管VPN服务器保护电子邮件服务器免受黑客攻击 (可选)在Postfix中启用并配置Postscreen以阻止垃圾邮件 (可选)如何在PostfixAdmin中托管多个邮件域(尚未发布) 我知道这似乎是一项非常艰巨的任务。然而,基于你想要实现的目标,你可能不需要遵循所有这些目标。我的文章很容易阅读,所以如果你花些时间来阅读,你就会有一个工作的电子邮件服务器。 提示:如果你不想从头开始构建一个电子邮件服务器,这是一个漫长而乏味的过程,那么你可以使用iRedMail快速轻松地建立一个功能齐全的邮件服务器。 本文是本系列教程的第1部分。您将学习如何设置非常基本的Postfix SMTP服务器,也称为MTA(邮件传输代理)。完成本文后,您应该能够在自己的电子邮件服务器上使用自己的电子邮件域发送和接收电子邮件。它在Debian 10和Debian 11服务器上进行了测试。 关于Postfix SMTP服务器 Postfix是最先进的邮件传输代理(MTA),又名SMTP服务器,它有两个用途。 传出电子邮件:它负责将电子邮件从邮件客户端/邮件用户代理(MUA)传输到远程SMTP服务器,如Mozilla Thunderbird和Microsoft Outlook。 接收电子邮件:它还用于接收来自其他SMTP服务器的电子邮件。 Postfix由Unix和安全专家Wietse Venema构建。它易于使用,设计时考虑了安全性和模块化,每个模块都以完成任务所需的最低权限级别运行。Postfix与Unix/Linux紧密集成,不提供Unix/Linux已经提供的功能。它在简单和压力条件下都是可靠的。 Postfix最初是作为Sendmail的替代品设计的,Sendmail是Unix上旧的传统SMTP服务器。相比之下,Postfix更安全,更容易配置。它与Sendmail兼容,因此如果卸载Sendmail并用Postfix替换它,现有脚本和程序将继续无缝工作。 在本教程中,您将学习如何为单个域名配置后缀。 第一步:选择合适的托管提供商 要找到一个适合电子邮件托管的VPS(虚拟专用服务器)提供商并非易事。许多托管公司,如DigitalOcean blocks port 25。DigitalOcean不会解锁端口25,因此您需要设置SMTP中继以绕过阻止,这可能会增加您的费用。如果您使用Vultr VPS,则默认情况下端口25被阻止。如果您打开支持票证,他们可以解除阻止,但如果他们决定不允许您的电子邮件发送活动,他们可能会在任何时候再次阻止。如果你使用他们的服务器发送时事通讯,Vultr实际上可能会重新阻止它。 另一个问题是,像DigitalOcean或Vultr这样的大型知名主机提供商被垃圾邮件发送者滥用。通常,服务器IP地址在几个黑名单上。Vultr有一些完整的IP范围被列入黑名单。 Kamatera VPS是运行邮件服务器的一个非常好的选择,因为 他们不封锁25号端口。 IP地址不在任何电子邮件黑名单上。(至少对我来说是这样。我选择了达拉斯数据中心。)你肯定不想被列入可怕的微软Outlook IP黑名单或SpamRats黑名单。有些黑名单会屏蔽整个IP范围,你无法从此类黑名单中删除你的IP地址。 您可以编辑PTR记录以提高电子邮件的可交付性。 它们允许你向你的电子邮件订阅者发送时事通讯,而不受每小时或每天的限制。请注意,您不允许发送垃圾邮件,也称为未经请求的批量电子邮件。如果收件人没有明确允许你发送电子邮件,而你向他们发送电子邮件,那就是未经请求的电子邮件。 您可以为一台服务器订购多个IP地址。这对需要发送大量电子邮件的人非常有用。您可以在多个IP地址上传播电子邮件流量,以实现更好的电子邮件交付。 我建议遵循下面链接的教程,在Kamatera上正确设置Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 你还需要一个域名。我从NameCheap注册了我的域名,因为价格很低,他们给你一辈子免费的隐私保护。 第2步:配置邮件服务器主机名 我假设你的Debian服务器上有一个sudo用户。以root用户身份在服务器上运行以下命令以安装sudo。 apt install sudo 然后创建一个新用户并将其添加到sudo组。 adduser username adduser username sudo 接下来,切换到新用户。 su - username 默认情况下,Postfix在与其他MTA通信时使用服务器的主机名来标识自身。主机名可以有两种形式: 一个字 FQDN(完全限定域名) 单字形式主要用于个人电脑。你的Linux笔记本电脑可能被命名为Linux、debian、ubuntu等。 FQDN(完全限定域名)通常用于面向Internet的服务器,我们应该在邮件服务器上使用FQDN。它由两部分组成:节点名和域名。例如,邮件。利努克斯宝贝。com是一个FQDN。mail是节点名linuxbabe。com是域名。FQDN将出现在smtpd横幅中。如果您的Postfix未在smtpd横幅中提供FQDN,则某些MTA会拒绝邮件。一些MTA甚至会查询DNS,查看smtpd横幅中的FQDN是否解析为邮件服务器的IP。 通过SSH登录服务器并输入以下命令以查看服务器主机名的FQDN格式。 hostname -f 如果Debian服务器还没有FQDN,可以使用hostnamectl设置FQDN。 sudo hostnamectl set-hostname your-fqdn 邮件服务器的常见FQDN是mail。实例通用域名格式。你需要换个例子。使用你的真实域名。然后注销并重新登录,在命令提示下查看此更改。要注销服务器,请运行exit命令。 exit 步骤3:为邮件服务器创建DNS记录 你需要去你的DNS托管服务(通常是你的域名注册商,比如NameCheap)设置DNS记录。 在本教程中,我们将为邮件服务器创建3个DNS记录。 MX记录:邮件交换记录 A记录(和AAAA记录):地址记录 PTR记录:指针记录 还有其他DNS记录用于完整的邮件服务器设置。我们将在本系列教程的后面部分讨论它们。 邮件交换记录 MX记录告诉其他MTA您的邮件服务器正在发送邮件。实例com接受你域名的电子邮件。 Record Type Name Mail Server Priority MX @ mail.linuxbabe.com 0 MX主机的通用名称是mail。你的地盘。通用域名格式。您可以指定多个MX记录,并为邮件服务器设置优先级。数字越小,电子邮件发送的优先级就越高。这里我们只使用一条MX记录,并将0设置为优先级值(0~65535)。 请注意,当您创建MX记录时,您应该在名称字段中输入@或您的apex域名(example.com),如下所示。apex域名是没有任何子域的域名。 记录 A记录将FQDN映射到IP地址。您需要创建一个记录,以便其他SMTP服务器可以将邮件服务器的主机名(mail.example.com)解析为IP地址。 Record Type Name value A mail <IP-address> AAAA记录 如果您的服务器具有公共IPv6地址,则还需要为邮件添加AAAA记录。实例通用域名格式。 Record Type Name value AAAA mail <IPv6-address> 提示:如果使用Cloudflare DNS服务,则在为邮件创建和AAAA记录时不应启用CDN(代理)功能。实例通用域名格式。Cloudflare不支持SMTP或IMAP代理。 PTR记录 指针记录或PTR记录将IP地址映射到FQDN。它是A记录的对应项,用于反向DNS(RDN)查找。它会告诉其他MTA你真的是这个IP地址的所有者或管理者。 使用PTR记录反向解析IP地址有助于阻止垃圾邮件发送者。如果你的IP地址没有PTR记录,许多MTA会拒绝电子邮件。即使他们没有拒绝邮件,你仍然应该为你的邮件服务器设置一个PTR记录,这样你的邮件更有可能进入收件人的收件箱,而不是垃圾邮件文件夹。 要检查PTR记录中的IP地址,可以使用以下命令。(在Debian服务器上,可以使用sudo apt install bind9 utils安装dig实用程序)。 dig -x IP_Address +short 或 host IP_Address PTR记录不由您的域注册器管理。它由提供IP地址的组织管理。你的IP地址是从你的主机提供商那里获得的,而不是从你的域名注册商那里获得的,所以你必须在主机提供商的控制面板中为你的IP地址设置PTR记录。它的值应该是邮件服务器的主机名:mail。实例通用域名格式。如果您的服务器有一个公共IPv6地址,那么也为您的IPv6地址添加一个PTR记录。 要编辑Kamatera VP的反向DNS记录,请登录Kamatera客户端区域,然后打开支持票证,告诉他们为服务器IP地址添加PTR记录,以将IP地址指向邮件。你的领域。通用域名格式。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。 注意:Gmail实际上会检查PTR记录中指定的主机名的A记录。如果主机名解析为相同的IP地址,Gmail将接受您的电子邮件。否则,它将拒绝您的电子邮件。 第4步:在Debian服务器上安装Postfix SMTP服务器 在Debian服务器上,运行以下两个命令。 sudo apt-get update sudo apt-get install postfix -y 系统将要求您为邮件配置选择一种类型。通常,您需要选择第二种类型:Internet站点。 无配置意味着安装过程不会在/etc/postfix/main中配置任何参数。cf文件。 互联网站点意味着使用Postfix向其他MTA发送电子邮件,并接收来自其他MTA的电子邮件。 使用智能主机上网意味着使用postfix接收来自其他MTA的电子邮件,但使用另一个智能主机将电子邮件转发给收件人。 卫星系统意味着使用智能主机发送和接收电子邮件。 仅本地意味着电子邮件仅在本地用户帐户之间传输。 接下来,输入系统邮件名称的域名,即@symbol后面的域名。例如,我的电子邮件地址是[email&#160;protected],所以我输入了linuxbabe。com的系统邮件名称。此域名将附加到未指定域名的地址。请注意,如果您输入一个子域,如mail。实例com,您将能够接收发送给@mail的电子邮件。实例com地址,但无法接收发送给@example的电子邮件。com地址。 安装后,Postfix将自动启动,并显示/etc/Postfix/main。将生成cf文件。现在我们可以使用以下命令检查后缀版本: postconf mail_version 在Debian 11 bullseye上,后缀版本是3.5.6。 mail_version = 3.5.6 ss(Socket Statistics)实用程序告诉我们Postfix主进程正在侦听TCP端口25。 sudo ss -lnpt | grep master Postfix在/usr/sbin/目录下附带许多二进制文件,如下命令所示。 dpkg -L postfix | grep /usr/sbin/ 输出: /usr/sbin/postalias /usr/sbin/postcat /usr/sbin/postconf /usr/sbin/postdrop /usr/sbin/postfix /usr/sbin/postfix-add-filter /usr/sbin/postfix-add-policy /usr/sbin/postkick /usr/sbin/postlock /usr/sbin/postlog /usr/sbin/postmap /usr/sbin/postmulti /usr/sbin/postqueue /usr/sbin/postsuper /usr/sbin/posttls-finger /usr/sbin/qmqp-sink /usr/sbin/qmqp-source /usr/sbin/qshape /usr/sbin/rmail /usr/sbin/sendmail /usr/sbin/smtp-sink /usr/sbin/smtp-source 步骤5:在防火墙中打开TCP端口25(入站) 入站TCP端口25需要打开,以便Postfix可以接收来自其他SMTP服务器的电子邮件。默认情况下,Debian不启用防火墙。运行以下命令安装UFW防火墙。 sudo apt install ufw 然后使用以下命令允许SSH通信。 sudo ufw allow 22/tcp 如果您的SSH服务器正在使用另一个端口,如6543,则运行以下命令以允许防火墙中的SSH通信。 sudo ufw allow 6543/tcp 接下来,启用UFW防火墙。 sudo ufw enable 现在,我们可以使用以下命令打开TCP端口25(入站)。 sudo ufw allow 25/tcp 然后用在线端口扫描仪扫描邮件服务器上打开的端口。输入邮件服务器的公共IP地址,然后选择扫描所有公共端口。 从上面的屏幕截图可以看到,TCP端口25在我的邮件服务器上是打开的。 步骤6:检查TCP端口25(出站)是否被阻止 出站TCP端口25需要打开,以便Postfix可以向其他SMTP服务器发送电子邮件。出站TCP端口25由主机提供商控制,我们可以安装telnet实用程序来检查它是否打开或被阻止。 sudo apt install telnet 在邮件服务器上运行以下命令。 telnet gmail-smtp-in.l.google.com 25 如果它没有被阻止,你会看到如下消息,这表明SMTP连接已成功建立到Gmail。(提示:输入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(出站)被阻止,您将看到如下内容,这表明无法建立SMTP连接。 Trying 2607:f8b0:400e:c06::1a... Trying 74.125.195.27... telnet: Unable to connect to remote host: Connection timed out 在这种情况下,您的Postfix无法向其他SMTP服务器发送电子邮件。请您的ISP/主机提供商为您打开出站端口25。如果他们拒绝您的请求,您需要设置SMTP中继以绕过端口25阻塞,或者使用像Kamatera这样不阻塞端口25的VPS。 有些人可能会问,“我能把端口25换成另一个端口来绕过阻塞吗?”?答案是否定的。只有在同时控制服务器端和客户端时,更改端口才有效。当Postfix发送电子邮件时,它充当SMTP客户端。收件人的邮件服务器充当SMTP服务器。您无法控制接收SMTP服务器。SMTP服务器正在监听端口25以接收电子邮件。他们预计SMTP客户端将到达端口25。没有其他接收电子邮件的端口。如果您的后缀未连接到接收SMTP服务器的端口25,您将无法发送电子邮件。 第7步:发送测试电子邮件 事实上,我们现在可以通过命令行发送和接收电子邮件。如果Debian服务器有一个名为user1的用户帐户,则该用户的电子邮件地址为[email&#160;protected]。您可以向root用户发送电子邮件[email&#160;protected]。你也可以向Gmail、Yahoo Mail或任何其他电子邮件服务发送电子邮件。 安装Postfix时,sendmail二进制文件被放置在/usr/sbin/sendmail,它与传统的sendmail SMTP服务器兼容。您可以使用Postfix的sendmail二进制文件向您的Gmail帐户发送测试电子邮件,如下所示: echo "test email" | sendmail [email protected] 在这个简单的命令中,sendmail从标准输入读取一条消息,并将“test email”作为消息正文,然后将此消息发送到您的Gmail帐户。你应该能够在你的Gmail收件箱(或垃圾邮件文件夹)中收到这封测试邮件。您可以看到,虽然我们没有指定发件人地址,但Postfix会自动为发件人地址附加一个域名。这是因为我们在安装Postfix时在系统邮件名中添加了我们的域名。 注意:From:域名由Postfix中的myorigin参数(又称系统邮件名)决定,而不是由myhostname参数决定。 你可以试着回复这封测试邮件,看看Postfix是否能收到邮件。从您的域发送的电子邮件很可能被标记为垃圾邮件。现在别担心。我们将在本系列教程的后面部分解决这个问题。 每个用户的收件箱位于/var/spool/mail/&lt;用户名&gt;或/var/mail/&lt;用户名&gt;文件如果不确定在哪里查找收件箱,请使用此命令。 postconf mail_spool_directory 后缀邮件日志存储在/var/log/mail中。日志 还是不能发邮件? 如果端口25(出站)未被阻止,但您仍然无法从自己的邮件服务器向Gmail等其他电子邮件地址发送电子邮件,那么您可以使用以下命令检查邮件日志(/var/log/mail.log)。 sudo tail -n 20 /var/log/mail.log 这会告诉tails输出邮件的最后20行。日志文件。如果你愿意的话,你可以换20到40。 例如,有些人可能会在邮件中看到以下几行。日志文件。 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记录。(PTR记录由提供IP地址的组织管理。) 您还可以使用命令行文本编辑器(如VIM)打开邮件日志(/var/log/mail.log),VIM可以通过安装 sudo apt install vim 然后打开邮件。登录VIM。 sudo vim /var/log/mail.log 要进入此文件的底部,请按大写锁定键,然后按G。要退出文件,请按大写锁定键切换回小写字母模式,然后输入:q并按enter。 第8步:使用邮件程序发送和阅读电子邮件 现在,让我们安装一个命令行MUA(邮件用户代理)。 sudo apt-get install mailutils 要发送电子邮件,请键入 mail -a FROM:your-account@example.com [email protected] [email protected]:~$ mail -a FROM:[email protected] [email protected] Cc: Subject: 2nd test email I'm sending this email using the mail program. 输入主题行和正文。要告诉mail您已经写完,请按Ctrl+D,mail将为您发送此电子邮件。 要阅读收到的电子邮件,只需键入mail。 mail 下面是如何使用邮件程序来管理邮箱。 要阅读第一封电子邮件,请键入1。如果只显示消息的一部分,请按Enter键以显示消息的其余部分。 要显示从消息1开始的消息标题,请键入h。 要显示最后一屏消息,请键入h$或z。 要阅读下一封电子邮件,请键入n。 要删除邮件1,请键入d 1。 要删除消息1、2和3,请键入d 1 2 3。 要删除从1到10的邮件,请键入d 1-10。 要重播消息1,请键入reply 1。 要退出邮件,请键入q。 已打开的邮件将从/var/mail/&lt;用户名&gt;to/home/&lt;用户名&gt/mbox文件。这意味着其他邮件客户端无法读取这些邮件。为了防止这种情况发生,请键入x而不是q退出邮件。 第8步:如何增加附件大小限制 默认情况下,附件的大小不能超过10MB,这由message_size_limit参数指示。 postconf | grep message_size_limit 输出: message_size_limit = 10240000 此参数定义了来自您自己的邮件服务器的电子邮件和到达您的邮件服务器的电子邮件的大小限制。 要允许连接50MB大小,请运行以下命令。 sudo postconf -e message_size_limit=52428800 当使用-e(编辑)选项调用postconf命令时,它将尝试在Postfix主配置文件(/etc/Postfix/main.cf)中查找参数(message_size_limit)并更改值。如果找不到该参数,则会在文件末尾添加该参数。 请注意,邮件大小限制不应大于邮箱大小限制,否则Postfix可能无法接收电子邮件。在上游后缀包中,邮箱大小限制的默认值为51200000字节(约48MB)。在Debian上,默认值设置为0,这一点可以通过 postconf | grep mailbox_size_limit 输出: mailbox_size_limit = 0 这意味着邮箱没有大小限制,这很好。 重新启动Postfix以使更改生效。 sudo systemctl restart postfix 从邮件服务器发送带有大附件的电子邮件时,还应注意接收服务器的附件大小限制。例如,您不能向Gmail地址发送大于25MB的附件。 第9步:设置后缀主机名 默认情况下,Postfix SMTP服务器使用操作系统的主机名。但是,操作系统的主机名可能会发生变化,因此直接在Postfix配置文件中设置主机名是一种好的做法。使用命令行文本编辑器(如Nano)打开Postfix主配置文件。 sudo nano /etc/postfix/main.cf 找到myhostname参数并设置邮件。实例com作为价值。不建议使用apex域示例。com作为我的主机名。从技术上讲,您可以使用apex域,但在本教程系列的后续部分中,它会产生问题。 myhostname = mail.example.com 保存并关闭文件。(要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要退出,请按Ctrl+X。)重新启动Postfix以使更改生效。 sudo systemctl restart postfix 一旦在Postfix中设置了myhostname,OS主机名就不再重要了。您可以将OS主机名更改为您喜欢的任何主机名。 第10步:创建电子邮件别名 在生产环境中操作邮件服务器时,需要配置某些别名。您可以在/etc/alias文件中添加电子邮件别名,该文件是一个特殊的后缀查找表文件,使用Sendmail兼容的格式。 sudo nano /etc/aliases 默认情况下,该文件中只有两行。 # See man 5 aliases for format postmaster: root 第一行是评论。第二行是该文件中别名的唯一定义。左边是别名。右侧是电子邮件的最终目的地。因此,[email&#160;protected]的电子邮件将被发送到[email&#160;protected]。RFC 2142要求提供邮政局长的电子邮件地址。 通常我们不使用根电子邮件地址。相反,邮政局长可以使用普通的登录名来访问电子邮件。因此,您可以添加以下行。用真实用户名替换用户名。 root: username 这样,[email&#160;protected]和[email&#160;protected]的电子邮件将被发送到[email&#160;protected]。现在您可以保存并关闭该文件。然后使用newalias命令重建别名数据库 sudo newaliases 仅使用IPv4 默认情况下,Postfix同时使用IPv4和IPv6协议,如下所示: postconf inet_protocols 输出: inet_protocols = all 如果邮件服务器没有公共IPv6地址,最好在Postfix中禁用IPv6,以防止不必要的IPv6连接。只需运行以下命令即可在Postfix中禁用IPv6。 sudo postconf -e "inet_protocols = ipv4" 然后重新启动Postfix。 sudo systemctl restart postfix 如果不知道服务器是否有公共IPv6地址,只需运行以下命令。 ping 2607:f8b0:4005:808::2005 此命令尝试ping Gmail的IPv6地址。如果ping成功,那么您的服务器可以使用IPv6。如果ping失败,则服务器无法使用IPv6。按Ctrl+C停止ping。 升级后缀 如果您运行sudo-apt-update命令,那么sudo-apt-upgrade将在将来进行升级,并且系统将升级Postfix,那么可能会提示您再次选择Postfix的配置类型。这一次,您应该选择“无配置”以保持当前配置文件不变。 下一步 恭喜!现在你有了一个基本的Postfix电子邮件服务器并开始运行。您可以使用命令行发送纯文本电子邮件和阅读收到的电子邮件。在本系列教程的下一部分中,我们将学习如何安装Dovecot IMAP服务器并启用TLS加密,这将允许我们使用Mozilla Thunderbird等桌面邮件客户端发送和接收电子邮件。 第2部分:在Debian&amp;上安装Dovecot IMAP服务器;启用TLS加密 和往常一样,如果你觉得这篇文章有用,订阅我们的时事通讯,获取更多提示和窍门。当心?

    2022.03.24 浏览:59
  • 设置SMTP&;带有HAProxy的IMAP代理(Debian、Ubuntu、CentOS)

    在之前的教程中,我们讨论了如何在Linux(Ubuntu版本、CentOS/RHEL版本)上从头开始设置邮件服务器,以及如何使用iRedMail或Modoboa快速设置自己的邮件服务器,而无需手动配置邮件服务器堆栈的每个组件。本教程将向您展示如何使用HAProxy为邮件服务器设置SMTP和IMAP代理。 什么时候需要SMTP和IMAP代理? 有些人在家里运行电子邮件服务器,但可能存在以下问题: 端口25被阻塞。 它们没有静态IP地址。 他们无法创建PTR记录。 如果端口25被阻止,则无法直接向收件人发送电子邮件。如果你没有静态IP地址或PTR记录,你的电子邮件很可能会被拒绝或进入垃圾邮件文件夹。如果遇到这种情况,可以在数据中心运行VPS(虚拟专用服务器),并将其用作邮件服务器的代理。VPS有一个静态IP地址,您可以为该IP地址创建PTR记录。其他电子邮件服务器会认为VPS运行您的邮件服务,当您发送电子邮件时,他们会认为电子邮件来自您的VPS。 是的,您也可以使用SMTP中继服务(如Sendinblue)来解决这些问题,但每天和每月可以发送多少电子邮件是有限制的。如果你升级到Mailjet的付费账户,每月至少要花25美元。你发送的电子邮件越多,你每月的花费就越高。如果你运行VPS并设置邮件代理,无论你要发送多少封邮件,每月都要花费大约10美元。 如果为很多人运行邮件服务器,可能需要设置邮件代理以实现负载平衡和高可用性。在本文中,我将使用HAProxy设置SMTP和IMAP代理,这是一个免费、开源的高可用性负载平衡器和代理服务器,用于基于TCP和HTTP的应用程序。 步骤1:为邮件代理选择正确的VP 你需要一个副总裁 允许您创建PTR记录 不会阻塞端口25 允许您无限制地发送无限电子邮件。 并非所有VPS提供商都满足上述3个要求。例如,DigitalOcean会阻塞端口25,但不会解锁端口25。另一个问题是,像DigitalOcean这样的大型知名主机提供商被垃圾邮件发送者滥用。通常,服务器IP地址在几个黑名单上。 我在ScalaHost和Kamatera VPS上运行邮件服务器。在设置邮件服务器时,我总是推荐它们。对于不需要太多CPU和RAM的邮件代理,可以选择Kamatera VPS。单CPU 1GB内存计划每月只需花费4美元,您将获得一个月的免费服务。您可以按照下面的教程创建Kamatera VPS。 如何在Kamatera上创建Linux VPS服务器 您可以为VPS选择任何Linux发行版,但我建议您使用Debian、Ubuntu或CentOS。 要登录到服务器,可以使用SSH客户端。如果您在计算机上使用Linux或macOS,只需打开一个终端窗口并运行以下命令即可登录服务器。将12.34.56.78替换为VPS的IP地址。 ssh [email protected]12.34.56.78 系统将要求您输入密码。如果您使用的是Windows,请阅读下面关于如何使用SSH客户端的文章。 在Windows上使用SSH登录Linux服务器的3种方法 第2步:在VPS上设置VPN服务器 如果你家里有一个动态IP地址,那么你需要在你的VPS上设置一个VPN服务器,这样你的VPS就可以与你的邮件服务器通信,而不会因为IP地址的改变而中断。VPN服务器还可以帮助您绕过端口25阻塞。 您可以按照以下教程之一在VPS上设置WireGuard VPN。为什么我要选择WireGuard而不是像OpenVPN这样的其他VPN协议?因为WireGuard允许您为VPN客户端分配静态专用IP地址。 在Ubuntu上设置自己的WireGuard VPN服务器 在Debian上设置自己的WireGuard VPN服务器 在CentOS上设置自己的WireGuard VPN服务器 按照上述文章中的说明操作时,您的VPS是VPN服务器,而您的邮件服务器是VPN客户端。VPS将成为邮件服务器的默认网关,邮件服务器上的所有出站流量将通过VPN进行隧道传输,因此接收SMTP服务器(Gmail、Hotmail、Yahoo mail等)时会认为您的邮件来自VPS。如果你想通过VPS发送邮件,但让其他类型的流量使用原始网关,WireGuard还允许你通过启用策略路由来实现。 你应该为你的VPS设置一个PTR记录,也就是反向DNS记录。Kamatera不允许您在控制面板中编辑PTR记录。相反,你需要打开一张支持票,告诉他们为你添加PTR记录。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。告诉支持团队将服务器IP地址的PTR记录更新为mail。你的领域。通用域名格式。 第3步:在防火墙中打开端口并设置权限 VPS需要在防火墙中打开端口25、587、465、143和993。运行以下命令打开这些端口。 Debian/Ubuntu: sudo ufw allow 25,587,465,143,993/tcp CentOS: sudo firewall-cmd --permanent --add-service={smtp,smtp-submission,smtps,imap,imaps} sudo systemctl reload firewalld 邮件服务器需要向VPS打开各种端口。运行以下命令。 Debian/Ubuntu: sudo ufw insert 1 allow in from 10.10.10.0/24 CentOS: sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" accept' sudo systemctl reload firewalld 10.10.10.0/24是VPN服务器创建的专用IP范围,因此VPS可以访问邮件服务器上的所有端口。 在CentOS上配置SELinux 在本教程的后面部分,VPS上的HAProxy需要绑定到各种电子邮件端口,如25、587、465、143和993,但SELinux禁止这样做。如果在VPS上使用CentOS,则需要运行以下命令以允许HAProxy绑定到这些端口。 sudo setsebool -P haproxy_connect_any 1 第4步:设置SMTP代理以接收电子邮件 现在,您需要设置SMTP代理,以便其他邮件服务器可以通过VPS向您自己的邮件服务器发送电子邮件。SSH到VPS中并安装HAProxy。 Debian/Ubuntu sudo apt install haproxy 森托斯 sudo dnf install haproxy 然后编辑HAProxy主配置文件。 sudo nano /etc/haproxy/haproxy.cfg 在文件末尾添加以下行。将12.34.56.78替换为VPS的公共IP地址。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。 frontend ft_smtp bind 12.34.56.78:25 mode tcp timeout client 1m log global option tcplog default_backend bk_smtp backend bk_smtp mode tcp log global option tcplog timeout server 1m timeout connect 7s server postfix 10.10.10.101:2525 send-proxy 上述配置将使HAProxy监听端口25,并将SMTP连接传递到邮件服务器的端口2525。保存并关闭文件。重新启动HAProxy。 sudo systemctl restart haproxy 并在启动时启用自动启动。 sudo systemctl enable haproxy 要使用HAProxy作为Postfix SMTP服务器的反向代理,需要在Postfix中启用Postscreen。SSH连接到邮件服务器并编辑Postfix主配置文件。 sudo nano /etc/postfix/master.cf 在该文件开头添加以下行。将10.10.10.101替换为VPN服务器分配的邮件服务器的专用IP地址。这将在端口2525上启用Postscreen,它可以接受来自VPS的HAProxy连接。Postfix能够从HAProxy获得SMTP客户端的原始IP地址。 10.10.10.101:2525 inet n - - - 1 postscreen -o postscreen_upstream_proxy_protocol=haproxy -o postscreen_cache_map=btree:$data_directory/postscreen_2525_cache -o syslog_name=postfix/2525 然后取消对以下三行的注释。(注意:如果您使用iRedMail或Moboba来运行邮件服务器,那么默认情况下,以下三行是未注释的。) smtpd pass - - y - - smtpd dnsblog unix - - y - 0 dnsblog tlsproxy unix - - y - 0 tlsproxy 哪里: 第一行将使Postscreen将SMTP连接传递到smtpd守护进程。 dnsblog(DNS黑名单记录器)服务允许记录DNS黑名单检查。 tlsproxy服务为postscreen启用STARTTLS支持,因此当postscreen启用时,远程SMTP客户端可以建立加密连接。 保存并关闭文件。重新启动Postfix以使更改生效。 sudo systemctl restart postfix 现在为你的域名添加一个新的MX记录,如下所示,你的邮件服务器可以通过VPS接收电子邮件。 Record Type    Name      Mail Server         Priority MX @ hostname-of-your-VPS 0 您可以为VPS使用任何主机名,只要它可以解析为VPS的IP地址。为了简单起见,您可以使用邮件服务器的主机名(mail.yourdomain.com)。别忘了为VPS的主机名添加DNS记录。 第5步:设置提交代理 您的用户可以在不使用代理的情况下向邮件服务器提交发送电子邮件,但如果您希望用户能够通过VPS提交发送电子邮件,该怎么办?您需要为Postfix提交服务设置代理。 在VPS上编辑HAProxy主配置文件。 sudo nano /etc/haproxy/haproxy.cfg 在文件末尾添加以下行。将12.34.56.78替换为VPS的公共IP地址。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。 frontend ft_submission bind 12.34.56.78:587 mode tcp timeout client 1m log global option tcplog default_backend bk_submission backend bk_submission mode tcp log global option tcplog timeout server 1m timeout connect 7s server postfix 10.10.10.101:10587 send-proxy frontend ft_smtps bind 12.34.56.78:465 mode tcp timeout client 1m log global option tcplog default_backend bk_smtps backend bk_smtps mode tcp log global option tcplog timeout server 1m timeout connect 7s server postfix 10.10.10.101:10465 send-proxy 通常有两个端口可以接受经过身份验证的用户提交的电子邮件:587和465。在上面的配置中,我们在HAProxy中定义了两个前端,监听端口587和465。它们将分别连接到邮件服务器的端口10587和10465。 保存并关闭文件。重新启动HAProxy。 sudo systemctl restart haproxy 然后在邮件服务器上编辑Postfix主配置文件。 sudo nano /etc/postfix/master.cf 在该文件末尾添加以下行。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。请在-o之前至少允许一个空格(制表符或空格键)。在后缀配置中,前面的空格字符表示此行是前一行的延续。但是,不应在等号(=)之前或之后添加空格。 10.10.10.101:10587 inet n - y - - smtpd -o syslog_name=postfix/10587 -o smtpd_tls_security_level=encrypt -o smtpd_tls_wrappermode=no -o smtpd_sasl_auth_enable=yes -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_upstream_proxy_protocol=haproxy 10.10.10.101:10465 inet n - y - - smtpd -o syslog_name=postfix/10465 -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_upstream_proxy_protocol=haproxy 在上面的配置中,我们启用了两个在端口10587和10465上侦听的提交服务,它们支持haproxy协议,因此能够接受来自haproxy的连接。保存并关闭文件。重新启动Postfix以使更改生效。 sudo systemctl restart postfix 第6步:设置IMAP代理 我们还希望用户能够通过VPS登录IMAP服务器,因此我们需要设置IMAP代理。 在VPS上编辑HAProxy主配置文件。 sudo nano /etc/haproxy/haproxy.cfg 在文件末尾添加以下行。将12.34.56.78替换为VPS的公共IP地址。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。 frontend ft_imap bind 12.34.56.78:143 mode tcp default_backend bk_imap backend bk_imap mode tcp balance leastconn stick store-request src stick-table type ip size 200k expire 30m server imap1 10.10.10.101:10143 send-proxy-v2 frontend ft_imaps bind 12.34.56.78:993 mode tcp default_backend bk_imaps backend bk_imaps mode tcp balance leastconn stick store-request src stick-table type ip size 200k expire 30m server imaps1 10.10.10.101:10993 send-proxy-v2 IMAP服务有两个端口:143和993。端口143可以使用STARTTLS,端口993使用隐式TLS,因此在上述配置中,我们在端口143和993的HAproxy监听中添加了两个前端。它们将分别连接到邮件服务器的端口10143和10993。保存并关闭文件。重新启动HAProxy。 sudo systemctl restart haproxy 在邮件服务器上编辑Dovecot配置文件。 sudo nano /etc/dovecot/conf.d/10-master.conf 添加对IMAP和IMAP的HAProxy支持,如下所示。 service imap-login { inet_listener imap { port = 143 } inet_listener imaps { port = 993 ssl = yes } inet_listener imap_haproxy { port = 10143 haproxy = yes } inet_listener imaps_haproxy { port = 10993 ssl = yes haproxy = yes } } 在上述配置中,我们启用了两个IMAP服务:IMAP_haproxy和imaps_haproxy,分别监听端口10143和10993。它们支持haproxy协议,因此能够接受来自haproxy的连接。保存并关闭文件。 然后我们需要在Dovecot中添加受信任的代理主机。编辑Dovecot主配置文件。 sudo nano /etc/dovecot/dovecot.conf 在该文件末尾添加以下两行。将10.10.10.1替换为VPN服务器的专用IP地址。 haproxy_trusted_networks = 10.10.10.1 haproxy_timeout = 3s 保存并关闭文件。重新启动Dovecot以使更改生效。 sudo systemctl restart dovecot 现在,您应该能够登录IMAP服务器,并通过VPS提交发送的电子邮件。 第7步:设置HTTPS代理 如果希望通过VPS访问Roundcube等网络邮件,请在VPS上编辑HAProxy主配置文件。 sudo nano /etc/haproxy/haproxy.cfg 在文件末尾添加以下行。将12.34.56.78替换为VPS的公共IP地址。将10.10.10.101替换为邮件服务器的专用IP地址,该地址由VPN服务器分配。替换邮件。你的地盘。com与您的网络邮件使用的域名。 frontend https bind 12.34.56.78:443 mode tcp tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } use_backend webmail if { req_ssl_sni -i mail.yourdomain.com } default_backend webmail backend webmail mode tcp option ssl-hello-chk server webmail 10.10.10.101:443 check 保存并关闭文件。然后重启HAProxy。 sudo systemctl restart haproxy 请注意,如果在certbot中使用默认的http-01质询,HTTPS代理可能会干扰Let's Encrypt TLS证书续订。建议在使用certbot续订Let's Encrypt TLS证书时使用dns-01 challenge。 最后的想法 请注意,我们通过添加更多侦听端口(252510587104651014310993),启用了对Postfix和Dovecot的代理支持。我们没有为现有端口(25、587、465、143和993)启用代理支持,因为如果启用,Postfix和Dovecot将只接受来自HAProxy的连接,并拒绝来自其他IP地址(包括本地主机)的连接。这可以防止邮件服务器上运行的webmail或web应用程序使用127.0.0.1:25发送电子邮件,并防止webmail客户端从Dovecot获取电子邮件。发生这种情况时,您可能会看到以下错误。 host mail.example.com refused to talk to me: 421 4.3.2 No system resources 您的Postfix SMTP服务器将在邮件日志中记录以下消息。 postfix/postscreen[1479]: warning: haproxy read: time limit exceeded 配置HAProxy自动重启 我找到了haproxy。CentOS/RHEL上的服务在启动时可能无法启动。错误如下。 Starting frontend ft_smtp: cannot bind socket [23.254.225.226:25] 如果我手动启动服务,它就会工作,这让我很困惑。为了解决这个问题,我们可以编辑haproxy。服务,使其在出现故障时自动重新启动。为了覆盖默认的systemd服务配置,我们创建了一个单独的目录。 sudo mkdir -p /etc/systemd/system/haproxy.service.d/ 然后创建一个文件。 sudo nano /etc/systemd/system/haproxy.service.d/restart.conf 在文件中添加以下行。 [Service] Restart=always RestartSec=5s 保存并关闭文件。然后重新加载系统D。 sudo systemctl daemon-reload Postfix/Dovecot自动重启 还建议在邮件服务器上配置Postfix和Dovecot,以便在出现故障时自动重启。 后缀 创建一个单独的目录。 sudo mkdir -p /etc/systemd/system/postfix.service.d/ 然后创建一个文件。 sudo nano /etc/systemd/system/postfix.service.d/restart.conf 在文件中添加以下行。请注意,在Debian/Ubuntu上,后缀是。服务是一个一次性服务,不允许重启=始终。 [Service] Restart=on-failure RestartSec=5s 保存并关闭文件。然后重新加载系统D。 sudo systemctl daemon-reload 多佛科特 创建一个单独的目录。 sudo mkdir -p /etc/systemd/system/dovecot.service.d/ 然后创建一个文件。 sudo nano /etc/systemd/system/dovecot.service.d/restart.conf 在文件中添加以下行。 [Service] Restart=always RestartSec=5s 保存并关闭文件。然后重新加载系统D。 sudo systemctl daemon-reload 删除IP黑名单 如果你的VPS的IP地址被某个特定的电子邮件服务提供商列入黑名单怎么办?您可以阅读下面的文章,了解如何将您的IP地址从黑名单中删除。 邮件服务器IP黑名单删除提示,以提高电子邮件的可交付性 故障排除提示 如果您向邮件服务器发送电子邮件,但收到以下错误, lost connection with mail.yourdomain.com[xx.xx.xx.xx] while receiving the initial server greeting 这可能是因为VPN连接中断,请验证是否可以从VPN服务器ping到VPN客户端(邮件服务器)。 ping 10.10.10.101 也可能是您没有将邮件服务器防火墙配置为允许从VPN连接(10.10.10.0/24)。在VPN服务器上运行以下命令,查看端口是否打开。Nmap可以通过sudo apt install Nmap安装在VPN服务器上。 sudo nmap 10.10.10.101 验证是否可以远程登录到端口2525上的邮件服务器。 telnet 10.10.10.101 2525 有时,您的HAProxy配置可能会出错。例如,我曾经在HAProxy中有两个默认的_后端指令,如下所示。 frontend ft_smtp bind 12.34.56.78:25 mode tcp timeout client 1m log global option tcplog default_backend bk_smtp default_backend ocserv 这是错误的。如果在前端部分中定义了默认的_后端,则无法在全局部分中定义另一个默认的_后端。相反,您应该像本文中那样,将每个默认的_后端指令放在相应的前端部分。 另一个配置错误是,您可能会意外地在https前端插入其他指令。 frontend https bind 12.34.56.78:443 mode tcp tcp-request inspect-delay 5s tcp-request content accept if { req_ssl_hello_type 1 } some_other_directives use_backend webmail if { req_ssl_sni -i mail.yourdomain.com } default_backend webmail 替代方法 如果您无法找出服务器环境中的问题,还可以在VPN服务器上使用UFW防火墙设置端口转发。流量将由UFW转发,因此HAProxy根本不会被使用。(无需移除HAProxy。) 如何在UFW中设置端口转发 应将以下端口从VPN服务器转发到邮件服务器。 TCP 25 TCP 587 TCP 465 TCP 143 TCP 993 TCP 80 TCP 443 TCP 110 TCP 995 结论 我希望本教程能帮助您设置SMTP和IMAP代理。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.24 浏览:67
  • 在Postfix中启用并配置Postscreen以阻止垃圾邮件

    在之前的教程中,我们讨论了如何在Linux(Ubuntu版本、CentOS/RHEL版本)上从头开始设置邮件服务器。本教程将向您展示如何在Postfix SMTP服务器中启用和配置Postscreen。Postscreen是一个SMTP过滤器,可以阻止垃圾邮件(或僵尸机器)远离真正的Postfix smtpd守护进程,因此Postfix不会感到过载,可以更高效地处理合法电子邮件。 注意:如果您使用的是iRedMail或Modoboa,则默认情况下服务器上会启用Postscreen。不过,你会学到一些新东西。 减少SMTP服务器过载 默认情况下,Postfix最多可以生成100个SMTP服务器进程来处理SMTP客户端连接。您可以通过运行以下命令来检查进程限制。 postconf default_process_limit 样本输出: default_process_limit = 100 如果垃圾邮件不断攻击您的Postfix SMTP服务器,那么接受合法电子邮件的Postfix SMTP服务器进程就会减少。当SMTP客户端的数量超过Postfix SMTP服务器进程的数量时,其他SMTP客户端必须等待SMTP服务器进程可用。 通过使用Postscreen阻止垃圾邮件,我们可以为合法的SMTP客户端保存SMTP服务器进程。Postscreen是针对垃圾邮件发送者的第一层防御。它被实现为监听端口25的单个进程,可以处理多个入站SMTP连接。与使用其他SMTP级别的访问检查相比,它速度快、重量轻。 Postscreen对Spambots使用的测量 大多数垃圾邮件都有错误的SMTP协议实现。Postscreen可以利用这一事实,使用多个测量来阻止Spambot。 Pregreet测试。如果SMTP客户端在轮到它之前讲话,请停止连接。 实时黑名单检查。如果SMTP客户端的IP地址位于blaclist(如Spamhaus)上,请停止连接。 深度协议测试。 步骤1:在Postfix中启用Postscreen Postscreen是在Postfix 2.8中首次引入的。如果您使用的是任何当前的Linux发行版,那么您应该拥有Postfix 3.0或更高版本。要检查后缀版本,请运行 postconf mail_version 样本输出: mail_version = 3.3.0 编辑后缀主配置文件。 sudo nano /etc/postfix/master.cf 注释掉下面一行(在这一行的开头添加一个#字符)。 smtp inet n - y - - smtpd 然后取消对以下4行的注释(删除每行开头的#字符)。 smtp inet n - y - 1 postscreen smtpd pass - - y - - smtpd dnsblog unix - - y - 0 dnsblog tlsproxy unix - - y - 0 tlsproxy 哪里: 前两行启用Postscreen。Postscreen和smtpd守护进程都将监听端口25。Postscreen将首先检查SMTP客户端,然后将连接传递给smtpd守护进程。 dnsblog(DNS黑名单记录器)服务允许记录DNS黑名单检查。 tlsproxy服务为postscreen启用STARTTLS支持,因此当postscreen启用时,远程SMTP客户端可以建立加密连接。 保存并关闭文件。(暂时不要重启Postfix。) 创建永久白名单/黑名单 编辑后缀主配置文件。 sudo nano /etc/postfix/main.cf 我们需要将我们自己的IP地址添加到Postscreen白名单中,这样我们自己的SMTP请求就不会被Postscreen测试(pregreet测试、黑名单检查、深度协议测试等)。在文件末尾添加以下两行。 postscreen_access_list = permit_mynetworks cidr:/etc/postfix/postscreen_access.cidr postscreen_blacklist_action = drop 保存并关闭文件。permit_mynetworks值将白名单mynetworks参数中列出的任何IP地址。要检查mynetworks的价值,请运行 postconf mynetworks 样本输出: mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 您还可以在/etc/postfix/postscreen_访问中手动添加其他IP地址。cidr文件。 sudo nano /etc/postfix/postscreen_access.cidr 您可能希望将邮件服务器的公共IPv4和IPv6地址列入白名单。所以我在文件中添加了以下几行。用自己的IP地址替换IP地址。请注意,您需要使用CIDR表示法:对于单个IPv4地址,请在末尾添加/32;对于单个IPv6地址,请在末尾添加/128。 #permit my own IP addresses. 130.51.180.110/32 permit 2a0d:7c40:3000:b8b::2/128 permit 如果您的邮件服务器也运行VPN服务器,则可能需要将VPN服务器的地址添加到白名单中。例如,我的VPN服务器使用10.10.10.1专用IP地址,因此我在文件中添加了以下行。 10.10.10.1/32 permit 如果你想将一个IP地址永久列入黑名单,你可以像下面这样做。 12.34.56.78/32 reject 保存并关闭文件。重新启动Postfix以使更改生效。 sudo systemctl restart postfix 注意:Postscreen只监听端口25,因此来自端口587或465的经过身份验证的用户不会受到Postscreen的影响。 Postscreen本身还维护一个动态白名单,以最小化合法电子邮件的延迟,该白名单由Postscreen_cache_map参数定义。 postconf postscreen_cache_map 样本输出: postscreen_cache_map = btree:$data_directory/postscreen_cache 动态白名单中的每个IP地址都有一个生存期。 第2步:预reet测试 Postscreen中有一个pregreet测试来检测垃圾邮件。正如您可能已经知道的,在SMTP协议中,接收SMTP服务器应始终在发送SMTP服务器声明其主机名之前进行声明。一些垃圾邮件发送者违反此规则,并在接收SMTP服务器之前声明其主机名。 默认情况下,Postscreen启用pregreet测试,但不会对测试结果执行任何操作。从我的邮件日志(/var/log/mail.log或/var/log/maillog)中的以下几行可以看到,“PREGREET”文本表示SMTP客户端首先声明了其主机名,但Postscreen仍将连接传递到Postfix smtpd守护进程。 mail postfix/postscreen[24075]: CONNECT from [156.96.118.171]:62604 to [23.254.225.226]:25 mail postfix/postscreen[24075]: PREGREET 11 after 0.07 from [156.96.118.171]:62604: EHLO User/r/n mail postfix/smtpd[24076]: connect from unknown[156.96.118.171] mail postfix/smtpd[24076]: disconnect from unknown[156.96.118.171] ehlo=1 quit=1 commands=2 要拒绝违反此规则的SMTP客户端,请编辑Postfix主配置文件。 sudo nano /etc/postfix/main.cf 在末尾添加以下行。 postscreen_greet_action = enforce 保存并关闭文件。然后重新启动Postfix。 sudo systemctl restart postfix 从现在起,如果SMTP客户端违反此规则,Postscreen将停止连接。从下面的日志中可以看到,Postscreen停止了连接,因此垃圾邮件发送者没有机会骚扰smtpd守护进程。 mail postfix/postscreen[6471]: CONNECT from [192.241.239.123]:48014 to [23.254.225.226]:25 mail postfix/postscreen[6471]: PREGREET 19 after 0 from [192.241.239.123]:48014: EHLO zg-0131a-136/r/n mail postfix/postscreen[6471]: DISCONNECT [192.241.239.123]:48014 Postscreen仍允许在停止连接之前完成其他测试。如果您希望在不进行其他测试的情况下立即断开连接,请使用以下设置。 postscreen_greet_action = drop 第3步:使用公共黑名单;白名单 postscreen_dnsbl_sites参数可用于根据公共黑名单(dnsbl)检查SMTP客户端的IP地址。如果SMTP客户端的IP地址在公共黑名单上,您可能已经在使用Postfix smtpd的reject_rbl_客户端来拒绝SMTP客户端。然而,这可能会导致误报,因为无辜的SMTP服务器的IP地址可能出于任何原因被列入黑名单,即使您使用permit_dnswl_client也可以检查公共白名单(dnswl)。 为了减少误报,Postscreen允许您检查多个黑名单,并为每个黑名单添加权重因子。例如,如果一个IP地址在Spamhaus黑名单上,加3分;如果一个IP地址在BarracudCentral黑名单上,加2分。如果综合分数足够高(由postscreen_dnsbl_阈值定义),则拒绝SMTP客户端。这个评分系统与斯帕马萨辛的评分系统相似。 在下面的配置中,我们将阈值设置为3点。Spamhaus有3磅重。梭鱼中心有2磅重。SpamCop的重量为1。如果综合得分等于或大于3,Postscreen将拒绝SMTP客户端。 postscreen_dnsbl_threshold = 3 postscreen_dnsbl_action = enforce postscreen_dnsbl_sites = zen.spamhaus.org*3 b.barracudacentral.org=127.0.0.[2..11]*2 bl.spameatingmonkey.net*2 bl.spamcop.net dnsbl.sorbs.net 我们还可以使用postscreen_dnsbl_站点根据公共白名单(DNSWL)检查SMTP客户端的IP地址。如果客户的IP地址在白名单上,则添加一个负数。 postscreen_dnsbl_sites = zen.spamhaus.org*3 b.barracudacentral.org=127.0.0.[2..11]*2 bl.spameatingmonkey.net*2 bl.spamcop.net dnsbl.sorbs.net swl.spamhaus.org*-4, list.dnswl.org=127.[0..255].[0..255].0*-2, list.dnswl.org=127.[0..255].[0..255].1*-4, list.dnswl.org=127.[0..255].[0..255].[2..3]*-6 如果您使用Postfix smtpd的reject_rbl_clientor permit_dnswl_client参数,那么现在应该删除它们,这样smtpd守护程序在Postscreen之后就不会再次执行IP检查。Postscreen不会检查基于域名的黑名单/白名单,因此我们应该继续使用reject_rhsbl在公共黑名单上执行域名查找。 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, ... ... reject_rhsbl_helo dbl.spamhaus.org, reject_rhsbl_reverse_client dbl.spamhaus.org, reject_rhsbl_sender dbl.spamhaus.org, 保存并关闭后缀主配置文件。然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix 注意:如果在邮件日志中看到以下消息,则表示SMTP客户端的IP地址不在白名单(list.dnswl.org)中。这不是一个错误。 warning: dnsblog_query: lookup error for DNS query 161.223.143.185.list.dnswl.org: Host or domain name not found. Name service error for name=161.223.143.185.list.dnswl.org type=A: Host not found, try again 如果它在白名单上,消息将如下所示: postfix/dnsblog[21188]: addr xx.xx.xx.xx listed by domain list.dnswl.org as 127.0.10.0 如果IP地址在列表中列为127.0.0.255。dnswl。org,就像下面的消息一样,这意味着您已经达到了查询限制。您应该运行自己的本地DNS解析程序。 postfix/dnsblog[11951]: addr 202.66.174.152 listed by domain list.dnswl.org as 127.0.0.255 还要注意的是,BarracudCentral封锁列表需要注册,这是免费的。创建帐户后,只需添加DNS解析程序的IP地址即可。 运行自己的本地DNS解析程序 请注意,在使用公共黑名单和白名单时,您应该在邮件服务器上设置本地DNS解析器,因为大多数黑名单和白名单都有查询限制。如果您使用8.8.8.8这样的公共DNS解析程序,您很可能会比您想象的更早达到查询限制。 一些死亡/关闭的DNSBL站点 你不应该使用死掉或关闭的DNSBL网站,否则你的邮件服务器会拒绝合法的电子邮件。 dnsbl。njabl。org:自2013年以来一直处于离线状态。 dnsbl。啊�。组织:公众对该名单的访问于2015年终止。 步骤4:启用深度协议测试 Postscreen中有3种常见的深度协议测试: SMTP流水线测试 非SMTP命令测试 裸换行测试 管道是SMTP协议的扩展。它允许SMTP客户端一次发送多个SMTP命令,而无需等待SMTP服务器的响应。Postfix默认支持流水线。要进行检查,请使用telnet连接到邮件服务器。 telnet mail.yourdomain.com 25 然后使用EHLO命令声明主机名。 EHLO mail.google.com 下面SMTP服务器的响应表明它支持流水线。 250-PIPELINING 250-SIZE 157286400 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN 然后退出连接。 quit 一些垃圾邮件发送者会使用命令管道一次性发出多个RCPT to:命令,以便在一个SMTP会话中向多个收件人发送垃圾邮件。如果SMTP服务器未宣布支持流水线,则SMTP客户端不应同时发出多个命令。 在/etc/postfix/main中添加以下两行。cf文件以启用管道测试并拒绝未通过此测试的SMTP客户端。 postscreen_pipelining_enable = yes postscreen_pipelining_action = enforce 顾名思义,非SMTP命令测试使Postscreen检测发送非SMTP命令的SMTP客户端。在/etc/postfix/main中添加以下两行。cf文件拒绝此类SMTP客户端。 postscreen_non_smtp_command_enable = yes postscreen_non_smtp_command_action = enforce 裸换行测试允许Postscreen检测以&lt;如果&gt;,而不是标准&lt;CR&gt&书信电报;LF&gt;。在/etc/postfix/main中添加以下两行。cf文件拒绝此类SMTP客户端。 postscreen_bare_newline_enable = yes postscreen_bare_newline_action = enforce 保存并关闭文件。然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix 深度协议测试的灰色列表效应 深度协议测试的局限性在于,无论测试是否通过,Postscreen都会断开新SMTP客户端的连接。Postscreen通过以下消息断开每个客户端的连接: 450 4.3.2 Service currently unavailable 客户端必须稍后从同一IP地址重试。这实际上是一种灰色列表,因此需要禁用其他形式的灰色列表。例如,如果您按照我之前的教程使用Postgrey作为灰色列表策略服务器,那么请在/etc/postfix/main中找到以下行。cf文件并注释掉。 check_policy_service inet:127.0.0.1:10023, 保存并关闭文件。然后重新启动Postfix。 sudo systemctl restart postfix 如何最大限度地减少糟糕的用户体验 Greylisting对最终用户来说相当烦人,因为用户需要再等几分钟才能收到电子邮件。为了尽量减少这种不好的体验,在使用Postscreen深度协议测试时,我可以想到三种方法。 创建指向同一IP地址的第二条MX记录。 如果SMTP客户端的IP地址在公共白名单上,请跳过深层协议测试。 使用Postwhite将已知的良好IP地址添加到Postscreen白名单中。 创建指向同一IP地址的第二条MX记录 您可以为您的域名指定多个MX记录,如下所示。 Record Type    Name      Mail Server         Priority MX @ mail.yourdomain.com 0 MX @ mail2.yourdomain.com 5 发件人将尝试第一个邮件服务器(优先级为0)。如果是邮件。你的地盘。com通过greylisting拒绝电子邮件,然后发件人会立即尝试第二个邮件服务器(优先级为5)。 Postscreen中的灰色列表没有Postgrey中的延迟时间。如果两个邮件服务器主机名具有相同的IP地址,那么当发件人尝试第二个邮件服务器主机名时,该电子邮件将立即被接受(如果所有其他检查都通过),最终用户将不会注意到由灰色列表引起的电子邮件延迟。 请注意,并非所有邮件服务器都会立即尝试第二台MX主机。一些邮件服务器,比如Gmail,会使用不同的IP地址重试,当然会再次被拒绝。默认情况下,Postfix将尝试第二台MX主机。我不知道进出口银行是否也是如此。如果您运行Exim SMTP服务器,请在下面发表评论。 如果SMTP客户端的IP地址在公共白名单上,则跳过深度协议测试 Gmail永远不会尝试从同一IP地址发送电子邮件。然而,Gmail的IP地址在名单上。dnswl。组织。我们可以告诉Postscreen忽略此类SMTP客户端。在/etc/postfix/main中添加以下行。cf文件忽略得分等于-2或以下的客户。 postscreen_dnsbl_whitelist_threshold = -2 重新启动Postfix以使更改生效。 sudo systemctl restart postfix 我邮件日志中的以下消息表明Postscreen没有执行深度协议测试,并通过了与smtpd守护进程的连接,因为Gmail的IP地址在公共白名单上。 Feb 10 10:31:14 mail postfix/postscreen[16579]: CONNECT from [209.85.166.44]:38543 to [23.254.225.226]:25 Feb 10 10:31:14 mail postfix/dnsblog[16582]: addr 209.85.166.44 listed by domain list.dnswl.org as 127.0.5.0 Feb 10 10:31:15 mail postfix/postscreen[16579]: PASS NEW [209.85.166.44]:38543 Feb 10 10:31:15 mail postfix/smtpd[16639]: connect from mail-io1-f44.google.com[209.85.166.44] 事实上,大多数主要的邮箱提供商(Gmail、Hotmail、Outlook、Yahoo Mail、GMX Mail、ProtonMail等)都被列入了白名单。dnswl。组织。它还包括其他行业的邮件服务器,如dnswl上所示。组织。 2–金融服务 3–电子邮件服务提供商 4-组织(包括营利[即公司]和非营利组织) 5–服务/网络提供商 6–个人/私人服务器 7–旅游/休闲行业 8–公共部门/政府 9-媒体和科技公司 10–一些特殊情况 11–教育、学术 12–医疗保健 13–制造业/工业 14–零售/批发/服务 15–电子邮件营销提供商 20–通过自助服务添加,无特定类别 因此,使用postscreen_dnsbl_whitelist_threshold将帮助您在大多数情况下跳过灰色列表。 使用Postwhite Postwhite是由Steve Jenkins编写的一个脚本,通过使用已知网络邮箱、社交网络、电子商务提供商和兼容批量发件人的已发布SPF记录,自动为Postscreen生成静态IP白名单。请注意,此白名单将使Postscreen跳过白名单IP地址的所有测试(预reet测试、公共黑名单/白名单检查、深度协议测试),因此它将有助于减少对公共黑名单/白名单的Postscreen和DNS请求的负载。 要使用Postwhite,请将第一张cd发送到/usr/local/bin/。 cd /usr/local/bin/ 安装git。 sudo apt install git 或 sudo dnf install git 克隆SPF工具和Postwhite Github存储库。 sudo git clone https://github.com/spf-tools/spf-tools.git sudo git clone 复制postwhite。将conf文件发送到/etc/。 sudo cp /usr/local/bin/postwhite/postwhite.conf /etc/ 运行Postwhite。 sudo /usr/local/bin/postwhite/postwhite 白名单将另存为/etc/postfix/postscreenu spfu白名单。苹果酒。编辑后缀主配置文件。 sudo nano /etc/postfix/main.cf 找到下面这行。 postscreen_access_list = permit_mynetworks cidr:/etc/postfix/postscreen_access.cidr 添加新的白名单文件。 postscreen_access_list = permit_mynetworks cidr:/etc/postfix/postscreen_access.cidr cidr:/etc/postfix/postscreen_spf_whitelist.cidr 保存并关闭文件。然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix 编辑根用户的crontab文件。 sudo crontab -e 在末尾添加以下两行以定期更新白名单。 @daily /usr/local/bin/postwhite/postwhite > /dev/null 2>&1 #Update Postscreen Whitelists @weekly /usr/local/bin/postwhite/scrape_yahoo > /dev/null 2>&1 #Update Yahoo! IPs for Postscreen Whitelists 保存并关闭文件。现在,如果你从Gmail向你自己的域电子邮件地址发送电子邮件,并查看邮件日志,你会发现Postscreen不会执行任何测试,因为IP地址是白名单。 Feb 10 13:04:17 mail postfix/postscreen[24895]: CONNECT from [209.85.166.44]:38257 to [23.254.225.226]:25 Feb 10 13:04:17 mail postfix/postscreen[24895]: WHITELISTED [209.85.166.44]:38257 Feb 10 13:04:17 mail postfix/smtpd[26596]: connect from mail-io1-f44.google.com[209.85.166.44] 我在/etc/postfix/main中的Postscreen配置。cf文件 第5步:分析后缀日志 Pflogsumm是创建后缀日志摘要的好工具。在Ubuntu上安装时使用: sudo apt install pflogsumm 在CentOS/RHEL上,pflogsumm由postfix perl脚本包提供。 sudo dnf install postfix-perl-scripts 使用以下命令生成今天的报告。(请注意,在CentOS/RHEL上,邮件日志文件是/var/log/maillog。) sudo pflogsumm -d today /var/log/mail.log 生成昨天的报告。 sudo pflogsumm -d yesterday /var/log/mail.log 如果你想生成本周的报告。 sudo pflogsumm /var/log/mail.log 要在“正常”统计数据之前发出“问题”报告(反弹、延迟、警告、拒绝),请使用--problems first标志。 sudo pflogsumm -d today /var/log/mail.log --problems-first 要将电子邮件发件人地址附加到拒绝报告中的每个列表,请使用--rej add from标志。 sudo pflogsumm -d today /var/log/mail.log --rej-add-from 要在拒绝摘要中显示完整原因,请使用--verbose msg detail标志。 sudo pflogsumm -d today /var/log/mail.log --rej-add-from --verbose-msg-detail 您可以添加一个cron作业,使pflogsumm每天向您的电子邮件地址发送报告。 sudo crontab -e 添加以下行,它将在每天早上4:00生成报告。 0 4 * * * /usr/sbin/pflogsumm -d yesterday /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q 要通过电子邮件接收报告,请在所有cron作业上方添加以下行。 MAILTO="[email protected]" 你应该注意邮件拒绝细节部分,在那里你可以看到这些邮件被拒绝的原因,以及是否有任何误报。灰色列表拒绝是可以安全忽略的。以下屏幕截图表明SMTP客户端未通过Postscreen深层协议测试。 如果已经设置了MAILTO变量,但希望将后缀日志摘要发送到其他电子邮件地址,则可以在Cron作业中添加以下行。 0 4 * * * /usr/sbin/pflogsumm -d yesterday /var/log/mail.log --problems-first --rej-add-from --verbose-msg-detail -q | mutt -s "Postfix log summary"  [email protected] pflogsumm命令的输出被重定向到mutt,这是一个命令行邮件用户代理,它将使用输出作为电子邮件正文,并将其发送到最后指定的电子邮件地址。您需要在Linux服务器上安装mutt。 sudo apt install mutt 或 sudo dnf install mutt CentOS/RHEL上的后缀反向DNS查找错误 如果您的Postfix SMTP服务器在CentOS/RHEL上运行,则在启用Postscreen后,它可能无法执行反向DNS查找。在这种情况下,具有PTR记录的IP地址仍将在后缀日志(/var/log/maillog)中标识为未知。 postfix/smtpd[14734]: connect from unknown[23.254.225.226] 为了解决这个问题,我们需要在chroot环境中复制反向DNS查找所需的库。 sudo mkdir /var/spool/postfix/lib64 sudo cp -vl /usr/lib64/libnss_* /var/spool/postfix/lib64 然后重新启动Postfix。 sudo systemctl restart postfix 收尾 我希望本教程能帮助您使用Postscreen阻止垃圾邮件。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.24 浏览:51
  • 在Ubuntu上构建自己的电子邮件服务器:基本Postfix设置

    为什么要运行自己的电子邮件服务器?也许你有一个需要向用户发送电子邮件的网站,或者你想将电子邮件存储在自己的服务器上以保护隐私。然而,构建自己的电子邮件服务器可能会让人头疼,因为有太多软件组件需要正确安装和配置。为了让你的旅程更轻松,我正在创建一个关于如何在Ubuntu上构建自己的电子邮件服务器的教程系列。 我有信心地说,这是关于在互联网上从头开始构建电子邮件服务器的最好、最全面的教程系列。你不仅会有一个工作的电子邮件服务器,而且你会更好地了解电子邮件的工作原理。本系列教程分为13个部分。 设置基本的Postfix SMTP服务器 设置Dovecot IMAP服务器和TLS加密 使用PostfixAdmin创建虚拟邮箱(Ubuntu 18.04、Ubuntu 20.04) 创建SPF和DKIM记录以通过垃圾邮件过滤器 设置DMARC以保护您的域声誉 7个有效的建议,防止你的电子邮件被标记为垃圾邮件 在Ubuntu上安装Roundcube Webmail(Ubuntu 18.04、Ubuntu 20.04) 如何在PostfixAdmin中托管多个邮件域 用后缀阻止垃圾邮件 用SpamAssassin阻止垃圾邮件 在Ubuntu邮件服务器上设置Amavis和ClamAV 如何使用自托管VPN服务器保护电子邮件服务器免受黑客攻击 (可选)在Postfix中启用并配置Postscreen以阻止垃圾邮件 我知道这似乎是一项非常艰巨的任务。然而,基于你想要实现的目标,你可能不需要遵循所有这些目标。我的文章很容易阅读,所以如果你花些时间来阅读,你就会有一个工作的电子邮件服务器。 提示:如果你不想从头开始构建一个电子邮件服务器,这是一个漫长而乏味的过程,那么你可以使用iRedMail快速轻松地建立一个功能齐全的邮件服务器。 本文是本系列教程的第1部分。在本文中,我将向您展示如何设置一个非常基本的Postfix SMTP服务器,也称为MTA(邮件传输代理)。完成本文后,您应该能够在自己的电子邮件服务器上使用自己的电子邮件域发送和接收电子邮件。本教程在Ubuntu20.04和Ubuntu18.04服务器上进行测试。 关于后缀 Postfix是最先进的邮件传输代理(MTA),又名SMTP服务器,它有两个用途。 它负责将电子邮件从邮件客户端/邮件用户代理(MUA)传输到远程SMTP服务器。 它还用于接收来自其他SMTP服务器的电子邮件。 Postfix由Unix和安全专家Wietse Venema构建。它易于使用,设计时考虑了安全性和模块化,每个模块都以完成任务所需的最低权限级别运行。Postfix与Unix/Linux紧密集成,不提供Unix/Linux已经提供的功能。它在简单和压力条件下都是可靠的。 Postfix最初是作为Sendmail的替代品设计的,Sendmail是Unix上的传统SMTP服务器。相比之下,Postfix更安全,更容易配置。它与Sendmail兼容,因此如果卸载Sendmail并用Postfix替换它,现有脚本和程序将继续无缝工作。 在本教程中,您将学习如何为单个域配置后缀。 选择合适的主机提供商 要找到一个适合电子邮件托管的VPS(虚拟专用服务器)提供商并非易事。许多托管公司,如DigitalOcean blocks port 25。DigitalOcean不会解锁端口25,因此您需要设置SMTP中继以绕过阻止,这可能会增加您的费用。如果您使用Vultr VPS,则默认情况下端口25被阻止。如果您打开支持票证,他们可以解除阻止,但如果他们决定不允许您的电子邮件发送活动,他们可能会在任何时候再次阻止。如果你使用他们的服务器发送时事通讯,Vultr实际上可能会重新阻止它。 另一个问题是,像DigitalOcean或Vultr这样的大型知名主机提供商被垃圾邮件发送者滥用。通常,服务器IP地址在几个黑名单上。Vultr有一些完整的IP范围被列入黑名单。 Kamatera VPS是运行邮件服务器的一个非常好的选择,因为 他们不封锁25号端口。 IP地址不在任何电子邮件黑名单上。(至少对我来说是这样。我选择了达拉斯数据中心。)你肯定不想被列入可怕的微软Outlook IP黑名单或SpamRats黑名单。有些黑名单会屏蔽整个IP范围,你无法从此类黑名单中删除你的IP地址。 您可以编辑PTR记录以提高电子邮件的可交付性。 它们允许你向你的电子邮件订阅者发送时事通讯,而不受每小时或每天的限制。请注意,您不允许发送垃圾邮件,也称为未经请求的批量电子邮件。如果收件人没有明确允许你发送电子邮件,而你向他们发送电子邮件,那就是未经请求的电子邮件。 您可以为一台服务器订购多个IP地址。这对需要发送大量电子邮件的人非常有用。您可以在多个IP地址上传播电子邮件流量,以实现更好的电子邮件交付。 我建议遵循下面链接的教程,在Kamatera上正确设置Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 你还需要一个域名。我从NameCheap注册了我的域名,因为价格很低,他们给你一辈子免费的隐私保护。 安装Postfix之前要做的事情 为了让Postfix更好地运行并充分利用Postfix,你需要正确设置你的Ubuntu服务器。 为Ubuntu服务器设置正确的主机名 默认情况下,Postfix在与其他MTA通信时使用服务器的主机名来标识自身。主机名可以有两种形式:单个单词和FQDN。 单字形式主要用于个人电脑。您的Linux家用计算机可能被命名为Linux、debian、ubuntu等。FQDN(完全限定域名)通常用于面向Internet的服务器,我们应该在邮件服务器上使用FQDN。它由两部分组成:节点名和域名。例如: mail.linuxbabe.com 是一个FQDN。邮件是最重要的,linuxbabe。com是域名。FQDN将出现在smtpd横幅中。如果您的Postfix未在smtpd横幅中提供FQDN,则某些MTA会拒绝邮件。一些MTA甚至会查询DNS,查看smtpd横幅中的FQDN是否解析为邮件服务器的IP。 输入以下命令以查看主机名的FQDN格式。 hostname -f 如果你的Ubuntu服务器还没有FQDN,你可以使用hostnamectl设置一个。 sudo hostnamectl set-hostname your-fqdn 邮件服务器的常见FQDN是mail。你的地盘。通用域名格式。您需要注销并重新登录,才能在命令提示下看到此更改。 为邮件服务器设置DNS记录 你需要去你的DNS托管服务(通常是你的域名注册商,比如NameCheap)设置DNS记录 邮件交换记录 MX记录告诉其他MTA您的邮件服务器正在发送邮件。你的地盘。com负责为您的域名发送电子邮件。 MX record @ mail.linuxbabe.com MX主机的通用名称是mail。你的地盘。通用域名格式。您可以指定多个MX记录,并为邮件服务器设置优先级。数字越小,优先级越高。这里我们只使用一条MX记录,并将0设置为优先级值。(0 – 65535) 请注意,当您创建MX记录时,您应该在名称字段中输入@或您的apex域名,如下所示。apex域名是没有任何子域的域名。 记录 A记录将FQDN映射到IP地址。 mail.linuxbabe.com <IP-address> AAAA记录 如果您的服务器使用IPv6地址,那么最好为邮件添加AAAA记录。你的地盘。通用域名格式。 mail.linuxbabe.com <IPv6-address> 提示:如果使用Cloudflare DNS服务,则在为邮件创建和AAAA记录时不应启用CDN(代理)功能。你的领域。通用域名格式。Cloudflare不支持SMTP或IMAP代理。 PTR记录 指针记录或PTR记录将IP地址映射到FQDN。它是A记录的对应项,用于反向DNS(RDN)查找。 使用PTR记录反向解析IP地址有助于阻止垃圾邮件发送者。许多MTA只有在服务器真正负责某个域时才接受电子邮件。你绝对应该为你的邮件服务器设置一个PTR记录,这样你的邮件就有更好的机会进入收件人的收件箱而不是垃圾邮件文件夹。 要检查PTR记录中的IP地址,可以使用以下命令。 dig -x <IP> +short 或 host <IP> PTR记录不由您的域注册器管理。它由提供IP地址的组织管理。你的IP地址是从你的主机提供商那里获得的,而不是从你的域名注册商那里获得的,所以你必须在主机提供商的控制面板中为你的IP地址设置PTR记录。它的值应该是邮件服务器的主机名:mail。你的领域。通用域名格式。如果您的服务器使用IPv6地址,那么也为您的IPv6地址添加一个PTR记录。 要编辑Kamatera VP的反向DNS记录,请登录Kamatera客户端区域,然后打开支持票证,告诉他们为服务器IP地址添加PTR记录,以将IP地址指向邮件。你的领域。通用域名格式。你可能会想,这并不方便,但这是为了让垃圾邮件发送者远离平台,因此像我们这样的合法电子邮件发送者将拥有良好的IP声誉。 注意:Gmail实际上会检查PTR记录中指定的主机名的A记录。如果主机名解析为相同的IP地址,Gmail将接受您的电子邮件。否则,它将拒绝您的电子邮件。 完成以上所有操作后,让我们玩Postfix。 安装后缀 在ubuntu服务器上,运行以下两个命令。 sudo apt-get update sudo apt-get install postfix -y 系统将要求您为邮件配置选择一种类型。通常,您需要选择第二种类型:Internet站点。 无配置意味着安装过程不会配置任何参数。 互联网站点意味着使用Postfix向其他MTA发送电子邮件,并从其他MTA接收电子邮件。 使用智能主机上网意味着使用postfix接收来自其他MTA的电子邮件,但使用另一个智能主机将电子邮件转发给收件人。 卫星系统意味着使用智能主机发送和接收电子邮件。 仅本地意味着电子邮件仅在本地用户帐户之间传输。 接下来,输入系统邮件名称的域名,即@symbol后面的域名。例如,我的电子邮件地址是[email&#160;protected],所以我输入了linuxbabe。com的系统邮件名称。此域名将附加到未指定域名的地址。请注意,如果您输入一个子域,如mail。你的领域。com,您将能够接收发送给@mail的电子邮件。你的领域。com地址,但无法接收发往@your domain的电子邮件。com地址。 安装后,Postfix将自动启动,并显示/etc/Postfix/main。将生成cf文件。现在我们可以使用以下命令检查后缀版本: postconf mail_version 在Ubuntu18.04上,后缀版本是3.3.0,Ubuntu20.04附带3.4.10版本。 mail_version = 3.4.10 ss(Socket Statistics)实用程序告诉我们Postfix主进程正在侦听TCP端口25。 sudo ss -lnpt | grep master Postfix在/usr/sbin/目录下附带许多二进制文件,如下命令所示。 dpkg -L postfix | grep /usr/sbin/ 输出: /usr/sbin/postalias /usr/sbin/postcat /usr/sbin/postconf /usr/sbin/postdrop /usr/sbin/postfix /usr/sbin/postfix-add-filter /usr/sbin/postfix-add-policy /usr/sbin/postkick /usr/sbin/postlock /usr/sbin/postlog /usr/sbin/postmap /usr/sbin/postmulti /usr/sbin/postqueue /usr/sbin/postsuper /usr/sbin/posttls-finger /usr/sbin/qmqp-sink /usr/sbin/qmqp-source /usr/sbin/qshape /usr/sbin/rmail /usr/sbin/sendmail /usr/sbin/smtp-sink /usr/sbin/smtp-source 在防火墙中打开TCP端口25(入站) 入站TCP端口25需要打开,以便Postfix可以接收来自其他SMTP服务器的电子邮件。Ubuntu默认情况下不启用防火墙。如果已启用UFW防火墙,则需要使用以下命令打开端口25(入站)。 sudo ufw allow 25/tcp 然后我们可以用在线端口扫描仪扫描邮件服务器上打开的端口。输入邮件服务器的公共IP地址,然后选择扫描所有公共端口。 从上面的屏幕截图可以看到,TCP端口25在我的邮件服务器上是打开的。 检查TCP端口25(出站)是否被阻止 出站TCP端口25需要打开,以便Postfix可以向其他SMTP服务器发送电子邮件。出站TCP端口25由主机提供商控制,我们可以安装telnet实用程序来检查它是否打开或被阻止。 sudo apt install telnet 在邮件服务器上运行以下命令。 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/主机提供商为您打开出站端口25。如果他们拒绝您的请求,您需要设置SMTP中继以绕过端口25阻塞,或者使用像Kamatera这样不阻塞端口25的VPS。 有些人可能会问,“我能把端口25换成另一个端口来绕过阻塞吗?”?答案是否定的。只有在同时控制服务器端和客户端时,更改端口才有效。当Postfix发送电子邮件时,它充当SMTP客户端。收件人的邮件服务器充当SMTP服务器。您无法控制接收SMTP服务器。SMTP服务器正在监听端口25以接收电子邮件。他们预计SMTP客户端将到达端口25。没有其他接收电子邮件的端口。如果您的后缀未连接到接收SMTP服务器的端口25,您将无法发送电子邮件。 发送测试电子邮件 事实上,我们现在可以通过命令行发送和接收电子邮件。如果你的Ubuntu服务器有一个名为user1的用户帐户,那么这个用户的电子邮件地址是[email&#160;protected]。您可以向root用户发送电子邮件[email&#160;protected]。你也可以向Gmail、yahoo mail或任何其他电子邮件服务发送电子邮件。 安装Postfix时,sendmail二进制文件被放置在/usr/sbin/sendmail,它与传统的sendmail SMTP服务器兼容。您可以使用Postfix的sendmail二进制文件向您的Gmail帐户发送测试电子邮件,如下所示: echo "test email" | sendmail [email protected] 在这个简单的命令中,sendmail从标准输入读取一条消息,并将“test email”作为消息正文,然后将此消息发送到您的Gmail帐户。你应该能够在你的Gmail收件箱(或垃圾邮件文件夹)中收到这封测试邮件。您可以看到,虽然我们没有指定发件人地址,但Postfix会自动为发件人地址附加一个域名。这是因为我们在安装Postfix时在系统邮件名中添加了我们的域名。 注意:From:域名由Postfix中的myorigin参数决定,而不是myhostname参数。 你可以试着回复这封测试邮件,看看Postfix是否能收到邮件。从您的域发送的电子邮件很可能被标记为垃圾邮件。现在别担心。我们将在本系列教程的后面部分解决这个问题。 每个用户的收件箱位于/var/spool/mail/&lt;用户名&gt;或/var/mail/&lt;用户名&gt;文件如果不确定在哪里查找收件箱,请使用此命令。 postconf mail_spool_directory 后缀邮件日志存储在/var/log/mail中。日志 还是不能发邮件? 如果端口25(出站)未被阻止,但您仍然无法从自己的邮件服务器向Gmail等其他电子邮件地址发送电子邮件,那么您应该使用命令行文本编辑器(如Nano)打开邮件日志(/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记录。(PTR记录由提供IP地址的组织管理。) 要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要退出,请按Ctrl+X。 使用邮件程序发送和阅读电子邮件 现在,让我们安装一个命令行MUA(邮件用户代理)。 sudo apt-get install mailutils 要发送电子邮件,请键入 mail -a FROM:your-account@yourdomain.com [email protected] [email protected]:~$ mail -a FROM:[email protected] [email protected] Cc: Subject: 2nd test email I'm sending this email using the mail program. 输入主题行和正文。要告诉mail您已经写完,请按Ctrl+D,mail将为您发送此电子邮件。 要阅读收到的电子邮件,只需键入mail。 mail 下面是如何使用邮件程序来管理邮箱。 要阅读第一封电子邮件,请键入1。如果只显示消息的一部分,请按Enter键以显示消息的其余部分。 要显示从消息1开始的消息标题,请键入h。 要显示最后一屏消息,请键入h$或z。 要阅读下一封电子邮件,请键入n。 要删除邮件1,请键入d 1。 要删除消息1、2和3,请键入d 1 2 3。 要删除从1到10的邮件,请键入d 1-10。 要重播消息1,请键入reply 1。 要退出邮件,请键入q。 已打开的邮件将从/var/mail/&lt;用户名&gt;to/home/&lt;用户名&gt/mbox文件。这意味着其他邮件客户端无法读取这些邮件。为了防止这种情况发生,请键入x而不是q退出邮件。 如何增加附件大小限制 默认情况下,附件的大小不能超过10MB,这由message_size_limit参数指示。 postconf | grep message_size_limit 输出: message_size_limit = 10240000 此参数定义了来自您自己的邮件服务器的电子邮件和到达您的邮件服务器的电子邮件的大小限制。 要允许连接50MB大小,请运行以下命令。 sudo postconf -e message_size_limit=52428800 当使用-e(编辑)选项调用postconf命令时,它将尝试在Postfix主配置文件(/etc/Postfix/main.cf)中查找参数(message_size_limit)并更改值。如果找不到该参数,则会在文件末尾添加该参数。 请注意,邮件大小限制不应大于邮箱大小限制,否则Postfix可能无法接收电子邮件。在上游后缀包中,邮箱大小限制的默认值为51200000字节(约48MB)。在Ubuntu上,默认值设置为0,这一点可以从 postconf | grep mailbox_size_limit 输出: mailbox_size_limit = 0 这意味着邮箱没有大小限制,这很好。 重新启动Postfix以使更改生效。 sudo systemctl restart postfix 从邮件服务器发送带有大附件的电子邮件时,还应注意接收服务器的附件大小限制。例如,您不能向Gmail地址发送大于25MB的附件。 设置后缀主机名 默认情况下,Postfix SMTP服务器使用操作系统的主机名。但是,操作系统的主机名可能会发生变化,因此直接在Postfix配置文件中设置主机名是一种好的做法。使用命令行文本编辑器(如Nano)打开Postfix主配置文件。 sudo nano /etc/postfix/main.cf 找到myhostname参数并设置邮件。你的地盘。com作为价值。不建议使用apex域yourdomain。com作为我的主机名。从技术上讲,您可以使用apex域,但在本教程系列的后续部分中,它会产生问题。 myhostname = mail.yourdomain.com 保存并关闭文件。(要在Nano文本编辑器中保存文件,请按Ctrl+O,然后按Enter确认。要退出,请按Ctrl+X。)重新启动Postfix以使更改生效。 sudo systemctl restart postfix 创建电子邮件别名 在生产环境中操作邮件服务器时,需要配置某些别名。您可以在/etc/alias文件中添加电子邮件别名,该文件是一个特殊的后缀查找表文件,使用Sendmail兼容的格式。 sudo nano /etc/aliases 默认情况下,该文件中只有两行。 # See man 5 aliases for format postmaster: root 第一行是评论。第二行是该文件中别名的唯一定义。左边是别名。右侧是电子邮件的最终目的地。因此,[email&#160;protected]的电子邮件将被发送到[email&#160;protected]。RFC 2142要求提供邮政局长的电子邮件地址。 通常我们不使用根电子邮件地址。相反,邮政局长可以使用普通的登录名来访问电子邮件。因此,您可以添加以下行。用真实用户名替换用户名。 root: username 这样,[email&#160;protected]的电子邮件将被发送到[email&#160;protected]。现在您可以保存并关闭该文件。然后使用newalias命令重建别名数据库 sudo newaliases 仅使用IPv4 默认情况下,Postfix同时使用IPv4和IPv6协议,如下所示: postconf inet_protocols 输出: inet_protocols = all 如果邮件服务器没有公共IPv6地址,最好在Postfix中禁用IPv6,以防止不必要的IPv6连接。只需运行以下命令即可在Postfix中禁用IPv6。 sudo postconf -e "inet_protocols = ipv4" 然后重新启动Postfix。 sudo systemctl restart postfix 升级后缀 如果运行sudo-apt-update,然后运行sudo-apt-upgrade,系统将升级Postfix,可能会提示您再次选择Postfix的配置类型。这一次,您应该选择“无配置”以保持当前配置文件不变。 下一步 恭喜!现在你有了一个基本的Postfix电子邮件服务器并开始运行。您可以使用命令行发送纯文本电子邮件和阅读收到的电子邮件。在本系列教程的下一部分中,我们将学习如何安装Dovecot IMAP服务器并启用TLS加密,这将允许我们使用Mozilla Thunderbird等桌面邮件客户端发送和接收电子邮件。 第2部分:在Ubuntu上安装Dovecot IMAP服务器;启用TLS加密 和往常一样,如果你觉得这篇文章有用,订阅我们的时事通讯,获取更多提示和窍门。当心?

    2022.03.23 浏览:64
  • 在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服务器&amp;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。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.23 浏览:107
  • 使用BIND9在Debian 10 Buster上设置自己的DNS解析器

    本教程将向您展示如何使用广泛使用的BIND9 DNS软件在Debian 10 Buster上设置本地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解析器查询域名以获得IP地址。运行自己的本地DNS解析器可以加快DNS查找,因为 本地DNS解析程序只侦听您的DNS请求,不响应其他人的DNS请求,因此您直接从解析程序上的缓存获得DNS响应的可能性要高得多。 您的计算机和DNS解析器之间的网络延迟被消除(几乎为零),因此DNS查询可以更快地发送到根DNS服务器。 如果您运行邮件服务器并使用DNS黑名单(DNSBL)阻止垃圾邮件,则建议您运行本地DNS解析程序以加快DNS查找。如果您在VPS(虚拟专用服务器)上运行自己的VPN服务器,那么在同一个VPS上安装DNS解析器也是一个很好的做法。 如果你不喜欢你的互联网浏览历史记录存储在第三方服务器上,你可能还想运行自己的DNS解析器。 如果您拥有一个网站,并且希望您自己的DNS服务器处理您的域名的名称解析,而不是使用您的域注册商的DNS服务器,那么您需要设置一个权威DNS服务器,它不同于DNS解析程序。BIND可以同时充当权威DNS服务器和DNS解析程序,但最好在不同的框中分离这两个角色。本教程介绍如何设置本地DNS解析器,因为它将在本地主机/本地网络上使用,所以不需要加密(通过TLS的DNS或通过HTTPS的DNS)。设置DoT或DoH服务器将在以后的文章中讨论。 请注意,在Debian上安装软件时,您需要拥有root权限。可以在命令开头添加sudo,或者使用su-command切换到root用户。 在Debian 10 Buster上安装BIND9 BIND(Berkeley Internet Name Domain)是一款开源DNS服务器软件,由于其稳定性和高质量,在Unix/Linux上得到了广泛应用。它最初由加州大学伯克利分校(UC Berkeley)开发,后来在1994年被转移到互联网系统联盟(Internet Systems Consortium,Inc.)进行开发。 运行以下命令,从默认存储库在Debian 10 Buster上安装BIND 9。BIND 9是当前版本,BIND 10是一个死项目。 sudo apt update sudo apt install bind9 bind9utils bind9-doc bind9-host dnsutils 检查版本信息。 sudo named -v 样本输出: BIND 9.11.5-P4-5.1-Debian (Extended Support Version) <id:998753c> 要检查版本号和生成选项,请运行 sudo named -V 默认情况下,绑定在安装后自动启动。您可以通过以下方式检查其状态: systemctl status bind9 提示:如果上述命令没有立即退出,请按Q。 如果它没有运行,那么从以下内容开始: sudo systemctl start bind9 并在启动时启用自动启动: sudo systemctl enable bind9 BIND服务器将以BIND用户的身份运行,该用户是在安装过程中创建的,并在TCP和UDP端口53上侦听,如运行以下命令所示: sudo netstat -lnptu | grep named 通常DNS查询被发送到UDP端口53。TCP端口53用于大小大于512字节的响应。 绑定守护进程被称为named。(守护进程是在后台运行的软件。)命名的二进制文件由bind9包安装,还有另一个重要的二进制文件:rndc,远程名称守护程序控制器,由bind9utils包安装。rndc二进制文件用于重新加载/停止和控制绑定守护进程的其他方面。通信通过TCP端口953完成。 例如,我们可以检查绑定名称服务器的状态。 sudo rndc status 本地DNS解析程序的配置 /etc/bind/是包含bind配置的目录。 命名的。conf:主配置文件,包括其他三个文件的配置。 db。127:本地主机IPv4反向映射区域文件。 db。本地:本地主机转发IPv4和IPv6映射区域文件。 db。空:一个空的区域文件 Debian 10上的bind9软件包没有附带db。根文件,它现在使用位于/usr/share/dns/root的根提示文件。提示。DNS解析程序使用根提示文件来查询根DNS服务器。有13组根DNS服务器,来自a.root-servers。net到m.root服务器。网 Debian上的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.conf.options 在options子句中,添加以下行。将allow recursion语句中的IP地址替换为您自己的本地网络地址。 // hide version number from clients for security reasons. version "not currently available"; // optional - BIND default behavior is recursion recursion yes; // provide recursion service to trusted clients only allow-recursion { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; }; // enable the query log querylog yes; 保存并关闭文件。然后测试配置文件语法。 sudo named-checkconf 如果测试成功(由静默输出指示),则重新启动BIND9。 sudo systemctl restart bind9 如果绑定服务器上运行防火墙,则需要打开端口53,以允许LAN客户端发送DNS查询。如果使用UFW防火墙,可以运行以下命令。 sudo ufw allow in from 192.168.0.0/24 to any port 53 这将打开专用网络192.168.0.0/24的TCP和UDP端口53。然后从同一局域网内的另一台计算机上,我们可以运行以下命令来查询google的A记录。通用域名格式。用绑定解析程序的IP地址替换192.168.0.102。 dig A google.com @192.168.0.102 现在,在绑定解析器上,使用以下命令检查查询日志。 sudo journalctl -eu bind9 这将显示bind9服务单元的最新日志消息。我可以在日志中找到以下行,这表明谷歌的DNS查询。com的A记录已从IP地址为192.168.0.103的端口57806收到。 named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.102) 在Debian 10 Buster服务器上设置默认DNS解析程序 在绑定服务器上,我们需要将127.0.0.1设置为默认DNS解析程序。您可以使用以下命令检查Debian 10上的当前DNS解析器。 cat /etc/resolv.conf 样本输出: # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN nameserver 2001:19f0:300:1704::6 nameserver 108.61.10.10 Debian 10上的bind9软件包附带一个Systemd服务单元bind9 resolvconf。服务,这将帮助我们在Debian服务器上将BIND设置为默认DNS解析程序。默认情况下,这个服务是禁用的,我们需要启动它并在启动时启用自动启动。 sudo systemctl start bind9-resolvconf sudo systemctl enable bind9-resolvconf 现在可以检查/etc/resolv的内容。又来了。如您所见,127.0.0.1(BIND)现在是Debian 10 Buster上的默认DNS解析程序。 如果DNS解析程序不是127.0.0.1,则可能是系统没有resolvconf二进制文件,这会导致bind9 resolvconf服务失败。您需要安装resolvconf包并重新启动服务。 sudo apt install resolvconf sudo systemctl restart bind9-resolvconf 在客户端计算机上设置默认DNS解析程序 现在,您可以在局域网上配置其他计算机,将绑定服务器用作DNS解析程序。对于Windows和MacOS计算机,您可以在谷歌上搜索以了解如何设置默认DNS解析程序。在这里,我将向您展示如何在Linux桌面计算机上设置DNS解析器。以下方法适用于任何使用NetworkManager的Linux发行版。 单击Linux桌面上的Network Manager图标以查找编辑连接。(在某些Linux发行版上,需要右键单击网络管理器。) 然后选择当前连接并单击cog图标以编辑此连接。 选择IPv4设置选项卡,将方法从自动(DHCP)更改为仅自动(DHCP)地址,这将阻止Ubuntu系统从路由器获取DNS服务器地址。然后指定一个DNS服务器。在这里,我在局域网中输入绑定服务器的IP地址。 保存更改。然后重新启动NetworkManager,使更改生效。 sudo systemctl restart NetworkManager 重新连接后,再次单击网络管理器图标并选择连接信息。您可以看到您的Linux桌面计算机现在正在使用绑定DNS服务器。 如何在绑定中禁用IPv6 如果您的网络中没有使用IPv6,那么最好在BIND中关闭IPv6,否则,BIND日志中会出现很多关于IPv6的错误,如下所示。 network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53 network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53 要在Ubuntu上的BIND中禁用IPv6,只需打开/etc/default/bind9文件 sudo nano /etc/default/bind9 在选项中添加-4。 OPTIONS="-u bind -4" 保存并关闭文件。然后重启BIND,就完成了。 sudo systemctl restart bind9 绑定服务失败 如果绑定解析程序无法回答DNS查询(SERVFAIL),并且在绑定日志中看到以下行。 dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out 这可能是因为您的服务器没有可用的IPv6连接。这发生在我的一台服务器上。我以为IPv6连接正常工作,但由于我不知道的原因,它突然中断了。一旦我在BIND中禁用了IPv6,DNS解析将再次工作。 绑定自动重启 如果由于任何原因导致绑定进程被终止,则需要运行以下命令来重新启动它。 sudo systemctl restart bind9 我们不需要手动输入这个命令,而是可以通过编辑指定的。服务系统服务单位。为了覆盖默认的systemd服务配置,我们创建了一个单独的目录。 sudo mkdir -p /etc/systemd/system/bind9.service.d/ 然后在这个目录下创建一个文件。 sudo nano /etc/systemd/system/bind9.service.d/restart.conf 在文件中添加以下行,这将使Bind在检测到故障5秒后自动重新启动。 [Service] Restart=always RestartSec=5s 保存并关闭文件。然后重新加载系统D。 sudo systemctl daemon-reload 要检查这是否有效,请使用以下方法杀死Bind: sudo pkill named 然后检查绑定状态。你会发现Bind自动重启。 systemctl status bind9 绑定最大缓存大小 BIND可以在服务器上缓存DNS结果,以加快客户端的DNS查找。BIND假设您正在运行一个专用的DNS解析程序,即没有其他web服务在同一台主机上运行,因此默认缓存大小(由最大缓存大小定义)设置为总RAM的90%,以实现最佳性能。绑定开始时,可以在绑定日志(sudo journalctl-eu bind9)中看到下面这样的一行。 none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB) 请注意,BIND不会立即使用90%的RAM。如果只有几个DNS请求,BIND只使用少量RAM,因为缓存的DNS结果不多。如果有大量DNS请求,那么它将使用大量RAM来存储DNS缓存。 如果RAM有限,您可能不希望BIND将90%的RAM用于缓存。编辑绑定配置文件/etc/BIND/named。形态选项。 sudo nano /etc/bind/named.conf.options 在options子句中添加以下指令。将50%更改为您的首选值。 max-cache-size 50%; 重新启动BIND以使更改生效。 sudo systemctl restart bind9 结论 我希望本教程能帮助您使用BIND9在Debian 10 Buster上设置本地DNS解析器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.23 浏览:48
  • 在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。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门?

    2022.03.23 浏览:69
  • 使用Let's Encrypt在Ubuntu 18.04/16.04上设置OpenConnect VPN服务器(ocserv)

    本教程将向您展示如何在Ubuntu 16.04/18.04上安装OpenConnect VPN服务器。OpenConnect VPN服务器,又名ocserv,是Cisco AnyConnnect VPN协议的开源实现,该协议在企业和大学中很受欢迎。AnyConnect是一种基于SSL的VPN协议,允许单个用户连接到远程网络。 OpenConnect VPN服务器的功能: 轻便快速。在我的测试中,我可以用OpenConnect VPN观看4k的YouTube。YouTube在我的国家被屏蔽了。 与Cisco AnyConnect客户端兼容 支持密码身份验证和证书身份验证 易于设置 我特别喜欢这样一个事实:与其他VPN技术相比,最终用户使用OpenConnect VPN非常简单方便。每当我在我的计算机上安装基于Debian的Linux发行版,并想快速解锁网站或隐藏我的IP地址时,我都会安装OpenConnect客户端,并通过两行命令连接到服务器: sudo apt install openconnect sudo openconnect -b vpn.mydomain.com gnutls bin软件包提供了创建您自己的CA和服务器证书的工具,但我们将获取并安装Let's Encrypt certificate。使用Let’s Encrypt证书的优点是,它是免费的,更容易设置,并且受VPN客户端软件的信任。 要求 要学习本教程,您需要一个VPS(虚拟专用服务器),可以自由访问被屏蔽的网站(在您的国家或互联网过滤系统之外)。我推荐Kamatera VPS,其特点是: 30天免费试用。 起价为每月4美元(1GB内存) 基于KVM的高性能VPS 世界各地的9个数据中心,包括美国、加拿大、英国、德国、荷兰、香港和ISRALL。 按照下面链接的教程在Kamatera创建Linux VPS服务器。 如何在Kamatera上创建Linux VPS服务器 一旦你有了运行Ubuntu18.04的VPS,请按照下面的说明操作。 您还需要一个域名来为OpenConnect VPN启用HTTPS。我从namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 第一步:在Ubuntu 16.04/18.04上安装OpenConnect VPN服务器 登录你的Ubuntu 16.04/18.04服务器。然后使用apt安装ocserv软件包,该软件包自16.04以来就包含在Ubuntu存储库中。 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 如果它没有运行,则可以从以下内容开始: sudo systemctl start ocserv 默认情况下,OpenConnect VPN服务器监听TCP和UDP端口443。如果web服务器正在使用它,则VPN服务器无法启动。稍后我们将在OpenConnect VPN配置文件中看到如何更改端口。 第2步:在Ubuntu 16.04/18.04服务器上安装Let's Encrypt Client(Certbot) 运行以下命令从官方PPA安装最新版本的certbot。如果要从PPA安装软件包,则需要使用通用软件属性。你的Ubuntu服务器上可能没有。 sudo apt install software-properties-common sudo add-apt-repository ppa:certbot/certbot sudo apt update sudo apt install certbot 要检查版本号,请运行 certbot --version 样本输出: certbot 0.31.0 步骤3:从Let's Encrypt获取TLS证书 独立插件 如果您的Ubuntu 16.04/18.04服务器上没有运行web服务器,并且您希望OpenConnect VPN服务器使用端口443,那么您可以使用独立插件从Let's Encrypt获取TLS证书。运行以下命令。别忘了为你的域名设置一个记录。 sudo certbot certonly --standalone --preferred-challenges http --agree-tos --email your-email-address -d vpn.example.com 说明: certonly:获取证书,但不要安装它。 --standalone:使用standalone插件获取证书 --首选挑战http:执行http-01挑战以验证我们的域,该域将使用端口80。默认情况下,独立插件将使用端口443执行tls sni挑战。由于端口443已经被OpenConnect VPN服务器使用,我们需要更改默认行为。 --同意:同意让我们加密服务条款。 --电子邮件:电子邮件地址用于帐户注册和恢复。 -d:指定你的域名。 从下面的截图可以看到,我成功地获得了证书。 使用webroot插件 如果你的Ubuntu 16.04/18.04服务器有一个web服务器在监听端口80和443,你想让OpenConnect VPN服务器使用另一个端口,那么最好使用webroot插件来获取证书,因为webroot插件几乎适用于所有web服务器,我们不需要在web服务器中安装证书。 首先,您需要为vpn创建一个虚拟主机。实例通用域名格式。 阿帕奇 如果您使用的是Apache,那么 sudo nano /etc/apache2/sites-available/vpn.example.com.conf 并将以下行粘贴到文件中。 <VirtualHost *:80> ServerName vpn.example.com DocumentRoot /var/www/vpn.example.com </VirtualHost> 保存并关闭文件。然后创建web根目录。 sudo mkdir /var/www/vpn.example.com 将www数据(Apache用户)设置为web根目录的所有者。 sudo chown www-data:www-data /var/www/vpn.example.com -R 启用此虚拟主机。 sudo a2ensite vpn.example.com 重新加载Apache以使更改生效。 sudo systemctl reload apache2 创建并启用虚拟主机后,运行以下命令以获取使用webroot插件加密证书。 sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com Nginx 如果您使用的是Nginx,那么 sudo nano /etc/nginx/conf.d/vpn.example.com.conf 将以下行粘贴到文件中。 server { listen 80; server_name vpn.example.com; root /var/www/vpn.example.com/; location ~ /.well-known/acme-challenge { allow all; } } 保存并关闭文件。然后创建web根目录。 sudo mkdir -p /var/www/vpn.example.com 将www数据(Nginx用户)设置为web根目录的所有者。 sudo chown www-data:www-data /var/www/vpn.example.com -R 重新加载Nginx以使更改生效。 sudo systemctl reload nginx 创建并启用虚拟主机后,运行以下命令以获取使用webroot插件加密证书。 sudo certbot certonly --webroot --agree-tos --email your-email-address -d vpn.example.com -w /var/www/vpn.example.com 第4步:编辑OpenConnect VPN服务器配置文件 编辑ocserv配置文件。 sudo nano /etc/ocserv/ocserv.conf 首先,配置密码身份验证。默认情况下,通过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-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 然后,设置客户端的最大数量。默认值为16。设置为零表示无限。 max-clients = 16 设置用户可以同时登录的设备数量。默认值为2。设置为零表示无限。 max-same-clients = 2 接下来,找到下面这行。将false更改为true以启用MTU发现,这可以优化VPN性能。 try-mtu-discovery = false 之后,将默认域设置为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解析程序是一种很好的做法,尤其是如果您是VPN提供商。如果在同一台服务器上运行DNS解析程序,请将DNS指定为 dns = 10.10.10.1 10.10.10.1是VPN LAN中OpenConnect VPN服务器的IP地址。这将稍微加快客户端的DNS查找,因为VPN服务器和DNS解析程序之间的网络延迟已消除。 然后注释掉所有路由参数(在下面四行的开头添加#符号),这将把服务器设置为客户端的默认网关。 route = 10.10.10.0/255.255.255.0 route = 192.168.0.0/255.255.0.0 route = fef4:db8:1000:1001::/64 no-route = 192.168.5.0/255.255.255.0 保存并关闭文件,然后重新启动VPN服务器,以使更改生效。 sudo systemctl restart ocserv 步骤5:修复DTLS握手失败 在Ubuntu16.04和Ubuntu18.04上,ocserv守护程序ocserv。套接字不尊重配置文件中的“侦听主机”值,这将在客户端连接到VPN服务器时导致以下错误。 DTLS handshake failed: Resource temporarily unavailable, try again. 要修复此错误,我们需要编辑ocserv。服务文件。我们首先将/lib/systemd/system/directory中的原始文件复制到/etc/systemd/system/directory,然后对其进行编辑,因为我们不希望新版本的ocserv包覆盖我们的修改。(要了解有关systemd unit文件的更多信息,请运行man systemd.unit。) sudo cp /lib/systemd/system/ocserv.service /etc/systemd/system/ocserv.service sudo nano /etc/systemd/system/ocserv.service 注释掉下面两行。 Requires=ocserv.socket Also=ocserv.socket 保存并关闭文件。然后重新加载系统D sudo systemctl daemon-reload 停止ocserv。套接字并禁用它。 sudo systemctl stop ocserv.socket sudo systemctl disable ocserv.socket 重新启动ocserv服务。 sudo systemctl restart ocserv.service 如果ocserv systemd服务无法重新启动,它将不会输出任何消息,因此我们需要检查状态以确保它实际运行。 systemctl status ocserv 第6步:创建VPN帐户 现在使用ocpasswd工具生成VPN帐户。 sudo ocpasswd -c /etc/ocserv/ocpasswd username 系统将要求您为用户设置密码,信息将保存到/etc/ocserv/ocpasswd文件中。要重置密码,只需再次运行上述命令。 第7步:启用IP转发 为了让VPN服务器在VPN客户端和外部世界之间路由数据包,我们需要启用IP转发。编辑sysctl。conf文件。 sudo nano /etc/sysctl.conf 在该文件末尾添加以下行。 net.ipv4.ip_forward = 1 保存并关闭文件。然后使用下面的命令应用更改。p选项将从/etc/sysctl加载sysctl设置。conf文件。此命令将在系统重新启动时保留所做的更改。 sudo sysctl -p 第8步:为IP伪装配置防火墙 我们需要在服务器防火墙中设置IP伪装,以便服务器成为VPN客户端的虚拟路由器。我将使用UFW,它是iptables防火墙的前端。在Ubuntu上通过以下方式安装UFW: sudo apt install ufw 首先,需要允许SSH通信。 sudo ufw allow 22/tcp 接下来,找到服务器主网络接口的名称。 ip addr 正如你所看到的,它在我的Ubuntu服务器上被命名为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 你可以看到化装规则。 步骤9:打开防火墙中的443端口 运行以下命令打开TCP和UDP端口443。如果您为ocserv配置了不同的端口,则将443更改为您配置的端口。 sudo ufw allow 443/tcp sudo ufw allow 443/udp 现在,OpenConnect VPN服务器已准备好接受客户端连接。 如果指定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; }; 如何在Ubuntu 16.04/18.04桌面上安装和使用OpenConnect VPN客户端 运行以下命令在Ubuntu桌面上安装OpenConnect VPN命令行客户端。 sudo apt install openconnect 您可以从下面的命令行连接到VPN-b标志将使其在连接建立后在后台运行。 sudo openconnect -b vpn.example.com:port-number 您将被要求输入VPN用户名和密码。如果成功建立连接,您将看到以下消息。 Got CONNECT response: HTTP/1.1 200 CONNECTED CSTP connected. DPD 90, Keepalive 32400 Connected tun0 as 192.168.1.139, using SSL Established DTLS connection (using GnuTLS). Ciphersuite (DTLS1.2)-(RSA)-(AES-256-GCM). 要停止连接,请运行: 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 systemd-resolved.service 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' ExecStop=/bin/bash -c '/sbin/resolvconf -d tun0 && /usr/bin/pkill -SIGINT openconnect && /sbin/ip route flush 12.34.56.78' Restart=always RestartSec=2 [Install] WantedBy=multi-user.target 保存并关闭文件。然后启用此服务,使其在引导时启动。 sudo systemctl enable openconnect.service 文件内容说明: After=网络在线。目标系统已解决。服务和需求=网络在线。目标使此服务在网络启动后运行。我们想要openconnect。系统故障排除后,服务将启动。服务,因为这将确保OpenConnect设置的DNS服务器地址不会被systemd覆盖。服务 实际上,这项服务仍然可以在网络开通之前运行。如果服务失败,我们添加Restart=always和RestartSec=2以在2秒后重新启动该服务。 Systemd无法识别管道重定向,因此在ExecStart指令中,我们用单引号将comand括起来,并使用Bash shell运行它。 由于OpenConnect VPN客户端将作为在后台运行的systemd服务运行,因此不需要在OpenConnect命令中添加-b标志。 ExecStop指令用于停止VPN连接。首先,我们使用resolvconf命令恢复DNS服务器设置。tun0是TUN设备的默认名称,可以通过ip link命令看到。然后我们使用pkill命令停止openconenct进程。最后,我们使用ip route flush命令恢复Linux内核路由表。将12.34.56.78替换为VPN服务器的IP地址。 要立即启动此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,请查看以下教程。 如何通过启用TCP BBR轻松提升Ubuntu网络性能 在我的测试中,启用TCP BBR的标准TLS比DTL快两倍。 自动续订让我们加密证书 编辑root用户的crontab文件。 sudo crontab -e 在文件末尾添加以下行。VPN服务器需要重新启动ocserv服务才能获取新的证书和密钥文件。 @daily certbot renew --quiet && systemctl restart ocserv 故障排除提示 请注意,如果您使用的是OpenVZ VPS,请确保在VPS控制面板中启用TUN虚拟网络设备。 如果遇到任何问题,请查看OpenConnect VPN服务器日志。 sudo journalctl -xe -u 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服务器&amp;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:-VERS-SSL3.0" 要在OpenConnect VPN服务器中禁用TLS 1.0和TLS 1.1,只需添加-VERS-TLS1。0和-VERS-TLS1。1号排队。 tls-priorities = "NORMAL:%SERVER_PRECEDENCE:%COMPAT:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1" 保存并关闭文件。然后重启ocserv。 sudo systemctl restart ocserv 现在ocserv只接受TLS 1.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 我试图启用TLS 1.3,但Ubuntu上的ocserv包还不支持它。 每用户或每组配置 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地址的流量通过原始网关路由。我使用这个技巧允许我的另一个VPS(虚拟专用服务器)连接到此VPN服务器,而不会中断正常通信,因此我的VPN服务器的tun设备(vpns0)始终处于打开状态,这意味着我的VPN服务器将始终具有专用IP地址10.10.10.1。 保存并关闭文件。重新启动ocserv以使更改生效。 sudo systemctl restart ocserv 虚拟主机 要在ocserv中添加新的虚拟主机,首先需要使用步骤3中的方法为新的虚拟主机获取TLS证书。然后编辑ocserv配置文件。 sudo nano /etc/ocserv/ocserv.conf 转到这个文件的底部。在Nano文本编辑器中,可以按Ctrl+W,然后按Ctrl+V跳转到文件底部。添加以下行。更换vpn2。实例com与第二个虚拟主机的主机名。 [vhost:vpn2.example.com] #Allow password authentication and certificate authentication enable-auth = "plain[passwd=/etc/ocserv/ocpasswd]" auth = "certificate" tcp-port = 443 #uncomment the two lines if ocserv runs behind HAProxy. #listen-host = 127.0.0.1 #listen-proxy-proto = true # SSL/TLS configuration ca-cert = /etc/ocserv/ssl/ca-cert.pem server-cert = /etc/letsencrypt/live/vpn2.example.com/fullchain.pem server-key = /etc/letsencrypt/live/vpn2.example.com/privkey.pem cert-user-oid = 0.9.2342.19200300.100.1.1 #Networking configuration. Use a different network range for this virtual host. device = vpns ipv4-network = 10.10.20.0 ipv4-netmask = 255.255.255.0 route = default dns = 8.8.8.8 tunnel-all-dns = true compression = true max-clients = 0 max-same-clients = 0 try-mtu-discovery = true idle-timeout=1200 mobile-idle-timeout=2400 config-per-user = /etc/ocserv/config-per-user/ config-per-group = /etc/ocserv/config-per-group/ 保存并关闭文件。然后重启ocserv。 sudo systemctl restart ocserv 编辑UFW配置文件。 sudo nano /etc/ufw/before.rules 在该文件中找到ufw BEFORT forward链,并添加以下两行,如果源IP或目标IP在10.10.20.0/24范围内,这两行将接受数据包转发。 -A ufw-before-forward -s 10.10.20.0/24 -j ACCEPT -A ufw-before-forward -d 10.10.20.0/24 -j ACCEPT 保存并关闭文件。然后重启UFW。 sudo systemctl restart ufw 请注意,ocserv守护进程可能会告诉您,虚拟主机的一些参数将被忽略。然而,我发现一些被忽略的参数实际上是需要的。例如,如果从虚拟主机中删除device=vpns行,则在建立到虚拟主机的VPN连接时可能会遇到以下错误。 VPN service unavailable; reason: Server configuration error VPN服务器将在日志中生成以下错误消息。 no networks are configured; rejecting client 还要注意,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.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 收尾 就这样!我希望本教程能帮助您在Ubuntu 16.04和Ubuntu 18.04上安装和配置OpenConnect VPN。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门?

    2022.03.23 浏览:70