「サーバー」カテゴリーアーカイブ

ポートに穴を開けることなく安全なリモートデスクトップ環境を構築しよう(その3)

その1その2では、SSHトンネルを張るための中継サーバを作成・設定しました。ここではいよいよSSHトンネルを張って、遠隔操作をしてみましょう。まずはMacにてVNCを使用した例です。

 

3. 遠隔操作対象パソコンから中継サーバに対してSSHトンネルを張る

安全な遠隔操作には2本のSSHトンネルが必要ですが、まずは遠隔操作対象パソコンから中継サーバに対してSSHトンネルを張りましょう。

$ ssh -R 55900:localhost:5900 aws-relay-server
Last login: Sun Jun 25 01:56:28 2017 from xxxxx.xxxx.ne.jp

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/

中継サーバ(aws-relay-server)の55900番ポートにアクセスしたら、遠隔操作対象パソコン(localhost)の5900番(VNC)ポートに転送する、というSSHトンネル1が張られました。

-Rオプションはコマンドを実行したパソコンとは逆側のSSHログイン先のパソコン(今回は中継サーバ)からコマンドを実行したパソコンへ向かって逆向きにSSHトンネルを張るというオプションです。

 

 

4. 遠隔操作をする場所のパソコンから中継サーバに対してSSHトンネルを張る

つぎに遠隔操作をする場所のパソコンから中継サーバに対してSSHトンネルを張りましょう。

$ ssh -L 5901:localhost:55900 aws-relay-server
Last login: Sun Jun 25 01:56:28 2017 from xxxxx.xxxx.ne.jp

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/

遠隔操作をする場所のパソコンの5901番ポートにアクセスしたら、中継サーバ(aws-relay-server)の55900番ポートに転送する、というSSHトンネル2が張られました(注記:localhost:55900の”localhost”は、中継サーバにおけるlocalhostのことです。紛らわしいですが)。

-Lオプションはコマンドを実行したパソコンからSSHログイン先のパソコン(今回は中継サーバ)へ向かって順方向にSSHトンネルを張るというオプションです。

これで2本のSSHトンネルが張られ、遠隔操作をする場所のパソコン(localhost)の5901番ポートにアクセスしたら、中継サーバ(aws-relay-server)の55900番ポートを経由して、遠隔操作対象パソコンの5900番ポート(VNC)へ転送されるようになりました。

5. VNCで接続してみる

いよいよ遠隔操作ができる環境が整いました。早速、Mac標準のVNCで遠隔接続してみましょう。

-1. 遠隔操作をする場所のパソコンでFinderを開く

-2. 移動、サーバへ接続を表示

-3. vnc://localhost:5901 を入力して接続

 

遠隔操作対象のPCの画面が表示されれば成功です。遠隔ログインできない場合は、遠隔操作対象PCの画面共有(システム環境設定−共有−画面共有)が有効になっているか確認してみてください。

aws-relay-server以外はプライベートIPしか持っていなくても安全に遠隔操作できるようにすることができました。

 

 

6. Windowsのリモートデスクトップはどうするの?

ここではSSHが標準で利用できて設定が簡単なMacを例として取り上げました。ではWindowsでリモートデスクトップを利用するにはどうしたら良いでしょうか?Windowsを使う場合は、TeraTermやPuttyなどのSSHクライアントのインストールが必要ですが基本的なやり方は一緒だと思います。

違うところは、SSHトンネルのポートです。WindowsはVNCではなくRDP(3389番ポート)が標準なので、ここだけ変える必要があります。ただ、Macみたいなconfigが使えるか不明なのでコマンドをベタ打ちしてみます。aws-key.pemは実際にファイルがある場所を指定してください。

・遠隔操作対象パソコン

$ ssh -p 80 -i ./aws-key.pem -R 53389:localhost:3389 ec2-user@13.113.212.xxx

・遠隔操作をする場所のパソコン

$ ssh -p 80 -i ./aws-key.pem -L 53389:localhost:53389 ec2-user@13.113.212.xxx

あとはリモートデスクトップを開いて「localhost:53389」と打てば良いはずです。

 

 

