ブログの転載です。
ちょっと前に書いた記事でファイアーウォールルールを20個弱作成しました。
http://smot93516.hatenablog.jp/entry/2018/08/06/150052
確認しながらだったので1時間弱の工数。
これをプロジェクト毎に同じ量作成していくって考えるとおぞましい。まじで。
本来なら別プロジェクトでもファイアーウォールルールを共有できたらと思っていろいろ調べてたのですが、見つからなかったので今回の方法に落ち着きました。
経緯
GCPへ移行させたとある会社のサーバーへ、1分間に3、 4通の頻度で大量の迷惑メールが届いているとの報告をうけました。
ドメインは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を羅列したテキストを元にシェルを実行
#!/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