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 にて公開されております。

GitLabのサーバ移設

GitLabを別のサーバに移設しました。その際の手順を以下にまとめます。
前提条件として、移設元のGitLabと移設先のGitLabがOmnibusパッケージからインストールした同じバージョンのものであるとします。
この条件の元だと、簡単にサーバ移設ができました。

まず、移設元サーバで、以下のコマンドにより、バックアップを作成します。

バックアップが作成されるのは、gitlab.rb の以下の場所に定義されているディレクトリです。
該当の行がコメントアウトされていれば、デフォルトの場所に保存されます。

実行したところ、「1480838198_gitlab_backup.tar」というファイルが作成されました。

次に、移設先サーバにバックアップファイル(「1480838198_gitlab_backup.tar」)を移設元サーバからコピーして、移設先サーバの gitlab.rb の「backup_path」で定義されている場所に置きます。

以降は移設先サーバでの作業になります。

まず、コピーしたバックアップファイルに対して、すべてに「read」のパーミッションを付けておきます。

次のコマンドで、データベースに接続しているプロセスを止めます。

プロセスが止まっているか確認します。

バックアップファイルからリストアします。「BACKUP=」の引数はバックアップファイルのタイムスタンプで、今回のバックアップファイルの場合は「1480838198」になります。

GitLabをリスタートして、チェックを実行して、動作を確認したら、終了です。

Sambaサーバ(パスワード認証なし)を立ち上げるには

Windows からパスワード認証なしでアクセス可能な Sambaサーバを立ち上げました。
環境
OS はLinux(Ubuntu 14.04LTS) を使用しました。必要なアプリケーションおよび今回使用したバージョンは以下の通りです。

名称 バージョン パッケージ
Samba 2:4.1.6+dfsg-1ubuntu2.14.04.8 Samba

設定および手順
Samba パッケージをインストール後、以下の設定を行います。
例として、ホスト名を Crestboz とし、/home に public ディレクトリを作成します。

  1. 公開用の共有ディレクトリ public を作成します。
  2. /etc/samba/smb.conf の設定を変更します。
    ● [global] の設定を追加および変更
    ※1「XX.XX.XX.0/25」の部分は、アクセス制限する IPアドレスを記述。
    ※2 認証なしとするため、ゲストアカウントでの接続とする。
    ● 公開ディレクトリ public の設定を追加
    ファイルの最後尾に以下を追加します。
    ※1 共有ディレクトリのパスを指定。
    ※2 ファイルの修正可。
    ※3 ゲストユーザとしてアクセス可。
    ※4 ゲスト接続のみ許可。
    ※5 ファイル作成時に付与されるパーミッション。
    ※6 ディレクトリ作成時に付与されるパーミッション。
  3. Sambaを再起動します。

Windows からのアクセス

  1. ネットワークを表示します。
    Sambaサーバのホスト名「CRESTBOZ」が表示されますので、ダブルクリックします。
    Windowsネットワーク01
  2. 共有ディレクトリ「public」が表示します。
    ダブルクリックすると、ディレクトリに保存されているディレクトリおよびファイルを表示します。
    Windowsネットワーク02

アンケートシステム LimeSurvey をローカルPCで立ち上げるには

オープンソースとして公開されている LimeSurvey をローカルPCにインストールして立ち上げました。
作業は、LimeSurvey Manual を参考に行いました。

環境
OS はLinux(Ubuntu 14.04LTS) を使用しました。必要なアプリケーションおよび今回使用したバージョンは以下の通りです。

名称 バージョン パッケージ
Apache 2.4.7-1ubuntu4.5 apache2
MySQL 5.5.44-0ubuntu0.14.04.1 mysql-server
PHP 5.5.9+dfsg-1ubuntu4.11 php5
PHP GD ライブラリ 5.5.9+dfsg-1ubuntu4.11 phpt5-gd
PHP MBString ライブラリ 5.5.9+dfsg-1ubuntu4.11 libapache2-mod-php5
PHP LDAP ライブラリ 5.5.9+dfsg-1ubuntu4.11 php5-ldap
PHP imap ライブラリ 5.4.6-0ubuntu5 php5-imap

php5-imap パッケージをインストールしたら、以下を実行します。

ダウンロードおよび前提
LimeSurvey をダウンロードして解凍します。LimeSurvey2.05plus日本語対応版
解凍したソース(LimeSurvey ディレクトリ)は /var/www に置きます。
(省略しますが、これに合わせて Apache の設定を行ないます。)

以下のディレクトリのパーミッションをすべて777とします。
(マニュアルには775との記述がありましたが、775ではエラーになりました。)

  • /var/www/limesurvey/tmp
  • /var/www/limesurvey/application/config
  • /var/www/limesurvey/upload