ポートに穴を開けることなく安全なリモートデスクトップ環境を構築しよう(その2)

その1で作成したEC2上の中継サーバは作っただけですので、これから設定を進めていきましょう。遠隔操作対象PCと遠隔操作をする側のPC両方共に設定が必要です。どちらが先でも良いですが、まずは遠隔操作をする側のPCで設定してみましょう。とりあえずMacでの設定例です。

 

2. 中継サーバにSSHログインできるように設定する(Macの例)

Mac標準のターミナルを立ち上げます。

-1. ダウンロードした秘密鍵(aws-key.pem)を.sshフォルダにコピー

$ cp ~/Downloads/aws-key.pem ~/.ssh

-2. aws-key.pemのアクセス権を400 に変更

$ cd ~/.ssh
$ chmod 400 aws-key.pem

-3. configファイルを作成(修正)
.sshフォルダにconfigファイルがある場合は新規で作成し、すでにある場合は、一番下の行に追加してください。

$ vi config

iを押して挿入モードにして、以下の項目を追加します。

Host aws-relay-server
    HostName        13.113.212.xxx  (※ Elastic IPで割り当てをした固定IP)
    Port            22
    IdentityFile    ~/.ssh/aws-key.pem
    User            ec2-user
    Protocol        2
    ServerAliveInterval 15

ESCを押して、:wqで保存します。
これで中継サーバにSSHログインできるようになりました。

-4. 中継サーバにSSHログインしてみる

$ ssh aws-relay-server
The authenticity of host '13.113.212.xxx (13.113.212.xxx)' can't be established.
ECDSA key fingerprint is SHA256:U/7mSq0snVUviUrozSGydTX63FkmtCGEsxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? 

yesを入力

Warning: Permanently added '13.113.212.xxx' (ECDSA) to the list of known hosts.

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/
4 package(s) needed for security, out of 6 available
Run "sudo yum update" to apply all updates.

無事にログインできました。

-5. サーバに最新のパッケージを適用する
ログイン後のコメントに出ているように、yum updateを実行して最新のパッケージを適用しておきましょう。

$ sudo yum update -y

1分くらいかかかりますが、最後にComplete!が出れば適用成功です。

-6. SSHのポート番号を22から80に変更する
遠隔操作対象パソコンが置いてあるところのルータやファイアフォール設定が厳しい場合、外向きのポートが制限されていてSSHログインができない場合があります。大抵のルータやファイアウォールはHTTP(TCP:80番)やHTTPS(TCP:443番)が開いているため、SSHトンネルを張るためだけにルータやファイアフォール設定を変えなくても良いようにポート番号を変えてみます。

$ sudo -i
# cd /etc/ssh/
# cp sshd_config sshd_config_old
# vi sshd_config

iを押して、17行目くらいの #Port 22 を #をはずして、Port 80に変更します。

.
.
.
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 80
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
.
.
.

ESCを押してから:wqで保存後、sshdを再起動します。

$ service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]

これでsshdが再起動され、次回のSSHログイン時からは80番ポートでログインする設定になりました。exitを2回入力して、中継サーバからログアウトしておきましょう。

# exit
logout
$ exit
logout
Connection to 13.113.212.xxx closed.

-7. configファイルを修正
SSHポート番号を80番に変更したので、configファイルも書き換えておきましょう。

$ vi config
Host aws-relay-server
    HostName        13.113.212.xxx
    Port            80
    IdentityFile    ~/.ssh/aws-key.pem
    User            ec2-user
    Protocol        2
    ServerAliveInterval 15

-8. 中継サーバにログインできるか確認

$ ssh aws-relay-server
Last login: Sun Jun 25 01:33:12 2017 from xxxxx.xxxx.ne.jp

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2017.03-release-notes/

ログインできたらSSHの設定は完了です!確認が終わったらログアウトしておきましょう。

$ exit
logout
Connection to 13.113.212.xxx closed.

-9. aws-key.pemを遠隔操作対象パソコンにも入れて、同様の設定をしてください。
・aws-key.pemのコピー
・aws-key.pemのアクセス権を400に変更
・configファイルにログイン情報を記載

 

以上で遠隔操作のための中継サーバの前設定はおしまいです、お疲れ様でした!

 

その3へ続きます。

ポートに穴を開けることなく安全なリモートデスクトップ環境を構築しよう(その1)

インターネットを介したリモートデスクトップ(RDPやVNC)は便利ですが、普通にやろうとすると遠隔操作対象PC側にグローバルIP(固定IPでないときはさらにDDNSも)が必要で、ルータやファイアフォールの設定をいじって内向きにポートに穴をあける必要があります。

別にそのくらいやればいいじゃんと思いますが、いくつか問題があります。

・グローバルIPかつポートが開いているということは、サイバー攻撃の対象にされてもおかしくない

・暗号化されていない遠隔操作プロトコルを使うと、途中で盗聴されてしまう可能性がある

・ルータやファイアフォールの設定権限を持っていない場合、そもそもポートに穴を開けることができない

 

ここではこれらの課題を解決するために、中継サーバを使用して2本のSSHトンネルを張って、その中をRDPやVNCを通して遠隔操作する方法を試してみます。

・固定グローバルIPがなくDDNSを使用していなかったり、携帯電話回線などグローバルIPを持っていない回線につながっているPCの遠隔操作が可能

・普通にWebブラウジングができる環境(HTTP(S)が使える環境)であれば、追加のポートを開けることなく遠隔操作が可能

・途中のすべての経路を暗号化し、安全に遠隔操作が可能

 

具体的にはこんな感じを目指します。

中継サーバはVPSでもなんでも良いですが、必要な時に必要なだけサーバを動かせるクラウド(AWS)を使ってみます。遠隔操作しない時はサーバを止めてしまえばお金もかかりませんし 笑

 

1. AWSに中継サーバーを立てよう

早速ですが、AWSに中継サーバーを立てていきましょう。

 

-1. AWSのアカウントを作成

まずはAWSにアカウントを作成しましょう。しばらくは無料で使えます。すでにアカウントをお持ちの方は次の項目へお進みください。

 

-2.  AWS EC2のインスタンス(仮想サーバ)を作成する

EC2を選択
EC2を選択
インスタンスの作成をクリック
インスタンスの作成をクリック
一番上のAmazon Linux AMIを選択
一番上のAmazon Linux AMIを選択
無料枠のt2.microを選択して次の手順へ
無料枠のt2.microを選択して次の手順へ
次の手順へ
次の手順へ
次の手順へ
次の手順へ
仮想サーバに名前を付けるためにタグの追加をクリック
仮想サーバに名前を付けるためにタグの追加をクリック
Nameタグとして中継サーバという名前を付けて次の手順へ
Nameタグとして中継サーバという名前を付けて次の手順へ
セキュリティグループ(ファイアフォール設定)にRELAY-SGという名前をつける
セキュリティグループ(ファイアフォール設定)にRELAY-SGという名前をつける
ルールの追加で、TCP:80番、0.0.0.0/0を追加後、確認と作成をクリック
ルールの追加で、TCP:80番、0.0.0.0/0を追加後、確認と作成をクリック

※TCP:80番を解放したのは、実はHTTP通信を通すわけではありません。初期状態はTCP:22番がSSHポートですが、後でSSHポートをTCP:80番に変更します。この理由ですが、詳しくはその2で説明します。

起動をクリック
起動をクリック
新しいキーペア(aws-key)を作成してダウンロード後、インスタンスを作成
新しいキーペア(aws-key)を作成してダウンロード後、インスタンスを作成

※ダウンロードしたaws-key.pem(名前はなんでも良いです)は、その2で中継サーバにSSHログインするために必要ですので紛失しないようにご注意ください。

インスタンス(仮想サーバ)が作成されたので、作成されたインスタンスを表示します。
インスタンス(仮想サーバ)が作成されたので、作成されたインスタンスを表示します。

 

これで、AWS EC2上に仮想の中継サーバが立ち上がりました!

 

-3. Elastic IPを使用してEC2のインスタンスに固定IPを割り当てる

