お疲れ様です!
キャスレーコンサルティングのSI(システム・インテグレーション)部の栗田です。

ここ最近、何となくウェブサーバーを立ててみたいと思い、今回のテーマを思いつきました。
(ざっくりすぎですが…。)

ただ立てるだけでは味気なく思い、方向音痴な自分へのプレゼントも兼ねて、
「今回は地図上の最短ルートを検索するサイトも作成してみよう!」
と思います。

map
(こんな感じのよくあるものです。)

「前編:サーバー構築編」では、Webサーバー構築からpgRouting用の地図データのインポートまでの説明をさせて頂きたいと思います。

環境は、
OS:Ubuntu16.04 LTS
DB:postgresql9.5、PostGIS、pgRouting
言語:PHP7.0
といった内容の構築となります。
(サーバー接続用のWindows端末も必要となります。)

※Ubuntuのインストール手順は省略させて頂きます。既にインストール済の前提で進めさせて頂ければと思います。

前準備

1. サーバー接続用のWindows端末を用意し、TeraTermをインストールして下さい。
2. TeraTermでサーバーに接続し、下記のコマンドを実行します。
パッケージのリストをサーバーから入手したり、インストール済のパッケージの最新化などを行います。

sudo apt-get update
sudo apt-get check
sudo apt-get -s upgrade
sudo apt-get upgrade

テキストエディタをインストールします。

sudo apt-get install vim

これで前準備はokです。

セキュリティ対策

今時は色々な輩がここぞとばかりにサーバーを乗っ取ろうと試みてくるようです。
怖い世の中ですね…。
それではセキュリティ面の設定に関する説明をさせて頂きます。

♦SSH接続の設定
SSHで接続する際は鍵認証にしたいと思います。ペアとなる鍵がなければSSH接続できない仕組みとなります。

1. TeraTermを起動し、「新しい接続」ダイアログを閉じます。
2. 設定(S) → SSH鍵生成(N)で下記ダイアログを表示します。

tera1

3.「生成」ボタンをクリックします。
4.「鍵のパスフレーズ」を入力後に「公開鍵の保存」「秘密鍵の保存」をクリックします。
5. TeraTermでサーバーに接続し、TeraTermに公開鍵のファイルをドラッグドロップします。
6.「SCP」ボタンをクリックするとホームディレクトリにアップロードされます。

tera2
7. TeraTermで以下のコマンドを実行して、鍵を登録します。

cd ~
mkdir .ssh
chmod 700 .ssh
cat id_rsa.pub > .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
rm -f id_rsa.pub

8. Rootになり、以下のファイルを編集します。

sudo su -
vim /etc/ssh/sshd_config

【変更箇所】

# Port22を開放したままは危険なので、違うポート番号にして下さい。(1024以上が良いと思います。)
#Port22 → コメントを外し、Port12345 に変更(もちろん12345以外でも可能です)

# rootユーザでのログインを無効にして下さい。
#PermitRootLogin yes → コメントを外し、PermitRootLogin no に変更

# パスワード認証を無効にして鍵認証にして下さい。
PasswordAuthentication yes → PasswordAuthentication no に変更

# X11Protcolを遮断して下さい。
#X11Forwarding yes
#X11DisplayOffset 10
X11Forwarding no

9. SSHをリロードして設定を反映して下さい。

service ssh reload

♦iptablesの設定
決められたIPアドレス、ポートの接続のみを許可します。

1.適当なディレクトリを作成し、iptables設定用のスクリプトファイルを作成します。
スクリプトファイルは/etc/network/iptables/set_iptablesで新規作成します。

sudo mkdir /etc/network/iptables/
sudo vim /etc/network/iptables/set_iptables

【ファイルの内容】
ファイルの内容は状況によって変更して下さい。

/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

#下記のようなプライベートIPアドレスはアクセス禁止
/sbin/iptables -A INPUT -s 10.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -s 172.16.0.0/12 -j DROP
/sbin/iptables -A INPUT -s 192.168.0.0/16 -j DROP

#PING応答許可
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

