为iOS和macOS自托管您自己的StrongSwan IKEv2 / IPsec最新VPN服务器

如果使用教程配置了strongSwan,则很可能使用的是弱加密。 我曾是。 在升级设置之前,您可以按照以下方法进行检查。

了解您使用VPN的方式,跳至操作方法

序幕

如果您了解Internet隐私,那么您可能会担心公共Wi-Fi网络如何容易受到欺骗和中间人攻击。 您的互联网服务提供商(或ISP)可能如何记录您的每笔上网行为。 一些DNS提供商如何记录您使用的应用程序以及您的浏览习惯。 简而言之,有多少公司正在努力(并成功地)在线跟踪您。

许多人建议使用Tor或虚拟专用网(或VPN)来减少您与这些公司共享的在线业务量,并且猜测,这是绝对正确的。 话虽如此,仅使用VPN并不是万灵药,而且这个故事(也许过多地)解释了原因。

免责声明#1:如果您使用VPN匿名。 你不是! VPN不是匿名工具。 Tor是更好的选择,但是即使使用Tor,您的身份也可能被泄露。

免责声明#2:如果您使用VPN盗版您可以负担得起并关心隐私的应用程序,电影或音乐, 请不要这样做 。 互联网之所以混乱,部分原因是公司被迫通过广告和数据挖掘来获利,这就是为什么我们如此之高地被追踪的原因。 民族国家政策是另一个原因,但这是另一个原因。

在这个故事中,我将带您了解隐私,并解释为什么我建议始终使用VPN(即使在家中)。 为什么仅使用VPN不能解决所有隐私问题。 为什么使用第三方VPN提供商可能不是我们最好的隐私选择。 最后,我将解释为什么我建议strongSwan,以及如何使用最新的加密技术来自我托管自己的VPN服务器:具有128位ICV的256位AES-GCM,SHA2_384 PRF和具有3072的Diffie Hellman位模量。

始终使用VPN(即使在家中)

相信我,连接免费Wi-Fi极具诱惑力。 话虽如此,连接到免费Wi-Fi(即使受到WPA2的保护)也会损害您的隐私和安全性。 我将简短地整理一段视频,以说明为什么但现在暂时(隐喻地)闭上眼睛,并对在接入点(或Wi-Fi路由器)和计算机之间流动的所有这些字节数据进行成像。 使用Wireshark可以轻松拦截其中的每一个。 在理想情况下,计算机发送和接收的所有字节都将使用TLS进行加密,但事实并非如此。 再说一次,即使是这样,如果有人站在中间并破解这些字节该怎么办。 这称为中间人攻击。 当心“您的连接不安全”错误。 如果得到一个,请立即关闭窗口! 您可能是其中一个的受害者。

现在,在家里,您可以信任网络吗? 错误。 您的ISP可能正在记录您的在线所有举动。 简而言之,我建议即使在家中也要始终使用VPN。

VPN本身并不能解决所有隐私问题

假设您是一个狂热的VPN用户。 您可能会猜测您的隐私得到了保护。 不幸的是,不是,这就是原因。 VPN仅在正确配置和连接后才有效。 为了连接,您的计算机需要访问互联网。 看到这有多矛盾? 当要首先由VPN联机时,如何使用VPN对其进行在线保护。 哇。 好吧,在iOS上您根本做不到,这就是为什么从隐私角度来看,作为智能手机的跟踪设备(在如此之多的层次上,到后来的故事)永远不会被视为“安全”的。 幸运的是,现在在macOS上,我们可以做很多事情,这是另一个故事的主题。 简而言之,只要您的Mac(或iPhone)连接到互联网(在设备有时间连接到VPN之前),它就会立即将大量数据发送到互联网,这可能会泄露您的身份,有时甚至使您容易受到攻击。

使用PF设置自己的macOS内核级IKEv2 / IPsec VPN终止开关
Prologue medium.com

避免使用第三方VPN提供商

