Azure PowerShell ile Azure Firewall Kurulumu ve Yapılandırılması
Azure Firewall makale serimde birazda PS komutlarına yer vermek istiyorum. Serinin dördüncü bölümünde amacım bir önceki bölümde size uygulamalı olarak gösterdiğim senaryoyu tamamen powershell ile yapmak. Yani aynı senaryoyu kullanacağım ancak bu sefer küçük birkaç fark olacak.
Öncelikle senaryomuz aşağıdaki gibi olacaktır;
Resim1
Gördüğünüz gibi bir tane Vnet(Test-FW-VN) içersinde 3 adet subnet olacak, bunlardan bir tanesi Azure Firewall için diğer ikisi ise sanal makinelerim için. Srv-Work temel olarak internete kapalı ve işlerimi yaptığım bir sunucu gibi düşünebilirsiniz. Srv-Jump ise internete açık ve ilk RDP yaptığım ve daha sonra Srv-Work’ e ulaştığım makine olarak düşünebilirsiniz.
Öncelikle benimle bu lab ortamını kurmak istiyorsanız bir azure hesabınızın olması gerekli. Bu uygulamayı portal üzerinden yapmak isterseniz aşağıdaki makalemi inceleyebilirsiniz.
Azure Powershell kullanacağımız için öncelikle makinemizin hazır olması gereklidir.
Resim2
İlk komutumuz $PSVersionTable.PSVersion
Bunun amacı AzurePowerShell için Windows Powershell sürümü önemlidir. 5.1 ve sonrası için desteği vardır. Windows 10 1607 ve sonrasında hali hazırda PowerShell 5.1 yüklüdür. Eğer sizde sürüm daha düşük ise yükseltmeniz gereklidir. Öncelikle .net 4.7.2 ve daha güncel bir .net sürümünü yükleyin.
Not: Eğer makinenizde hali hazırda AzureRM yüklü ise aynı anda AZ modülünü yükleyemezsiniz.
Resim3
Burada eğer AzureRM kullanmaya devam etmek istiyorsanız Azure Cloud Shell kullanabilirsiniz. Browser temelli bir komut setidir.
AzureRM PowerShell 5.1 ile çalışırken siz Az module for PowerShell 6.2.4 kurabilirsiniz. Bu iki sürüm farklı modülleri kullandığı için çakışma olmaz.
Ben aktif kullanmadığım için AzureRM’ i kaldırıyorum.
https://docs.microsoft.com/en-us/powershell/azure/azurerm/uninstall-azurerm-ps?view=azurermps-6.13.0
Daha sonra gerekli olan modülleri yüklemek için aşağıdaki komut setini powershell ekranına yapıştırıyorum.
Install-Module -Name PowerShellGet -Force
Daha sonra Azure PowerShell modülünü yükleyelim
if ($PSVersionTable.PSEdition -eq ‘Desktop’ -and (Get-Module -Name AzureRM -ListAvailable)) {
Write-Warning -Message (‘Az module not installed. Having both the AzureRM and ‘ +
‘Az modules installed at the same time is not supported.’)
} else {
Install-Module -Name Az -AllowClobber -Scope CurrentUser
}
Resim4
Ben kendi kullanıcım için yükleme yapmış oldum, bilgisayardaki tüm kullanıcılar için yükleme yapmak için docs.microsoft.com adresini kontrol ediniz.
Şimdi PS ile hızlıca komutlara geçelim. Önce hesabımıza bağlanalım.
Connect-AzAccount komutunu çalıştırdıktan sonra karşımıza aşağıdaki gibi bir logon ekranı gelir ve yetkili bir hesap ile giriş yapmalıyız
Resim5
Resim6
Sonrasında sırasıyla komutlar aşağıdaki gibidir;
New-AzResourceGroup -Name Test-FW-RG -Location “East US”
Yeni bir kaynak grubu oluşturuyoruz. Unutmayın buradaki komut setleri örnek olup isimleri, ip aralıklarını, makine boyutlarını, kullanacağınız veri merkezlerini değiştirebilirsiniz.
New-AzResourceGroup -Name Test-FW-RG -Location “East US”
Resim7
Değişken tanımlıyoruz.
$FWsub = New-AzVirtualNetworkSubnetConfig -Name AzureFirewallSubnet -AddressPrefix 10.0.1.0/26
$Worksub = New-AzVirtualNetworkSubnetConfig -Name Workload-SN -AddressPrefix 10.0.2.0/24
$Jumpsub = New-AzVirtualNetworkSubnetConfig -Name Jump-SN -AddressPrefix 10.0.3.0/24
Resim8
Vnet oluşturma komutu
$testVnet = New-AzVirtualNetwork -Name Test-FW-VN -ResourceGroupName Test-FW-RG `
-Location “East US” -AddressPrefix 10.0.0.0/16 -Subnet $FWsub, $Worksub, $Jumpsub
Resim9
Sanal makine oluşturuyoruz
Srv-Jump için;
New-AzVm `
-ResourceGroupName Test-FW-RG `
-Name “Srv-Jump” `
-Location “East US” `
-VirtualNetworkName Test-FW-VN `
-SubnetName Jump-SN `
-OpenPorts 3389 `
-Size “Standard_DS2”
Srv-Work, public ip adresi yok, komut setini çalıştırınca kullanıcı adı ve şifre tanımı yapın lütfen.
#Create the NIC
$NIC = New-AzNetworkInterface -Name Srv-work -ResourceGroupName Test-FW-RG `
-Location “East US” -Subnetid $testVnet.Subnets[1].Id
#Define the virtual machine
$VirtualMachine = New-AzVMConfig -VMName Srv-Work -VMSize “Standard_DS2”
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName Srv-Work -ProvisionVMAgent -EnableAutoUpdate
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName ‘MicrosoftWindowsServer’ -Offer ‘WindowsServer’ -Skus ‘2016-Datacenter’ -Version latest
#Create the virtual machine
New-AzVM -ResourceGroupName Test-FW-RG -Location “East US” -VM $VirtualMachine -Verbose
Resim10
Resim11
Not: Girdiğiniz kullanıcı adı ve şifreyi not edin lütfen.
Bu adım biraz sürebilir malum sanal makine oluşturuyor.
Azure Firewall’ u kuruyoruz.
# Get a Public IP for the firewall
$FWpip = New-AzPublicIpAddress -Name “fw-pip” -ResourceGroupName Test-FW-RG `
-Location “East US” -AllocationMethod Static -Sku Standard
# Create the firewall
$Azfw = New-AzFirewall -Name Test-FW01 -ResourceGroupName Test-FW-RG -Location “East US” -VirtualNetworkName Test-FW-VN -PublicIpName fw-pip
#Save the firewall private IP address for future use
$AzfwPrivateIP = $Azfw.IpConfigurations.privateipaddress
$AzfwPrivateIP
Resim12
Default route oluşturuyoruz.
$routeTableDG = New-AzRouteTable `
-Name Firewall-rt-table `
-ResourceGroupName Test-FW-RG `
-location “East US” `
-DisableBgpRoutePropagation
#Create a route
Add-AzRouteConfig `
-Name “DG-Route” `
-RouteTable $routeTableDG `
-AddressPrefix 0.0.0.0/0 `
-NextHopType “VirtualAppliance” `
-NextHopIpAddress $AzfwPrivateIP `
| Set-AzRouteTable
#Associate the route table to the subnet
Set-AzVirtualNetworkSubnetConfig `
-VirtualNetwork $testVnet `
-Name Workload-SN `
-AddressPrefix 10.0.2.0/24 `
-RouteTable $routeTableDG | Set-AzVirtualNetwork
Resim13
ÇözümPark web sitesine izin vermek için application rule oluşturuyoruz.
$AppRule1 = New-AzFirewallApplicationRule -Name Allow-CozumPark -SourceAddress 10.0.2.0/24 `
-Protocol http, https -TargetFqdn www.cozumpark.com
$AppRuleCollection = New-AzFirewallApplicationRuleCollection -Name App-Coll01 `
-Priority 200 -ActionType Allow -Rule $AppRule1
$Azfw.ApplicationRuleCollections.Add($AppRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw
Resim14
DNS trafiğine izin vermek için network rule oluşturuyoruz.
$NetRule1 = New-AzFirewallNetworkRule -Name “Allow-DNS” -Protocol UDP -SourceAddress 10.0.2.0/24 `
-DestinationAddress 209.244.0.3,209.244.0.4 -DestinationPort 53
$NetRuleCollection = New-AzFirewallNetworkRuleCollection -Name RCNet01 -Priority 200 `
-Rule $NetRule1 -ActionType “Allow”
$Azfw.NetworkRuleCollections.Add($NetRuleCollection)
Set-AzFirewall -AzureFirewall $Azfw
Resim15
Şimdi ise Srv-Work makinesinin network interface’ i üzerindeki DNS leri network kuralında izin verdiğimiz DNS ip adresleri ile güncelliyoruz.
$NIC.DnsSettings.DnsServers.Add(“209.244.0.3”)
$NIC.DnsSettings.DnsServers.Add(“209.244.0.4”)
$NIC | Set-AzNetworkInterface
Evet tüm ayarları yaptık, şimdi sıra test etmeye geldi.
Hatırlarsanız Srv-Jump isminde bir makine açmıştık, komut gereği zaten makine aşağıdaki gibi dış dünyaya açıktır;
Resim16
Makineyi kurarken tanımladığımız kullanıcı ve public ip adresi üzerinden RDP yapalım. Daha sonra bu makineden Srv-Work makinesine RDP yapacağız. Yine hatırlarsanız bu makinenin bir public ip adresi yoktu, bu nedenle private ip adresi üzerinden bağlanıyoruz.
Resim17
Daha sonra ise önce cozumpark sonra google web sitelerine erişimi deniyoruz.
Resim18
Gördüğünüz gibi public ip adresi üzerinden bağlandığım Jump sunucusu ve onun üzerinden bağlandığım prod sunucusu üzerinde ÇözümPark açıldı.
Resim19
Ancak google açılmadı, çünkü böyle bir kural yazmadım.
İsterseniz yazdığınız tüm bu powershell komutlarının takibini azure portal üzerinden de yapabilirsiniz.
Umarım faydalı bir makale olmuştur.
Bir sonraki makalemde görüşmek üzere.