Azure のネットワークセキュリティグループの規則を追加するスクリプトを作りました

Azureサーバー
スポンサーリンク


Azure のネットワークセキュリティグループの規則を追加するスクリプトを作りました

AzureVMを利用している方に取って、ネットワークセキュリティグループを必ず利用しているかと思いますが、そのネットワークセキュリティグループの規則を追加する際に便利なスクリプトを作成しました。

Azure

ネットワークセキュリティグループの追加には、WEBポータルから操作を行うか、Azure CLIを利用して追加するのですが、WEBポータルから追加を行うにはかなりの手間がかかります。

登録するルールが多ければ多いほどその手間が増えてしまいます。となると、Azure CLIを利用するわけですが、Azure CLIをインストールすれば、すぐにルールを追加できるというわけでなく、スクリプトを自分で書く必要があります。

#!/bin/sh

# Define variables
ResourceGroup="YOUR_RESOURCE_GROUP_NAME"
NsgName="YOUR_NSG_NAME"
RuleName="block-"
Description="\"block\""
Type="Deny" #Allow/Deny
Protocol="*" #Tcp/Udp/*
Direction="Inbound" #Inbound/Outbound
Priority=""
SourceAddressPrefix="*"
SourcePortRange="*"
DestinationAddressPrefix="*"
DestinationPortRange="*"

PriorityNumText="./priority.txt"
DefaultPriorityNum="2000"

# Processing variables
RuleName=$RuleName`date +"%Y-%m-%d-%I-%M"`

if [ -e $PriorityNumText ]; then
	Priority=`cat $PriorityNumText`
else
	echo $DefaultPriorityNum > $PriorityNumText
	Priority=`cat $PriorityNumText`
fi

#Priority=`cat $PriorityNumText`

cat ./cidr.txt | while read line; do
	i=1
	RuleName=$RuleName--$i
	az network nsg rule create \
	--resource-group "$ResourceGroup" \
	--nsg-name "$NsgName" \
	--name "$RuleName" \
	--description "${Description}" \
	--access "$Type" \
	--protocol "${Protocol}" \
	--direction "$Direction" \
	--priority "$Priority" \
	--source-address-prefix "${line}" \
	--source-port-range "${SourcePortRange}" \
	--destination-address-prefix "${DestinationAddressPrefix}" \
	--destination-port-range "${SourcePortRange}"

	i=$(( i +1 ))
	Priority=$(( Priority + 1 ))
	echo $Priority > $PriorityNumText
done

そんなわけで、サクッとShellScriptで作成しました。

使い方

LinuxもしくはWindows Subsystem for Linuxで、以下のコマンドを実行して「azire-sh」をダウンロードしてきます。

git clone https://github.com/Syobon/azure-sh.git

すると、カレントディレクトリに「azure-sh」ディレクトリが作成されますので、cdコマンドで移動します。

次に、nsg-add.shを編集し、下記の項目をご自身の環境にあった値に変更します。

#ネットワークセキュリティグループのリソースグループ名を入力
ResourceGroup="YOUR_RESOURCE_GROUP_NAME"

#ネットワークセキュリティグループの名前を入力
NsgName="YOUR_NSG_NAME"

#追加するルール名のprefixを指定します。デフォルトでは「block-」となっています。
RuleName="block-"

#追加するルールの説明欄に記載する内容を指定します。デフォルトでは「"block"」となっています。
#なおダブルクォートが必須ですので、\"<ここに説明を入力>\" 説明文の前後にある\"は削除しないようにしてください
Description="\"block\""

#許可ルールか、拒否ルールか指定します。 許可する場合はAllow、拒否する場合はDenyと入力します。
Type="Deny" #Allow/Deny

#許可もしくは拒否する通信のプロトコルを指定します。全てを対象としたい場合は*、TCPはTcp、UDPはUdpと入力します
Protocol="*" #Tcp/Udp/*

#受信の規則か、送信の規則か選択します。受信の場合はInboundを、送信の場合はOutboundと入力します。
Direction="Inbound" #Inbound/Outbound

#ソースポートの指定を行います。全てを対象としたい場合は*を、特定ポートの場合はそのポート番号を
#指定範囲のポートを対象とする場合は、1024-1030のように記載します。
SourcePortRange="*"

#ソースポートの指定を行います。全てを対象としたい場合は*を、特定ポートの場合はそのポート番号を
#指定範囲のポートを対象とする場合は、1024-1030のように記載します。
DestinationPortRange="*"

次に、受信規則もしくは送信規則の、送信元/受信先のIPアドレスを記載した「cidr.txt」をnsg-add.shと同じ階層に作成します。

192.168.24.20
192.168.30.21
192.168.40.0/24

上記例を見て分かるとおり、IPアドレスの決め打ちや、サブネットマスクでマスクしたアドレスを指定出来ます。

cidr.txtの準備が完了したら、「sh nsg-add.sh」を実行します。

Azure

すると、優先度2000から順にルールが追加されていきます。

シェルスクリプトの実行が終わると、nsg-add.shと同じ階層に「priority.txt」が作成されます。

優先度の管理

このスクリプトでは優先度を自動でセットするために、DefaultPriorityNum変数で、デフォルトの優先度を2000にセットし、ルールが追加される度に1ずつインクリメントされ、priority.txtに上書きしていきます。

初回実行時にpriority.txtがないか確認し、なければ「2000」と記載されたpriority.txtを作成し、ルールの追加ループを回します。

もし、priority.txtが存在する場合は、priority.txtの中身を$line変数に代入し、ルールの追加処理に回ります。

ですので、もしスクリプト実行後にpriority.txtを削除してしまった場合は、DefaultPriorityNum変数を手で編集してください。もし、そのまま編集せずに実行してしまうと、既存ルールを上書きしてしまいます。

まとめ

書きっぷりを見て分かるとおり、サーバに対して攻撃を行ってくるIPをNSGでブロックするために書いたスクリプトになります。

びっくりするくらいの脳筋スクリプトですが、作業短縮の手助けをしてくれるはずですので、活用もしくはご参考頂ければ幸いです。

README.mdはそのうち書きます・・・

Source: Github – azure-sh

コメント