hirosanote’s blog

検証環境の構築手順やネットワーク機器のテスト結果、関連する事について記載します。このブログは個人で行っており、所属する会社とは関係ありません。

レッツエンクリプトをUbuntu16.04で使用する手順

Let's EncryptをUbuntu16.04で使用する手順を記載します。証明書を作成するドメインは、インターネットで名前解決が出来る必要があります。ここでは、プロバイダから割り当てられたグローバルIPから逆引きしたドメイン名を使用します。
このドキュメントでは、Ubuntu 16.04とApacheを使用した手順を記載します。
以下のページの翻訳となり、サイト管理者はからは許可を得ています。
www.itzgeek.com

Let's Encryptは、2016年4月にリリースされたTLS暗号化用の無料のX.509 SSL証明書を提供する広く知られている認証局です。

セキュアなWebサイトの証明書の作成、検証、署名、実装、および証明書更新について複雑なプロセスを排除した自動プロセスです。 任意のドメインの証明書を生成するには、ターミナル/シェルアクセスとCertbot ACMEクライアントをインストールする必要があります。 ダウンタイムなしで証明書の発行とインストールを自動化します。

現時点では、自動化プロセスではApache、Nginx、Haproxy、およびPlexのみが自動化プロセスをサポートしています。


Let's Encryptのインストール

ルートユーザーでログイン、またはルートユーザーにスイッチします。

sudo su

Certbot PPAを設定します。

apt-get update
apt-get install -y software-properties-common
add-apt-repository ppa:certbot/certbot

Press [ENTER] to continue or ctrl-c to cancel adding it
[ENTER]キーを押します

Certbotをインストールします。

apt-get update
apt-get install -y certbot

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

apt-get install -y apache2


Webサービスが動作している事を確認してください。

http://your.ip.add.ress

Apacheのデフォルトページが表示されるはずです。


ドメインのための証明書を作成
certbotコマンドを使用して、Let's Encrypt証明書を手動で作成します。

certbot certonly --webroot -w /var/www/html -d p3333333-xxxxx.ocn.ne.jp   (xxxはマスクしています)

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): xxxxxx@ocn.ne.jp  (メールアドレスを入力します)
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A   (Aを入力します)

-------------------------------------------------------------------------------
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N   (Nを入力します)
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for p3333333-xxxxx.ocn.ne.jp
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/p3333333-xxxxx.ocn.ne.jp/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/p3333333-xxxxx.ocn.ne.jp/privkey.pem
   Your cert will expire on 2018-08-04. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - 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


Webサーバーの設定をアップデート
作成した証明書を使用するよう、Apacheサーバーの設定を更新します。

vi /etc/apache2/sites-available/default-ssl.conf

以下の赤色の部分を追加、または変更します。

<IfModule mod_ssl.c>
<VirtualHost _default_:443 >
ServerAdmin webmaster@localhost
ServerName p3333333-xxxxx.ocn.ne.jp
DocumentRoot /var/www/html

# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:
SSLHonorCipherOrder on
SSLOptions +StrictRequire

# SSLCertificateFile directive is needed.
SSLCertificateFile /etc/letsencrypt/live/p3333333-xxxxx.ocn.ne.jp/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/p3333333-xxxxx.ocn.ne.jp/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/p3333333-xxxxx.ocn.ne.jp/chain.pem

Apacheサーバーに、HTTPからHTTPSへのリダイレクト設定を行います。

vi /etc/apache2/sites-enabled/redirect.conf

以下を追加します。

<VirtualHost *:80>
ServerName p3333333-xxxxx.ocn.ne.jp
RewriteEngine On
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Apacheサービスを再起動します。

a2enmod rewrite
a2enmod ssl
a2ensite default-ssl.conf
service apache2 restart

ウェブサイトにアクセスして、「Let's Encrypt」証明書を確認します。
http://your-http-web-site (httpsへリダイレクトされます)
or
https://your-http-web-site