尽管某些第三方VPN提供商可能是出于好主意,但并非所有人都将您的隐私放在心上。 许多人专注于快速获利。 他们宣传出色的加密货币,但并未强制执行,让弱势客户连接(对隐私的便利)。 这是我挑战“信任”的故事之一。

关于Firefox,Brave,NordVPN和AdBlock的早上想法。
当每个人都想知道Lady Gaga是否正在和Bradley Cooper一起睡觉时,我想知道是否以隐私为先的公司在… medium.com

天鹅

当我第一次考虑自我托管自己的VPN服务器时,我想到了一些要求。 我一直在寻找开放源代码解决方案,我不想安装第三方iOS或macOS客户端,我想要强大的加密货币。 我最初遵循了本教程,在我不了解它之前,我就在自托管自己的VPN服务器! 幸运的是,我一直坚持下去,直到发现自己使用的是弱破的加密货币(3DES,SHA-1和MODP1024)。 他妈的!

我后来发现,问题出在不是strongSwan。 我遵循了一篇写得不好的教程(此后已进行了更新,但仍然不够好)。 看,如果您关心隐私和安全性,则必须使用RTFM,这就是我过去一周一直在做的事情。 是的,整整一周。 我花了60多个小时进行研究。 我的女朋友现在对StrongSwan很生气,不能怪她。 好消息是,我将为您分解一下,以便您可以与亲人在一起,而不用阅读*******手册。

致谢:我要感谢Tobias(strongSwan的核心团队成员之一)在编写以下操作方法方面发挥了作用。 他的耐心(对此我还是一个新手),对强大的天鹅社区的慷慨和奉献精神令人瞩目。

这是休息一下并让自己成为双杯浓咖啡的好时机。

如何自托管您自己的StrongSwan IKEv2 / IPsec最新VPN服务器

本方法专为了解Linux和命令行方式的人们而设计。 如果您不这样做,YouTube上有很多教程可以帮助您快速入门。

以下步骤将DigitalOcean称为我们的虚拟专用服务器(或VPS)提供程序。 只要支持Debian Stretch操作系统(或OS),就可以自由选择其他提供商。

为了获得最大的隐私权,请考虑选择一家总部位于未参与“十四眼”监视计划的国家/地区的提供商。

在撰写本文时,瑞士是一个不错的选择。

如果您选择DigitalOcean,请使用我的推荐链接。

步骤1:在https://www.digitalocean.com/上注册

步骤2:为您的服务器选择主机名

对于以下步骤,我将使用server作为主机名,但是它可以随您喜欢。

步骤3:server创建SSH密钥对

当询问要保存密钥的文件时,键入server并按Enter键。

当要求输入密码短语时,输入一个您会记住的密码短语(否则无法恢复)。

 光盘〜/ .ssh 
ssh-keygen -t rsa -C“ server

步骤4:将SSH密钥添加到您的DigitalOcean帐户

这是在这里完成的。 点击“添加SSH密钥”。 然后,将cat server.pub的输出粘贴到“ SSH密钥内容”输入中。 名称是server

步骤5:创建Debian Droplet(选择离您最近的数据中心区域)。

步骤6:使用SSH登录

159.203.26.109替换为Droplet的IP。

  ssh root@159.203.26.109 -i〜/ .ssh / vpn服务器 

第7步:创建管理员用户

当要求输入密码时,请粘贴openssl rand -base64 24的输出。 对于所有其他字段,请按Enter键。 然后,输入y

  adduser VPN服务器管理员 

步骤8:将root的authorized_keys文件复制到vpn-server-admin

  mkdir /home/vpn-server-admin/.ssh 
cp /root/.ssh/authorized_keys /home/vpn-server-admin/.ssh/authorized_keys
chown -R vpn服务器管理器:vpn服务器管理器/ home / vpn服务器管理器/.ssh

第9步:vpn-server-admin高级sudo特权

安全提示1:不好的做法是允许root用户通过SSH登录或允许密码登录,因为它们容易受到暴力攻击。