ちょっと疲れてきましたがもう一息です!

標準ではサーバを起動し直すたびにIPアドレスが変わって不便なので、作成されたインスタンス(仮想サーバ)に固定IPを割り当てておきましょう。Elastic IPをいうサービスを使いますが、IPアドレスだけとって放置するなど、ちゃんとインスタンスに割り当てておかないとお金がかかるので注意が必要です(インスタンスを消したらIPも消しましょう)。

Elastic IPをクリック
Elastic IPをクリック
新しいアドレスを割り当てます
新しいアドレスを割り当てます
割り当てられたIPを先ほど作成したインスタンスに関連付けします
割り当てられたIPを先ほど作成したインスタンスに関連付けします
インスタンスに中継サーバを設定し、関連付けをクリック
インスタンスに中継サーバを設定し、関連付けをクリック

これで、先ほど作成したインスタンスに固定IPが割り当てされました。

 

-4. 中継サーバ完成!

 

その2へ続きます。

Aptana Studio 3 Standalone版 を macOS Sierra に入れる

以前、Eclipseを用いたRuby on Rails開発環境構築のご紹介をしましたが、Aptana Studio 3 の Standalone版の方が軽くて使いやすいようです。UIもEclipseとほとんど同じです。

しかし、何度インストールにトライしても「予期しない理由云々…」というエラーが出て起動しないので、あきらめて、ご紹介しましたEclipse + Aptana Studio 3プラグインの組み合わせでしばらくいじっていました。

ところが最近Eclipseの調子が悪く(エラーでEclipseが起動しなくなってしまう現象が発生)2回も開発環境を入れ直ししましたので、3回目のエラーで見切りをつけてAptana Studio 3 Standalone版をなんとか動かそうと再調査、うまく動きましたので報告します。

El Capitanまではエラー報告がないのでどうやら「予期しない理由」のエラーは、Sierra 以降で起こるようです。

以前の投稿と半分以上重複しますが、一連の流れの中で紹介します。

 

1. Xcodeをインストール

3. Homebrewを入れるための 2. Command Line Tools for Xcode を入れるために、Xcodeをインストールします。

 

2. Command Line Tools for Xcode をインストール

ターミナルを起動して、以下のコマンドを実行し、立ち上がったダイアログからインストールします。

$ xcode-select --install

 

3. Homebrewをインストール

続いて、ターミナルから以下のコマンドを実行します。途中でパスワードの入力を促されますが、しばらくするとインストールが完了します。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

4. rbenvと目的のバージョンのRuby、Railsに必要なgemをインストール

Macでは、Ruby 2.0.0がデフォルトですが、ここで目的のバージョンのRubyを入れておきます。rbenvというのはRubyのバージョンを管理するためのツールらしいです。今回Rubyは2.3.3を使用することにします。gemはコマンドが短いのでついでにここで入れてしまいます。

続いて、ターミナルから以下のコマンドを順に実行していきます。

$ brew update
$ brew install rbenv ruby-build
$ rbenv install 2.3.3
$ rbenv rehash
$ rbenv global 2.3.3
$ gem update --system
$ gem install bundler
$ gem install rails
$ rbenv rehash

5. Java for OS X 2017-001をインストール

あとで入れる、Aptana Studio 3 に必要なJavaをここからダウンロードしてインストールします。Java 6が必要らしく、旧版を入れないと動かないみたいです。

 

6. セキュリティ関係の設定をしておく

Sierraからよりセキュリティにうるさくなったらしく、初期設定ではAptana Studio 3 が動きません。まぁ、ここにハマったわけですが。。。

-1. アプリケーション−ユーティリティ−ターミナルを起動し、コマンドラインから以下を実行します。パスワードを求められますが、自分のアカウントのパスワードを入力します。

$ sudo spctl --master-disable

-2. システム環境変数−セキュリティとプライバシーを開き、ダウンロードしたアプリケーションの実行許可を「すべてのアプリケーションを許可」に設定します。

ここの回答に助けられました。ありがとうございます!

 