#下記ポート有効(12345は♦SSH接続の設定の8.で決めたポート番号です)
/sbin/iptables -A INPUT -p tcp --dport 12345 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 5432 -j ACCEPT

/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables-save > /etc/network/iptables/iptables.db

2. 作成したファイルに実行権限を与えて実行して下さい。実行するとiptables.dbが作成されます。

sudo chmod +x /etc/network/iptables/set_iptables
sudo /etc/network/iptables/set_iptables
ls /etc/network/iptables/

3. ネットワークの起動時にiptablesの設定を反映するシェルスクリプトを作成します。
/etc/network/if-pre-up.d/ディレクトリにシェルスクリプトファイルを設置すると、ネットワーク起動時に自動でスクリプトを実行します。
シェルスクリプトファイルは/etc/network/if-pre-up.d/load_iptablesで新規作成して下さい。

sudo vim /etc/network/if-pre-up.d/load_iptables

【ファイルの内容】

#!/bin/sh
/sbin/iptables-restore < /etc/network/iptables/iptables.db

4. 実行権限を付与します。すぐに反映したい場合はシェルスクリプトを実行して下さい。

sudo chmod +x /etc/network/if-pre-up.d/load_iptables
sudo /etc/network/if-pre-up.d/load_iptables

次は、Webサーバーの導入に入りたいと思います。

ApacheとPHPを導入

1. Apacheをインストールします。

sudo apt-get install apache2

2. PHPと共に、Apacheとpostgresqlで使用するためのモジュールをインストールします。

sudo apt install -y php
sudo apt install libapache2-mod-php
sudo apt-get install php7.0-pgsql

3. /var/www/htmlにinfo.phpというファイルを作成します。
【ファイルの内容】

<?php
 phpinfo();
?>

4. Apacheを再起動します。

sudo systemctl restart apache2.service

5. Windows端末もしくはスマホなどから、http://(サーバーのIPアドレス)でアクセスし、
「It Works!」が表示されればApacheが正常に起動しています。
apache1

6. Windows端末もしくはスマホなどから、http://(サーバーのIPアドレス)/info.phpでアクセスし、
「phpinfo」が表示されればPHPが正常に起動しています。
php1

postgresqlを導入

次にルート検索の肝となるデータベース(postgresql)のインストールを行いたいと思います。
あと絶対に必要ではありませんが、Windows端末にpgAdminをインストールしておくと便利ですので、ご検討下さい。

1. pgRouting絡みのパッケージをインストールするために、aptのリポジトリに以下を追加します。
あとはadd-apt-repositoryを使用できるようにします。

sudo apt-get install apt-file
sudo apt-file update
sudo apt-file search add-apt-repository
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:georepublic/pgrouting-unstable
sudo apt-get update

2. postgresqlとPostGISをインストールします。

sudo apt-get install postgresql postgis proj-bin gdal-bin
sudo /etc/init.d/postgresql start

3. pgRoutingとOpenStreetMapのデータをpgRoutingで使うためのパッケージをインストールします。

sudo apt-get install postgresql-9.5-pgrouting
sudo apt-get install osm2pgrouting

4. postgresユーザのパスワードを設定して下さい。

sudo passwd postgres

5. OpenStreetMap用テーブルを作成します。

sudo -u postgres createdb --encoding=UTF8 osm;

6. posgtesユーザーでログインし、PostGISとpgRouting拡張を適用します。

su - postgres
psql --username=postgres --dbname=osm -c "CREATE EXTENSION postgis;"
psql --username=postgres --dbname=osm -c "CREATE EXTENSION pgrouting;"

7. postgresqlの設定を変更します。まずはpostgresql.confを変更し、外部からpostgreSQLに接続できるようにします。

sudo vim /etc/postgresql/9.5/main/postgresql.conf

【変更箇所】

#listen_addresses = 'localhost' を listen_addresses = '*'に変更して下さい。

7. 次にpg_hba.confを変更し、こちらも外部からpostgreSQLに接続できるようにします。

sudo vim /etc/postgresql/9.5/main/pg_hba.conf

【変更箇所】

host all all 0.0.0.0/0 trust の行を追加します。
local all postgres peer を local all postgres trust に変更します。