手順

  1. ブラウザで http://localhost/limesurvey/admin にアクセスします。
  2. 言語で「日本語」を選択し、「インストール開始」ボタンをクリックします。
    LimeSurveyインストール01
  3. ライセンスの確認画面が表示します。
    「同意する」ボタンをクリックします。
    LimeSurveyインストール02
  4. システム構成のチェックが行われます。
    問題なければ「次へ」ボタンをクリックします。
    LimeSurveyインストール03
  5. データベースの情報を入力します。今回は既存のデータベースを使用しました。
    情報を入力したら「次へ」ボタンをクリックします。
    LimeSurveyインストール04
  6. データベース設定の確認画面が表示します。
    「データベースを作成する」ボタンをクリックします。
    LimeSurveyインストール05
  7. オプション設定の入力画面が表示します。
    必要な部分を変更して「次へ」ボタンをクリックします。こちらについては、後からでも変更可能です。
    LimeSurveyインストール06
  8. インストール成功画面が表示します。
    管理画面を表示する場合は、「管理」ボタンをクリックします。
    LimeSurveyインストール07
  9. 管理画面が表示します。
    LimeSurveyインストール08

FirefoxでAltキーのキーボードショートカットを無効にする

Firefoxでは、Altキーに「メニューバーを表示する」という機能がキーボードショートカットとして割り当てられています。また、メニューバーの中のメニューを実行するためのショートカットキーとしてもAltキーは使われています。
そのため、日本語入力の切り替えなど、他の機能のキーボードショートカットにAltキーを使おうとしてもうまくいかないことがあります。そういう場合は、Altキーに割り当てられているキーボードショートカットを無効にすると、問題が解消することがあります。

FirefoxでAltキーに割り当てられているキーボードショートカットを無効にする手順は以下のとおりです。

  1. ロケーションバーに「about:config」と入力して、Enterキーを押す。
  2. “動作保証対象外になります!” という警告ページが表示された場合は、細心の注意を払って使用するをクリックする。
  3. 検索欄に「ui.key.menu」と入力する
    about-config-1
  4. 「ui.key.menuAccessKey」の行をダブルクリックして、値を「0」にする。その下の「ui.key.menuAccessKeyFocuses」の行をダブルクリックして、値を「false」にする。
    about-config-2

Pythonのdatetimeモジュールのdate.toordinal()をC++で実装しました

C++でプログラムを作成しているときに、Pythonのdatetimeモジュールのdate.toordinal()が欲しくなったため、Pythonのコードを見てC++で実装してみました。

下のコード内のtoordinal()という関数が本体です。

このままコンパイルして実行することもできます。
年と月と日の入力を求めてくるので入力すると、1年1月1日からの日数を表示します。

中身をわかりやすくするため、エラー処理などのコードは入れてありません。

Firefox起動時に黒い画面が表示される不具合について

Firefoxを起動すると、黒い画面が表示され何も表示されないという現象が起こりました。

Firefoxのトラブルシューティングの記事によると、
一部のグラフィックカードとドライバの組み合わせによっては、ハードウェアアクセラレーションを利用すると、Firefox がクラッシュするか、ページ上のテキストやオブジェクトの表示に問題が起こることがあります。
という現象があるようです。

【Firefox】 拡張機能とテーマのトラブルシューティング

トラブルシューティングの手順に従ってハードウェアアクセラレーション機能をオフにしたところ、現象は起こらなくなりました。

行なった手順は以下の通りです。

  1. Firefoxをセーフモードで起動します。
    (Shiftキーを押下しながらFirefoxアイコンをダブルクリックします。)
  2. メニューから、
    [ツール] → [オプション] → [詳細] → [一般]タブ
    を選択し、
    「ハードウェアアクセラレーション機能を使用する (可能な場合)」からチェックを外します。

とりあえずオプション変更で表示されるようになりましたが、時間のある時に、グラフィックカードのドライバの更新も検討してみたいと思っています。

ユーザーインターフェースへのこだわり

4月から3ヶ月の予定で、ある予約システムを作成しています。
当然のことですが、毎回どんなユーザインターフェースにしようか悩みます。

基本モットーは、
”しばり過ぎず緩すぎず、なるべく字は少なく、直感的に入力できること”
です。

弊社は、現在のところ100%が受注システムなので、必ず使用してくださるお客様とお話しをさせていただく機会があります。

そのため、実際に仕様を打ち合わせてくださったご担当者様や職場の雰囲気等をなるべく感じ取り、それに合ったシステムを作成していけたらと思っています。