CloudflareのIPアドレスを自動的にiptablesに設定する方法

Cloudflare とは、無料で簡単に使えるCDN(コンテンツ・デリバリー・ネットワーク)サービスです。
Cloudflareを導入すると、ウェブサーバへのアクセスが、すべてCloudflare経由になります。そのため、ウェブサーバのiptablesの設定で、ウェブサーバへのHTTPとHTTPSのアクセスをCloudflareのIPアドレスに制限することができます。

そこで、CloudflareのIPアドレスを自動的に取得して、iptablesに設定するようにしてみました。

まず、CloudflareのIPアドレスは、 Cloudflareの「IP Ranges」のページ に載っています。そのページにある通り、IPv4のアドレスのリストだけのページが https://www.cloudflare.com/ips-v4 に用意されています。

次に、IPアドレスのリストを取得して、iptablesを設定する方法が、Cloudflareのブログ記事「How do I whitelist Cloudflare’s IP addresses in iptables?」に載っています。

しかし、今回は、そのブログにある方法ではなく、以下のようなスクリプトを作成して、設定しました。

可用性を考えて、IPアドレスのリストの取得に失敗した場合は、すべてのIPアドレスからのHTTPとHTTPSのアクセスを許可しています。
スクリプトの設定方法は、以前の記事「Debianでのiptables設定」の通りに行いました。

Debianでのiptables設定

Debian(stretch)でのiptables設定について、調べたことをまとめてみます。

以前は、以下のようなスクリプトを /etc/network/if-pre-up.d/ に置いて、iptables設定を行っておりました。
(外部からは、IPアドレスが「192.168.1.2」の管理用PCからと、httpとhttpsの通信のみを許可する例です。)

しかし、インターフェースが複数ある場合に、同じ設定が2重に設定されるという状況になってしまいました。
Debian 管理者ハンドブックの「14.2.4. 起動時にルールを適用する」 を見てみたところ、 /etc/network/interfaces に設定する方法が推奨されていたので、その方法で設定することにしました。

まず、上のスクリプトを /usr/local/etc/iptables.sh に置きます。このとき、置くディレクトリは任意の場所、ファイル名は任意のもので構いません。

次に、以下のように、 /etc/network/interfaces の中の最後のインターフェースのところに「up /usr/local/etc/iptables.sh」と書きます。

以上で設定は終わりです。
この設定に変えてからは、同じ設定が2重に設定されることはなくなりました。

NetworkManagerなどを利用している場合は、設定方法が変わりますので、NetworkManagerのマニュアルなどを調べる必要がありそうです。

OWASP Flagshipプロジェクトまとめ

先日、OWASPのイベント「OWT2017JP」に参加してきました。

ご存知でない方のためにOWASPとは何かについての説明を、OWASP Japanチャプターのホームページより引用します。

OWASP – Open Web Application Security Project とは、Webをはじめとするソフトウェアのセキュリティ環境の現状、またセキュアなソフトウェア開発を促進する技術・プロセスに関する情報共有と普及啓発を目的としたプロフェッショナルの集まる、オープンソース・ソフトウェアコミュニティです。

その日のトレーニング(講演)で、OWASPのさまざまなプロジェクトについての説明がありました。そのおかげで、いままで知らなかった、多くの役に立つプロジェクトがあることを知りました。OWASP Projectのページ を見るとわかるように、OWASPにはとても多くのプロジェクトがあります。そこで、トレーニングで学んだ内容をふまえて、OWASPの主なプロジェクトである、Flagshipプロジェクトについて表にまとめてみました。

Tools

プロジェクト 日本語訳 簡単な説明
OWASP Zed Attack Proxy Project OWASP ZAP マニュアル Ver.2.1.0版 無料のペネトレーションテストツール。Webアプリケーションに対して自動診断を行う。腕を磨けば手動での診断にも利用できる。
OWASP Web Testing Environment Project OWASP WTE。OWASPのアプリケーションセキュリティツールとドキュメントの詰め合わせ。VM、Debianパッケージ、ブータブルISOイメージなどの配布形式がある。
OWASP OWTF OWASP Testing GuideやPTES(Penetration Testing Execution Standard)などのセキュリティ基準に沿った効率的なペネトレーション検査ができるツールを開発するプロジェクト。
OWASP Dependency Check Webアプリケーションの中から脆弱性のあるコンポーネントを発見するスキャナー。Java, .NET に対応。Ruby, Node.js, Python, C/C++ は試験的な対応。
OWASP Security Shepherd Webとモバイルのアプリケーションセキュリティのためのトレーニングツール。セキュリティを学ぶためのハンズオン環境。CTFモード、オープンフロアモード、トーナメントモードなどを備える。

Code

プロジェクト 日本語訳 簡単な説明
OWASP ModSecurity Core Rule Set Project ModSecurityで使える一般的な攻撃検知のためのルールセット。(ModSecurityはApacheのモジュールとして動作するオープンソースのWAF。)
OWASP CSRFGuard Project クロスサイト・リクエストフォージェリ(CSRF)対策ライブラリ。
OWASP AppSensor Project アプリケーションレイヤーに対する侵入検知と自動応答のためのフレームワーク。アプリケーションに防御層を実装する。「OWASP AppSensor Guide」(ガイド)と「OWASP AppSensor Reference Implementation」(コード)を含む。

Documentation

プロジェクト 日本語訳 簡単な説明
OWASP Application Security Verification Standard Project OWASPアプリケーションセキュリティ検証標準 ASVS。アプリケーションのセキュリティ要件またはセキュリティテストの項目。セキュアなアプリケーションとは何かを定義するこができる。アプリケーションのセキュリティ評価のための検査標準。自動または手動のセキュリティテスト及びコードレビュー方式の要件。
OWASP SAMM Project ソフトウエアセキュリティ保証成熟度モデル Software Assurance Maturity Model (SAMM)。ソフトウェアセキュリティ保証成熟度モデル。リスクに合わせたソフトウェアセキュリティ戦略を実装するためのフレームワーク。開発ライフサイクルをよりセキュアにする。より成熟したセキュア開発を行うことを支援するドキュメント。
OWASP AppSensor Project アプリケーションレイヤーに対する侵入検知と自動応答のためのフレームワーク。アプリケーションに防御層を実装する。「OWASP AppSensor Guide」(ガイド)と「OWASP AppSensor Reference Implementation」(コード)を含む。
OWASP Top Ten Project OWASP Top 10 – 2013 日本語版 Webアプリケーション脆弱性トップ10。主要な脆弱性10個を説明するもの。
OWASP Testing Project OWASP テスティングガイド Webサイト/アプリケーションのテストガイド「OWASP Testing Guide」。各脆弱性、機能別のテスト方法。

なお、「OWT2017JP」のスライド資料は https://speakerdeck.com/owaspjapan にて公開されております。