証明書の更新
Let's Encrypt Encryptの有効期間は約90日です。期限が切れる前に証明書を更新するようcron(Linux Scheduler)ジョブを設定することをお勧めします。
cronジョブを設定する前に、以下のコマンドを実行して証明書の自動更新をシミュレートしてください。

certbot renew --dry-run

出力

Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Processing
/etc/letsencrypt/renewal/p3333333-xxxxx.ocn.ne.jp.conf
-------------------------------------------------------------------------------
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-staging-v02.api.letsencrypt.org
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for p3333333-xxxxx.ocn.ne.jp
Waiting for verification...
Cleaning up challenges

-------------------------------------------------------------------------------
new certificate deployed without reload, fullchain is
/etc/letsencrypt/live/p3333333-xxxxx.ocn.ne.jp/fullchain.pem
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/p3333333-xxxxx.ocn.ne.jp/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
-------------------------------------------------------------------------------

IMPORTANT NOTES:
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

上記の出力にて、更新が適切に機能していることを確認します。 次に、以下のコマンドのcronジョブを設定します。

certbot renew

Ubuntu 16.04にDockerをインストールする手順

Ubuntu 16.04にDockerをインストールする手順を記載します。以下のサイトを参考および翻訳しました。サイト管理者には、翻訳しブログに掲載することの許可は得ています。
www.itzgeek.com

Dockerは、アプリケーションをコンテナに配置して実行するのに役立つオープンソースのソフトウェアです。 コンテナは仮想マシンに似ていますが、実行するオペレーティング環境に関係なく、リソースを少なくして管理しやすく、常に同じものを実行します。

Dockerはcgroupとnamespaceを使用して、独立したコンテナを単一のLinuxインスタンス内で実行できるようにします。

このガイドはUbuntu 16.04にDockerをインストールするのに役立ちます。 

Dockerは64ビットオペレーティングシステムを必要とし、Ubuntu 16.04 /およびUbuntu 14.04をサポートします。


Dockerのエディション
Dockerは現在2つのエディションで利用可能です。
 - Community Edition (CE)
 - Enterprise Edition (EE)

この手順書では、Community Edition (CE)を使用します。


前提条件
 Dockerの古いバージョン(依存に関係する“docker”又は“docker-engine”)をアンインストールします。 システムにドッカーパッケージがない場合は、以下の手順をスキップしてください。

$ sudo apt-get -y remove docker docker-engine

以下のパッケージをUbuntu 14.04にのみインストールし、aufsストレージドライバを使用するには、システムにlinux-image-extraパッケージがあることを確認してください。

$ sudo apt-get install -y linux-image-extra-$(uname -r) linux-image-extra-virtual


Dockerリポジトリのセットアップ

リポジトリキャッシュをアップデートします。

$ sudo apt-get update

以下のパッケージをインストールして、httpsメソッドで "apt"が動作し、CA証明書がインストールされていることを確認してください。

$ sudo apt-get install -y apt-transport-https software-properties-common ca-certificates curl

Dockerリポジトリ用のGPGキーをシステムに追加します。

$ wget https://download.docker.com/linux/ubuntu/gpg 
$ sudo apt-key add gpg

ターミナルで次のコマンドを実行して公式のDockerリポジトリを追加してください。 

$ echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable" | sudo tee -a /etc/apt/sources.list.d/docker.list

aptデータベースをアップデートします。

$ sudo apt-get update

デフォルトのUbuntu 16.04リポジトリからではなく、公式リポジトリからドッカーをインストールしていることを確認してください。

$ sudo apt-cache policy docker-ce

以下のような出力が表示され、Dockerリポジトリの詳細が表示されます。

docker-ce:
  Installed: (none)
  Candidate: 18.03.0~ce-0~ubuntu
  Version table:
     18.03.0~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.12.1~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.12.0~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.09.1~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.09.0~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.06.2~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.06.1~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.06.0~ce-0~ubuntu 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.03.2~ce-0~ubuntu-xenial 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.03.1~ce-0~ubuntu-xenial 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages
     17.03.0~ce-0~ubuntu-xenial 500
        500 https://download.docker.com/linux/ubuntu xenial/stable amd64 Packages