以下某些命令将使用Vim作为文本编辑器。 让我们通过创建一个.vimrc配置文件来调整一些Vim设置(除其他外,不是可视模式的忠实拥护者)。

使用vi ~/.vimrc命令创建一个新文件,将以下代码块粘贴到窗口中,保存并退出。

Vim是一个奇怪的应用程序。 输入Vim后,首先必须按i进入更多插入。 然后,您可以粘贴以下代码块。 然后按Esc退出插入模式。 然后按Shift + z + z保存并退出。

 设置编码= UTF-8 
设置termencoding = UTF-8
设置不兼容
设置backspace = indent,eol,start
设置自动缩进
设置tabstop = 4
设置shiftwidth = 4
设置expandtab
设定smarttab
设置标尺
设置粘贴
语法开启

使用命令export EDITOR=vim; visudo export EDITOR=vim; visudo ,在root ALL=(ALL:ALL) ALL下添加vpn-server-admin ALL=(ALL) NOPASSWD:ALL root ALL=(ALL:ALL) ALL并保存文件。

步骤10:登出

 出口 

步骤11:vpn-server-admin身份登录(不要忘记用159.203.26.109的IP替换159.203.26.109

  ssh vpn-server-admin @ 159.203.26.109 -i .ssh / vpn-server 

步骤12:vpn-server-admin创建.vimrc文件(使用步骤9中找到的相同代码块)

  vi〜/ .vimrc 

步骤13:更新SSH配置以防止root用户登录并重新启动SSH守护程序

PermitRootLogin yes行替换为PermitRootLogin yes ,并确保将PasswordAuthentication设置为no

 须藤vi / etc / ssh / sshd_config 
sudo服务sshd重新启动

步骤14:设置时区(以下命令适用于蒙特利尔时间)

  sudo timedatectl设置时区美国/蒙特利尔 

步骤15:配置和启用iptables并使规则持久化

安全提示2:默认情况下,iptables(防火墙btw)允许所有进出服务器的流量,这使服务器容易受到攻击。 您可以使用命令sudo iptables -L检查iptables是否正在执行规则。

下面的输出显示没有强制执行任何规则。

 链输入(接受政策) 
目标prot opt源目的地
 连锁前进(接受政策) 
目标prot opt源目的地
 链输出(接受政策) 
目标prot opt源目的地

首先,让我们安装iptables-persistent 。 当询问您是否要保存当前的IPv4或IPv6规则时,请回答Yes

  sudo apt-get更新 
须藤apt-get install -y iptables-persistent

然后,运行以下命令以仅允许SSH,DNS和HTTP(S)通信。 apt-get需要DNS和HTTP(S),以后将用于下载和安装软件包。

  sudo iptables -A输入-i lo -j接受 
sudo iptables -A输入-p tcp -m tcp --dport 22 -j接受
sudo iptables -A输入-m状态-状态相关,已确定-j接受
sudo iptables -A输出-o lo -j接受
sudo iptables -A输出-p tcp --dport 53 -m状态-状态NEW -j接受
sudo iptables -A输出-p udp –dport 53 -m状态-状态NEW -j接受
sudo iptables -A输出-p tcp --dport 80 -m状态-状态NEW -j接受
sudo iptables -A输出-p tcp --dport 443 -m状态-状态NEW -j接受
sudo iptables -A输出-m状态-状态相关,已确定-j接受
须藤iptables -P FORWARD DROP
须藤iptables -P INPUT DROP
sudo iptables -P输出下降

确保使用命令sudo iptables -L强制执行规则。

下面的输出显示上述规则已得到执行。

 链输入(策略丢弃) 
目标prot opt源目的地
随时随地接受
接受tcp-任何地方tcp dpt:ssh
接受所有-随时随地状态已确定

前进链(策略丢弃)
目标prot opt源目的地

链输出(策略丢弃)
目标prot opt源目的地
随时随地接受
接受tcp-任何地方tcp dpt:域状态新
接受udp-随处可见udp dpt:域状态新
接受tcp-任何地方tcp dpt:http状态新
接受tcp-在任何地方tcp dpt:https状态新
接受所有-随时随地状态已确定

我建议使用命令exit并再次登录,以确保上述规则不会将您锁定。 如果您因某种原因而被锁定,请使用DigitalOcean仪表板重新启动Droplet并重新开始。

最后,使用以下命令使规则持久化。

  sudo bash -c“ iptables保存> /etc/iptables/rules.v4” 

默认情况下,DigitalOcean不启用IPv6,但是为了更加安全,我们将使用以下命令丢弃所有IPv6数据包。

 须藤ip6tables -P FORWARD DROP 
须藤ip6tables -P INPUT DROP
须藤ip6tables -P OUTPUT DROP
sudo bash -c“ ip6tables-save> /etc/iptables/rules.v6”

步骤16:首先将DNS名称服务器切换到隐私1.1.1.1

使用命令sudo vi /etc/resolv.conf/etc/resolv.conf的内容替换为以下代码块。

 域名服务器1.1.1.1 
域名服务器1.0.0.1

您现在有了安全的服务器。 做得好!

步骤17:安装strongSwan

如果显示“已取代旧的运行级别管理”警告,请回答Ok

 须藤apt-get install -y strongswan libcharon-extra-plugins 

步骤18:配置strongSwan

使用命令sudo vi /etc/ipsec.conf用以下代码块替换/etc/ipsec.conf的内容。 vpn-server.crt将在几分钟后创建。

如果您想更好地了解这些设置,请在此处查看。 重点是: uniqueids=never不允许使用相同的凭据(例如您的iPhone和Mac)进行多个连接, keyexchange=ikev2启用IKEv2(vs v1), ike=aes256gcm16-sha384-modp3072!esp=aes256gcm16-sha384-modp3072! 仅允许使用最先进的加密技术和rightauth=eap-tls来启用EAP-TLS(或基于证书的)身份验证(明显更难于采用暴力手段)。

 配置设置 
charondebug =“ ike 1,knl 1,cfg 0”
uniqueids =从不
  conn ikev2 
自动=添加
压缩=否
类型=隧道
keyexchange = ikev2
碎片=是
forceencaps =是
ike = aes256gcm16-sha384-modp3072!
esp = aes256gcm16-sha384-modp3072!
dpdaction =清除
dpddelay = 300秒
密钥=否
左=%any
leftid = my-vpn.com
leftcert = vpn-server.crt
leftsendcert =总是
leftsubnet = 0.0.0.0 / 0
正确=%any
rightid =%any
rightauth = eap-tls
rightdns = 1.1.1.1,1.0.0.1
rightsourceip = 10.0.2.0 / 24
rightsendcert =从不
eap_identity =%identity

使用命令sudo vi /etc/ipsec.secrets/etc/ipsec.secrets的内容替换为以下代码块。

  :RSA vpn-server.key 

使用命令sudo vi /etc/strongswan.conf用以下代码块替换/etc/strongswan.conf的内容。

  libtls { 
套件= TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
}

步骤19:创建证书颁发机构(或CA),服务器和客户端私钥和证书(在Mac和服务器上完成)

安全提示3:建议在未连接到Internet的计算机上创建证书颁发机构私钥。 有权访问vpn-server-ca.key任何人都可以签名证书,以授予对您的VPN服务器的访问权限。

以下命令将在您的桌面上创建一个certificate-authority文件夹,创建一个CA私钥(vpn-server-ca.key),并使用它创建用于对服务器进行签名的CA根证书(vpn-server-ca.crt)。和客户证书。 然后,将创建vpn-servervpn-client私钥和证书。 其中一些命令是交互式的,因此一次只能使用一次(一次复制/粘贴它们将不起作用)。 当要求输入导出密码时,请粘贴openssl rand -base64 24的输出,然后将该密码存储在您的密码管理器中(稍后我们将需要它)。

CA根证书(vpn-server-ca.crt)和服务器证书(vpn-server.crt)的公用名(或CN)应为完全限定的域名(或FQDN)和客户端证书的公用名。 (vpn-client.crt),在服务器FQDN下注册的电子邮件。

想要了解有关公钥加密的更多信息,请观看此视频。

这是openssl.cnf的内容(稍后您将需要它)。

  [要求] 
专有名称= req_distinguished_name
属性= req_attributes
[req_distinguished_name]
countryName =国家名称(2个字母代码)
countryName_min = 2
countryName_max = 2
0.organizationName =组织名称(例如公司)
commonName =通用名称(例如,标准主机名)
commonName_max = 64
countryName_default = CA#默认值
0.organizationName_default =我的VPN#默认
[req_attributes]
ChallengePassword =挑战密码
ChallengePassword_min = 4
ChallengePassword_max = 20
[ca]
subjectKeyIdentifier =哈希
basicConstraints =严重,CA:真
keyUsage =关键,cRLSign,keyCertSign
[服务器]
AuthorityKeyIdentifier =密钥ID
subjectAltName = DNS:my-vpn.com#默认
extendedKeyUsage = serverAuth,1.3.6.1.5.5.8.2.2
[客户]
AuthorityKeyIdentifier =密钥ID
subjectAltName = email:client@my-vpn.com#默认
extendedKeyUsage = serverAuth,1.3.6.1.5.5.8.2.2

有关caserverclient块的文档,请参见此处。

现在,命令:

  #创建证书授权文件夹 
mkdir〜/ Desktop / certificate-authority
cd〜/桌面/证书颁发机构
  #创建配置文件(将先前代码块中的内容粘贴到此文件中,并根据自己的喜好更改#默认值) 
vi openssl.cnf
  #创建证书颁发机构私钥 
openssl genrsa -out vpn-server-ca.key 4096
  #创建证书颁发机构root certificate (CN: my-vpn.com) 
openssl req -x509 -new -nodes
root certificate (CN: my-vpn.com)
openssl req -x509 -new -nodes
root certificate (CN: my-vpn.com)
openssl req -x509 -new -nodes
-config openssl.cnf -extensions ca -key root certificate (CN: my-vpn.com)
openssl req -x509 -new -nodes
vpn-server-ca.key -days 3650 -out vpn-server-ca.crt
  #创建vpn-server private key and certificate (CN: my-vpn.com) 
openssl genrsa -out vpn-server.key
vpn-server private key and certificate (CN: my-vpn.com)
openssl genrsa -out vpn-server.key
vpn-server private key and certificate (CN: my-vpn.com)
openssl genrsa -out vpn-server.key
4096
openssl req -new -config openssl.cnf -extensions服务器-key vpn-server.key -out vpn-server.csr
openssl x509 -req
-key vpn-server.key -out vpn-server.csr
openssl x509 -req
-key vpn-server.key -out vpn-server.csr
openssl x509 -req
-extfile openssl.cnf -extensions服务器-in vpn-server.csr -CA vpn-server-ca中。 crt -CAkey vpn-server-ca.key -CAcreateserial -days -days 3650 -out vpn-server.crt
  #创建vpn-client private key and certificate (CN: client@my-vpn.com ) 
openssl genrsa -out vpn-client.key
)
openssl genrsa -out vpn-client.key
)
openssl genrsa -out vpn-client.key
4096
openssl req -new -config openssl.cnf -extensions客户端-key vpn-client.key -out vpn-client.csr
openssl x509 -req
-key vpn-client.key -out vpn-client.csr
openssl x509 -req
-key vpn-client.key -out vpn-client.csr
openssl x509 -req
-extfile openssl.cnf -extensions客户端-vpn -in vpn-client.csr -CA vpn-server-ca中。 crt -CAkey vpn-server-ca.key -CAcreateserial -days -days 3650 -out vpn-client.crt
  #创建vpn-client PKCS12存档 
openssl pkcs12-在vpn-client.crt -inkey vpn-client. 密钥-certfile vpn-server-ca.crt -export-out vpn vpn-client .p12

步骤20:vpn-server-ca.crtvpn-server.keyvpn-server.crt的内容复制/粘贴到服务器

在Mac上: cat vpn-server-ca.crt

在服务器上: sudo vi /etc/ipsec.d/cacerts/vpn-server-ca.crt

在Mac上: cat vpn-server.key

在服务器上: sudo vi /etc/ipsec.d/private/vpn-server.key

在Mac上: cat vpn-server.crt

在服务器上: sudo vi /etc/ipsec.d/certs/vpn-server.crt

步骤21:开始strongSwan

  sudo ipsec启动 

步骤22:转发客户端流量(需要通过VPN发送iOS和macOS流量)并禁用IPv6。

使用命令sudo vi /etc/sysctl.conf取消注释net.ipv4.ip_forward=1行。

使用命令sudo vi /etc/sysctl.conf将以下代码块中的行追加到sudo vi /etc/sysctl.conf

  net.ipv6.conf.all.disable_ipv6 = 1 
net.ipv6.conf.default.disable_ipv6 = 1

使用命令sudo sysctl -p重新加载配置。

步骤23:更新iptables规则以允许VPN流量并重新启动服务器

  sudo iptables -A输入-p udp –dport 500 -j接受 