8. 変更後にpostgresqlを再起動します。

sudo /etc/init.d/postgresql start

openStreetMapデータの取り込み

1. http://download.geofabrik.de/に日本の部分を効率よく切り取ってくれたデータがありましたので、これを利用します。
OSMの地図データ(XML)を圧縮したデータがpbfデータとなります。ホームディレクトリにダウンロードします。

cd ~
wget -c http://download.geofabrik.de/asia/japan-latest.osm.pbf

2. *.pbfを*.osm(xml)に変換します。変換後はサイズが25GBほどになりますので、ご注意下さい。

osmconvert japan-latest.osm.pbf > map.osm

3. postgresqlにOSMデータをインポートします。
ただし物凄く時間がかかってしまい、ここから先は後編で説明させて頂きたいと思います。
コマンドとしては以下で実行できると思います。

osm2pgrouting -f map.osm -c /usr/share/osm2pgrouting/mapconfig.xml -d osm -U postgres --clean

※物凄くスワップ領域を使うので、途中でOOMKillerに”Killed”される可能性があります。
その場合はスワップ領域を増やして下さい。とりあえず一時的に20GBまで増やしてしまいました…。

# 管理者権限になる
sudo su -

# スワップ用フォルダの作成
mkdir /var/swap

# 2Gのスワップ用のファイル作成
dd if=/dev/zero of=/var/swap/swap0 bs=1M count=20480

# パーミッションの設定
chmod 600 /var/swap/swap0

# スワップ割り当て
mkswap /var/swap/swap0
swapon /var/swap/swap0

スワップ領域を削除する場合は以下のコマンドを実行して下さい。

# スワップ停止
swapoff /var/swap/swap0

#スワップ用ファイルの削除
rm /var/swap/swap0

最後に

次回はフロント側(JQuery+Ajax、ハイブリッドアプリ)もしくはAndroidアプリ(LocationManagerなどでGPSを使用するなど)で、現在位置から最も近いルートをサーバーから取得しながら、目的地へ向かってみるなど出来たら良いな…と考えております。
地図を扱うと世界旅行した気分になれますね(笑)
発想次第では色々な可能性を秘めていると思いますので、地図に関連する開発も勉強して頂けますと夢が膨らむと思います!

以上となります。
最後まで読んで頂き、大変感謝です!


こんにちは。
キャスレーコンサルティングのSD(システム・デザイン)部:野田です。

弊社はAWS(Amazon Web Services)などのクラウド環境を積極的に取り入れており、システム構築をしております。
インフラ部分はクラウドベンダーが何もかも担当してくれるため、開発土台の構築は本当に楽になったと思います。
また、パフォーマンス監視についてもクラウドベンダーにお任せしてしまうことで、運用の負担を減らすことも可能となりました。

しかし、すべてをベンダーに丸投げしても、思った通りの監視が出来ないことが多々あります。
私は最近のプロジェクトにおいて、AWS環境をNewRelicというサービスでパフォーマンス監視する開発に携わりました。
そこで、クラウド特有の監視方式にとらわれない、NewRelicでのパフォーマンス監視についてご紹介したいと思います。

そもそもNewRelicって?


New Relic は、ソフトウェア・アナリティクスを業とする米国企業。カリフォルニア州サンフランシスコが拠点。現在の CEO、ルー・サーンが 2008 年に創業した。New Relic のサービスは、ウェブアプリケーションやモバイルアプリケーションのリアルタイム監視であり、クラウド、オンプレミス、あるいはそのハイブリッド環境で稼働させることができる。提供形態は SaaS(Software as a Service)モデルである。ちなみに「New Relic」という名前は、創業者ルー・サーン(Lew Cirne)のアナグラムである。
引用-「New Relic
『フリー百科事典 ウィキペディア日本語版』より。
“最終更新 2016年2月6日 (土) 14:59″ UTC


上記のように、ウェブアプリケーション・モバイルアプリケーションのリアルタイム監視に加え、サーバ監視・ブラウザ監視までリアルタイムで確認することができるサービスです。
NewRelicを使用することの利点としては、大きく2つあります。