UbuntuにDockerをインストール

 以下のコマンドを使用して、Dockerをインストールします。

$ sudo apt-get -y install docker-ce

Dockerをマシンにインストールした後、Dockerサービスがインストール後に自動的に起動しない場合に備えて起動設定を行います。

$ sudo systemctl start docker.service
$ sudo systemctl enable docker.service

ドッカーコンテナを実行してドッカーのインストールを確認します。

$ sudo docker run hello-world

以下のような出力が表示されます。Dockerが正しくインストールされていることを確認出来ます。

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:97ce6fa4b6cdc0790cda65fe7290b74cfebd9fa0c9b8c38e979330d547d22ce1
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

 

ルート以外のユーザーによるDocker実行の許可

デフォルトでは、dockerコマンドを実行するにはroot権限が必要です。 これを避けるために、sudoでdockerコマンドを使用しています。 ルート以外のユーザーがDockerコンテナを実行できるようにするには、以下の手順に従ってDockerを実行する権限を与えます。

dockerというグループが存在しない場合は作成します。

$ sudo groupadd docker

ユーザーをドッカーグループに追加し、 "taro"をユーザー名に置き換えます。

$ sudo useradd taro

ユーザーをdockerグループに追加します。 

$ sudo usermod -aG docker taro

ログアウトし、再度ログインします。
これで、sudoのプレフィックスを付けずにDockerコマンドを実行できるようになります。

$ docker run hello-world

Ubuntu 16.04上でオープンLDAPのインストールと設定

OpenLDAPのインストール手順を丁寧に記載しているサイトがありました。ウィザードで設定を行うため、シンプルで分かりやすい内容です。

www.itzgeek.com

 

上記サイトの構築手順を記載します。

このサイトの管理者に、構築手順を翻訳しブログに記載することの許可は得ています。

 

このガイドは、OpenLDAPサーバーとOpenLDAPクライアントの別々のマシンに構築し、OpenLDAPクライアントから構築後の動作確認を行います。

 

 環境:

ホスト名 IPアドレス OS 目的
server.ldtest.local 192.168.0.50 Ubuntu 16.04 LDAPサーバー
client.ldtest.local 192.168.0.60 Ubuntu 16.04 LDAPクライアント

 

前提条件:

 名前解決のために、/etc/hosts にそれぞれのマシンの情報を記載します。

 sudo vi /etc/hosts

192.168.0.50 server.ldtest.local
192.168.0.60 client.ldtest.local

 

LDAPのインストール:

 server.ldtest.local上でLDAPのインストールコマンドを実行します。

 sudo apt-get update

sudo apt-get -y install slapd ldap-utils

 管理者パスワードの設定画面が表示されますので、パスワードを設定します。

f:id:hirosanote:20180127103612p:plain

 

OpenLDAPサーバーの再設定:

インストーラは、サーバーのホスト名に基づいてLDAPディレクトリを自動的に作成しますので、LDAPを再構成します。 次のコマンドを実行します。

sudo dpkg-reconfigure slapd

 再構成ツールの一連の質問に答える必要があります。

OpenLDAPサーバーの設定を省略しますか? : No

(Yesを選択すると設定がキャンセルされます。)

f:id:hirosanote:20180127173958p:plain

 

 DNSドメイン名:LDAPディレクトリのベースDNを作成します。

使用するドメイン名を入力します。

f:id:hirosanote:20180127174506p:plain

 

組織名:使用する組織名を指定します。

f:id:hirosanote:20180127174725p:plain

 

LDAP管理者アカウントのパスワードを入力します。 adminはデフォルトの管理者アカウントの名前です。

f:id:hirosanote:20180127180028p:plain

 

管理者パスワードを再度入力します。

f:id:hirosanote:20180127180209p:plain

 

LDAPの為のバックエンド形式 HDB を選択します。

f:id:hirosanote:20180127180540p:plain

 

slapdがパージされたときにデータベースを削除するかどうかを選択します。 No を選択します。

f:id:hirosanote:20180127180820p:plain

 

LDAPに古いデータがある場合は、データベースを作成する前にデータベースを移動することを検討することができます。

f:id:hirosanote:20180127181742p:plain

 

LDAPv2プロトコルを許可または禁止するオプションがあります。

f:id:hirosanote:20180127182341p:plain

 

再構成が完了すると、以下のような出力が得られます。

f:id:hirosanote:20180127182625p:plain

 

LDAPを確認します。

sudo netstat -antup | grep -i 389

f:id:hirosanote:20180127183013p:plain

 

LDAPベースDNの設定:

ドメインのbase.ldifファイルを生成します。

sudo vi base.ldif

 

dn: ou=People,dc=ldtest,dc=local
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=ldtest,dc=local
objectClass: organizationalUnit
ou: Group

 

 

ディレクトリ構造を構築します。

ldapadd -x -W -D "cn=admin,dc=ldtest,dc=local" -f base.ldif

 ldapaddコマンドは、admin(LDAP rootユーザー)のパスワードを要求します。

 出力:

f:id:hirosanote:20180127194844p:plain

 

LDAPアカウントの追加:

新しいユーザー "ldapuser"のLDIF(LDAP Data Interchange Format)ファイルを作成します。

sudo vi ldapuser.ldif

 

dn: uid=ldapuser,ou=People,dc=ldtest,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/ldapuser
loginShell: /bin/bash
gecos: Test LdapUser
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7

 

ldapaddコマンドを使用して、OpenLDAPディレクトリに新しいユーザー "ldapuser"を作成します。

ldapadd -x -W -D "cn=admin,dc=ldtest,dc=local" -f ldapuser.ldif

出力:

f:id:hirosanote:20180127195627p:plain

 

ユーザーにパスワードを設定します。

ldappasswd -s password123 -W -D "cn=admin,dc=ldtest,dc=local" -x "uid=ldapuser,ou=People,dc=ldtest,dc=local"

-s ユーザーのパスワードを指定する

-x パスワードが変更されたユーザ名

-D LDAPサーバーを認証するための識別名

 

LDAPエントリを確認します。

ldapsearch -x cn=ldapuser -b dc=ldtest,dc=local

出力:

f:id:hirosanote:20180127200429p:plain

 

オプション

LDAPからエントリーを削除する場合は、以下を実行します。

ldapdelete -W -D "cn=admin,dc=ldtest,dc=local" "uid=ldapuser,ou=People,dc=ldtest,dc=local"

 

LDAPロギングの有効化:

LDAPイベントをログファイル/var/log/ldap.logに送信します。

sudo vi /etc/rsyslog.d/50-default.conf

以下をファイルに追加します。

local4.* /var/log/ldap.log

 

syslogサービスを再起動します。

sudo service rsyslog restart

 

 

LDAPクライアントのインストール:

www.itzgeek.com

 

LDAP clientをUbuntu16.04に構築します。LDAP Serverを構築したマシンとは別のマシン(client.ldtest.local / 192.168.0.60)にインストールします。

 

LDAPクライアントに必要なパッケージをインストールします。

sudo apt-get update

sudo apt-get -y install libnss-ldap libpam-ldap ldap-utils nscd

インストール中に、インストーラパッケージはさまざまな質問をします。 環境に応じて値を入力します。

 

最初の画面で、LDAPサーバーの詳細を入力します。 このガイドでは、LDAPサーバーのIPアドレスを192.168.0.50としましたので、ldapi:///を削除し、ldap://192.168.0.50を設定します。

f:id:hirosanote:20180127205822p:plain

 

LDAP検索ベースのDN(ドメイン名)を入力します。 このガイドでは、dc=ldtest,dc=localです。

f:id:hirosanote:20180127210141p:plain

 

使用するLDAPバージョンを選択します。 LDAPサーバーがこのバージョンをサポートする必要があります。 このガイドでは、LDAPサーバーはv3プロトコルを使用します。

f:id:hirosanote:20180127210348p:plain

 

LDAP管理アカウントをローカルルートとして機能させるかどうがを選択します。このガイドでは、LDAP管理者をローカルマシンのルートにします。

f:id:hirosanote:20180127210714p:plain

 

以下は、Noを選択します。

f:id:hirosanote:20180127210952p:plain

 

LDAP管理アカウントの詳細を入力します。

cn=admin,dc=ldtest,dc=local 

f:id:hirosanote:20180127211235p:plain

 

LDAP管理アカウントのパスワードを入力します。

f:id:hirosanote:20180127211350p:plain

 

 認証の設定:

インストーラは、前のセクションで与えられた入力に基づいて、ほとんどの設定を行います。 しかし、LDAP認証が機能するためにはまだいくつかの変更が必要です。

 

LDAPで動作するようにnsswitch.confを設定します。

sudo vi /etc/nsswitch.conf

以下のように、以下の行を更新します。

passwd: compat ldap
group: compat ldap
shadow: compat ldap

f:id:hirosanote:20180127215339p:plain

 

 オプション:ユーザーのホームディレクトリを自動的に作成する場合は、次のようにします。

sudo vi /etc/pam.d/common-session

 以下を追加します。

session required pam_mkhomedir.so skel=/etc/skel umask=077

 

 nscdサービスを再起動します。

 sudo service nscd restart

 

LDAPログインの確認:

getentコマンドを使用して、LDAPサーバーからLDAPエントリを取得します。

getent passwd ldapuser

出力:

f:id:hirosanote:20180127220015p:plain

 

LDAPを確認するには、クライアントマシンのLDAPユーザー "ldapuser"を使用してログインします。

f:id:hirosanote:20180127220215p:plain

f:id:hirosanote:20180127220304p:plain

f:id:hirosanote:20180127220414p:plain

 

以上で、終了です。

 

robot-detectのインストール手順

SSL TLSのROBOT(Return Of Bleichenbacher's Oracle Threat)脆弱性をスキャンするツールのインストール及び動作手順です。意外と動かすまで手惑いましたので、手順を記載します。

 

使用したOS : Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-31-generic x86_64)

手順は、rootユーザーを使用しています。

 

 cd ~
apt-get update
apt-get install python3 -y
apt-get install python3-pip -y
apt-get install libgmp3-dev -y
apt-get install -y libmpfr-dev libmpfr-doc libmpfr4 libmpfr4-dbg
apt-get install libmpc-dev -y
pip3 install phe
pip3 install cryptography
wget https://raw.githubusercontent.com/robotattackorg/robot-detect/master/robot-detect
chmod +x robot-detect

 テストの実行

 ./robot-detect 192.168.0.10

 

Failed to initialize SSL session to remote host. エラーについて

MAC PCで動作するVMware FustionからリモートホストVMware ESXiへ接続し仮想マシンを起動したところ、"Failed to initialize SSL session to remote host"エラーが発生します。

 

環境

Macbook 12インチ early 2015 / High Sierra 10.13.1

ESET Cyber security pro 6.5.432.1

VMware Fustion プロフェッショナル 10.0.1 (6754183)

VMware ESXi 6.0 5050593

 

エラー画面

f:id:hirosanote:20171128002430p:plain

 

このエラーが発生した場合、ESETの「リアルタイムファイルシステム保護」を無効にすることによって、エラーが発生しなくなります。

f:id:hirosanote:20171128005513p:plain

 

ファイルシステムの保護とリモートホストとのSSLエラーの関連性は不明ですが、同じ問題が発生している方の参考になれば幸いです。

 

 

 

 

 

アリババクラウドの中国北京リージョンとのファイル転送スピード

日本から中国へFTP等で500MB等の大容量ファイルを送信する場合、約半日ぐらいかかり、非常にスピードが遅いです。中国のクラウド事業者のAlibabaを使用しているSBクラウドの場合、もしかして転送スピード速くなるのでは?と考えました。何も根拠はありません。。。

実際にテストしてみましたので、その結果です。

インスタンスのスペック 中国北部2 = 中国北京

f:id:hirosanote:20171009101309p:plain

WinSCPを使用し、SSHで78MBのファイルをアップロード

f:id:hirosanote:20171009101519p:plain

残り時間を見ると、78MBのファイルを送るのに、約1時間30分必要とします。日本時間の朝10時にテストを行いました。

残念ながら劇的にスピードが速くなることはありませんでした。

同じファイルを東京リージョンに構築したインスタンスへアップロードした場合、約5秒でファイル転送が完了します。

f:id:hirosanote:20171009115958p:plain

 

中国リージョンにインスタンスを作る場合、注意点があります。

インスタンス作成時、以下のメッセージが表示されます。

「中国本土でホストされているインターネットでインスタンスを使用する場合は、ウェブサイトの作成前にICP 登録番号の取得が必要です。」

 

ICP登録番号についてgoogleで検索して調べてみると、Webサイトを公開し情報配信する場合は、中国法令で定められているICP登録番号が必要とのこと。登録費用は、ある代行業者の場合は4万5千円でした。

いろいろと調査した結果、Webサイト公開の場合はICPライセンスが必要で、Webサイトを公開しない場合は必要ないと、判断しました。

 

せっかくSBクラウドに契約したので、インスタンスを作成する手順を記載します。

f:id:hirosanote:20171009110309p:plain

f:id:hirosanote:20171009111131p:plain

f:id:hirosanote:20171009111935p:plain

画面をスクロールします。

f:id:hirosanote:20171009112406p:plain

画面をスクロールします。

f:id:hirosanote:20171009112528p:plain

画面をスクロールします。

f:id:hirosanote:20171009112835p:plain

画面をスクロールします。

f:id:hirosanote:20171009113039p:plain

f:id:hirosanote:20171009113215p:plain

f:id:hirosanote:20171009113323p:plain

 

セキュリティグループの設定を行います。

f:id:hirosanote:20171009120558p:plain

f:id:hirosanote:20171009114759p:plain

f:id:hirosanote:20171009114732p:plain

f:id:hirosanote:20171009114841p:plain

f:id:hirosanote:20171009115121p:plain

ルールが追加されたことを確認します。

f:id:hirosanote:20171009115305p:plain

 

割り当てられたグローバルIPアドレスSSHクライアントからアクセスし、設定したパスワードを使用してインスタンスへログインします。

 

送信元ポート番号を偶数と奇数の両方を使用する設定

Ubuntu16にApache benchをインストールして負荷をかけると、Ubuntuの送信元IPアドレスに使用される送信元ポートは偶数しか使用しないことに気づきました。

root@ubuntu:~# lsb_release -rd
Description: Ubuntu 16.04.1 LTS
Release: 16.04

f:id:hirosanote:20170821203305p:plain

ソースポートの偶数、奇数を使用して分散するシステムを使用した場合、偶数のみのアクセスとなるため、偏りが発生します。偶数、奇数の両方を使用するためには、ip_local_port_rangeのデフォルト値の設定を変更する必要があります。

変更前:

root@ubuntu:~# /sbin/sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 60999

 

変更するコマンド:

sudo sysctl -w net.ipv4.ip_local_port_range="32768 61000"

変更後:

root@ubuntu:~# /sbin/sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768 61000

 変更後のパケットは、以下のようになりました。

f:id:hirosanote:20170821202156p:plain

設定の上限に到達すると、偶数から奇数を使うようになりました。奇数が上限に到達すると、偶数を使います。変更前は、偶数が上限に到達すると、奇数ではなく偶数を使用します。

 設定変更により、送信元ポートが偶数、奇数の両方を使用してテストすることが可能となります。