satakesatakeの日記

2016-06-06

VMWareからVirtualBoxへお引越しする話

18:47

なにゆえ

何故、VirtualBoxか。フリーだからだ。

VMWareはPlayerは無料だがWorkstationは有料で、なんか自由じゃない。vmnetcfgが無いと使い物にならないんだが、変な方法でWorkstationからとってくるとか、インストーラオプションつけて展開するなど、小手先の技が必要でウザい。

ネットワークカードを認識させる

VirtualBoxVMWare仮想マシンイメージファイルを読み込むことができる。しかし、当然仮想NICはVirutalBox用のものに合わせてやらないといけない。また、VirtualBoxVMWareとは一味違い、二枚の仮想NICを設定して、ホストコンピュータ(つまり、VirtualBoxを動かしているPCだ)から仮想マシンへアクセス、仮想マシンからホストコンピュータを通じて、外部ネットワークへアクセスさせる。 残念、ここに書いた設定では外部へアクセスできなかった。また後日試す。 つながったので追記した。

ひとまず、下図のようにアダプター1にはNAT、アダプター2にはホストオンリーアダプターを設定する(プロミスキャスモードは「すべて許可」にするのが良い?ようだ、検証不足)。

f:id:satakesatake:20160606182531p:image

f:id:satakesatake:20160606182703p:image

次に、コントロールパネルより、VirtualBox Host-Only Ethernet AdapterのIPv4の設定を変更する。このNICIPアドレスは192.168.209.2とする。後述のIPアドレスの設定において、このNIC仮想マシンゲートウェイとなる。

f:id:satakesatake:20160606183022p:image

これで下準備は完了。次は仮想マシンOSにこの二枚のNICを認識させる。ここでは、各NICMACアドレスが必要だ。

アダプター1(NAT)はeth0、アダプター2(ホストオンリーアダプター)はeth1に設定する。

/etc/udev/rules.d/70-persistent-net.rules

上記ファイルにMACアドレスを記載し、それぞれをeth0, eth1に割り当て、リブートする。

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:b3:85:77", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:da:29:1b", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

IPアドレスの設定

次はIPアドレスだ。ポリシーとしては、仮想マシンには静的なIPアドレスを一つ割り振りたい。192.168.209.160とする。

まずは、eth0の設定から行おう。

/etc/sysconfig/network-scripts/ifcfg-eth0

上記のファイルを編集する。

ONBOOT=yes
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=dhcp

eth0はdhcpとする。これはホストコンピュータNATに紐づいており、VirtualBox Host-Only Ethernet Adapterとの仲介役として働く。

次に、eth1の設定だ。

/etc/sysconfig/network-scripts/ifcfg-eth1

上記のファイルを編集する。

ONBOOT=yes
DEVICE=eth1
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.209.160
NETMASK=255.255.255.0
GATEWAY=192.168.209.2
NETWORK=192.168.209.255
BROADCAST=192.168.209.255

こちらは静的IPアドレスを割り振る。ゲートウェイは、先に設定したNICそのもののIPアドレスだ。

(2016.6.17 追記)NETMASKを適切に設定すると、BROADCASTとNETWORKが自動的に決定されるのだが、なぜか外部へつながらない。これはNETWORKを192.168.209.255にすると解決した。何故だかは不明。

# service network restart

networkをリスタートするのを忘れずに…。


最後に

おそらくこれで、接続が可能となる。試しにpingを打とう。

f:id:satakesatake:20160606183023p:image

完璧だ。

DavFleleDavFlele2017/05/09 02:24Kamagra Pfizer Achat Cialis Without A Doctors Prescription Finasteride 1 Mg Generique Levitra Niedriger Blutdruck Canada Pharmacies Online <a href=http://byuvaigranonile.com>viagra</a> Achat Tadalafil

KenndualreaxKenndualreax2017/06/25 06:42Achat Levitra En Ligne <a href=http://cial40mg.com/ordina-cialis-online.php>Ordina Cialis Online</a> Propecia Capsulas 1 Mg Buy Brand Cialis Online Ireland <a href=http://priligy-online-buy.priliorder.com>Priligy Online Buy</a> Amoxicillin Different Penecillin Zithromax Diarrhea <a href=http://kamagra-sildenafil.kamagpills.com>Kamagra Sildenafil</a> Como Usar Dapoxetina

2016-04-20

CentOS5でLet's Encrypt

15:54

Let's Encryptのベータが外れてめでたいので、こいつを利用して証明書をゲットしちゃおうという話です。ただし、CentOS5で。

証明書取得のために必要なクライアントソフト

公式に配布されているのは、下記クライアントソフト。

https://github.com/letsencrypt/letsencrypt

導入にはあらかじめgitが必要。参照→https://letsencrypt.jp/usage/

立ちふさがるPythonの壁

このクライアントのヤロー、Python 2.7を要求する。CentOS5にyumPythonをした場合、Python 2.4になります。epelリポジトリを使っても、Pyrhon 2.6までしか手に入らない。しかもpythonコマンドは2.4にリンクされたまま。これはイケてない。

下記のURLのような試みもあるにはあるが、無理やりPython 2.7をインストールし、LE_PYTHON=python2.7 ./letsencrypt-autoとか実行しても、結局、中で使われるPythonは2.4で、pipのバージョンが低いと怒られる。益々、イケてない。

https://kyle.io/2015/12/lets-encrypt-on-centos5/

非公式クライアントを使う

なんかもう、これ以上サーバの環境を汚すのも嫌だなと思ってあきらめかけたが、非公式クライアントなるものがあるらしい。

例えばこれだ→https://github.com/lukas2511/letsencrypt.sh

以下のブログが参考になる(& ここで勧められてた)。

http://blog.osakana.net/archives/6798

このブログの手順通りでだいたい問題ない。gitからダウンロードした場所は、/root以下を選択した。何故そうしたかは、特に意味はないので、どこでも良いと思う。また、自分の場合、複数のドメインの証明書は必要なかったので、domain.txtは利用せず、以下のコマンドを実行した。--domainオプションの次に取得したいドメイン名を書く。

# ./letsencrypt.sh --config /root/letsencrypt.sh/config.sh --domain example.com --cron

というか、むしろ、domain.txtの利用を試みたらエラーが出たのであきらめた。--domain domain.txtとかやっちゃったせいだろう。

なお、Let's Encryptはドメイン認証タイプのSSLなので、現実に存在するドメインが必要だ。http://example.com/.well-known/acme-challenge/ というURLにアクセスすることで実在を確認するっぽい。

首尾よく、成功すれば、certs/example.com以下に証明書や、中間CA証明書ができあがる。ちなみに、fullchain.pemってのが中間CA証明書だ。

インストール

ググればどっかに書いてあるので割愛

総括

クライアントプログラムさえ動けば楽勝でした。新しめのOSの場合、公式クライアント使うのが無難だと思われる。

無料でSSL取得できるなんて、いい時代ですね。気を付けたいのが有効期限だ。3ヶ月しか持たないので、3ヶ月に一回、cronなんかでスケジュール組めば、自動的に更新されるに違いない。やってないけど。

2016-03-11

Apacheで行う、特定のURLのみを除き、リバースプロキシさせる設定のレシピ

| 14:06

https://example.com/admin

だけはリバースプロキシさせずに、

https://example.com/

とか、それ以外のものはリバースプロキシさせるようなレシピ

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^/admin - [L]
  RewriteRule ^/(.*) http://example.com:5001/$1 [P,L,QSA]
  ProxyPassReverse /  http://example.com:5001/
</IfModule>

mod_rewriteのPオプションはProxyPassディレクティブと同じ機能を持つ。

…のだが、ProxyPassReverseを直後に書いてやらないとダメらしい。

参考→http://blog.livedoor.jp/techblog/archives/65151527.html

応用

それの応用で、特定のIPアドレス以外はメンテナンス画面を見せるレシピ。RewriteRule の L オプションの活用だ。

#1~3がそれぞれ、if文のブロックのような感覚。

RewriteRule は L オプションを付けると、ルールに合致した際にそこで処理を停める。それ以外は次の行に処理を移す。If文で書ければいいのになあ。

    ErrorDocument 503 /html/maintenance.html

    <IfModule mod_rewrite.c>
      RewriteEngine On

      # 1
      RewriteRule ^/admin - [L]

      # 2
      RewriteCond %{REQUEST_URI} !=/html/maintenance.html
      RewriteCond %{REMOTE_ADDR} !=192.168.0.1
      RewriteRule ^.*$ - [R=503,L]

      # 3
      RewriteRule ^/(.*) http://example.com:5001/$1 [P,L,QSA]
      ProxyPassReverse /  http://example.com:5001/
    </IfModule>

2016-03-10

SSLを取得して、中間CA証明書が2つあって混乱した話

| 14:14

はい。いつも利用しているSSL販売店から、別のところへ変えたら、なんかしらねーが前のところでは1個だった中間CA証明書が2つになってて、

ちょww意味フメーなんすけどwwww

となりました。

どうやら前までは3階層のサーバIDだったのが、4階層になったらしい。中間CA証明書の前にクロスルート証明書というのが入る形になる。

参考→https://knowledge.symantec.com/jp/support/ssl-certificates-support/index?vproductcat=V_C_S&vdomain=VERISIGN.JP&page=content&actp=CROSSLINK&id=SO22877&locale=ja_JP&redirected=true


ルート証明書
 ┗RSAAddTrustCA.crt(*1 クロスルート証明書)
   ┗RSADomainValidationSecureServerCA.crt(*2 中間CA証明書)
     ┗サーバID(*3)

んで、買ったとこから、(*1)と(*2)のファイルと、サーバID(*3)が何の説明もなくZIPで送られてきて設定しろとかいうんですわ。いつもは中間CA証明書、一個だけだからそれをApacheの設定に↓みたいな感じで突っ込んでた。

SSLCACertificateFile /var/www/vhosts/webapp/pem/frontage/current/inca.pem

でも今度は二個だ。どうしよう。

連結する。catして一つのファイルにしちゃえばOKらしい。といっても、並びが重要で、

  1. RSAAddTrustCA.crt(*1)
  2. RSADomainValidationSecureServerCA.crt(*2)

この順番じゃないとダメだそうだ。

(*1)がクロスルート証明書発行者によっては、これを所定の場所からダウンロードせよ、という場合もあるらしい。

幸い、自分の使った発行者ZIPに全部固めてくれていた。

nocwayVantynocwayVanty2017/08/26 21:04payday loan consolidation <a href="http://cashadvances2017.com"> payday loans no credit check</a> <a href="http://cashadvances2017.com"> payday loans online no credit check</a> <a href=http://cashadvances2017.com>payday loans direct lenders only</a> payday loans denver

ngwytrVantyngwytrVanty2017/09/09 17:47payday loan interest rates <a href="http://paydayloans2017.com"> instant payday loans</a> <a href="http://paydayloans2017.com"> payday loan</a> <a href=http://paydayloans2017.com>payday loans near me</a> payday loans houston

niemkaVantyniemkaVanty2017/09/14 05:39payday loan interest rates <a href="http://paydayloans2017.com"> online payday loan</a> <a href="http://paydayloans2017.com"> guaranteed payday loans</a> <a href=http://paydayloans2017.com>online payday loans no credit check</a> bad credit payday loans

ngmbevVantyngmbevVanty2017/09/18 17:34ace payday loans <a href="http://paydayloans2017.com"> payday loans direct lenders only</a> <a href="http://paydayloans2017.com"> online payday loans</a> http://paydayloans2017.com - payday loans payday loans bad credit

2016-01-05

トンネリングを使った公開鍵認証の設定方法

| 10:39

弊社が管理するサーバはどれも、hosts.allowやらiptablesなどで接続元を限定している。

そのため、ssh port forwarding(トンネリング)が必須だ。

今回、新しいサーバを設置したため、公開鍵認証のおさらいをしたい。

サーバ構成

手順

以下の手順で公開鍵認証+トンネリングを実現する。

  1. 接続元(クライアント)にキーペア(公開/秘密鍵)を作る
  2. 公開鍵をポートフォワーディング用の接続先(example.net)にコピーする
    • ここは、ssh-copy-idを使用すると楽
    • 接続先のauthorized_keysに作成した公開鍵が追加される
    • 通常の設定であれば、ここまでをクリアすれば、公開鍵認証が実現できるんじゃないかと思う
  3. 下記のコマンドでクライアントの8022ポートにポートフォワーディングするための接続を開始
    • ローカルの8022ポート経由でexample.com:22への道が開かれる
  4. 公開鍵を目標の接続先(example.com)にコピーする

ちなみに公開鍵認証の設定はそれほど難しくなく、以下の二点を抑えておけばほぼ問題ない。

  • 接続元にキーペアを作成し
  • 接続先の.ssh/authorized_keysに公開鍵をコピーする

※もちろん接続先には公開鍵認証を有効にする適切な設定が必要だ

なお、パスフレーズが必要な場合もあるが、このパスフレーズは、秘密鍵を使う際に必要なもので、ネットワークには流れない。

参考→http://guinan.ten-forward.ws/wiki/doku.php?id=handout:ssh%E3%81%AE%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E8%80%83%E3%81%88%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86

コマンド例

ここまで行うと、以下のコマンドで接続できる。

1行目は3番のポートフォワーディング用の接続だ。こいつはlocalhostの8022を開いてずーっと待っている。

2行目はexample.comへの接続。localhostの8022に接続するとexample.com通信が転送される。なお、some_account@localhostは、some_accountというアカウントで目標に接続しようとしている(ポートフォワーディングを行っているため、some_account@example.comとして読みかえるとわかりやすい)。

$ ssh -fNL 8022:example.com:22 -i ~admin/.ssh/id_rsa admin@example.net
$ ssh -p 8022 some_account@localhost

なお、ポートフォワーディング用ポートは放っておくといつまでもリッスン状態なので、手動で閉じてやる必要がある。以下でプロセスを終了させる。(この一文を覚えておくといい)

$ ps aux | awk '/[s]sh -fNL/ {print $2}' | xargs kill

どうでもいい話

キーペアは英語では、private keyとpublic key、日本語では秘密鍵と公開鍵。対義語としては問題ないと思うが、privateを秘密って訳すのもどうかなとか思ったりして。かといって私用鍵とか個人鍵ってのも変?だし。組み合わせとしては、秘密/公開よりも、private/publicのペアが好き。

"https://ja.wikipedia.org/wiki/%E9%8D%B5_(%E6%9A%97%E5%8F%B7)"

私有鍵とも言われるらしい。でもぜんぜんメジャーじゃない言い方だよな。