7. Aptana Studio 3 Standalone版をインストール

ここでようやくご本尊の登場です。ここからAptana Studio 3 の Standalone版 をダウンロードし、インストールします。

アプリケーション−Aptana Studio 3−AptanaStudio3を起動してみてください。「予期しない理由」云々が出ずに起動すればとりあえずはインストール成功です!

 

8. Aptana Studio 3 Standalone版を日本語化しておく

英語が苦手な人(私を含め)は、日本語化しておきましょう。

-1. ここからPleiades プラグインをダウンロードし、展開します。最新版でも安定版でもお好きな方をどうぞ。

-2. 展開し、pluginsの「中身」を アプリケーション−Aptana Studio 3−plugins の中にコピーします

-3. featuresの「中身」を アプリケーション−Aptana Studio 3−features の中にコピーします

-4. アプリケーション−Aptana Studio 3−AptanaStudio3 を右クリック(もしくは二本指クリック)し、「パッケージの内容を表示」をクリックします

-5. アプリケーション−Aptana Studio 3−AptanaStudio3−Contents−MacOS−AptanaStudio3.ini をCotEditorなどのエディタで開いて編集、最後の行に以下を追加して保存します。

-javaagent:/Applications/Aptana Studio 3/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

viが使える人は、ターミナルを開いて編集しても良いです。

$ vi /Applications/Aptana\ Studio\ 3/AptanaStudio3.app/Contents/MacOS/AptanaStudio3.ini

 

Mac + Eclipse + Ruby on Rails (Aptana Studio 3)Hello World!

前回構築したMac + Eclipse + Ruby on Rails (Aptana Studio 3)環境を使って、Hello Worldを出してみます。

 

1. Rails プロジェクトを作成

プロジェクト・エクスプローラで右クリック、「新規」–「Rails プロジェクト」をクリック。Rails プロジェクトが出てこないときは、右上の「Web」パースペクティブを選択するか、その他…から開いてください。

 

2. プロジェクト名を入力

プロジェクト名に適当な名前をつけて「完了」をクリック。ここでは「helloworld」としてみます。

 

3. application_controller.rbの編集

app – controllers – application_controller.rb をダブルクリックで開き、以下のコードを入力して保存します。helloメソッドが作られました。

 

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
    name = "〇〇さん"
    render text: "Hello, #{name}, Welcome to Ruby!"
  end
end

 

4. routes.rbの編集

config – routes.rb をダブルクリックで開き、以下のコードを入力して保存します。さきほど編集したapplication_controller.rbの helloメソッドが呼ばれるようになりました。

 

Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

  root 'application#hello'
end

5. Webサーバを起動

Eclipseの一番下に出ているコンソールから、「rails s」コマンドを入力し、Webサーバを起動します。http://localhost:3000 が起動されます。

 

6. 適当なWebブラウザを起動

適当なWebブラウザ(FirefoxやSafariなど)を起動し、http://localhost:3000を開きます。

 

7. Hello World! が出れば成功

 

Mac + Eclipse + Ruby on Rails (Aptana Studio 3)開発環境構築 覚書

何かWebアプリを作ってみたくなり開発環境を整えようとおもいましたが、PHP等どの言語も使ったことがないので、せっかく一から覚えるのであればということで Ruby on Railsに挑戦してみようと思います。

まずは開発環境の選定ですが、色々個別に揃えるよりは統合開発環境がやりやすそうなのでEclipseを選択することにしました。Eclipseにするにしても結構色々入れないと動かないので、忘れないうちに覚書を残しておきます。

パソコンはWindows機ではなく、MacBook Proを使うことにします。WindowsでもEclipseが入るのですが、少し手を出してみたものの上手く動かず結構はまってしまい、結局Mac 側にいれることにしました。

 

1. Xcodeをインストール

3. Homebrewを入れるための 2. Command Line Tools for Xcode を入れるために、Xcodeをインストールします(回りくどい・・・)。

App Storeから Xcodeを検索して、普通にインストールすればOKです。本日時点ではXcode 8.2.1でした。

 

2. Command Line Tools for Xcode をインストール

