使用Strongswan的GCPAWS上的站對站IPSEC VPN
作者:Rono Derriks
對於企業來說,安全是一個非常關鍵和敏感的領域,例如電信、衛生和銀行業。這些實體所使用的大多數關鍵基礎設施都是在私人網路和其他複雜的網路規則背後的安全,以確保所分享的資料的完整性和真實性。
作為一個開發者,在開始實際集成之前,你必須做的一件痛苦的事情就是與這些實體的基礎設施建立連接。有幾種安全措施和協議可以用來實現這一點,但我想把重點放在網站到網站的虛擬私人網路絡上。在這篇文章中,我們將探討如何將美國的穀歌雲Debian實例連接到倫敦亞馬遜的Ubuntu實例。這就是所謂的網站到網站的VPN。這種設置也可以複製到硬體定義的VPN中,例如穀歌/亞馬遜虛擬機器到思科路由器。
有兩種類型的網站到網站的VPN:基於內網和基於外網。然而,我們在這裡將更多地關注基於內部網的VPN。
為什麼要採用網站間VPN?
站到站的VPN將幫助我們限制對兩個網站之間的特定主機集(內網)的訪問。根據思科的說法,點對點VPN拓撲結構允許兩個設備直接相互通信,而不需要選擇IPsec容錯移轉。為了創建一個點對點的VPN拓撲結構,你指定兩個端點作為對等設備,這樣每個設備都可以啟動連接。
鋪墊好理論知識,那麽讓我們動手試試吧!!!。
VPN拓撲結構
前提條件
為了配置我們的網站到網站的VPN,我們將需要以下工具和服務。
1. 穀歌/AWS雲帳戶。
2. Ubuntu/Debian虛擬機器。
3. Strongswan
4. Tcpdump。
5. Iptables知識。
6. Openssh
7. 轉接細節。(IP, IKE版本, 加密和完整性演算法)
設置環境
為了開始,我們需要在穀歌雲平臺(GCP)上創建一個Debian實例。在註冊一個帳戶後,前往計算引擎功能表,你會被引導到這個頁面。
點擊創建實例,你將得到一個包含虛擬機器細節的頁面。
為你的VPN選擇一個獨特的名字,並選擇最小的機器,因為我們不需要太多的處理能力(這也節省了你的積分)。然後跳到網路標籤,點擊編輯按鈕,以便啟用IP轉發,並為實例設置一個靜態IP(我們需要一個彈性IP,以防止虛擬機器重啟時失去連接)。在外部Ip下拉式功能表中選擇創建Ip位址,為機器保留一個Ip。
還要記得把你的公開金鑰添加到ssh選項卡中,以允許你安全地登錄到虛擬機器上。
現在我們的第一台主機已經啟動並運行,我們需要完成對它的配置,以便我們可以在第二台主機上複製同樣的設置。
設置strongswan
通過運行以下命令,從ubuntu軟體庫中獲取最新的更新並安裝strongswan。
sudo apt-get update sudo apt-get install strongswan sudo systemctl start strongswan
這將安裝strongswan和建立ipsec隧道所需的所有依賴項。在這個安裝過程中,將創建兩個重要的文件(/etc/ipsec.conf和/etc/ipsec.secret)。
ipsec.conf檔將存儲隧道配置,而ipsec.secrets將存儲我們將用來驗證主機的金鑰。
接下來,我們將在我們的主機上進行以下配置。首先,我們需要一個加密域。由於我們使用的是基於外網的VPN,我們將使用我們的公共VPN IP。其次,我們需要一個對等體IP。下面是一個使用預共用金鑰的ikev1設定檔樣本。將以下內容複製到ipsec.conf文件中。注意,你需要管理員許可權來編輯這些檔。
穀歌的主機配置
1 # IPSEC.CONF 2 CONN GCP-TO-AWS 3 KEYEXCHANGE=IKEV1 4 AUTHBY=SECRET 5 TYPE=TUNNEL 6 LEFT=10.XXX.0.4 #HOST INTERNAL IP ADDRESS 7 LEFTID=GCP 8 LEFTSUBNET=10.XXX.0.0/9 #HOST INTRANET 9 RIGHT=XX.XX.XX.XX #PEER2 IP ADDRESS 10 RIGHTID=AWS 11 RIGHTSUBNET=10.XX.XX.XX/X #PEER2 ACCESIBLE INTRANET 12 IKE=3DES-MD5-MODP1024 #PHASE 1 INTEGRITY CHECK ALGOS 13 ESP=AES128-SHA1-MODP1024 #PHASE 2 ENCRYPTION ALGOS 14 IKELIFETIME=28800 15 LIFETIME=3600 16 DPDDELAY=30 DPDTIMEOUT=120 DPDACTION=RESTART AUTO=START
GCP IPSEC.CONF HOSTED WITH ❤ BY GITHUB
AWS主機配置
1 # ipsec.conf 2 conn aws-to-gcp 3 keyexchange=ikev1 4 authby=secret 5 type=tunnel 6 left=172.xx.xx.4 #Host internal ip address 7 leftid=aw 8 leftsubnet=172.xx.0.0/16 #Host externa ip/Encryption domain 9 right=35.xxx.xxx.28 #Peer2 ip address 10 rightid=gcp 11 rightsubnet=10.xxx.0.0/9 #Peer2 accesible intranet 12 ike=3des-md5-modp1024 #Phase 1 integrity check algos 13 esp=aes128-sha1-modp1024 #Phase 2 Encryption algos 14 ikelifetime=28800 15 lifetime=3600 16 dpddelay=30 17 dpdtimeout=120 18 dpdaction=restart 19 auto=start
view rawAWS ipsec.conf hosted with ❤ by GitHub
由於我們使用的是預共用金鑰,我們將需要把秘鑰添加到我們兩個主機的ipsec.secrets文件中。
1 <source ip> <destination ip> : <secrettype> <secret> 2 left right: PSK 1245
view rawipsec.secrets hosted with ❤ by GitHub
我們的第一個對等體現在已經準備好了。我們將繼續配置我們的第二個對等體。在這裡,我們將複製第一個對等體的步驟,只是這次我們將在AWS EC2實例上進行。
設置防火牆規則
從上面的例子中,我們已經創建了一個隧道,允許連接到我們實例中的任何子網。這並不安全,因此要創建一個更安全的環境,就需要在Unix環境和實例儀錶板上使用iptables命令設置防火牆規則。
Iptables是用於IPv4/IPv6資料包過濾和NAT的管理工具。
查看更多關於iptables的資訊和對NAT更深入的瞭解
AWS
預設情況下,AWS實例的所有外部流量都被阻止。要啟用這一點,你需要修改安全性群組,以接受來自我們GCP實例的流量。
GCP
為了允許AWS訪問我們GCP網路中的其他節點,我們在防火牆上添加以下規則。該命令將改變源IP為你機器的公共Ip。
或者配置GCP實例的防火牆規則,接受來自AWS內部Ip的連接,並將所有流量從AWS實例通過建立的隧道路由到GCP。
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
早些時候,我們指示我們的AWS實例接收來自GCP實例的流量。因此,我們需要確保來自GCP實例的流量在隧道中被路由到AWS實例。預設情況下,流量是被NAT處理的,意味著它以公共IP位址為源,因此會被丟棄。
sudo iptables -t nat -A POSTROUTING -d <aws instance internal ip> -o eth0 -j SNAT --to-source <gcp internal ip>
測試連接
Ping其中一個測試對等體,並在被ping的對等體上使用tcpdump來監測結果。
ping 172.xx.xx.4 sudo tcpdump icmp sudo tcpdump esp sudo ipsec statusall sudo ipsec up aws-to-gcp sudo ipsec down aws-to-gcp sudo ip xfrm state sudo ip xfrm policy
結論
在過去的幾年裡,科技公司採用遠端工作的情況有所上升。這意味著員工能夠在家裡交貨或工作,沒有太多限制。但這給公司信息帶來了風險,因為所有東西都是通過互聯網發送的。因此,這迫使公司投資於一些安全措施,以確保通信的高水準安全。
對每一個技術公司來說,謹慎的做法是將這樣的選項放在適當的位置,以阻止外部攻擊所產生的任何意外。
原文鏈接:Site-to-Site IPSEC VPN on GCP/AWS with Strongswan