sudo iptables -A输入-p udp --dport 4500 -j接受
sudo iptables -A FORWARD --match策略--pol ipsec --dir --proto esp -s 10.0.2.0/24 -j ACCEPT
sudo iptables -A FORWARD-匹配策略--pol ipsec --dir out --proto esp -d 10.0.2.0/24 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o eth0 -m策略--pol ipsec --dir out -j接受
sudo iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o eth0 -j伪装
sudo iptables -t mangle -A FORWARD --match policy --pol ipsec --dir in -s 10.0.2.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
-o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
sudo bash -c“ iptables保存> /etc/iptables/rules.v4”
须藤重启

步骤24:为macOS和iOS创建VPN配置文件

在此步骤中,我们将使用Apple Configurator 2,这是由Apple设计的免费应用程序,用于管理macOS和iOS配置文件。 这就是该方法的神奇之处所在(永远吸引我来弄清楚这一点)。 使用用户界面设置VPN时,默认情况下,macOS和iOS不提供最新的加密技术。 为了实现这一目标,我们需要配置文件。

打开Apple Configurator 2,然后单击“ File ,然后单击“ New Profile

通常,填写NameIdentifier

在“ Certificates ,单击“ Configure ,然后选择“ vpn-server-ca.crt 。 然后单击+并选择vpn-client.p12 。 密码是第18步中的密码。