ターミナルを起動して、以下のコマンドを実行し、立ち上がったダイアログからインストールします。

$ xcode-select --install

 

3. Homebrewをインストール

続いて、ターミナルから以下のコマンドを実行します。途中でパスワードの入力を促されますが、しばらくするとインストールが完了します。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

4. rbenvと目的のバージョンのRuby、Railsに必要なgemをインストール

Macでは、Ruby 2.0.0がデフォルトですが、ここで目的のバージョンのRubyを入れておきます。rbenvというのはRubyのバージョンを管理するためのツールらしいです。今回Rubyは2.3.3を使用することにします。gemはコマンドが短いのでついでにここで入れてしまいます。

続いて、ターミナルから以下のコマンドを順に実行していきます。

$ brew update
$ brew install rbenv ruby-build
$ rbenv install 2.3.3
$ rbenv rehash
$ rbenv global 2.3.3
$ gem update --system
$ gem install bundler
$ gem install rails
$ rbenv rehash

 

5. Mac用 Eclipseをインストール

http://mergedoc.osdn.jp/ から、Mac用 最新版のEclipse(日本語版 Pleiades All in One)をダウンロードしてインストールします。どれをダウンロードするか迷いましたが、入れてみて何か足りなかったら面倒なので、全部入りの「Eclipse 4.6 NEON, Mac 64bit, Ultimate, Full Edition」にしておきました。

6. Eclipseに RDT(Ruby Development Tools)プラグインのインストール

これと7.が意外と大事。。Eclipse + Ruby on Railsの色々な記事があり参考にさせていただきましたが、これが書かれていないところが多く、何度も何度も入れ直しました。。Rubyエディタを使うために必須なプラグインです。これを入れないとファイルをダブルクリックしてもエディタが起動せずハマります。

-1.インストールしたEclipseを起動して、画面上のメニューバーから「ヘルプ」ー「新規ソフトウェアのインストール」をクリック

-2. 作業対象の右側の下向き三角をクリック、「—すべての使用可能なサイト—」を選択、名前カラムが「保留中…」になるので、1分くらい待ってください。

-3. 下から9番目くらいの「▶︎プログラミング言語」を展開し、「動的言語ツールキット – Ruby 開発ツール」にチェックを入れ、「次へ」をクリック、使用条件の条項に同意してインストールし、Eclipseを再起動します。

 

7. Eclipseの環境設定でRubyインタープリターを追加

-1. 画面上のメニューバーから「Eclipse」–「環境設定」を開く

-2. 「▶︎Ruby」–「インタープリター」を展開し、「追加」をクリック、インタープリター実行可能ファイルに「/Users/<ユーザ名>/.rbenv/shims/ruby」を入力し「OK」をクリック、さらに設定画面の「OK」をクリックして確定

 

8. Eclipseに RadRails(Aptana Studio 3)プラグインのインストール

Aptana Studio 3 プラグインをインストールし、EclipseでRailsプロジェクトを開発できるようにします。

-1. 画面上のメニューバーから「ヘルプ」ー「新規ソフトウェアのインストール」をクリック

-2. 作業対象に「http://download.aptana.com/studio3/plugin/install」を入力、「Aptana Studio 3」にチェックを入れ、「次へ」をクリック、使用条件の条項に同意してインストールし、Eclipseを再起動します。

 

9. EclipseにWebパースペクティブの追加

EclipseにWebアプリが開発しやすい画面(パースペクティブというらしい。。)を追加します。もう一息!

-1. 画面上のメニューバーから「ウィンドウ」ー「パースペクティブ」–「パースペクティブを開く」–「その他…」をクリック

-2. 「Web」を選択して「OK」をクリック。Webが2つあるかもしれませんが、私は下の方を選びました。

 

これで開発環境が整いました!
何度も何度も入れ直しているので、もしかしたら順番通りにやっても動かないかもしれませんが、その際は入れ替えてみたりしてお試しください。

 

次回はこの開発環境を使って Hello World! を出してみましょう。

 

 

サブドメイン宛に届いたメールを外部に転送する