・監視サーバを立てる必要がない。
・収集したパフォーマンスデータを自動的にグラフ化してくれる。

それぞれについて解説していきましょう。

監視サーバを立てる必要がない

まず、パフォーマンス監視をするには必ず「監視サーバ」というものを構築する必要があると思います。
システム内でマネージャ機能を持った「監視サーバ」が、エージェントを監視する・・・。
監視の形としてはこのような構図が多いのではないでしょうか。

NewRelicでは、NewRelic側でエージェントを一元管理をしてくれるので、「監視サーバ」という存在は必要ありません。
また、監視画面はインターネット上で確認できるので、「リモート操作が出来ないから、サーバルームに入って確認しなきゃ・・・」なんて手間もありません。
監視専用のサーバを購入する必要がなくなり、購入費用の削減やサーバ台数をスリムにすることができます。

収集したデータを自動的にグラフ化してくれる

こちらも、マネージャ機能を持った「監視サーバ」でパフォーマンス状況をグラフ化してくれる機能があると思いますが、
NewRelicでは自動的にグラフ化してくれるので、インターネット上からパフォーマンス状況をグラフィカルに
確認することができます。

データ保持期間はプランによりますが、短期間・中期間・長期間でパフォーマンスの推移を確認することができます。
また、通知機能も備わっているので、閾値を設定してパフォーマンス異常に即時検知することも可能です。

いかがでしょうか。
市販の監視ソフトにも勝るとも劣らない機能が、NewRelicには備わっています。

インストールしてみよう

さて、それではNewRelicの導入方法についてご紹介していきます。
今回は以下のAWS環境に導入してみました。
・Amazon Linux AMI 2016.03.d

1.NewRelicアカウントの作成
まずはNewRelicのアカウントを作成します。

AWS環境利用者には、AWS専用の登録サイトがあるので以下のリンク先からアクセスしてください。
http://newrelic.com/aws

アカウント作成には、「Sign Up」をクリックします。

40

登録には以下の情報が必要です。
・名前
・メールアドレス
・NewRelicパスワード(任意の文字列)
・電話番号(国指定を”日本”にすること)
・国
・会社名
・従業員数
・サーバ台数

41

上記を記入し「私はロボットではありません」と、「Terms of Service」にチェックを入れ、「Sign Up for New Relic」をクリックしてください。

42

少し経つと、登録時に入力したメールアドレス宛に確認のメールが来るので、リンク先をクリックして登録が完了します。

2.NewRelicへログイン
作成したアカウントでNewRelicへログインします。
「Log In」をクリックします。

44

先ほど作成したアカウントのメールアドレス・パスワードを入力して、「Sign in」をクリックします。

45

NewRelicにログインすると、NewRelic APMの画面が開きます。

21

ここではPHPやRubyなどのソフトウェアの監視をするためのエージェントがインストールできます。
※なお今回は使用しません。

3.サーバ監視用のエージェントインストール
サーバ監視用のエージェントをインストールするので、左上から「SERVERS」を選択します。

46

サーバ監視用のNewRelicエージェントをインストールするための画面が開きます。
今回の環境は、「Amazon Linux AMI 2016.03.d」なので、「Red Hat or CentOS」をクリックします。

47

そうすると、画面下部に「Red Hat or CentOS」のインストール手順が表示されます。
手順についてはコマンドベースで記載していきます。

1.rootにスイッチします。
$ sudo su -

2.NewRelicのパッケージをインストールします。
なお、NewRelic上で表示されたコマンドでは、32bit版がインストールされます。
64bit版のパッケージをインストールする場合は、下記に記載しているコマンドを実行してください。
[32bit]
# rpm -Uvh https://download.newrelic.com/pub/newrelic/el5/i386/newrelic-repo-5-3.noarch.rpm
[64bit]
# rpm -Uvh https://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm

3.サーバモニターパッケージをインストールします。
# yum install newrelic-sysmond

4.ライセンスキーの設定を行います。
アカウント毎に割り振られる番号になるので、画面上に表示されたコマンドを実行してください。
# nrsysmond-config --set license_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

