Azure のネットワークセキュリティグループの規則を追加するスクリプトを作りました
AzureVMを利用している方に取って、ネットワークセキュリティグループを必ず利用しているかと思いますが、そのネットワークセキュリティグループの規則を追加する際に便利なスクリプトを作成しました。
ネットワークセキュリティグループの追加には、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」を実行します。
すると、優先度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