LoginSignup
2
2

More than 5 years have passed since last update.

GCPのファイアーウォール ルールへ複数IPを設定するシェルを作った

Last updated at Posted at 2018-08-30

ブログの転載です。

ちょっと前に書いた記事でファイアーウォールルールを20個弱作成しました。
http://smot93516.hatenablog.jp/entry/2018/08/06/150052

確認しながらだったので1時間弱の工数。

これをプロジェクト毎に同じ量作成していくって考えるとおぞましい。まじで。

本来なら別プロジェクトでもファイアーウォールルールを共有できたらと思っていろいろ調べてたのですが、見つからなかったので今回の方法に落ち着きました。

経緯

GCPへ移行させたとある会社のサーバーへ、1分間に3、 4通の頻度で大量の迷惑メールが届いているとの報告をうけました。

2018-08-23 13.55.32 からのスクリーンショット.png

ドメインはqq.comです。中国?のメールらしい。

Sendgridの管理画面を見てみるとランダムな数字@qq.comのメールが頻繁にきてました。

アクセスログを見てIPを検索した結果、ほぼすべてがフィリピンからの攻撃。

いままで、中国から攻撃が来てたのでその対策はしてたのですが、盲点でした。

思い込みって怖いですね。

今後もファイアーウォールルールを作るって考えると本当に鬱になりそうだったので、だれでもシェルを叩いて作成でき、GitHubに公開して共有すればみんな幸せになるんじゃなかろうか、ということで作成しました。

準備

ローカルでgloudコマンドが使える環境を作っておいてください。

インストール方法は上の記事に載ってます。

GitHub貼っておくのでcloneしてください。
https://github.com/motty93/GceFirewalls.git

README.mdに拙い英語でやり方書いてるので、文章間違えあればプルリクおねがいします。

中国、韓国、北朝鮮、フィリピンのIPを制限

cn-kr-kp-firewall.shが中国、韓国、北朝鮮のIPを制限するシェルです。

philippines-firewall.shがフィリピンのIPを制限するシェル。

また攻撃先があれば随時シェルを追加していきます。

IPを羅列したテキストを元にシェルを実行

all-firewall.sh
#!/bin/bash

count=0
BASE_PATH=$(cd $(dirname $0); pwd)
DIR_PARH=$(dirname ${BASE_PATH})

while read line
do
  if [ -s $DIR_PATH/iptext/all-ip-addresses.txt ]; then
    count=$(( count + 1 ))
    if [ "$(uname)" == 'Linux' ]; then
      ADDRESSES=`head -n 255 $DIR_PATH/iptext/all-ip-addresses.txt | sed -e ':loop; N; $!b loop; s/[\r\n]\+/,/g'`
    elif [ "$(uname)" == 'Darwin' ]; then
      ADDRESSES=`head -n 255 $DIR_PATH/iptext/all-ip-addresses.txt | sed "" -e ':loop; N; $!b loop; s/[\r\n]\+/,/g'`
    else
      ADDRESSES=""
    fi
    sed -i -e 1,255d $DIR_PATH/iptext/all-ip-addresses.txt
    if [ $count -lt 10 ]; then
      gcloud compute firewall-rules create ip-reject-0$count \
              --priority 10 \
              --action deny \
              --direction ingress \
              --rules all \
              --source-ranges $ADDRESSES
    else
      gcloud compute firewall-rules create ip-reject-$count \
              --priority 10 \
              --action deny \
              --direction ingress \
              --rules all \
              --source-ranges $ADDRESSES
    fi
  fi
done < $DIR_PATH/iptext/all-ip-addresses.txt

cd $DIR_PATH
git checkout iptext/all-ip-addresses.txt

GceFirewalls/iptext/all-ip-addresses.txtに中国、韓国、北朝鮮、フィリピンのIP全てが入ってます。

シェル(GceFirewalls/sh/all-firewall.sh)を実行すれば、このテキストファイルを元にgcloudコマンドを実行してファイアーウォールルールを作成できます。

もしかしたらOSによってはシェルが上手く動かないかもしれないです。

そんときはプルリク上げてもらえると喜びます。

終わりに

ファイアーウォールルールをプロジェクト毎に共有する方法をご存知の方がいらっしゃれば教えていただきたいですm(_ _)m

2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2