takashi kono's blog

コーヒーとキーボードと共に何かを記録していくブログ

EC2 で インバウンドリクエストを 国内 IP のみに制限したかった

モチベーション

EC2 でサービスを立てたはいいが、海外からアクセスがあるのが気持ち悪い EC2 のセキュリティグループでフィルタをかけたいが、GEO IP とか国内フィルタとかできそうになかっったので、お腹の中でなんとかしようと思った cloudfront とか使うと GEO IP で制限できるんだろうか?調べてない

参考

www.systemexpress.co.jp

こちらと

www.geekfeed.co.jp

こちらを参考にさせていただきました。

EC2 instance

amazon linux t2.micro を使いました

手順

script 作って firewalld に登録するのは参考の記事にあるので省略 とはいえ、firewalld は最初からはいってなかったのでインストールはした

sudo yum install -y firewalld
sudo systemctl start firewalld

service で dns を公開しているのでそのサービスを追加した

firewall-cmd --permanent --zone=domestic --add-service=dns
firewall-cmd --reload

定期的に読み直し?

必要かもしれないので作った

sudo -s
cd /root/iptables
mkdir logs

cat > update_ip_filter.sh
#!/bin/bash

set -e

cd $(dirname $0)

LOGD="logs"
LFILE="${LOGD}/update_ip_filter.log.$(date +%Y-%m)"

function t-log(){
  echo -n "$(date -Ins) " >> ${LFILE}
}

t-log
echo "START" >> ${LFILE}

t-log
./jpip_setup.sh >> ${LFILE} 2>&1
echo "jpip updated"

t-log; echo "input jpip file to domestic rule" >> ${LFILE}
firewall-cmd --permanent --ipset=domestic --add-entries-from-file=/root/iptables/jpip >> ${LFILE} 2>&1

t-log; echo "reread ipset" >> ${LFILE}
firewall-cmd --permanent --zone=domestic --add-source=ipset:domestic >> ${LFILE} 2>&1

t-log; echo "reload firewall" >> ${LFILE}
firewall-cmd --reload >> ${LFILE} 2>&1

t-log
echo "FINISHED" >> ${LFILE}

exit 0

# Ctrl + D で抜ける

chmod u+x update_ip_filter.sh

テストをこのタイミングでやっておくといい

crontab への登録

crontab -l
crontab -l > crontab.$(date +%F)
crontab -e

# update jpip list
# run 00:01 1st each month
1 0 1 * * /root/iptables/update_ip_filter.sh
40 * * * * /root/iptables/update_ip_filter.sh

# 保存

# 確認
crontab -l

# 動作確認
tail -f /root/iptables/logs/*.log

# 問題なければ不要箇所を削除
crontab -e
# update jpip list
# run 00:01 1st each month
1 0 1 * * /root/iptables/update_ip_filter.sh

# 確認
crontab -l

感想

なんとか国内IPだけに出来た EC2 のセキュリティは allow any にしておいて、EC2 でルールを完結させることが出来て嬉しい 次は何をしようかな