@@ -25,14 +25,22 @@ The beginning of the script defines the source firewall name and resource group
25
25
Modify the following script to migrate your firewall configuration.
26
26
27
27
``` azurepowershell
28
- #Input params to be modified as needed
29
- $FirewallResourceGroup = "AzFWMigrateRG"
28
+ # Input params to be modified as needed
29
+ $FirewallResourceGroup = "AzFWMigrateRG"
30
30
$FirewallName = "azfw"
31
31
$FirewallPolicyResourceGroup = "AzFWPolicyRG"
32
32
$FirewallPolicyName = "fwpolicy"
33
33
$FirewallPolicyLocation = "WestEurope"
34
- @@ -43,141 +44,186 @@ $InvalidCharsPattern = "[']"
35
- #Helper functions for translating ApplicationProtocol and ApplicationRule
34
+
35
+ $DefaultAppRuleCollectionGroupName = "ApplicationRuleCollectionGroup"
36
+ $DefaultNetRuleCollectionGroupName = "NetworkRuleCollectionGroup"
37
+ $DefaultNatRuleCollectionGroupName = "NatRuleCollectionGroup"
38
+ $ApplicationRuleGroupPriority = 300
39
+ $NetworkRuleGroupPriority = 200
40
+ $NatRuleGroupPriority = 100
41
+ $InvalidCharsPattern = "[']"
42
+
43
+ # Helper functions for translating ApplicationProtocol and ApplicationRule
36
44
Function GetApplicationProtocolsString
37
45
{
38
46
Param([Object[]] $Protocols)
@@ -81,7 +89,7 @@ Function ParseRuleName
81
89
Param([Object] $RuleName)
82
90
if ($RuleName -match $InvalidCharsPattern) {
83
91
$newRuleName = $RuleName -split $InvalidCharsPattern -join ""
84
- Write-Host "Rule $RuleName contains an invalid character. Invalid characters have been removed, rule new name is $newRuleName. " -ForegroundColor Cyan
92
+ Write-Host "Rule $RuleName contains an invalid character. Invalid characters have been removed, rule new name is $newRuleName. " -ForegroundColor Yellow
85
93
return $newRuleName
86
94
}
87
95
return $RuleName
@@ -100,8 +108,9 @@ else {
100
108
$fwp = New-AzFirewallPolicy -Name $FirewallPolicyName -ResourceGroupName $FirewallPolicyResourceGroup -Location $FirewallPolicyLocation -ThreatIntelMode $azfw.ThreatIntelMode
101
109
}
102
110
Write-Host $fwp.Name "created"
111
+
112
+ # Translate ApplicationRuleCollection
103
113
Write-Host "creating " $azfw.ApplicationRuleCollections.Count " application rule collections"
104
- #Translate ApplicationRuleCollection
105
114
If ($azfw.ApplicationRuleCollections.Count -gt 0)
106
115
{
107
116
$firewallPolicyAppRuleCollections = @()
@@ -115,18 +124,19 @@ If ($azfw.ApplicationRuleCollections.Count -gt 0)
115
124
{
116
125
$cmd = GetApplicationRuleCmd($appRule)
117
126
$firewallPolicyAppRule = Invoke-Expression $cmd
118
- Write-Host "Created appRule " $firewallPolicyAppRule.Name
127
+ Write-Host "Created Application Rule: " $firewallPolicyAppRule.Name
119
128
$firewallPolicyAppRules += $firewallPolicyAppRule
120
129
}
121
130
$fwpAppRuleCollection = New-AzFirewallPolicyFilterRuleCollection -Name $appRC.Name -Priority $appRC.Priority -ActionType $appRC.Action.Type -Rule $firewallPolicyAppRules
122
- Write-Host "Created appRuleCollection " $fwpAppRuleCollection.Name
131
+ Write-Host "Created Application Rule Collection: " $fwpAppRuleCollection.Name
123
132
}
124
133
$firewallPolicyAppRuleCollections += $fwpAppRuleCollection
125
134
}
126
135
$appRuleGroup = New-AzFirewallPolicyRuleCollectionGroup -Name $DefaultAppRuleCollectionGroupName -Priority $ApplicationRuleGroupPriority -RuleCollection $firewallPolicyAppRuleCollections -FirewallPolicyObject $fwp
127
- Write-Host "Created ApplicationRuleCollectionGroup " $appRuleGroup.Name
136
+ Write-Host "Created Application Rule Collection Group: " $appRuleGroup.Name
128
137
}
129
- #Translate NetworkRuleCollection
138
+
139
+ # Translate NetworkRuleCollection
130
140
Write-Host "creating " $azfw.NetworkRuleCollections.Count " network rule collections"
131
141
If ($azfw.NetworkRuleCollections.Count -gt 0)
132
142
{
@@ -170,18 +180,19 @@ If ($azfw.NetworkRuleCollections.Count -gt 0)
170
180
$firewallPolicyNetRule = New-AzFirewallPolicyNetworkRule -Name $parsedName -SourceIpGroup $rule.SourceIpGroups -DestinationFqdn $rule.DestinationFqdns -DestinationPort $rule.DestinationPorts -Protocol $rule.Protocols
171
181
}
172
182
}
173
- Write-Host "Created network rule " $firewallPolicyNetRule.Name
183
+ Write-Host "Created network rule: " $firewallPolicyNetRule.Name
174
184
$firewallPolicyNetRules += $firewallPolicyNetRule
175
185
}
176
186
$fwpNetRuleCollection = New-AzFirewallPolicyFilterRuleCollection -Name $rc.Name -Priority $rc.Priority -ActionType $rc.Action.Type -Rule $firewallPolicyNetRules
177
- Write-Host "Created NetworkRuleCollection " $fwpNetRuleCollection.Name
187
+ Write-Host "Created Network Rule Collection: " $fwpNetRuleCollection.Name
178
188
}
179
189
$firewallPolicyNetRuleCollections += $fwpNetRuleCollection
180
190
}
181
191
$netRuleGroup = New-AzFirewallPolicyRuleCollectionGroup -Name $DefaultNetRuleCollectionGroupName -Priority $NetworkRuleGroupPriority -RuleCollection $firewallPolicyNetRuleCollections -FirewallPolicyObject $fwp
182
- Write-Host "Created NetworkRuleCollectionGroup " $netRuleGroup.Name
192
+ Write-Host "Created Network Rule Collection Group: " $netRuleGroup.Name
183
193
}
184
- #Translate NatRuleCollection
194
+
195
+ # Translate NatRuleCollection
185
196
# Hierarchy for NAT rule collection is different for AZFW and FirewallPolicy. In AZFW you can have a NatRuleCollection with multiple NatRules
186
197
# where each NatRule will have its own set of source , dest, translated IPs and ports.
187
198
# In FirewallPolicy a NatRuleCollection has a set of rules which has one condition (source and dest IPs and Ports) and the translated IP and ports
@@ -198,29 +209,32 @@ If ($azfw.NatRuleCollections.Count -gt 0)
198
209
If ($rc.Rules.Count -gt 0)
199
210
{
200
211
Write-Host "creating " $rc.Rules.Count " nat rules for collection " $rc.Name
201
-
202
212
ForEach ($rule in $rc.Rules)
203
213
{
204
214
$parsedName = ParseRuleName($rule.Name)
205
- If ($rule.SourceAddresses)
206
- @@ -188,18 +234,19 @@ If ($azfw.NatRuleCollections.Count -gt 0) {
215
+ If ($rule.SourceAddresses)
207
216
{
208
- $firewallPolicyNatRule = New-AzFirewallPolicyNatRule -Name $parsedName -SourceIpGroup $rule.SourceIpGroups -TranslatedAddress $rule.TranslatedAddress -TranslatedPort $rule.TranslatedPort -DestinationAddress $rule.DestinationAddresses -DestinationPort $rule.DestinationPorts -Protocol $rule.Protocols
217
+ $firewallPolicyNatRule = New-AzFirewallPolicyNatRule -Name $parsedName -SourceIpGroup $rule.SourceAddresses -TranslatedAddress $rule.TranslatedAddress -TranslatedPort $rule.TranslatedPort -DestinationAddress $rule.DestinationAddresses -DestinationPort $rule.DestinationPorts -Protocol $rule.Protocols
209
218
}
219
+ elseif ($rule.SourceIpGroups)
220
+ {
221
+ $firewallPolicyNatRule = New-AzFirewallPolicyNatRule -Name $parsedName -SourceIpGroup $rule.SourceIpGroups -TranslatedAddress $rule.TranslatedAddress -TranslatedPort $rule.TranslatedPort -DestinationAddress $rule.DestinationAddresses -DestinationPort $rule.DestinationPorts -Protocol $rule.Protocols
222
+ }
210
223
Write-Host "Created NAT rule: " $firewallPolicyNatRule.Name
211
224
$firewallPolicyNatRules += $firewallPolicyNatRule
212
225
}
213
226
214
227
$natRuleCollectionName = $rc.Name
215
228
$fwpNatRuleCollection = New-AzFirewallPolicyNatRuleCollection -Name $natRuleCollectionName -Priority $priority -ActionType $rc.Action.Type -Rule $firewallPolicyNatRules
216
229
$priority += 1
217
- Write-Host "Created NAT RuleCollection " $fwpNatRuleCollection.Name
230
+ Write-Host "Created NAT Rule Collection: " $fwpNatRuleCollection.Name
218
231
$firewallPolicyNatRuleCollections += $fwpNatRuleCollection
219
232
}
220
233
}
221
- $natRuleGroup = New-AzFirewallPolicyRuleCollectionGroup -Name $DefaultNatRuleCollectionGroupName -Priority $NatRuleGroupPriority -RuleCollection $firewallPolicyNatRuleCollections -FirewallPolicyObject $fwp
222
- Write-Host "Created NAT RuleCollectionGroup " $natRuleGroup .Name
234
+ $natRuleCollectionGroup = New-AzFirewallPolicyRuleCollectionGroup -Name $DefaultNatRuleCollectionGroupName -Priority $NatRuleGroupPriority -RuleCollection $firewallPolicyNatRuleCollections -FirewallPolicyObject $fwp
235
+ Write-Host "Created NAT Rule Collection Group: " $natRuleCollectionGroup .Name
223
236
}
237
+
224
238
```
225
239
## Next steps
226
240
0 commit comments