GCPの無料枠を使う場合、特定国のIPアドレスを弾く必要があるようです。
元ネタはこちらになります→Google Cloud Platformで中国からの通信をブロック
フィルタ登録時の手打ちが面倒だったので、半自動にしてみました。
前提条件
- 今回はwsl上での作業です
- Google Cloud Functionsの環境が出来ていること
- 次のファイルがカレントフォルダに置かれていること
https://ipv4.fetus.jp/cn.txt - 時々リストを更新する必要があると思いますが、今回はそこまで考慮していません
手順
- 次のやっつけスクリプトをカレントフォルダに置きます
#!/bin/bash # # CONST_PROJECT に、ご自分のプロジェクト名を入れて下さい。 # カレントディレクトリに https://ipv4.fetus.jp/cn.txt を置いて下さい。 # 出来上がった china_block_xx.txt を、cloud shell に投げ込んで下さい。 # # wslからcloud shellを起動する自分メモ # gcloud alpha cloud-shell ssh # vimで流し込む場合は(貼り付け前に次のコマンドで) # インデントを無効にしておいた方が良いと思います # :set paste # CONST_PROJECT="MyProject" CONST_INPUTFILE="cn.txt" counterNo=1 lineNo=0 ruleNo=1 ruleStr="000" FileNo=0 fileStr="00" outputFile="foobar.txt" itemsCounter=0 readData="" workFile="puyopuyo.txt" # curl https://ipv4.fetus.jp/cn.txt if [ ! -f $CONST_INPUTFILE ]; then echo "Input file not found..." exit 1 fi workFile=$(mktemp "china-block.tmp.XXXXXX") sed '1,6d' $CONST_INPUTFILE > $workFile itemsCounter=`wc -l $workFile | cut -d " " -f 1` cat $workFile | while read readData do if [ $(($counterNo % 2500)) -eq 1 ]; then fileNo=`expr $fileNo + 1`; fileStr=`seq -f %02g $fileNo $fileNo` outputFile="china_block_$fileStr.txt" echo "File $outputFile" fi if [ $lineNo -eq 0 ]; then ruleStr=`seq -f %03g $ruleNo $ruleNo` echo "gcloud compute --project=$CONST_PROJECT firewall-rules create china-block-$ruleStr --description=\\中\\華\\圏\\のIP\\を\\弾\\く --direction=INGRESS --priority=10 --network=default --action=DENY --rules=all --source-ranges=\\" >> $outputFile lineNo=`expr $lineNo + 1` echo -n "Rule $ruleStr:" fi echo -n "$readData" >> $outputFile if [ $counterNo -eq $itemsCounter ]; then echo "" >> $outputFile echo "" else if [ $(($counterNo % 250)) -ne 0 ]; then if [ $(($counterNo % 5)) -eq 0 ]; then echo ",\\" >> $outputFile lineNo=`expr $lineNo + 1` else echo -n "," >> $outputFile fi echo -n "." else echo "" >> $outputFile echo "" lineNo=0 ruleNo=`expr $ruleNo + 1` fi fi counterNo=`expr $counterNo + 1` done rm -f $workFile exit 0
- スクリプトのCONST_PROJECTの内容を、自分のプロジェクト名に差し替えます
- wsl上でスクリプトをキックすると、china_block_xx.txtなるファイルが出来上がります
- cloud shellを起動します
gcloud alpha cloud-shell ssh
- 出来上がったchina_block_xx.txtを、cloud shellに投げ込みます
※一度に全部流し込んだらGCP側でリソース不足になったので、出力を分割しました
vimで流し込む場合は、貼り付け前に:set paste
- GCPの 『VPCネットワーク』→『ファイアウォールルール』にて、結果を確認します