AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 790339
Accepted
Hemant
Hemant
Asked: 2016-07-18 11:26:25 +0800 CST2016-07-18 11:26:25 +0800 CST 2016-07-18 11:26:25 +0800 CST

将两个 Watchguard 防火墙的 VPN 合并为一个防火墙

  • 772

我有两个不同的 Watchguard XTM 515 防火墙。每个都有自己的一组 VPN 在其中创建。

现在我只需要使用一个防火墙来处理两者的 VPN。但问题是我不知道 VPN 的 PSK(我加入我的工作后继承了那些防火墙)。要求客户更改 PSK 对我来说不是一个选择。

现在我知道当我导出防火墙的配置(XML 文件)时,它包括所有 VPN 的 PSK。这就是将该配置恢复到另一个防火墙的原因。但我不知道如何获得这些 PSK。我用纯文本编辑器检查配置 XML 文件,似乎它们是加密的(这并不奇怪)。但它们必须使用静态密钥加密,因为此配置可以上传到任何防火墙。只是我不知道解密方案和密钥。

现在我的目标当然不是​​破解 Watchguard XML 配置文件的加密。我需要做的就是将两个防火墙合并为一个。我考虑过手动合并从两个防火墙导出的 XML 配置文件的部分,但这似乎是一项艰巨的任务。

请您帮忙推荐一种将两个不同 Watchguard 防火墙的 VPN 合并为一个的方法吗?

vpn firewall watchguard
  • 3 3 个回答
  • 1085 Views