5.サーバモニターのデーモンを起動します。
# /etc/init.d/newrelic-sysmond start

以上でインストール作業は終了です。
ここまで5分くらいでできてしまうほど簡単ですね。

監視画面を見てみよう

それでは実際に監視画面を見てみましょう
左上の「SERVERS」をクリックして再読み込みすれば、エージェントをしたサーバが一覧として表示されるはずです。

26

サーバ名をクリックすると、そのサーバの詳細なパフォーマンス状況がグラフィカルな画面として表示されます。

27

NewRelicでは、サーバの以下の項目を監視することができます。

・CPU使用率 (Overview、Processesから確認可能)
・メモリ使用率 (Overview、Processesから確認可能)
・プロセス毎のCPU、メモリ使用率 (Processesから確認可能)
・ディスクI/O、使用率 (Disksから確認可能)
・ネットワークI/O (Networkから確認可能)

左側ペインから各項目ごとに画面が用意されており、それぞれのデータが詳細に表示されます。
初めのほうにも書きましたが、短期間・中期間・長期間のパフォーマンス状況の推移をNewRelic上で確認することが出来てしまうんです。
なお、閾値設定や異常時のメール通知などの機能については、別の機会で語れたらと思います。

最後に

いかがでしたでしょうか。
今回は簡単にサーバの監視を紹介させていただきましたが、NewRelicではまだまだ出来ることがたくさんあります。
・アプリケーションレベルの監視(PHP、Rubyなど)
・Mobileの監視
・AWS環境のRDS,ELBなどのコンポーネントの監視
・MySQLなどデータベースエンジンの監視(要プラグイン) など

触れられなかった、便利な機能がたくさんあり、可能性は無限に広がっています。
私もNewRelicの奥深さを感じているので、新しい機能を覚えたら紹介させて頂きたいと思います。

最後までお読みいただき、ありがとうございました。


こんにちは、
キャスレーコンサルティングのSD(システム・デザイン)部:神田です。

突然ですが自社の中で管理しているネットワーク機器のアカウント情報について、
機器ごとに違うアカウント情報を使用していると管理が面倒だと感じたことはないでしょうか?

今回はOpenLDAP+FreeRADIUS+YAMAHA Routerを使用し、
よりスマートにアカウント情報の管理を行う方法ご紹介したいと思います。
(続きを読む…)


こんにちは、SI部の藤沢です。
前回(LinuxでもC#プログラミング(導入編)) にMonoのインストールを行ったので、簡単なGUIアプリケーションの作成をします。
今回のアプリケーションは、社員簿(ID、名前、メールアドレス)で下記を要件とします。

  • データの一覧表示が行える。
  • 名前で検索が行える。
  • 新規登録・編集登録(保存先はXMLファイル)が行える。

(続きを読む…)


こんにちは、SI部の藤沢です。
今回は、LinuxでC#プログラミングを行うためのMonoの導入を行います。

構成

  • Ubuntu 14.04 LTS(仮想イメージ)
  • Mono
  • MonoDevelop

今回は、Ubuntuを使用してC#の実行環境を構築していきます。

Ubuntuのインストール

Ubuntuのサイトに仮想マシン用のファイルがあるため、これを使用します。
VirtualBoxをインストールし、ダウンロードした仮想イメージ(Ubuntu 14.04 LTS)を展開し仮想マシンの登録を行います。
Ubuntuのサイト通りに設定します。
VirtualBoxを起動し、[新規]をクリックします。仮想マシン作成ウィザードが開くので、画面の指示に従って入力していきます。
OSタイプは「Ubuntu」を選択します。 (続きを読む…)


こんにちは。田中(邦)です。

今回は、”The most advanced penetration testing distribution,ever.” なLinuxディストリビューションであるKali Linuxを使ってウェブサービスの脆弱性をテストしてみます。

(続きを読む…)



  • Profile
    キャスレーコンサルティングの技術ブログです。
    当社エンジニアが技術面でのTips、技術系イベント等についてご紹介いたします。
  • CSV社長ブログ
  • チーム・キャスレーブログ