VPN ,单击“ Configure ,然后从以下屏幕截图中输入设置。 Child SA ParamsIKE SA Params相同。 当前,应用程序中存在一个错误,当Encryption Algorithm设置为AES-256-GSM时,该错误会阻止我们选择Integrity Algorithm SHA2–384 。 为了避免此错误,请首先选择“ Integrity Algorithm ,然后选择“ Encryption Algorithm

最后,单击File ,然后单击Save ,然后将文件SaveMy VPN.mobileconfig

步骤25:将VPN配置文件添加到macOS

此步骤非常简单,只需双击“ My VPN.mobileconfig并按照说明进行操作即可。

步骤26:将VPN配置文件添加到iOS

此步骤使用Apple Configurator 2将VPN配置文件添加到您的iPhone(比通过电子邮件发送或托管给您自己更安全)。

解锁您的iPhone并将其连接到Mac(使用USB闪电),然后打开Apple Configurator 2。

在“ All Devices ,双击您的iPhone,然后依次单击“ Add ”和“ Profiles

选择My VPN.mobileconfig并按照iPhone上的说明进行操作。

步骤27:连接到您自己的适用于iOS和macOS的StrongSwan IKEv2 / IPsec最新VPN服务器,并享受更多隐私!

如果遇到问题,请 使用主题标签Strongswan 提交有关 服务器故障 的问题