はじめに
Azure Firewall に Network rule で FQDN を使う機能が実装されました。おそらく 2019年 10月くらいに。
{
"name": "L4-traffic-with-FQDN",
"description": "Block traffic based on source IPs and ports to amazon",
"sourceAddresses": [
"10.2.4.12-10.2.4.255"
],
"destinationPorts": [
"443-444",
"8443"
],
"destinationFqdns": [
"www.amazon.com"
],
"protocols": [
"TCP"
]
}
「HTTP/HTTPS 以外の通信に対して FQDN で通信を制御する」という機能は、Network Virtual Appliance にはあるが Azure Firewall にはないものでした。Azure Firewall が Network Virtual Appliance に一歩追いついた記念すべきアップデートなので試そうと思っていたのですが、いつまでたってもポータルが FQDN をサポートしないので放置していました。ですが、ポータルが FQDN をサポートする気配が全くないので、PowerShell で試してみました。
設定
DestinationAddress
のかわりに DestinationFqdn
を利用します。
$azfw = Get-AzFirewall -Name azfw01 -ResourceGroupName fgnew
$Rule = New-AzFirewallNetworkRule -Name 001 -Description "ssh by FQDN" -SourceAddress 10.0.0.0/16 -DestinationFqdn "sslgw.aimless.jp" -DestinationPort 22 -Protocol TCP
$RuleCollection = New-AzFirewallNetworkRuleCollection -Name 001 -Priority 100 -Rule $Rule -ActionType "Allow"
$azfw.NetworkRuleCollections = $RuleCollection
Set-AzFirewall -AzureFirewall $Azfw
残念なことに、ポータルでは設定を確認できません。 DestinationFqdn
を表示する欄がないためです。下図のように DestinationAddress
が空欄のルールが爆誕します。。。
動作確認
ルールを設定していない Azure Firewall 経由で sslgw.aimless.jp に SSH で接続したところ、通信がタイムアウトしました。該当の通信を Azure Firewall がドロップしたからです。
aimless@test01:~$ ssh -l admin sslgw.aimless.jp
ssh: connect to host sslgw.aimless.jp port 22: Connection timed out
上記の設定のように sslgw.aimless.jp 宛ての SSH を許可する Network rule を追加したところ、Azure Firewall 経由で sslgw.aimless.jp に SSH 接続できるようになりました。
aimless@test01:~$ ssh -l admin sslgw.aimless.jp
admin@sslgw.aimless.jp's password:
また、sslgw.aimless.jp の A レコードに登録されている IP アドレス 宛ての SSH も許可されました。
aimless@test01:~$ ssh -l admin 36.xxx.xxx.xxx
admin@36.xxx.xxx.xxx's password:
ただし、Network rule の FQDN の仕様が公式ドキュメントに書かれていないので、どのような仕組みで動いているのかが不明です。FortiGate のように、Network rule に登録されている FQDN を名前解決して、返ってきた IP アドレスを使って通信を制御する方式でしょうか。知りたい。
Log Analytics に転送されてきたログの出力は IP アドレスで許可したときと同じです。ログ上では FQDN ではなく IP アドレスが記録されるにも関わらず、どのルールで処理されたかが記録されていないので、通信がどの FQDN に該当して処理されたのかを後追いできません。がっかり実装。
Property | Value |
---|---|
TenantId | xxxxxxxx-xxxx-xxxx-xxxx-8092c65a78c1 |
SourceSystem | Azure |
TimeGenerated [UTC] | 2020-05-02T12:49:09.237Z |
msg_s | TCP request from 10.0.5.4:32794 to 36.xxx.xxx.xxx:22. Action: Allow |
ResourceId | /SUBSCRIPTIONS/xxxxxxxx-xxxx-xxxx-xxxx-8092c65a78c1/RESOURCEGROUPS/FGNEW/PROVIDERS/MICROSOFT.NETWORK/AZUREFIREWALLS/AZFW01 |
Category | AzureFirewallNetworkRule |
OperationName | AzureFirewallNetworkRuleLog |
SubscriptionId | xxxxxxxx-xxxx-xxxx-xxxx-8092c65a78c1 |
ResourceGroup | FGNEW |
ResourceProvider | MICROSOFT.NETWORK |
Resource | AZFW01 |
ResourceType | AZUREFIREWALLS |
Type | AzureDiagnostics |
まとめ
Network rule に FQDN を使う方法をまとめました。具体的な挙動が不明ではありますが、Azure Firewall と Network Virtual Appliance との差が縮まったのは良いことです。ポータルが Network rule の FQDN をサポートしてくれることを待っています。