• 免费公共DNS服务器IP地址大全

    国内常用公共DNS 114 DNS: (114.114.114.114;114.114.115.115) 114DNS安全版 (114.114.114.119;114.114.115.119) 114DNS家庭版 (114.114.114.110;114.114.115.110) 阿里 AliDNS: (223.5.5.5; 223.6.6.6) 百度 BaiduDNS(新增ipv6地址 new): (180.76.76.76;ipv6地址:2400:da00::6666) DNSPod DNS+(腾讯公共DNS,推荐前两个)(119.29.29.29;119.28.28.28;182.254.118.118;182.254.116.116) CNNIC SDNS(1.2.4.8;210.2.4.8) oneDNS 更新(目前官方DNS:117.50.11.11;117.50.22.22)(之前官方的还可使用:112.124.47.27;114.215.126.16) DNS 派 电信/移动/铁通 (101.226.4.6;218.30.118.6) DNS 派 联通 (123.125.81.6;140.207.198.6) DNS ONE 北方推荐:(123.207.137.88 南方推荐:115.159.220.214) DNS TWO 北方推荐:(122.114.245.45 南方推荐:115.159.96.69) DNS THREE 北方推荐:(115.159.157.26 南方推荐:115.159.158.38) 中科大防污染DNS(202.141.162.123(中国电信);202.141.178.13(电信线路);202.38.93.153(教育网);202.141.176.93(中国移动)) BAI DNS支持EDNS智能解析,无污染dns,快速安全 : (223.113.97.99) PdoMo-DNS (主DNS:101.132.183.99;辅DNS:193.112.15.186)注:可过滤广告,纯净无劫持 FUN DNS(119.23.248.241) 骆驼云安全 camelyundns 公共 dns:(63.223.94.66) CuteDNS: 高速DNS(原汁原味,高速解析): 华北 123.206.61.167;华南 119.29.105.234 去广告DNS(可屏蔽广告及违法信息): 华北 101.236.28.23 ;华南 120.77.212.84 我国首个IPv6公共DNS:首选DNS:240c::6666,备用DNS:240c::6644。 P站DNS:DNS 1: 123.207.137.88,DNS 2: 115.159.220.214 ;备用DNS 1: 115.159.146.99,DNS 2: 123.206.21.48 清华大学TUNA DNS666:101.6.6.6;2001:da8::666 HI!XNS(纯净无劫持):40.73.101.101 港澳台地区DNS 台湾网络资讯中心 TWNIC Quad 101 DNS:(主DNS:101.101.101.101;备用:101.102.103.104) IPv6部分:主DNS:2001:de4::101;备用:2001:de4::102 香港宽频DNS:(203.80.96.10;203.80.96.9) 中国(香港)电信全球有限公司NS1(202.55.11.100 )测试未 ping 通 中国(香港)电信全球有限公司NS4(202.55.21.85)ping 在90左右 西门子菠菜服务器(香港)(112.121.178.187)ping 在50左右 中国台湾中华电信 HiNet DNS:(168.95.192.1; 168.95.1.1) 和记黄埔有限公司(202.45.84.58) 国外公共DNS Cloudflare & APNIC ( IPv4: 主DNS:1.1.1.1,备用:1.0.0.1;IPv6: 主DNS:2001:2001::,备用2001:2001:2001::)PS:最牛逼最简洁的ip AdGuard DNS(测试版): 默认(可拦截广告,跟踪和钓鱼网址) 176.103.130.130;176.103.130.131 IPv6 地址为:2a00:5a60::ad1:0ff;2a00:5a60::ad2:0ff 家庭保护(默认 + 拦截成人网站 + 安全搜索) 176.103.130.132;176.103.130.134 IPv6 地址使用:2a00:5a60::bad1:0ff;2a00:5a60::bad2:0ff Google DNS (8.8.8.8; 8.8.4.4) 谷歌Google Public DNS IPv6 DNS (2001:4860:4860::8888; 2001:4860:4860::8844) level 3:(4.2.2.1;4.2.2.2 ) IBM Quad9 DNS(9.9.9.9) Comodo Secure (8.26.56.26;8.20.247.20) V2EX DNS (199.91.73.222;178.79.131.110) OpenDNS (208.67.222.222;208.67.220.220) OpenDNS Family:(208.67.222.123、208.67.220.123) UltraDNS (156.154.70.1;156.154.71.1) Norton ConnectSafe (199.85.126.10;199.85.127.10) 威瑞信公共 DNS (64.6.64.6;64.6.65.6) Dyn DNS (216.146.35.35;216.146.36.36) Freenom World DNS (80.80.80.80;80.80.81.81) Yandex Basic ( 77.88.8.8;77.88.8.1) Yandex Basic (77.88.8.8 ;77.88.8.2) Yandex Basic ( 77.88.8.7;77.88.8.3) 柬埔寨 CN2 DNS (103.197.104.178;103.197.106.75;203.189.136.148)ping在110-120左右 Hurricane Electric HEDNS (IPV4:74.82.42.42;IPV6:2001:470:20:2;IPV4:66.220.18.42) UCOM日本东京(203.112.2.4) DNS.WATCH (IPV4:84.200.69.80;84.200.70.40;IPV6:2001:1608:10:25::1c04:b12f;2001:1608:10:25::9249:d69b) SafeDNS (195.46.39.39;195.46.39.40) puntCAT DNS (IPV4:109.69.8.51;IPV6:2a00:1508:0:4::9) 韩国电信(不是韩国长安大学)DNS ( 168.126.63.1;168.126.63.2 )

    2021.10.30 浏览:1753
  • 如何在Ubuntu上使用Nginx轻松设置DNS over TLS解析器

    本教程将向您展示如何使用Nginx在Ubuntu上设置自己的DNS over TLS(DoT)解析器,这样您的DNS查询就可以被加密,并免受窥探。 什么是DNS over TLS,为什么它很重要 DNS(域名系统)负责将域名转换为IP地址。它是1987年设计的,没有考虑安全或隐私。默认情况下,DNS查询不加密。它们以明文形式在网络上发送,中间实体可以利用它们。例如,中国的防火长城(GFW)使用一种名为DNS缓存毒药的技术对中国互联网进行审查。(他们还使用其他方法,这超出了本文的范围。) GFW检查发送到中国境外DNS服务器的每个DNS查询。由于纯文本DNS协议基于UDP,这是一种无连接协议,GFW可以欺骗客户端IP和服务器IP。当GFW在其阻止列表中找到域名时,它会更改DNS响应。例如,如果一个中国互联网用户想要访问谷歌。GFW向用户的DNS解析程序返回位于中国的IP地址,而不是谷歌的真实IP地址。然后DNS解析程序将假IP地址返回给用户的计算机,因此用户无法访问谷歌。通用域名格式。 TLS上的DNS意味着DNS查询通过使用TLS加密的安全连接发送,这与加密HTTP流量的技术相同。 为什么要运行自己的点解析器? 现在已经有一些公共DNS解析器,比如1.1.1.1和9.9.9.9,它们支持TLS上的DNS,所以如果您没有技能或时间运行自己的DNS,您可以使用它们。然而,一些人认为,这仍然允许大型DNS服务提供商收集用户信息。他们似乎更信任他们的ISP。但我认为,如果你对隐私心存疑虑,你应该运行自己的点解析程序,这样大型DNS服务提供商和ISP都不能监视你。 目前,并非所有DNS解析程序(绑定、解除绑定、结解析程序、PowerDNS递归程序等)都支持TLS上的DNS。我将向您展示如何为您现有的DNS解析程序设置Nginx TLS代理,以提供点服务,而不是为特定的解析程序制作指南,因此无论您使用的是什么DNS解析程序,都可以遵循本教程。 先决条件 假设您在Ubuntu服务器上运行DNS解析器。您可以使用任何DNS解析程序(绑定、未绑定、结解析程序…)我个人使用绑定。 在Ubuntu 16.04/18.04上设置自己的BIND9 DNS解析器 在Ubuntu 20.04上设置自己的BIND9 DNS解析器 您还需要一个域名,因为DNS客户端需要与我们的DNS解析器建立安全的TLS连接。我从namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 一旦满足上述要求,请按照以下说明操作。 第一步:在Ubuntu服务器上安装Nginx 这很容易做到。只需运行以下命令。 sudo apt安装nginx 第2步:从Let's Encrypt获取受信任的TLS证书 DNS over TLS要求在服务器端安装TLS证书。我们将获取并安装Let's Encrypt证书。使用Let’s Encrypt证书的优点是,它是免费的,更容易设置,并且受客户端软件的信任。 运行以下命令从默认的Ubuntu存储库安装Let's Encrypt client(certbot)。 sudo apt安装certbot 要获得Let's Encrypt TLS证书,我们可以使用以下命令创建一个Nginx虚拟主机。修理点。实例使用你自己的域名。别忘了为这个子域创建DNS记录。 sudo nano/etc/nginx/conf.d/dot。实例通用域名格式。形态 复制以下文本并将其粘贴到虚拟主机文件中。 服务器{listen 80;server_name dot.example.com;root/usr/share/nginx/html/;location ~/.well-known/acme challenge{allow all;} 保存并关闭文件。重新加载Nginx以使更改生效。 sudo systemctl重新加载nginx 创建并启用虚拟主机后,运行以下命令以获取使用webroot插件加密证书。 sudo certbot certonly--webroot--agree tos--email[email protected]-d dot。实例com-w/usr/share/nginx/html/ 步骤3:在Nginx中通过TLS代理创建DNS 编辑Nginx主配置文件。 sudo nano/etc/nginx/nginx。形态 在该文件底部添加以下行。请注意,它们需要放在http上下文之外。 流{#DNS上游池上游DNS{zone DNS 64k;服务器127.0.0.1:53;}#解密服务器的点服务器{listen 853 ssl;ssl_certificate/etc/letsencrypt/live/DoT.example.com/fullchain.pem;ssl_certificate_key/etc/letsencrypt/live/DoT.example.com/privkey.pem;代理通过dns;} 如何在Ubuntu上使用Nginx轻松设置DNS over TLS解析器 Save and close the file. Then test Nginx configuration and restart. sudo nginx -t sudo systemctl restart nginx If there’s a firewall running on Ubuntu server, you need to open TCP port 853. For example, if you use the UFW firewall, run the following command. sudo ufw allow 853/tcp Since we are using DNS over TLS, there’s no need to worry about DNS amplification attack. Step 5: Configure the Stubby DoT Client on Ubuntu Desktop Stubby is an open-source DNS stub resolver developed by the getdns team. A stub resolver is a small DNS client on the end-user’s computer that receives DNS requests from applications such as Firefox and forward requests to a recursive resolver like 1.1.1.1 or 8.8.8.8. Stubby is special in that it supports DNS over TLS. By default, it will only send DNS requests encrypted. Install Stubby on Ubuntu desktop from the default repository. sudo apt install stubby Once installed, stubby runs in the background. check its status with: systemctl status stubby Stubby listens on TCP and UDP port 53 of localhost (127.0.0.1). By default, Stubby uses third-party DNS over TLS resolvers. We need to configure it to use our own. sudo nano /etc/stubby/stubby.yml Scroll down to the upstream_recursive_servers: section and add the following text above other DNS servers. Replace 12.34.56.78 with the IP address of your DoT resolver. # My Own DNS over TLS resolver - address_data: 12.34.56.78 tls_auth_name: "dot.example.com" Then find the following line: round_robin_upstreams: 1 Change 1 to 0. This will make stubby always use your own DNS over TLS resolver. If it’s not available, stubby will use other DNS servers. Save the file and restart stubby for the changes to take effect. sudo systemctl restart stubby Step 6: Configure Ubuntu Desktop to Use Stubby Although Stubby is running, it’s not being used by the operating system. Click the Network Manager icon on the upper-right corner of your desktop. Then select wired settings. (If you are using Wi-fi, select Wi-fi settings.) Click the gear button. Select IPv4 tab, then in DNS settings, switch Automatic to OFF, which will prevent your Ubuntu system from getting DNS server address from your router. Enter 127.0.0.1 in the DNS field. Click Apply button to save your changes. Then restart NetworkManager for the changes to take effect. sudo systemctl restart NetworkManager Once you are reconnected, you can see that your Ubuntu system is now using 127.0.0.1 as the DNS server in the Details tab. How to Check if Your DNS Traffic is Encrypted We can use WireShark to monitor DNS traffic. Install WireShark on Ubuntu desktop. sudo apt install wireshark If you are asked “Should non-superusers be able to capture packets?”, answer Yes. Once it’s installed, run the following command to add your user account to the wireshark group so that you can capture packets. sudo adduser your-username wireshark Log out and log back in for the changes to take effect. Then open WireShark from your application menu, select your network interface in WireShark. For example, my Ethernet interface name is enp5s0. Then enter port 853 as the capture filter. This will make WireShark only capture traffic on port 853, which is the port used by DNS over TLS. Click the button on the upper-left corner to start capturing. After that, in terminal window, run the following command to query domain name by using the dig utility. For instance, I can query the A record of my domain name. dig A linuxbabe.com Now you can see the captured DNS traffic in WireShark. Connections were made over TCP and encrypted with TLS, which is what we want. You should check if the Destination column includes the IP address of your DoT resolver. If DNS queries are sent without encryption, then the computer would contact DNS server on port 53. You can capture packets again with port 53 as the capture filter, but you won’t see any packets in WireShark, which means stubby is encrypting your DNS queries. Wrapping Up I hope this tutorial helped you set up a DNS over TLS resolver with Nginx on Ubuntu. You may also want to read: 使用DNSdist在Ubuntu上运行自己的DNS over HTTPS(DoH)解析器 As always, if you found this post useful, then subscribe to our free newsletter to get more tips and tricks. Take care ?

    2022.03.23 浏览:51
  • 使用DNSdist在Ubuntu上设置DNS over HTTPS(DoH)解析器

    本教程将向您展示如何使用DNSdist在Ubuntu上设置自己的DNS over HTTPS(DoH)解析器,这样您的DNS查询就可以被加密并防止被窥探。 什么是HTTPS上的DNS?为什么它很重要 DNS(域名系统)负责将域名转换为IP地址。它是1987年设计的,没有考虑安全或隐私。默认情况下,DNS查询不加密。它们以明文形式在网络上发送,中间实体可以利用它们。例如,中国的防火长城(GFW)使用一种名为DNS缓存毒药的技术对中国互联网进行审查。(他们还使用其他方法,这超出了本文的范围。) GFW检查发送到中国境外DNS服务器的每个DNS查询。由于纯文本DNS协议基于UDP,这是一种无连接协议,GFW可以欺骗客户端IP和服务器IP。当GFW在其阻止列表中找到域名时,它会更改DNS响应。例如,如果一个中国互联网用户想要访问谷歌。GFW向用户的DNS解析程序返回位于中国的IP地址,而不是谷歌的真实IP地址。然后DNS解析程序将假IP地址返回给用户的计算机,因此用户无法访问谷歌。通用域名格式。 HTTPS是加密纯文本HTTP网页的标准方式。使用HTTPS上的DNS(DoH),您的DNS查询将被加密,因此第三方无法看到您的DNS查询。 为什么要运行自己的DoH解析器? 现在已经有一些公共DNS解析器,比如1.1.1.1和9.9.9.9,它们支持HTTPS上的DNS,所以如果您没有技能或时间运行自己的DNS,您可以使用它们。从Firefox版本61开始,您可以在浏览器设置中启用DNS over HTTPS,这是互联网安全和隐私方面的一大进步。Firefox默认使用Cloudflare解析器(1.1.1.1)。然而,一些人认为这允许Cloudflare收集Firefox用户的信息。他们似乎比Cloudflare更信任他们的ISP。但我认为,如果你对隐私心存疑虑,你应该运行自己的DoH解析器,这样Cloudflare和ISP都不能监视你。 DoH vs DoT 除了HTTPS上的DNS,还有另一个协议也旨在加密DNS查询。它被称为TLS上的DNS(DoT)。之前我在Ubuntu桌面上写了一篇关于通过TLS使用DNS的指南,但现在我正在切换到通过HTTPS使用DNS。 对于生活在中国等互联网审查严格的国家的人来说,使用DoH更为有利。 DoT在TCP端口853上运行,该端口很容易被国家防火墙屏蔽。 DoH在TCP端口443上运行,这是HTTPS网站的标准端口,这使得DoH非常难以阻止,因为如果TCP端口443被阻止,那么几乎所有HTTPS网站也将被阻止。 我的DoH解析器运行在中国境外的VPS(虚拟专用服务器)上,中国的防火长城无法拦截我的DNS查询。我甚至可以将我的DoH解析器的IP地址隐藏在Cloudflare CDN(内容交付网络)后面。 DoH的另一个优点是,它允许web应用程序通过现有的浏览器API访问DNS信息,因此不需要存根解析器。 主要DNS解析程序中的DoH支持 BIND将在9.17版本中支持DoH,该版本仍在开发中。Ubuntu 20.04和21.04存储库随BIND 9.16一起发布。 自版本4.0.0以来,结分解器支持DoH。目前的最新版本是5.11。它有Debian、Ubuntu、CentOS和Fedora的官方存储库。 Unbound从1.12.0版开始支持DoH。 PowerDNS递归程序目前不支持DoH。 实际上,我更喜欢用DNSdist运行DoH解析器,它在1.4.0版中增加了对DoH的支持。目前的最新版本是1.5。它有Debian、Raspbian、Ubuntu和CentOS的官方存储库。DNSdist是一个DNS负载平衡器,可以将DNS查询转发到后端DNS解析程序,因此无论您使用的是哪个DNS解析程序,都可以使用DNSdist运行自己的DoH服务器。DNSdist由PowerDNS团队开发。 先决条件 假设您在Ubuntu服务器上运行DNS解析器。你可以使用任何DNS解析程序(绑定、结解析、未绑定…)我个人使用绑定。 在Ubuntu 16.04/18.04上设置自己的BIND9 DNS解析器 在Ubuntu 20.04上设置自己的BIND9 DNS解析器 一旦DNS解析程序启动并运行,请按照以下说明操作。 第一步:在Ubuntu服务器上安装DNSdist 如果使用非LTS Ubuntu,则必须从默认存储库(sudo apt install dnsdist)安装dnsdist。如果您使用Ubuntu LTS,建议从上游存储库安装DNSdist,这样您将拥有最新的稳定版本。首先,需要为DNSdist创建一个源列表文件。 Ubuntu 20.04 echo“deb[arch=amd64] main“| sudo-tee/etc/apt/sources.list.d/pdns.list Ubuntu 18.04 echo“deb[arch=amd64] main“| sudo-tee/etc/apt/sources.list.d/pdns.list Ubuntu 16.04 echo“deb[arch=amd64] main“| sudo tee/etc/apt/sources.list.d/pdns.list 接下来,我们为DNSdist创建一个首选项文件来锁定包,这样就不会意外地从另一个存储库安装DNSdist。 sudo nano/etc/apt/preferences。d/dnsdist 将以下行添加到文件中。 包装:dnsdist*密码:origin repo。powerdns。com Pin优先级:600 保存并关闭文件。然后运行以下命令导入PowerDNS公钥,以便APT软件包管理器可以验证从该存储库下载的软件包的相互关系。 卷曲https://repo.powerdns.com/FD380FBB-pub.asc| sudo apt按键添加- 接下来,更新存储库列表并安装DNSdist。 sudo apt更新sudo apt安装dnsdist 默认情况下,DNSdist尝试绑定到端口53。因为您在端口53上有一个现有的DNS解析器,比如BIND监听,dnsdist。服务将无法启动。 由于我们只是部署一个DoH解析器,并不关心DNS负载平衡,所以我们可以将DNSdist配置为在另一个端口上侦听。编辑DNSdist配置文件。 sudo nano/etc/dnsdist/dnsdist。形态 此文件中没有内容。现在,只需在该文件中添加以下行,DNSdist就会监听TCP和UDP端口5353,而不是端口53。 setLocal(“127.0.0.1:5353”) 保存并关闭文件。然后重新启动DNSdist。 sudo systemctl restart dnsdist 检查它的状态。 systemctl状态dnsdist 它应该处于活动状态(正在运行)。 第2步:在Ubuntu服务器上安装Let's Encrypt Client(Certbot) HTTPS上的DNS需要在服务器端安装TLS证书。我们将获取并安装Let's Encrypt证书。使用Let’s Encrypt证书的优点是,它是免费的,更容易设置,并且受客户端软件的信任。 运行以下命令从默认的Ubuntu存储库安装Let's Encrypt client(certbot)。 sudo apt安装certbot 要检查版本号,请运行 certbot——版本 样本输出: certbot 0.40.0 步骤3:从Let's Encrypt获取受信任的TLS证书 我建议使用standalone或webroot插件获取dnsdist的TLS证书。 独立插件 如果你的Ubuntu服务器上没有运行web服务器,你可以使用独立插件从Let's Encrypt获取TLS证书。为子域(doh.example.com)创建DNS记录,然后运行以下命令。 sudo certbot certonly--独立--首选挑战http--同意tos--电子邮件[电子邮件 受保护]-d doh。实例通用域名格式 哪里: certonly:获取证书,但不要安装它。 --standalone:使用standalone插件获取证书 --首选挑战http:执行http-01挑战以验证我们的域,该域将使用端口80。 --同意:同意让我们加密服务条款。 --电子邮件:电子邮件地址用于帐户注册和恢复。 -d:指定你的域名。 从下面的截图可以看到,我成功地获得了证书。

    2022.03.23 浏览:60
  • 正确地在Apache上启用HTTPS,让我们在Ubuntu上加密

    本教程将向您展示如何在Apache上使用Let's Encrypt on Ubuntu正确启用HTTPS。Google Chrome和Firefox已经开始将带有密码输入框的未加密网页标记为不安全。最终,所有HTTP网页都将被标记为不安全。HTTPS将成为任何网站的默认设置。如果你想利用HTTP/2协议来加速你的网站,这也是一个要求。 您可能知道,Let's Encrypt是一个免费、自动且开放的证书颁发机构。官方文档描述了使用Let’s Encrypt启用HTTPS时可以遵循的简单步骤,但还有更多。如果你遵循官方文件,你将在SSL实验室测试中得分。如果你按照我的步骤做,你会得到A+分。如果您之前已经部署了Let's Encrypt证书,您仍然可以按照本教程更新和替换现有证书。 在我向您展示使用Let’s Encrypt启用HTTPS的步骤之前,我想先谈谈CAA记录、安全头和OCSP绑定。这些东西可以帮助你获得A+。在本教程的最后,我还将向您展示如何处理CloudFlare CDN服务。 注意:本教程适用于所有当前版本的Apache和Ubuntu(包括16.04、18.04和20.04)。 为你的域名创建CAA记录 证书颁发机构授权(CAA)是一种DNS资源记录,用于指定允许哪些证书颁发机构(CA)为特定域名颁发证书。从2017年9月开始,所有CA都必须在为特定域名颁发证书之前检查CAA记录。如果没有找到某个域名的CAA记录,那么任何CA都可以为该域名颁发证书。如果CA未列在您的CAA记录中,则该CA无法为您的域名颁发证书。 要创建允许我们加密为您的域名颁发证书的CAA记录,请在DNS服务器或DNS管理器中添加以下条目。 example.com. IN CAA 0 issue "letsencrypt.org" 您还可以使用iodef让CA向您的电子邮件地址报告恶意证书颁发请求。 example.com. IN CAA 0 iodef "mailto:your-email-address" 上述记录的格式适用于区域文件。下面是给你的一些建议。 您可以使用SSLMate CAA Record Helper为您的域名生成CCA记录。 如果你使用的是GoDaddy DNS,那么请按照本文添加CAA记录。 您可以使用以下dig命令检查CAA记录。 dig example.com CAA 请注意,网络浏览器不会检查CAA记录。 安全标头 安全头和HTTPS一样重要,但只有一小部分启用HTTPS的站点关注安全头。虽然关于安全头的完整讨论超出了本教程的范围,但我想谈谈升级不安全请求和HSTS头,因为您可以使用Let’s Encrypt轻松启用它们,以提高站点的安全性。 升级不安全的请求 有时,一个站点启用了HTTPS,但一些CSS、图像或Java脚本仍然通过HTTP提供服务。在这种情况下,浏览器地址栏开头的绿色挂锁将消失。在谷歌浏览器中,它被一个信息图标取代;在Firefox中,它被一个带有黄色三角形的灰色挂锁所取代。您将希望尽可能多地向网站访问者显示一个绿色挂锁,解决此问题的简单方法是启用升级不安全请求头,这将迫使web浏览器对每个http://资源使用https://。 要启用此标头,只需在发出certbot命令时添加--uir标志。请注意,此标题适用于托管在您自己域上的资源和支持HTTPS的第三方域上的资源。如果您的网页包含第三方服务器上无法通过HTTPS访问的资源,则这些资源将被web浏览器阻止,但使用此标题可确保您的网页始终获得绿色挂锁。 HSTS(HTTP严格传输安全) HSTS标题告诉网络浏览器,与网站的所有通信都应该通过HTTPS完成。它可以防御SSL条带化,这是一种将HTTPS降级为HTTP的攻击。要启用此标头,只需在发出certbot命令时添加--hsts标志。 OCSP吻合器 当web浏览器连接到HTTPS网站时,它会向证书颁发机构(CA)发送OCSP(联机证书状态协议)请求,以查询网站SSL证书的吊销状态。Firefox遥测数据显示,这会将页面加载延迟1-3秒。 为了提高性能,网站所有者可以启用OCSP绑定,在这种情况下,web服务器本身会定期获取CA签署的OCSP响应,并将其发送到web浏览器,从而消除web浏览器联系OCSP服务器的需要。 要启用OCSP绑定,只需在发出certbot命令时添加--stype OCSP标志。 OCSP必须装订 如果黑客制作了一个伪造的、重复的网站,关闭了OCSP订书机,还阻止了网络浏览器对OCSP服务器的访问,那么网络浏览器会认为这是正常的,并继续访问恶意网站。为了解决这个问题,您可以在您的网站上启用OCSP必须装订,这会告诉web浏览器,在HTTPS连接期间,您的网站必须提供OCSP装订响应。因此,当网络浏览器连接到没有OCSP订书钉的假网站时,它会停止连接。 要启用OCSP必须装订,请在发出certbot命令时添加--must-stalke标志。 在Ubuntu上安装Let's Encrypt Client(Certbot) 现在是时候把手弄脏了。从Ubuntu 16.04开始,让我们加密客户端(Certbot)包含在Ubuntu存储库中,因此您可以使用以下命令安装它。Python3 certbot apache是certbot apache插件。 sudo apt install certbot python3-certbot-apache 要检查版本号,请运行 certbot --version 样本输出: certbot 0.31.0 如果要使用最新版本,可以从Snap store安装Certbot。 sudo apt install snapd sudo snap install --classic certbot 注意:如果要使用Snap版本,需要使用完整的二进制路径:/Snap/bin/certbot。 使用Apache插件启用HTTPS 如果您的网站不使用CDN服务,则建议使用Apache插件在Apache web服务器上启用HTTPS,因为它可以自动获取SSL/TLS证书并为您进行配置。在Ubuntu服务器上运行以下命令。 sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected] 说明: --apache:使用apache验证器和安装程序 --同意:同意让我们加密服务条款 --重定向:自动将所有HTTP流量重定向到HTTPS --uir:在每个HTTP响应中添加“内容安全策略:升级不安全请求”标题。 --hsts:为每个HTTP响应添加严格的传输安全头。 --装订ocsp:启用ocsp装订。 --必须装订:将OCSP必须装订扩展添加到证书。 -d标志后面是域名列表,以逗号分隔。你最多可以添加100个域名。 --电子邮件:用于注册和恢复联系人的电子邮件。 你会被问到是否想收到来自EFF(电子前沿基金会)的电子邮件。选择Y或N后,将自动获取并为您配置SSL证书,如下消息所示。 现在,如果您访问您的网站,您可以看到HTTP自动重定向到HTTPS连接。请注意,certbot客户端创建/etc/apache2/sites enabled/example。com le ssl。在为网站配置SSL时配置SSL虚拟主机。 测试SSL证书 去斯莱布。com来测试您的SSL证书和配置。正如我承诺的,你会得到A+。您还可以检查您的域名是否已启用CAA记录,您的服务器是否已启用HSTS、OCSP装订和OCSP必须装订。 将WWW重定向到非WWW(或反之亦然) 我们已经启用了将HTTP重定向到HTTPS,剩下要做的就是将www重定向到非www,或者反之亦然。如果你用的是WordPress,那就很简单了。只需进入WordPress Dashboard>设置>在WordPress地址和网站地址中设置您的首选版本(www或非www)。 如果你走这条路,你最终会被称为双301重定向。首先,Apache服务器将HTTP重定向到HTTPS,然后WordPress重定向到www或非www域。 有些人可能会说,当你做双301重定向时,你可能会失去SEO链接。如果您对此感到担忧,那么您可以使用下面的方法使所有域版本直接转到最终目的地。 编辑虚拟主机文件。(不是SSL虚拟主机) sudo nano /etc/apache2/sites-enabled/example.com.conf CertBot客户端在文件中添加了以下行以将HTTP重定向到HTTPS。 RewriteEngine on RewriteCond %{SERVER_NAME} =example.com [OR] RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] 要重定向到www或非www域,需要更改最后一行。用您喜欢的域版本替换%{SERVER_NAME},如下所示。(www.domain) RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent] 如果您更喜欢非www域,请将其更改为以下内容。 RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent] 然后保存并关闭文件。我们还需要编辑SSL虚拟主机。 sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf 在结尾上方添加以下行&lt/VirtualHost>标记将非www重定向到www域。 RewriteEngine on RewriteCond %{SERVER_NAME} =example.com RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent] 如果要将www重定向到非www域,请添加以下行。 RewriteEngine on RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent] 保存并关闭文件。重新加载Apache服务以使更改生效。 sudo systemctl reload apache2 更清楚地说,下面是我的Apache虚拟主机文件和SSL虚拟主机文件的截图,用于将非www重定向到www域。 Apache虚拟主机文件 Apache SSL虚拟主机文件 如果您使用的是WordPress,请确保在编辑Apache虚拟主机文件之前,在WoredPress地址和站点地址中设置了首选域版本。如果WordPress设置与Apache配置相矛盾,您的站点将处于重定向循环中。 如何禁用TLSv1和TLSv1。1. TLSv1和TLSv1。1不再被认为是安全的。要禁用它们,请编辑Let's Encrypt SSL options配置文件。 sudo nano /etc/letsencrypt/options-ssl-apache.conf 找到以下行,默认情况下禁用SSLv2和SSLv3。 SSLProtocol all -SSLv2 -SSLv3 将其更改为以下内容,以同时禁用TLSv1。0和TLSv1。1. SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 保存并关闭文件。然后重启Apache。 sudo systemctl restart apache2 证书自动更新 要自动续订Let's Encrypt certificate,只需编辑root用户的crontab文件。 sudo crontab -e 然后在底部添加以下行。 @daily certbot renew --quiet && systemctl reload apache2 --安静标志将抑制正常消息。如果希望接收错误消息,请在crontab文件的开头添加以下行。 MAILTO=your-email-address 需要重新加载Apache才能将新证书呈现给客户端。 CloudFlare CDN 您需要知道的第一件事是,如果您想在服务器上安装Let’s Encrypt certificate,同时使用CloudFlare的CDN服务,那么您需要在您的站点上启用CloudFlare的通用SSL,这意味着 站点访问者和CloudFlare edge server之间的连接使用CloudFlare Universal SSL证书进行加密。 原始服务器和CloudFlare edge服务器之间的通信使用Let’s Encrypt Issuited certificate进行加密。 如果在源服务器上安装Let's Encrypt certificate,将HTTP重定向到HTTPS并关闭CloudFlare Universal SSL,web浏览器将抱怨您的网站处于无限重定向循环中,因为CloudFlare将HTTPS重定向到HTTP。 您需要知道的第二件事是,如果希望在使用CloudFlare Universal SSL时启用CAA记录,则还需要创建以下CAA记录。 example.com. IN CAA 0 issue "comodoca.com" example.com. IN CAA 0 issue "digicert.com" example.com. IN CAA 0 issue "globalsign.com 按照本文添加CloudFlare Universal SSL证书的CAA记录。 那么,如何使用CloudFlare安装Let's Encrypt certificate呢?有两种情况。 您已经使用上述步骤安装了Let's Encrypt certificate,现在您想启用CloudFlare CDN服务。 您的网站正在使用CloudFlare CDN服务,现在您想在源服务器上安装Let's Encrypt certificate。 第一种情况 如果您在第一个场景中,则可以继续启用CloudFlare CDN服务,还可以通过转到Crypto>在CloudFlare Dashboard中启用CloudFlare Universal SSL;SSL和选择完整(严格)。你的网站将运行良好,没有问题。 第二种情况 如果您使用CloudFlare CDN,并且现在希望在源服务器上安装Let's Encrypt,请运行以下命令以获取并安装Let's Encrypt TLS证书。 sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected] 获取证书并将其安装到服务器上后,转到Cloudflare dashboard并启用Cloudflare Universal SSL。 下一步 我希望本教程能帮助您在Apache虚拟主机上启用HTTPS,让我们在Ubuntu上加密。您可能还想设置ModSecurity web应用程序防火墙,以保护您的网站免受黑客攻击。 如何在Debian/Ubuntu上使用Apache设置ModSecurity 为了提高网站速度,可以使用Apache启用HTTP/2协议。 如何在Ubuntu上使用Apache启用HTTP/2协议 和往常一样,如果你觉得这篇文章有用,那么订阅我们的免费时事通讯以获得更多教程。

    2022.03.23 浏览:56
  • 使用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 浏览:74
  • 在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 浏览:70
  • 使用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 浏览:50
  • 在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 浏览:113
  • 使用Postfix和SpamAssassin内容过滤器阻止垃圾邮件

    在之前的文章中,我们讨论了如何使用iRedMail快速设置自己的邮件服务器,以及使用Postfix SMTP服务器阻止垃圾邮件的7种有效方法。在本文中,我将分享更多阻止垃圾邮件的提示和技巧。具体来说,我们将了解如何使用Postfix和SpamAssassin(SA)检查电子邮件标题和正文,以检测垃圾邮件。SpamAssassin是一款免费、开源、灵活且功能强大的反垃圾邮件工具。 使用Postfix SMTP服务器检查电子邮件头和正文 Postfix提供了4个简单的内容检查参数。 标题检查 mime_标题_检查 嵌套的u头u检查 身体检查 当使用上述任何参数时,Postfix将检查所有入站电子邮件。每个参数都指向一个包含正则表达式模式和操作的查找表。这些模式与电子邮件中的字符串(标题和正文)进行比较。如果Postfix找到匹配项,则执行指定的操作。页眉和正文检查由后缀清理守护程序完成。 后缀可以使用两种类型的正则表达式。 regexp:POSIX正则表达式 PCRE:Perl兼容的正则表达式 Postfix附带POSIX正则表达式支持,但PCRE要快得多。要在Postfix中使用PCRE,需要安装Postfix PCRE包。 sudo apt install postfix-pcre 运行以下命令,您将看到现在支持pcre。 postconf -m 标题检查 要在后缀中启用头_检查,请打开主配置文件。 sudo nano /etc/postfix/main.cf 在文件末尾添加以下行。 header_checks = pcre:/etc/postfix/header_checks 保存并关闭文件。然后需要使用命令行文本编辑器(如Nano)创建/etc/postfix/header_checks查找文件。 sudo nano /etc/postfix/header_checks 您可以像下面这样添加正则表达式检查。 /free mortgage quote/ REJECT /repair your credit/ REJECT lefthand键是一个由两个正斜杠包围的正则表达式。如果左侧的任何字符串出现在电子邮件的任何标题中(这些字符串很可能出现在主题:标题中),则在SMTP对话框中,邮件将被拒绝。默认情况下,正则表达式检查不区分大小写。 您也可以使用DISCARD,而不是REJECT。 /free mortgage quote/ DISCARD /repair your credit/ DISCARD 这将导致Postfix声明成功传递,并自动放弃邮件。DISCARD使消息看起来像是被传递的,即使它只是被扔掉了。当我不想让垃圾邮件发送者知道我屏蔽了一个特定的邮件短语时,我经常使用DISCARD。丢弃也有助于减少后向散射问题。如果一个无辜用户的电子邮件地址被用作发件人地址,您可以声称成功送达,这样无辜用户就不会收到跳转消息。 一些愚蠢的垃圾邮件发送者在To:标题中使用多个电子邮件地址,而不是使用盲抄送(BCC)。如果您确定某个电子邮件地址不会接受收件人:标题中有多个收件人的电子邮件,则可以添加以下行以丢弃此类电子邮件。 /To:.*(gmail.com|yahoo.com|outlook|hotmail.com).*[email protected]/ DISCARD /To:.*[email protected].*(gmail.com|yahoo.com|outlook|hotmail.com)/ DISCARD 以上几行将检查Gmail/Yahoo/Outlook/Hotmail地址和您的域电子邮件地址是否同时位于To:标题中。如果为真,则该电子邮件将被丢弃。两个字符。*是正则表达式中的通配符,可以与任何字符匹配。 如果您确定某个电子邮件地址不会在Cc:header中接受多个收件人的电子邮件,那么您也可能希望对Cc:(复写)邮件头执行相同的操作 /Cc:.*(gmail.com|yahoo.com|outlook|hotmail.com).*[email protected]/ DISCARD /Cc:.*[email protected].*(gmail.com|yahoo.com|outlook|hotmail.com)/ DISCARD 一些垃圾邮件发送者在发件人:或收件人:标题中使用空白电子邮件地址,您可以添加以下检查。 /To:.*<>/ DISCARD /From:.*<>/ DISCARD 编辑完头文件后,需要构建索引文件。 sudo postmap /etc/postfix/header_checks 然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix 身体检查 除了标题检查,Postfix还可以检查电子邮件的正文。要在后缀中启用body_检查,请打开主配置文件。 sudo nano /etc/postfix/main.cf 在文件末尾添加以下行。 body_checks = pcre:/etc/postfix/body_checks 保存并关闭文件。然后需要创建/etc/postfix/body_检查查找文件。 sudo nano /etc/postfix/body_checks 您可以像下面这样添加正则表达式检查。 /free mortgage quote/ REJECT /repair your credit/ REJECT 您可以使用DISCARD,而不是REJECT。 /free mortgage quote/ DISCARD /repair your credit/ DISCARD body_checks参数指示的模式将根据消息正文的每一行进行检查。如果leftland上的任何字符串出现在电子邮件正文中,则该邮件将被拒绝或丢弃。编辑完body_checks查找文件后,需要构建索引文件。 sudo postmap /etc/postfix/body_checks 然后重新启动Postfix以使更改生效。 sudo systemctl restart postfix SpamAssassin内容过滤器 Postfix中的内置内容检查非常简单。但是,没有办法将您可能希望接收的单个邮件列入白名单,尽管它们包含的短语会触发拒绝,并且您可能不希望基于单个规则拒绝或丢弃电子邮件。对于更复杂的分析,我们需要使用专门设计用于检测垃圾邮件的专用内容过滤器(如SpamAssassin)。 SpamAssassin是一个基于分数的系统。它将根据大量规则检查电子邮件,而不是Postfix中的单个规则。每条规则都会在消息的分数中添加或删除分数。如果分数足够高(默认为5.0),则该邮件被视为垃圾邮件。 安装SpamAssassin 注意:如果您使用iRedMail设置邮件服务器,那么SpamAssassin已经与Amavis一起安装,Amavis可以读取SpamAssassin规则。您不需要遵循本节中的说明。 运行以下命令从默认的Ubuntu软件存储库安装SpamAssassin。Spamc是SpamAssassin垃圾邮件过滤守护程序的客户端。 sudo apt install spamassassin spamc 在安装过程中,将自动创建debian spamd用户和组。spamassassin包安装的二进制文件名为spamd,它将在本地主机上的TCP端口783上侦听。 默认情况下,spamassassin systemd服务处于禁用状态,您可以使用以下选项在启动时启用自动启动: sudo systemctl enable spamassassin 然后开始吃SpamAssassin。 sudo systemctl start spamassassin 将SpamAssassin与Postfix SMTP服务器集成为一个Milter 有几种方法可以用于将SpamAssassin与Postfix集成。我更喜欢通过sendmail milter界面使用SpamAssassin,因为它允许我在收到非常高的分数(如8分)时拒绝电子邮件,因此收件人永远不会看到它。 从Ubuntu默认软件库安装spamass筛选器包。 sudo apt install spamass-milter 接下来,编辑/etc/postfix/main。cf文件,并在文件末尾添加以下行。 # Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = local:spamass/spamass.sock non_smtpd_milters = $smtpd_milters 如果您已经配置了OpenDKIM和OpenDMARC,那么这些行应该如下所示。命令很重要。 # Milter configuration milter_default_action = accept milter_protocol = 6 smtpd_milters = local:opendkim/opendkim.sock,local:opendmarc/opendmarc.sock,local:spamass/spamass.sock non_smtpd_milters = $smtpd_milters 如果尚未配置OpenDMARC,则应删除local:OpenDMARC/OpenDMARC。sock,来自smtpd_milters。 保存并关闭文件。现在打开/etc/default/spamass-milter文件并找到以下行。 #OPTIONS="${OPTIONS} -r 15" 取消这一行的注释,并将15更改为您首选的拒绝分数,例如8。 OPTIONS="${OPTIONS} -r 8" 如果某封邮件的分数超过8分,Spamassassin会拒绝该邮件,您会在/var/log/mail中找到如下消息。日志文件,表示它已被拒绝。 milter-reject: END-OF-MESSAGE  5.7.1 Blocked by SpamAssassin 如果希望发件人看到不同的拒绝文本,请添加-R(拒绝文本)选项,如下所示。 OPTIONS="-u spamass-milter -i 127.0.0.1 -R SPAM_ARE_NOT_ALLOWED_HERE" 保存并关闭文件。重新启动Postfix和Spamass Milter,使更改生效。 sudo systemctl restart postfix spamass-milter 注意:iRedMail用户需要启动SpamAssassin服务才能使用SpamMass milter。 sudo systemctl start spamassassin sudo systemctl enable spamassassin 使用SpamAssassin检查电子邮件标题和正文 SpamAssassin在/usr/share/SpamAssassin/目录中附带了许多垃圾邮件检测规则。请允许我解释一些规则。 在/usr/share/spamassassin/20_head_测试中。在cf文件中,可以找到以下两行。 header MISSING_HEADERS eval:check_for_missing_to_header() describe MISSING_HEADERS Missing To: header 第一行测试电子邮件中是否存在To:标题。第二行是可选的,解释了第一行的功能。大写字母是本测试的名称。 以下三行用于测试电子邮件中是否有Date:header。 header __HAS_DATE exists:Date meta MISSING_DATE !__HAS_DATE describe MISSING_DATE Missing Date: header 这三行用来测试邮件中是否有From:头。 header __HAS_FROM exists:From meta MISSING_FROM !__HAS_FROM describe MISSING_FROM Missing From: header 您可能希望使用SpamAssassin附带的Cron作业每天自动更新SpamAssassin的规则。如果是这样,请打开/etc/default/spamassassin文件,并将CRON=0更改为CRON=1。 为现有规则设置自定义分数 在50分中。cf和72_分数。在cf文件中,可以看到各种测试的默认分数。如果您认为某个测试的默认分数太低或太高,可以在/etc/spamassassin/local中设置自定义分数。cf文件。 sudo nano /etc/spamassassin/local.cf 例如,RFC 5322要求每封电子邮件都必须有From:和Date:标题字段,因此如果电子邮件中缺少这两个字段中的任何一个,我可以通过在local中添加以下两行来设置一个非常高的分数。cf文件。 score MISSING_FROM   5.0 score MISSING_DATE   5.0 虽然收件人:标题字段在RFC 5322中不是强制性的,但如果电子邮件中缺少该字段,我更愿意设置一个高分,因为我从未见过一封合法的电子邮件缺少该标题字段。 score MISSING_HEADERS 3.0 一些垃圾邮件发送者在From:header字段中使用两个电子邮件地址,如下所示。 From: "[email protected]" <[email protected]> 我认为这类邮件的默认分数很低,我更喜欢将其设置为3.0。 score PDS_FROM_2_EMAILS 3.0 有一些垃圾邮件发送者发送没有主题、正文中没有文本部分的空消息。我将这类邮件的分数设置为5.0,所以它将被放入垃圾邮件文件夹。如果它是空的,为什么还要读呢? score EMPTY_MESSAGE 5.0 而其他的垃圾邮件发送者经常要求你发送一份阅读回执,我将这种邮件的分数设置为2.0。 score FREEMAIL_DISPTO 2.0 有一些垃圾邮件发送者在From:和Reply To:标题中使用不同的域名,我给他们打3.5分。 score FREEMAIL_FORGED_REPLYTO 3.5 我还看到一些垃圾邮件发送者在From:header字段中使用不存在的域名。我给这类邮件打了5.0分。 score DKIM_ADSP_NXDOMAIN 5.0 最后但并非最不重要的是,许多垃圾邮件发送者欺骗了gmail。“发件人:标头”字段中的com域。我给这种邮件打了2.5分。 score FORGED_GMAIL_RCVD 2.5 添加自己的规则 您可以在/etc/SpamAssassin/local中添加自定义SpamAssassin规则。cf文件。 sudo nano /etc/spamassassin/local.cf 标题规则 例如,一些垃圾邮件发送者在From:和To:标题中使用相同的电子邮件地址,您可以在文件末尾添加以下行,为此类电子邮件添加分数。 header FROM_SAME_AS_TO ALL=~//nFrom: ([^/n]+)/nTo: /1/sm describe FROM_SAME_AS_TO From address is the same as To address. score FROM_SAME_AS_TO 2.0 一些垃圾邮件发送者使用空地址作为信封发件人地址(也称为返回路径标头)。虽然这对于发送反弹消息是合法的,但我更喜欢给这种电子邮件打分。 header EMPTY_RETURN_PATH ALL =~ /<>/i describe EMPTY_RETURN_PATH empty address in the Return Path header. score EMPTY_RETURN_PATH 3.0 如果您已经在邮件服务器上配置了OpenDMARC,现在可以添加以下行,为未通过DMARC检查的电子邮件添加分数。 header CUSTOM_DMARC_FAIL Authentication-Results =~ /dmarc=fail/ describe CUSTOM_DMARC_FAIL This email failed DMARC check score CUSTOM_DMARC_FAIL 3.0 上面的代码告诉SpamAssassin检查身份验证结果头是否包含字符串“dmarc=fail”。如果发现,将分数提高3.0。 身体规则 如果在邮件中发现某个短语,你可以告诉SpamAssassin增加邮件的分数。例如,许多垃圾邮件发送者在正文第一行使用收件人的电子邮件地址,如下所示。 Hi [email protected] Hello [email protected] Dear [email protected] 我不想和那些不把我的名字写在邮件第一行的人交谈。所以我在SpamAssassin中创建了一个规则来过滤这种邮件。 body BE_POLITE /(hi|hello|dear) xiao/@linuxbabe/.com/i describe BE_POLITE This email doesn't use a proper name for the recipient score BE_POLITE 5.0 SpamAssassin中的正则表达式默认区分大小写,您可以在末尾添加i选项,使其不区分大小写。 加上负分 你也可以给好的邮件加上负面分数,这样误报就会少一些。例如,我的许多博客读者问我Linux问题,我认为垃圾邮件发送者不会在邮件正文中包含Debian、Ubuntu、Linux Mint等词,所以我创建了以下规则。 body GOOD_EMAIL /(debian|ubuntu|linux mint|centos|red hat|RHEL|OpenSUSE|Fedora|Arch Linux|Raspberry Pi|Kali Linux)/i describe GOOD_EMAIL I don't think spammer would include these words in the email body. score GOOD_EMAIL -4.0 如果电子邮件正文包含Linux发行版的名称,则添加一个负数(-4.0)。 有一些常见的短语包含在合法的反弹消息中,所以我可以在这些电子邮件消息中添加否定分数。 body BOUNCE_MSG /(Undelivered Mail Returned to Sender|Undeliverable|Auto-Reply|Automatic reply)/i describe BOUNCE_MSG Undelivered mail notifications or auto-reply messages score BOUNCE_MSG -1.5 请注意,主体规则还包括主体作为主体内容的第一行。 元规则 除了标题和正文规则,还有元规则。元规则是其他规则的组合。您可以创建一个元规则,当两个或多个其他规则为真时触发。例如,我偶尔会收到电子邮件,说发件人想申请一份工作,并附上一份简历。我从来没有在我的网站上说过我需要雇人。该附件用于传播病毒。我创建了以下元规则来过滤此类电子邮件。 body __RESUME /(C.V|Resume)/i meta RESUME_VIRUS (__RESUME && __MIME_BASE64) describe RESUME_VIRUS The attachment contains virus. score RESUME_VIRUS 5.5 第一条规则“简历”测试电子邮件正文是否包含“简历”或“简历”字样。第二个子规则_MIME_BASE64已经在/usr/share/spamassassin/20_body_测试中定义。cf文件,如下所示,所以我不需要在本地重新定义它。cf文件。此规则测试电子邮件是否包含base64附件。 rawbody __MIME_BASE64 eval:check_for_mime('mime_base64_count') describe __MIME_BASE64 Includes a base64 attachment 我的元规则RESUME_病毒将在两个子规则都为真时触发,在电子邮件消息中增加5.5分。请注意,子规则通常以双下划线开头,因此它本身没有分数。 现在,您学习了如何在找到字符串时添加分数。如果你想在邮件标题中不存在字符串的情况下添加分数怎么办?好吧,你可以用这个!操作人员例如,我看到垃圾邮件发送者在发件人地址中使用一个单词。我添加了以下几行来给这类邮件打分。 header __AT_IN_FROM From =~ //@/ meta NO_AT_IN_FROM !__AT_IN_FROM score NO_AT_IN_FROM 4.0 第一行检查From:头中是否存在@符号。第二行定义了一个元规则,当__是真的__AT_IN_FROM规则与第一个头规则相反,这意味着当FROM:地址中没有@符号时,元规则将触发。 您还可以添加以下行来检查From:地址中是否存在点。 header __DOT_IN_FROM From =~ //./ meta NO_DOT_IN_FROM !__DOT_IN_FROM score NO_DOT_IN_FROM 4.0 白名单 您可以使用whitelist_from参数将特定的电子邮件地址或域添加到Spamassassin白名单中。例如,在local的末尾添加以下两行。cf文件。 whitelist_from [email protected] whitelist_from *@canonical.com 被列入白名单的发件人的默认分数为-100。他们仍将接受SpamAssassin规则的测试,但要达到5.0分对他们来说非常困难。 黑名单 要将发件人列入黑名单,请使用blacklist_from参数,该参数的格式与whitelist_from相同。 blacklist_from [email protected] blacklist_from *@example.org 检查语法并重新启动 在拯救了当地人之后。cf文件。您应该在lint模式下运行spamassassin命令,以检查是否存在任何语法错误。 sudo spamassassin --lint 然后重新启动SpamAssassin,使更改生效。(如果像在iRedMail中一样将Amavis与Spamassasin一起使用,只需重新启动Amavis:sudo systemctl restart Amavis) sudo systemctl restart spamassassin Spamasassin的内置白名单 值得一提的是,Spamasassin有自己的白名单。在/usr/share/spamassassin/目录下有几个文件,文件名中包含60_白名单。这些文件包含SpamAssassin的内置白名单。例如,60_白名单_spf。cf文件包含发送邮件的地址列表,这些邮件通常被(错误地)标记为垃圾邮件。 将垃圾邮件移到垃圾邮件文件夹中 注意:iRedMail已对其进行了开箱即用的配置。 我将向您展示如何使用Dovecot IMAP服务器和sieve插件将垃圾邮件移动到垃圾邮件文件夹。此方法要求通过Dovecot“deliver”LDA(本地传递代理)将入站电子邮件传递到消息存储。如果您可以在/var/log/mail中找到以下文本。日志文件,则满足此要求。 postfix/lmtp 或 delivered via dovecot service 从Ubuntu软件库运行以下命令install dovecot sieve。 sudo apt install dovecot-sieve 这个包在/etc/dovecot/conf.d/目录下安装两个配置文件:90 sieve。conf和90个程序。形态打开15 lda。conf文件。 sudo nano /etc/dovecot/conf.d/15-lda.conf 将sieve插件添加到本地交付代理(LDA)。 protocol lda { # Space separated list of plugins to load (default is global mail_plugins). mail_plugins = $mail_plugins sieve } 保存并关闭文件。如果你能找到20个lmtp。conf文件位于/etc/dovecot/conf.d/目录下,那么您还应该在该文件中启用sieve插件,如下所示。 protocol lmtp { mail_plugins = quota sieve } 编辑/etc/dovecot/conf.d/10-mail。conf文件。 sudo nano /etc/dovecot/conf.d/10-mail.conf 筛选脚本存储在每个用户的主目录下。如果您遵循我的PostfixAdmin教程并使用虚拟邮箱域,那么您需要通过在文件中添加以下行来为虚拟用户启用mail_home,因为默认情况下虚拟用户没有主目录。 mail_home = /var/vmail/%d/%n 保存并关闭文件。然后打开90号筛子。conf文件。 sudo nano /etc/dovecot/conf.d/90-sieve.conf 转到第79行,添加下一行,它告诉siever始终执行SpamToJunk。在任何特定于用户的脚本之前筛选脚本。 sieve_before = /var/mail/SpamToJunk.sieve 保存并关闭文件。然后创建筛选脚本。 sudo nano /var/mail/SpamToJunk.sieve 添加以下行,告诉Dovecot将任何带有X-Spam-Flag:YES标题的电子邮件移动到垃圾邮件文件夹中。 require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "Junk"; stop; } 保存并关闭文件。我们可以编译这个脚本,所以它会运行得更快。 sudo sievec /var/mail/SpamToJunk.sieve 现在有一个二进制文件保存为/var/mail/SpamToJunk。斯文。最后,重启dovecot以使更改生效。 sudo systemctl restart dovecot 设置消息的最大大小 默认情况下,SpamAssassin不会检查附件大于500KB的邮件,如/var/log/mail中的以下行所示。日志文件。 spamc[18922]: skipped message, greater than max message size (512000 bytes) 默认最大大小设置为512000(字节)。高值可能会增加服务器负载,但我认为默认大小有点小。要增加最大大小,请编辑/etc/default/spamass-milter文件,并在末尾添加以下行。 #Spamc options OPTIONS="${OPTIONS} -- --max-size=5120000" 空--选项告诉spamass milter将所有剩余选项传递给spamc,spamc理解--max size选项。我将大小增加到5000KB。保存并关闭文件。然后重启spamass milter。 sudo systemctl restart spamass-milter 如何配置个人用户首选项 您可能需要为发送到邮件服务器上特定地址的电子邮件设置自定义规则。我非常喜欢这个功能。我有这个博客的联系电子邮件地址,它只用于与读者保持联系。我不在其他地方使用联系人电子邮件地址,因此我可以创建只适用于此联系人电子邮件地址的特殊垃圾邮件过滤规则。 首先,编辑SpamAssassin主配置文件。 sudo nano /etc/spamassassin/local.cf 添加以下行以允许用户规则。 allow_user_rules 1 保存并关闭文件。接下来,编辑SpamAssassin环境文件。 sudo nano /etc/default/spamassassin 找到下面这行。 OPTIONS="--create-prefs --max-children 5 --helper-home-dir" 我们需要把它改成 OPTIONS="--create-prefs --max-children 5 --helper-home-dir --nouser-config --virtual-config-dir=/var/vmail/%d/%l/spamassassin --username=vmail" 哪里: --nouser config:为本地Unix用户禁用每用户配置文件。 --虚拟配置目录:为虚拟用户指定每用户配置目录。%d占位符代表电子邮件地址的域部分,%l代表电子邮件地址的本地部分。 --用户名:以vmail用户身份运行spamd。 保存并关闭文件。然后重启SpamAssassin。 sudo systemctl restart spamassassin 默认情况下,spamass milter只将电子邮件地址的本地部分发送给SpamAssassin。我们需要让它发送完整的电子邮件地址。编辑spamass milter配置文件。 sudo nano /etc/default/spamass-milter 找到下面这行。 OPTIONS="-u spamass-milter -i 127.0.0.1 -R SPAM_ARE_NOT_ALLOWED_HERE" 将以下选项添加到此行。 -e yourdomain.com 这样地: OPTIONS="-e yourdomain.com -u spamass-milter -i 127.0.0.1 -R SPAM_ARE_NOT_ALLOWED_HERE" e选项将使spamass milter将完整的电子邮件地址传递给SpamAssassin。替换你的域名。使用你的真实域名。保存并关闭文件。然后重启spamass milter。 sudo systemctl restart spamass-milter 现在从Gmail、Hotmail等发送电子邮件到您的域电子邮件地址。您会发现spamassassin目录是在/var/vmail/yourdomain下自动创建的。com/username/directory。 cd /var/vmail/yourdomain.com/username/spamassassin/ 您可以使用命令行文本编辑器在此处创建每个用户的首选项文件。此文件必须命名为user_prefs。 sudo nano user_prefs 您可以在该文件中添加自定义规则,就像在/etc/spamassassin/local中一样。cf文件。 例如,我发现许多垃圾邮件发送者在他们的邮件正文末尾添加了一个“取消订阅”链接,让你删除未来的联系人。我没有订阅他们的垃圾邮件,我不认为取消订阅链接会从他们的联系人数据库中删除我的电子邮件地址。所以我用SpamAssassin给这类邮件打分。以下规则为含有“unsubscribe”一词或其变体的电子邮件加3.0分。(我不使用本博客的联系人电子邮件地址在线订阅任何内容。) body SUBSCRIPTION_SPAM /(unsubscribe|u n s u b s c r i b e|Un-subscribe)/i describe SUBSCRIPTION_SPAM I didn't subscribe to your spam. score SUBSCRIPTION_SPAM 3.0 有时邮件正文中不包含“取消订阅”一词,但有一个列表取消订阅标题,这意味着垃圾邮件发送者在未经我同意的情况下将我的联系人电子邮件地址添加到他们的邮件列表中。我也可以根据以下规则给这类邮件打分。 header LIST_UNSUBSCRIBE ALL =~ /List-Unsubscribe/i describe LIST_UNSUBSCRIBE I didn't join your mailing list. score LIST_UNSUBSCRIBE 2.0 我用不同的电子邮件地址创建了一个Mailjet帐户。一些垃圾邮件发送者认为我使用我的联系电子邮件地址创建了Mailjet帐户,所以他们试图模拟Mailjet客户服务,诱使我在虚假的Mailjet登录页面上输入密码。我可以像下面这样给这类邮件打分。 header MAILJET_IMPOSTER From =~ /mailjet/i describe MAILJET_IMPOSTER I don't have a mailjet account for this email address. score MAILJET_IMPOSTER 2.5 以上几行检查From:标题是否包含单词mailjet。如果发现,给2.5分。 我偶尔会收到来自中国垃圾邮件发送者的电子邮件,其发件人:域名没有元音字母(a、e、I、o、u)。垃圾邮件发送者使用了cdjcbzclyxgs。xyz域名。考虑到许多顶级域名已经包含元音字母(.com、.net、.org、.co、.io、.shop、.dev等),一个普通人/实体几乎不可能使用没有元音字母的域名,所以我给这种电子邮件打了一个很高的分数,如下所示。默认分数为0.5。 score FROM_DOMAIN_NOVOWEL 4.0 一些垃圾邮件在体内使用许多图像,但包含很少的文本。这类邮件的默认分数是1.9,但我更喜欢为我的联系人电子邮件地址设置高分。 score HTML_IMAGE_RATIO_02 4.0 我还收到了一封主题为我的电子邮件地址的垃圾邮件,所以我可以给它加一个高分。 header SUBJECT_SPAM Subject =~ /xiao/@linuxbabe.com/i describe SUBJECT_SPAM Subject contains my email address. score SUBJECT_SPAM 4.0 一些垃圾邮件发送者使用密件抄送(BCC)来隐藏其他收件人。我不想收到这样的电子邮件。所以我制定了以下规则。如果我的域名不在收件人:标题中,请在电子邮件中添加3.0。 header __DOMAIN_IN_TO To =~ /linuxbabe.com/ meta DOMAIN_NOT_IN_TO !__DOMAIN_IN_TO score DOMAIN_NOT_IN_TO 3.0 添加自定义规则后,关闭文件并运行以下命令检查语法。无声输出意味着没有语法错误。 sudo spamassassin --lint 最后,重新启动SpamAssassin以使更改生效。 sudo systemctl restart spamassassin 现在,您可以通过从其他电子邮件服务向自己的域电子邮件地址发送测试电子邮件来测试用户偏好。 特定电子邮件地址的白名单 假设您有一个电子邮件地址,可以接收来自几个电子邮件地址的电子邮件,并且您希望阻止所有其他发件人。这很容易做到。转到/var/vmail/yourdomain。com/username/spamassassin/directory并创建用户prefs文件。然后将允许的电子邮件地址添加到白名单中。 whitelist_from *@your-own-domain.com whitelist_from [email protected] 接下来,将所有域添加到黑名单中。 blacklist_from * 保存并关闭文件。重新启动SpamAssassin以使更改生效。 sudo systemctl restart spamassassin 拒绝或反弹 如果接收SMTP的服务器在SMTP对话期间确定它将不接受该邮件,则会拒绝该邮件。有时SMTP服务器会接受邮件,然后发现无法传递,可能是目标收件人不存在,或者最终传递时出现问题。在这种情况下,接受邮件的SMTP服务器通过发送错误报告将邮件反弹回原始发件人,通常包括无法传递原始邮件的原因。 您不应该反弹垃圾邮件,因为返回路径:header或From:header中的电子邮件地址可能不存在,或者是无辜者的电子邮件地址,因此反弹消息可能会转到无辜者的电子邮件地址,从而产生反向散射问题。在接受电子邮件之前,您应该在SMTP对话框中拒绝垃圾邮件,而不是反弹垃圾邮件。这篇文章没有显示你转发垃圾邮件。你应该记住这条规则,以防你自己创建垃圾邮件过滤规则。如果有疑问,测试你的垃圾邮件过滤规则,看看它是否会产生反弹消息。 URIBL_阻塞 默认情况下,SpamAssassin启用URIBL规则,该规则检查电子邮件是否包含URIBL标识为垃圾邮件的链接。这是一个非常有效的反垃圾邮件措施。但是,您可能无法查询URIBL。检查入站电子邮件的原始电子邮件标题,找到X-Spam-Status标题。 X-Spam-Status: No, score=-92.2 required=5.0 tests=DATING_SPAM,DKIM_SIGNED, DKIM_VALID,HTML_FONT_LOW_CONTRAST,HTML_MESSAGE,SPF_PASS, SUBSCRIPTION_SPAM,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_IN_WHITELIST autolearn=no autolearn_force=no version=3.4.2 如果你能在这个标题中找到URIBL_BLOCKED,那就意味着你无法查询URIBL。大多数情况下,这是因为您没有使用自己的本地DNS解析程序。您可以在邮件服务器上运行以下命令,以测试用于查询URIBL的DNS服务器。 host -tTXT 2.0.0.127.multi.uribl.com 样本输出: 2.0.0.127.multi.uribl.com descriptive text "127.0.0.1 -> Query Refused. See http://uribl.com/refused.shtml for more information [Your DNS IP: xx.xx.xx.xx]" 要修复此错误,您需要在邮件服务器上运行自己的本地DNS解析器。 在Debian上运行自己的绑定DNS解析器 在Ubuntu 18.04和16.04上运行自己的绑定DNS解析器 在Ubuntu 20.04上运行你自己的绑定DNS解析器 在CentOS/RHEL上运行自己的绑定DNS解析程序 一旦本地DNS解析器启动并运行,请再次测试URIBL。 host -tTXT 2.0.0.127.multi.uribl.com 如果您看到以下输出,这意味着您现在可以查询URIBL。 2.0.0.127.multi.uribl.com descriptive text "permanent testpoint" 从现在开始,入站电子邮件不会在X-Spam-Status标题中包含URIBL_BLOCKED标签。 防止传出垃圾邮件 后缀头和正文检查也可用于防止传出垃圾邮件。例如,如果您不希望电子邮件服务器向特定的电子邮件地址发送电子邮件,可以在/etc/postfix/header_检查中添加以下行。 /^To:.*fake.*/ DISCARD 上面这行测试To:标题是否包含假单词。如果找到,请丢弃电子邮件。我只是举一个简单的例子。当你的网站上有一张联系表格或注册表格,一些访问者使用表格上的假电子邮件地址在你的电子邮件服务器上生成垃圾邮件时,这可能很有用。 保存并关闭文件。然后运行以下命令重建哈希表。 sudo postmap /etc/postfix/header_checks 重新加载后缀以使更改生效。 sudo systemctl reload postfix 删除发送电子邮件的邮件头 您可以使用smtp_头_检查删除可能显示敏感信息的电子邮件头。smtp_头_检查仅在Postfix充当smtp客户端时应用,因此不会影响传入的电子邮件。 例如,您可能不想让收件人知道您正在邮件服务器上使用SpamAssassin,然后可以创建/etc/postfix/smtp_头_checks文件 sudo nano /etc/postfix/smtp_header_checks 并在文件中添加以下行。这会告诉Postfix在发送电子邮件时从电子邮件中删除X-Spam-Status和X-Spam-Checker-Version标题。 /^X-Spam-Status:/ IGNORE /^X-Spam-Checker-Version:/ IGNORE 保存并关闭文件。然后编辑后缀主配置文件。 sudo nano /etc/postfix/main.cf 在文件末尾添加以下行。 smtp_header_checks = pcre:/etc/postfix/smtp_header_checks 保存并关闭文件。接下来,运行以下命令。 sudo postmap /etc/postfix/smtp_header_checks 重新加载后缀以使更改生效。 sudo systemctl reload postfix 其他花絮 Debian/Ubuntu上的spamassassin包附带了一个Cron作业(/etc/Cron.daily/spamassassin),可以使用sa update命令每天自动更新规则集。 SpamAssassin 4.0包含一个HashBL插件,可以检查邮件正文中的比特币地址是否被骗子使用。还有一个名为“Ole宏”的新插件,可以检查电子邮件是否包含带有宏的Office附件。该插件将尝试检测被攻击的宏是否恶意。 收尾 我希望本教程能帮助您使用PostFix和SpamAssassin来过滤垃圾邮件。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.23 浏览:38
  • 在Debian 10 Buster上设置绑定权威DNS服务器

    本教程将向您展示如何使用广泛使用的BIND 9软件在Debian 10 Buster上设置和运行自己的权威名称服务器。 注意:本教程展示了命令行方法。如果您想从web GUI编辑DNS记录,我建议使用Webmin设置权威DNS服务器,这是一个免费的开源服务器控制面板。 什么是权威DNS服务器? 如果您拥有一个域名,并且希望您自己的DNS服务器为您的域名处理名称解析,而不是使用您的域名注册商的DNS服务器,那么您需要设置一个权威的DNS服务器。 域名所有者使用权威DNS服务器来存储DNS记录。它为DNS解析程序(如8.8.8.8或1.1.1.1)提供权威答案,这些解析程序代表终端用户在PC、智能手机或平板电脑上查询DNS记录。 关于BIND BIND(Berkeley Internet Name Domain)是一款开源、灵活、功能齐全的DNS软件,由于其稳定性和高质量,在Unix/Linux上得到了广泛应用。它最初是由加州大学伯克利分校开发的,后来在1994年,它的开发转移到了互联网系统联盟(ISC)。 BIND可以同时充当区域的权威DNS服务器和DNS解析程序。DNS解析程序也可以称为递归名称服务器,因为它为最终用户执行递归DNS查找。然而,同时扮演两个角色并不有利。在两台不同的机器上分离这两个角色是一种很好的做法。 在前一篇文章中,我解释了在Debian 10 Buster上设置本地DNS解析器的步骤。本教程将向您展示如何在Debian 10 Buster上将BIND9设置为仅限权威的DNS服务器,并禁用递归。 先决条件 要学习本教程,您应该已经购买了域名。我在namescape注册了我的域名,因为价格低廉,而且他们终身免费保护whois的隐私。 你还需要两台服务器。一台服务器用于主DNS服务器,另一台用于从DNS服务器。理想情况下,这两台服务器应该位于不同的物理位置。如果一个DNS服务器处于脱机状态,另一个DNS服务器仍然可以回答您的域名的DNS查询。 每台服务器只需要512MB内存,以下是我推荐的主机提供商。我都用过了。 Vultr:起价为每月2.5美元。需要信用卡。你可以通过我的推荐链接在Vultr创建一个账户,获得50美元的免费信用。 DigitalOcean:起价为每月5美元。不需要信用卡。你可以用贝宝。你可以通过我的推荐链接在DigitalOcean创建一个帐户,获得50美元的免费信用。 购买两台服务器后,在其上安装Debian 10,并按照以下说明操作。 请注意,在Debian上安装软件时,您需要拥有root权限。可以在命令开头添加sudo,或者使用su-command切换到root用户。 使用BIND9在Debian 10 Buster上设置权威DNS服务器 您需要在两台服务器上运行本节中的命令。 通过SSH登录这两台服务器,并运行以下命令,从默认存储库在Debian 10服务器上安装BIND 9。BIND 9是当前版本,BIND 10是一个死项目。 sudo apt update sudo apt install bind9 bind9utils bind9-doc 检查版本号。 named -v 样本输出: BIND 9.11.5-P4-5.1-Debian (Extended Support Version) <id:998753c> 要检查版本号和生成选项,请运行 named -V 默认情况下,绑定在安装后自动启动。您可以通过以下方式检查其状态: systemctl status bind9 输出: ● bind9.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: en Active: active (running) since Sun 2019-07-14 10:27:56 UTC; 4min 6s ago Docs: man:named(8) Main PID: 1481 (named) Tasks: 4 (limit: 1149) Memory: 13.7M CGroup: /system.slice/bind9.service └─1481 /usr/sbin/named -u bind 提示:如果上述命令没有立即退出,请按Q。 如果它没有运行,那么从以下内容开始: sudo systemctl start bind9 并在启动时启用自动启动: sudo systemctl enable bind9 BIND服务器将以BIND用户的身份运行,该用户是在安装过程中创建的,并在TCP和UDP端口53上侦听,如运行以下命令所示: sudo netstat -lnptu | grep named 绑定守护进程被称为named。(守护进程是在后台运行的软件。)命名的二进制文件由bind9包安装,还有另一个重要的二进制文件:rndc,远程名称守护程序控制器,由bind9utils包安装。rndc二进制文件用于重新加载/停止和控制绑定守护进程的其他方面。通信通过TCP端口953完成。 例如,我们可以检查绑定名称服务器的状态。 sudo rndc status 主绑定配置文件/etc/BIND/named。conf从其他3个文件中获取设置。 /etc/bind/named。形态选项 /etc/bind/named。conf.local /etc/bind/named。conf.default-zones Debian上的BIND9服务器提供了本地主机和本地网络客户端的递归服务。由于我们正在设置权威DNS服务器,因此需要禁用递归。编辑/etc/bind/named。conf.options文件。 sudo nano /etc/bind/named.conf.options 在options{…}子句中添加以下行。 // hide version number from clients for security reasons. version "not currently available"; // disable recursion on authoritative DNS server. recursion no; // enable the query log querylog yes; // disallow zone transfer allow-transfer { none; }; 从技术上讲,您只需要添加递归no;禁用递归,但最好添加其他3条指令。保存并关闭文件。然后重启BIND。 sudo systemctl restart bind9 主DNS服务器配置 从两台服务器中选择一台作为主DNS服务器。我们将把它命名为ns1。实例通用域名格式。 主DNS服务器保存区域文件的主副本。在此服务器上更改DNS记录。一个域可以有一个或多个DNS区域。每个DNS区域都有一个区域文件,其中包含该区域中的每个DNS记录。为了简单起见,本文假设您希望使用单个DNS区域来管理您的域名的所有DNS记录。 /etc/bind/named。conf.default-zones文件定义根区域和本地主机区域。要为域名添加区域,请编辑/etc/bind/named。conf.local文件。 sudo nano /etc/bind/named.conf.local 将以下行添加到此文件。替换示例。使用你自己的域名。将12.34.56.78替换为从属DNS服务器的IP地址。 zone "example.com" { type master; file "/etc/bind/db.example.com"; allow-query { any; }; allow-transfer { 12.34.56.78; }; }; 在上述配置中,我们使用zone子句创建了一个新区域,并指定这是主区域。区域文件是/etc/bind/db。实例com,我们将在其中添加DNS记录。仅允许从DNS服务器进行区域传输。 我们可以使用区域模板文件,而不是从头创建区域文件。复制数据库的内容。空到一个新文件。 sudo cp /etc/bind/db.empty /etc/bind/db.example.com 区域文件可以包含3种类型的条目: 注释:以分号(;)开头 指令:以美元符号($)开头 资源记录:又名DNS记录 区域文件通常由以下类型的DNS记录组成。 SOA(授权开始)记录:定义区域的关键特征。这是区域文件中的第一个DNS记录,是必需的。 NS(名称服务器)记录:指定用于存储DNS记录和回答域名DNS查询的服务器。区域文件中必须至少有两条NS记录。 MX(邮件交换器)记录:指定哪些主机负责域名的电子邮件传递。 (地址)记录:将DNS名称转换为IPv4地址。 AAAA(Quad A)记录:将DNS名称转换为IPv6地址。 CNAME记录(规范名称):用于为DNS名称创建别名。 TXT记录:SPF、DKIM、DMARC等。 现在,让我们编辑区域文件。 sudo nano /etc/bind/db.example.com 默认情况下,它如下所示: 你可以改成这个。 哪里 $TTL指令定义区域的默认生存时间值,即DNS记录可以缓存在DNS解析程序上的时间。该指令是强制性的。时间以秒为单位。 $ORIGIN指令定义基本域。 域名必须以点(.)结尾,这是根域。当域名以点结尾时,它是一个完全限定的域名(FQDN)。 @符号引用基本域。 在DNS类中。它代表互联网。存在其他DNS类,但很少使用。 区域文件中的第一条记录是SOA(授权开始)记录。此记录包含以下信息: 主DNS服务器。 区域管理员的电子邮件地址。RFC 2142建议使用电子邮件地址[email&#160;protected]。在区域文件中,此电子邮件地址采用以下形式:hostmaster。实例com,因为@符号在区域文件中有特殊含义。 区域序列号。序列号是从DNS服务器跟踪区域变化的一种方式。按照惯例,序列号采用日期格式:yyyymmddss,其中yyyy是四位数字的年份号,mm是月份,dd是日期,ss是日期的序列号。更改区域文件时,必须更新序列号。 刷新值。当达到刷新值时,从DNS服务器将尝试从主DNS服务器读取SOA记录。如果序列号变高,则启动区域传输。 重试值。定义从DNS服务器无法连接到主DNS服务器时的重试间隔(以秒为单位)。 到期:如果从属DNS服务器在这段时间内未能与主DNS服务器联系,则从属DNS服务器将停止响应此区域的DNS查询。 负缓存TTL:为不存在的DNS名称(NXDOMAIN)定义DNS响应的生存时间值。 TXT记录通常用双引号括起来。如果添加DKIM记录,还需要用括号括起该值。 保存并关闭文件。然后运行以下命令检查主配置文件中是否存在语法错误。无声输出表示未发现错误。 sudo named-checkconf 然后检查区域文件的语法。 sudo named-checkzone example.com /etc/bind/db.example.com 如果区域文件中存在语法错误,则需要修复它,否则将无法加载此区域。以下消息表示没有语法错误。 zone example.com/IN: loaded serial 2019011503 OK 然后重启BIND9。 sudo systemctl restart bind9 如果您使用的是简单防火墙(UFW),请打开TCP和UDP端口53。 sudo ufw allow 53/tcp sudo ufw allow 53/udp 如果您直接使用iptables防火墙,请运行以下命令。 sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT 从DNS服务器配置 现在我们使用另一台服务器作为从DNS服务器,它将被命名为ns2。实例通用域名格式。 首先,编辑命名文件。conf.local文件。 sudo nano /etc/bind/named.conf.local 添加一个如下所示的区域。将12.34.56.78替换为主DNS服务器的IP地址。 zone "example.com" { type slave; file "db.example.com"; allow-query { any; }; masters { 12.34.56.78; }; }; 在上面的配置中,我们指定这是示例中的从属DNS服务器。它将只接受来自主DNS服务器的区域传输。 保存并关闭文件。然后运行以下命令检查主配置文件中是否存在语法错误。 sudo named-checkconf 如果没有发现错误,请重新启动BIND9。 sudo systemctl restart bind9 从DNS服务器上的区域文件是从区域传输加载的,该传输用于同步从主DNS服务器到从DNS服务器的DNS记录更改。BIND9重新启动后,区域传输将立即启动。使用以下命令检查BIND9日志。 sudo journalctl -eu bind9 您可以看到如下消息,这表明区域传输成功。 named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec) 区域文件将另存为/var/cache/bind/db。实例从DNS服务器上的com。 如果您使用的是简单防火墙(UFW),请打开TCP和UDP端口53。 sudo ufw allow 53/tcp sudo ufw allow 53/udp 如果您直接使用iptables防火墙,请运行以下命令。 sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT 更多关于区域转移的信息 当达到SOA记录中的刷新时间时,从属DNS服务器将再次联系主服务器,如果主服务器上的序列号大于从属服务器上的序列号,则将启动区域传输。有两种类型的区域转移: 完整区域传输(AXFR):传输区域文件的完整副本。 增量区域传输(IXFR):仅传输更改的DNS记录。 两种类型的区域传输都使用TCP端口53。默认情况下,从属DNS服务器上的绑定将请求增量区域传输,而主DNS服务器上的绑定仅在区域是动态的情况下才允许增量区域传输。 区域传输间隔是DNS记录更改传播速度的主要因素。当区域发生更改时,绑定主机将通知从属DNS服务器,而不是等待从属DNS服务器联系。这可以大大缩短将区域更改传播到Internet的时间。 反向区 反向区域包含将IP地址映射到DNS名称的PTR记录。它是DNS A记录的对应项。PTR记录通常是邮件服务器通过垃圾邮件过滤器所必需的。此记录不属于域。您需要在主机提供商的控制面板上创建PTR记录,或者询问您的ISP,所以我不打算在BIND中介绍创建反向区域。 更改NS记录并创建胶水记录 现在你需要去你的域名注册商的网站更改你的域名的NS记录,这样互联网就会知道你现在正在使用自己的DNS服务器。通常在NS记录中使用主机名,比如ns1。实例com和ns2。实例通用域名格式。 name server 1:   ns1.example.com name server 2: ns2.example.com 如果你有一个域名的例子。com,您使用一个子域作为权威DNS服务器(ns1.example.com和ns2.example.com),然后您还需要在您的域注册器上创建一个粘合记录,以便Internet可以知道您的DNS服务器的IP地址。胶水记录是ns1的A记录。实例com和ns2。实例通用域名格式。 ns1.example.com        IP-address-of-master-server ns2.example.com IP-address-of-slave-server 上述信息将通过可扩展配置协议(EPP)发送给运行TLD DNS服务器的注册运营商,以便TLD DNS服务器知道您的域名的权威DNS服务器的名称和IP地址。根据您使用的域注册器,您的NS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io检查您的新NS记录是否处于活动状态。 我将向你展示如何在namescapet上实现这一点。 如果你在NameCheap购买了域名,请登录你的NameCheap帐户。选择左侧边栏上的域列表菜单,然后单击最右侧的管理按钮。 选择高级DNS。 滚动到页面底部,您将找到个人DNS服务器部分。单击添加名称服务器按钮添加您自己的名称服务器:ns1。实例com和ns2。实例通用域名格式。您需要输入名称服务器的IP地址。 添加两个名称服务器后,单击搜索按钮检查它们是否已成功添加。如果是这样,胶水记录将显示在此页面底部。 现在单击“域”选项卡,并使用自定义DNS服务器。 根据您使用的域注册器,您的NS记录可能会立即传播,或者传播可能需要24小时。你可以去https://dnsmap.io检查您的新NS记录是否处于活动状态。 胶水记录和NS记录传播到Internet后,DNS服务器将响应域名的DNS查询。您可以通过以下方式查看查询日志: sudo journalctl -eu bind9 您还可以使用dig实用程序检查域名的NS记录。 dig NS example.com 如果NS记录和glue记录已传播到Internet,您应该在“答案”部分看到您的名称服务器。如果您看到SERVFAIL错误,可能是因为您没有在名称服务器上打开UDP端口53。 需要知道的事情 术语主DNS服务器仅表示此服务器存储区域文件的主副本。在DNS解析方面,它没有更高的优先级。 更改区域文件时,请始终更新SOA序列号。 启用解析器 BIND可以同时充当区域的权威DNS服务器和DNS解析程序。在两台不同的机器上分离这两个角色是一种很好的做法,在本文中,我们在BIND中禁用了解析器。如果您真的想启用解析器,请按照以下说明操作。 编辑绑定配置文件。 sudo nano /etc/bind/named.conf.options 找到下面几行。 // disable recursion on authoritative DNS server. recursion no; 将它们更改为以下内容,这样只有受信任的IP地址才能向DNS解析程序发送递归查询,而您的服务器将不会是开放的解析程序。 // allow recursion for trusted clients only. recursion yes; allow-query { localhost; 12.34.56.78; }; 将12.34.56.78替换为您自己的IP地址。保存并关闭文件。确保在/etc/bind/named中定义区域。conf.local文件具有以下选项,因此Internet可以查询您所在区域的DNS记录。 allow-query { any; }; 然后重启BIND。 sudo systemctl restart bind9 去https://openresolver.com/测试绑定服务器是否为开放式解析程序。 收尾 就这样!我希望本教程能帮助您使用BIND9在Debian 10 Buster上设置权威DNS服务器。和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心?

    2022.03.24 浏览:50