前回の記事でサブドメインを作ってみましたが、試しにサブドメインのメールアドレス宛に来たメールを外部の他のメールアドレスに転送する設定をしてみましたので覚書を残してみます。メールサーバ(postfix)が動いている前提です。

 

administrator@web.ji0vwl.net 宛に来たメールを、hoge@ji0vwl.comに 転送する

DNS設定

VPSのIPアドレスが、111.111.111.111と仮定します。

転送先のメールサーバに弾かれないように、念のためSPFレコードも登録しておきます。

web.ji0vwl.net IN MX 10 111.111.111.111.111
web.ji0vwl.net IN TXT "v=spf1 ip4:111.111.111.111 ~all"

エイリアス設定

VPSにログインして、エイリアス設定します。エイリアスを使えば、ユーザの実体を作らなくてもよくなります。

ここでは administrator@web.ji0vwl.net 宛に来たメールを、hoge@ji0vwl.comに 転送したいので、以下のように記述します。/etc/aliasesを修正した後、newaliasesを実行することで反映されます。

$ sudo -i
# vi /etc/aliases
.
.
.
administrator:      root, hoge@ji0vwl.com
.
.
.

:wq

# newaliases

postfix設定

administrator@web.ji0vwl.net宛に来たメールを受信できるように/etc/postfix/main.cfを修正します。mydestinationの設定が大事です。myoriginに$mydomainを設定しておくと、送信されるメールの送信元が administrator@web.ji0vwl.net になりますが、今回は単なる転送なので関係ないかも。

# vi /etc/postfix/main.cf
.
.
.
$mydomain = web.ji0vwl.net
myorigin = $mydomain
mydestination = localhost, $mydomain
.
.
.

:wq

 

私の場合はVPSをメインのメールサーバとして使っていないので、新しいサブドメインのメールアドレスを作った場合、このように転送しておくと便利です。

サブドメインでなくても、例えばSSL証明書を取得するためにどうしてもadministrator等アドレス固定でメールを受信しなくてはいけなくなった場合に使えますね(Let’s Encryptなら不要ですが、初めに使ったStart SSLのときにこうすればよかったかもしれません)。

サブドメインを作ろう! HTTPS バーチャルホスト設定覚書

思い立って、サブドメインを作ってVPSにバーチャルホストの設定(xxxx.ji0vwl.netのxxxxごとに違うページを表示させる)をしてみました。HTTPなら比較的簡単なのですが、勉強のためHTTPSでトライ。

ここでは例として、もともと https://ji0vwl.net/web/配下に配備してあった旧Webサイトを、https://web.ji0vwl.net に移してみます。

 

必要なことは以下の4つです。

1. DNSサーバに、web.ji0vwl.netのAレコードを追加

2. Let’s EncryptのSSL証明書にweb.ji0vwl.netを追加

3. ssl.confにVirtualHostとしてweb.ji0vwl.netを追加

4. web.ji0vwl.netにアクセスされた時に参照されるコンテンツ(HTMLファイルなど)を配備

 

1. DNS設定

まずは、DNSサーバ設定で web.ji0vwl.netのAレコードを登録します。お名前.comを使用した場合の例です。111.111.111.111の部分に自分のVPSのIPアドレスを入れます。もともとji0vwl.netのAレコードは登録されているので同じIPアドレスを入力すればOK。

 

2. SSL証明書取得

Let’s Encryptの導入は済んでいる前提で進めます。certbot-autoを起動して、SSL証明書にweb.ji0vwl.netを追加します。念のため、一旦Webサーバ(httpd)を止めておいたほうがいいでしょう。

$ sudo -i
# service httpd stop
# cd certbot
# ./certbot-auto

青い画面が出てくるので、HTTPSにしたいドメイン(FQDN)を「ji0vwl.net web.ji0vwl.net」と、スペース区切り(カンマ区切りでもOK)で列挙します。

3. バーチャルホスト追加&SSL証明書設定

取得したSSL証明書を、追加するバーチャルホストに設定します。今回は、web.ji0vwl.netもji0vwl.netも同じ証明書を割り当てます。Let’s Encryptは無料ですが、複数のサブドメインが一つの証明書で対応できるようで、なかなかの優れものです。