3 个回答

  • Voted
  1. Best Answer
    TessellatingHeckler
    2017-04-02T03:39:34+08:002017-04-02T03:39:34+08:00

    没错,它们是用静态密钥加密的,方案是AES Key Wrap Algorithm (RFC 3394)。你可以解密它们。

    我采用了这个公共领域的 C# 库,将其剥离为仅解密函数并将其移植到 PowerShell,因此它适合 StackOverflow 答案,不需要编译或二进制文件。

    它不漂亮,没有错误检查或任何东西,但它似乎工作:

    <#
    .Synopsis
       Decrypts a Watchguard encrypted BOVPN pre-shared-key
    .EXAMPLE
       Decrypt-WatchguardPsk -EncryptedPsk '0E611DC31F2AEBB4A6E69F2641E1E83D762F514F3636E1EFA86B9BDECFEFADFB'
    #>
    function Decrypt-WatchguardPsk
    {
        [CmdletBinding()]
        [Alias()]
        [OutputType([int])]
        Param([Parameter(Mandatory=$true, ValueFromPipeline=$true, Position=0)]$EncryptedPsk)
    
        Process
        {
            function Group-ByCount ($ByteArray, $n) { #BigArray -> Arrays of n items
                $NumGroups=$ByteArray.Count/$n
                $Output= @()
                0..($NumGroups-1) | ForEach-Object { $Output += @(, [byte[]]$ByteArray[($_*$n)..(($_*$n)+$n-1)]) }
                $Output
            }
    
            $KeyEncryptionKey = [byte[]] @(29, 3, 245, 130, 135, 152, 43, 199, 1, 34, 115, 148, 228, 152, 222, 35)
            $EncryptedPsk = $EncryptedPsk -replace '\s|(</*psk>)|\+' # trim xml line. Here so you can do: sls '<psk>' *.xml | % Line | Decrypt-WatchguardPsk
            [byte[]] $Arrby = $EncryptedPsk -split "(?<=\G\w{2})(?=\w{2})" |% { [Convert]::ToByte($_, 16) } #HexTo[byte[]]
            $C = Group-ByCount $Arrby 8  #Byte array to groups of 8 bytes (AES blocks)
    
            # 1) AES Key Wrap - Initialize variables
            $A = $C[0]
            $R = @($C[1..($C.Count-1)])
            $Blockn = $R.Count
    
            # 2) Calculate intermediate values
            for ($j = 5; $j -ge 0; $j--) {
                for ($i = $Blockn - 1; $i -ge 0; $i--) {
                    $t = $Blockn * $j + $i + 1  # add 1 because i is zero-based
    
                    #64 bit XOR
                    $A2 = $A.Clone()
                    [Array]::Reverse($A2)
                    $A2 = [BitConverter]::GetBytes([BitConverter]::ToInt64($A2, 0) -bxor $t)
                    [Array]::Reverse($A2)
                    $A = $A2
    
                    # Decrypt block
                    $Alg = New-Object -type System.Security.Cryptography.RijndaelManaged
                    $Alg.Padding = [System.Security.Cryptography.PaddingMode]::None
                    $Alg.Mode = [System.Security.Cryptography.CipherMode]::ECB
                    $Alg.Key = $KeyEncryptionKey
    
                    $ms = New-Object System.IO.MemoryStream
                    $xf = $Alg.CreateDecryptor()
                    $cs = New-Object System.Security.Cryptography.CryptoStream -ArgumentList @($ms, $xf, [System.Security.Cryptography.CryptoStreamMode]::Write)
    
                    $AConcatRi = $A + $R[$i] + (New-Object 'byte[]' (16 - $A.Count - $R[$i].Count))
    
                    $cs.Write($AConcatRi, 0, $Alg.BlockSize / 8)
    
                    $B = Group-ByCount $ms.ToArray() 8
                    $A         = $B[0] #MSB(B)
                    $R[$i]     = $B[1] #LSB(B) 64 least significant bits of a 128
                }
            }
    
            -join ($R | % { [System.Text.Encoding]::ASCII.GetString($_) })
        }
    }
    

    例如

    PS C:\> Decrypt-WatchguardPsk -EncryptedPsk '8B4B449A6D4253232C4CFC48E311B7B9DF360D5F4EAB310CAD9D7B92B4CD3CA6340841671FA9187E6AB5F4604D5E2B9319EC890A826B96EF47163B83F2294289109F8336441879416A230C26E0AEEBDC332798F54F482250'
    Testing with dummy text lorem ipsum dolor sit amet, consectetur adipiscing elit
    

    我不认为发布这是一个安全问题 - 任何可以获取防火墙配置文件的攻击者都已经通过了安全性,在防火墙或管理工作站上。配置不包含设备管理登录凭据。在不权衡许多其他问题的情况下,他们无法做太多其他事情来加密配置文件中的内容。阻止密码出现在纯文本搜索和索引中确实是一个实用层。

    • 2
  2. Hemant
    2017-04-05T01:45:46+08:002017-04-05T01:45:46+08:00

    除了@TessellatingHeckler 发布的答案之外,还有另一种非技术方法可以将 VPN 从一个守卫转移到另一个守卫。我最终使用了这种方法,它就像一个魅力。

    • 从旧防火墙导出配置。保持文件安全。让我们称之为old.xml。
    • 在新防火墙上使 VPN 具有相同的配置。显然您不知道 PSK,因此请在框中输入任何内容。
    • 从新防火墙导出配置。让我们称之为new.xml。
    • 复制您尝试从中迁移的 VPN 的加密 PSK 字符串old.xml。覆盖 VPN 中的 PSK 字符串new.xml。
    • 将new.xml背面应用到新防火墙。

    这个想法是我们对 PSK 的价值不感兴趣。我们只想迁移它。那么为什么不直接迁移加密值呢?由于每个 Firebox 的加密都是相同的,我们可以迁移加密的 PSK。

    • 2
  3. Glenn Scott
    2019-12-27T13:51:33+08:002019-12-27T13:51:33+08:00

    同时重置两端网关的密码,并记录新的密码。将该新密码应用于新配置并保存到 firebox。

    • 0

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • 用 D-LINK DFL-CPG310 防火墙替换 Cisco Pix 防火墙

  • 最好的点对点 VPN?

  • WAN 上的 VLAN

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve