ホームページをfirewalldで国内とCloudFrontからのみアクセス可能にしたい

どもども。ギークフィードのクラウドサーバー管理担当、ippeiです。

某VPS上で動かしているwordpressサーバーが最近海外からの攻撃的アクセスを受けるようになってしまったので、

firewalldでのアクセス制御をすることにしました。

 

このwordpressサーバーがちょっと曲者で、全部で5,60のwordpressが乗っていますが、

CloudFrontのオリジンとして使用しているものもあります。(このホームページとか)

単純に日本だけアクセス許可としてしまうと、CloudFront経由でのアクセスができなくなってしまいます。

 

なので、CloudFrontのグローバルIPも許可することがミソになります。

というわけでやっていきましょう。

 

日本国内のIPリストを作る

国内のIPリストを作成するシェルスクリプトが以下です。

/root/iptables

以下に配置する想定です。

 

 

最初のCOUNTRYLISTの値を、’JP NZ AU’などとすることで複数の国を指定可能です。

/root/iptables/jpip

にIPリストのファイルが作成されます。

 

CloudFrontのグローバルIPリストを作る

続いてCloudFrontのIPリストを作成します。

こちらも同じ/root/iptablesディレクトリに配置する想定です。

 

 

AWSは各サービスのグローバルIPをjson形式で公開しています。

このページをスクレイピングすることで、特定サービスのIPリストを取得できます。

記事執筆時には、CloudFrontのipv4グローバルIPが68個ありました。

これらは世界中のエッジサーバーのIPも含まれます。

 

/root/iptables/cloudfront_ip

にIPリストのファイルが作成されます。

 

firewalldにIPリストをフィルターとして設定する

ここまできたら、あとはfirewalldコマンドでちょちょいと設定するだけです。

以下に従って実行してみましょう。

 

 

これにて設定完了です。

海外からの不正アクセスを防ぎつつ、CloudFrontからは世界中のアクセスを受け入れることができます。

 

TIPS: 定期的に更新をしよう

このAWSのグローバルIPリストは定期的に更新されます。

基本的には追加だけだと思いますが、その対策として定期的にこのフィルターも更新しましょう。

やりかたは簡単で、上記のスクリプトに下の行を追加するだけです。

 

CloudFrontの定期実行用追記

追記できたら、crontabに登録します。

更新頻度も低いので月イチとかで良さそうです。

1 0 1 * */root/iptables/cloudfrontip.sh

rootユーザーの実行権限をつけるのを忘れずに。

 

まとめ

  • 各国のIPリストを公開しているところから国内IPリストを作ろう
  • AWSの各サービスのグローバルIPリストからCloudFrontのIPリストを作ろう
  • firewalldのipsetを作ってフィルターをかけよう
  • AWSのグローバルIPは更新されるから定期実行がオススメ

 

雑記

今回初めてwordpressのビジュアルエディタで執筆してみました。

今までは全部html書いてました。

圧倒的に書くスピードが早くなったけど、若干行間の感じとかが好みじゃない。。

ブログ執筆数を増やしていきたいので、今後はこのスタイルでやっていきます!

 

参考にさせていただいたリンク

firewalldで国内IPのみ許可

この記事が気に入ったら
いいね ! しよう

Twitter で

【採用情報】一緒に働く仲間を募集しています

採用情報
ページトップへ