# cd /etc/httpd/conf.d
# cp ssl.conf ssl.conf.old
# vi ssl.conf

・
・
・
NameVirtualHost *:443
<VirtualHost *:443>
    DocumentRoot /var/www/web
    ServerName web.ji0vwl.net

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/ji0vwl.net/cert.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/ji0vwl.net/privkey.pem
</VirtualHost>

<VirtualHost *:443>
    DocumentRoot /var/www/html
    ServerName ji0vwl.net
. 
.
.
</VirtualHost>

 

4. /var/www/web/配下にコンテンツを配備

もともと/var/www/html/web/に配備されていた旧Webサイトを、さきほどssl.confのバーチャルホストで設定した/var/www/web/にコピーし、所有者をルートからユーザとapacheにしておきます。ルートのままだとブラウザから見た時に画像が表示できませんでした。

# cp -r /var/www/html/web /var/www
# cd /var/www
# chown -R user:apache ./web

 

Webサーバを止めたままなので起動(# service httpd start)して、https://web.ji0vwl.net にブラウザでアクセスして、表示されればOKです。

あと、以前の記事で紹介したように、HTTPをHTTPSにリライトする設定をしてあげれば、s無しのhttp://web.ji0vwl.net にアクセスしても、自動的に安全なhttps://web.ji0vwl.net に書き換えてくれます。

最近は暗号化された安全なHTTPSが推奨されてきているので、個人のページといえど暗号化されていないHTTPアクセスはなくなっていく方向になりそうですね。

SSL証明書を Let’s Encrypt に乗り換えよう (10)

数ヶ月前のcertbotのバージョンアップで、なぜかCRONを用いた自動更新が動かなくなっていました。解析する余裕がなかったのでとりあえず手動実行してしのいでいましたが、本日ようやく動きましたので、動いたcrontabの内容を公開します。動かなかった理由はよくわかりません・・・

・念のため、最新のcertbotを入れ直した。青い画面は適当に進める。

$ sudo -i
# yum install epel-release
# mv certbot certbot_old
# git clone https://github.com/certbot/certbot
# cd certbot
# ./certbot-auto

・更新してみる。一応手動では動いた。

# ./certbot-auto renew --non-interactive

・renew だけで更新できたっぽい?(webrootとか指定していないけど)

・non-interactive をつけたのが効いたのか、単に入れ直したのが効いたのか・・・理由は分からず。とりあえず動いた。

 

# crontab -e
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO="xxxxxx@ji0vwl.com"
HOME=/

1 4 1 * * scl enable python27 "/root/certbot/certbot-auto renew --non-interactive"
6 4 1 * * service httpd restart

 

今回の自動更新は2,3ヶ月はまりましたので結構根深かったです。完全に原因は特定できていませんが、他にお困りの方の参考になれば。

SSL証明書を Let’s Encrypt に乗り換えよう (9)

certbotへの仕様変更でWebサーバーが動かなくなるという、とんでもない罠にはまってしまいましたが、一応動くようになったようなので、crontabを編集して、自動更新ができるように設定してみます(letsencrypt → certbot に書き換え)。3度目の正直となるか・・・これで終わってくれるといいのですが

$ sudo -i
# crontab -e
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO="xxxx@ji0vwl.com"
HOME=/

# run-parts
1 4 1 * * scl enable python27 "/root/certbot/certbot-auto certonly --renew-by-default --webroot -w /var/www/html -d ji0vwl.net"
6 4 1 * * service httpd restart

 

crontabを数分後に起動して試し打ちしてみましたが、無事動作しました!

Creating virtual environment...
Installing Python packages...
Installation succeeded.
Version: 1.1-20080819
Version: 1.1-20080819
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/ji0vwl.net-0001/fullchain.pem. Your cert will
   expire on 2016-08-27. To obtain a new or tweaked version of this
   certificate in the future, simply run certbot-auto again. To
   non-interactively renew *all* of your ceriticates, run
   "certbot-auto renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le