dead-letter

なんとも忌まわしい存在を知ってしまいました。dead-letterです。
いつも使っているサクラサーバにデプロイしたらお問い合わせのフォームで送信しようとしたらエラーになってしまっている状態です。そして、サーバのエラーログに下記のようなものが出てきました。

malformed header from script. Bad header=/home/hoge/dead.letter… S: index.php, referer:フォームのURL

スクリプトからのメールフォームのヘッダーが行けてないよ。といったことでしょうか?意味不明です。いつもと同じプログラムだったと思ったのですが。何とも忌まわしいです。

あ、もしかして、ドメイン登録してるけど、メアドはgoogleで登録してるから、そんなメアド登録してないじゃん!みたいなことをずうずうしくもサクラサーバはいっているのかもしれない。それくらいしか変化がない。

やはりそうっぽい。
WordPressのマルチサイトでユーザー追加時に500エラー
PHPMailerでGmailのメール送信

なにこれすごいめんどくさい。でもgoogle apps使ってる理由ってなんだっけ?サクラでいい気がする。google apps解除して、さくらに移すかな。

さくらサーバにメールアドレスを追加してみる

今例えばinfo@hoge.comというメアドがgoogle appsで登録されているにも関わらず、hoge.comをサクラで運用しているとしましょう。その場合、info@hoge.comというメアドでスクリプトからメール送信しようとするとエラーになるわけです。さくらにとってinfo@hoge.comは知らないからであります。であるならば、さくらに知らせてあげようということです。登録してみました。いざ確認してみます。にしても2つのサーバで1つのメアドを登録するとどうなるんでしょうか??怖いです。

おお!さくらのプログラムはエラーがなくなりました。サクラちゃんは上記メアドを認知したからです。しかし一方でこのメアドが使えなくなるような不具合は困ります。

テスト送信してみましたが、今のところ問題なくメール送受信できてます。まあ恐らく大丈夫だろう。取得ドメインのメールのネームサーバ?とかいうやつはgoogleで全部設定したし、ということはgoogleにいくということじゃ。確かにそうだ。お手軽な解決策があってよかった。

さくらサーバにgitをインストールする

https://code.google.com/p/git-core/downloads/list

ここから最新版をローカルに落として、サクラサーバにSCPでコピーします。

ここに書いてある通りにインストルします。

インストールまで出来たら、パスをとおします。

/home/hogehoge/.cshrcを編集します。
下記のset pathというところの最後に、$HOME/local/binを追加します。

そして、下記をやるとcshrcの再読み込みになるようです。

これでgitと打つとgitがでてきます。

AWSにジオトラストのSSLを設定する

Apache + OpenSSL ジオトラスト クイックSSL プレミアム インストール手順 (新規)

このとおりやったんですが、うまくいかない。httpsでアクセスするとこのウェブページにアクセスできませんってエラーになる。

環境は、下記です。
・Amazon Linux AMI release 2013.09
・Apache/2.2.26 (Unix)
・OpenSSL 1.0.1e-fips 11 Feb 2013

とかやってみるってどこかに書いてあったからやったけど、下記のようなの出てくるし、他のサーバでhttpsでアクセスできるやつでも同じ結果だから問題なさげ。

tcp 0 0 *:https *:* LISTEN

とやってみると、下記のようなのが出てくるので443に接続できてるし、証明書も読み込まれているっぽい。

–2014-02-12 16:03:39– https://localhost/
localhost (localhost) をDNSに問いあわせています… 127.0.0.1
localhost (localhost)|127.0.0.1|:443 に接続しています… 接続しました。
エラー: 証明書に記載されている別名とホスト名 localhost' が一致しません
localhost に安全の確認をしないで接続するには、
–no-check-certificate’ を使ってください。

ってやると、タイムアウトで接続できなかった。

AmazonEC2のサーバにSSLを設定する手順を見てたら、下記のように書いてあった。

ec2の管理画面のセキュリティーグループを修正
SSLには443ポートを使うので、インスタンスのセキュリティーグループをチェックし、そのセキュリティーグループのInboundの443番を解放する。

AmazonEC2サーバの443ポートをあける

参考:セキュリティーグループにルールを追加する (サーバーのポートを開放する)

このサイトのとおりに443あけたらできた。
(リージョン毎に表示されるインスタンスとか違うのか)

さくらVPS CentOS6.5でSSLをつかってみる

さくらサーバでSSLつかってみましょう。環境は下記になります。

・FreeBSD 9.1-RELEASE-p7 amd64
・さくらのレンタルサーバ スタンダード
・Apache/2.2.25

あら独自SSLを使えるのは、ビジネスプロ以降らしい。http://www.sakura.ne.jp/
では、VPSを使ってやってみよう。環境は下記になります。

・CentOS release 6.5 (Final)
・Apache/2.2.15 (Unix)
・OpenSSL 1.0.1e-fips 11 Feb 2013

mod_sslをインストールする

mod_ssl.x86_64 1:2.2.15-29.el6.centosというのがインストールされた。

CA用秘密鍵(ca.key)の作成

CA用証明書(ca.crt)の作成

サーバ用秘密鍵(server.key)の作成

署名要求書(server.csr)の作成

サーバ用秘密鍵(server.key)からのパスフレーズ削除

オリジナルをバックアップしてから、server.keyからのパスフレーズ削除

サーバ用証明書(server.crt)の作成

ssl設定ファイル(ssl.conf)の変更

Apache再起動

これでhttpsでアクセスすると反映されてた。

参考:はじめての自宅サーバ構築 – Fedora/CentOS –

AWSでCSRを作成する

AWSサーバに入るための鍵がppkという拡張子になっている。下記を見ながら変更してみる。
Putty の鍵ファイル .ppk を Linux ssh 用に変換してみる

yumが使えないから、下記を見ながらやってみる。
Run Putty on Mac OS X 10.6.8

sudo port install puttyってやっても、下記のエラーになった。
Error: Processing of port putty failed

sudo port selfupdateでportをアップデートしてみた。
テザリングでやってるから超おそい。
そもそもputtyとはなにか?

Windows OSで稼働するSSHクライアント。TTSSHとは異なり,SSHプロトコルversion2にも対応している。さらに,ファイル転送のためのscpや公開鍵認証のためのagentなど,UNIX版SSHクライアントの機能を多数サポートしている。

これがMacでも使えるらしい。SSHクライアントなんていらないんだけどな。やっぱり変換したい。
それにしてもUpdating the ports treeから動かない。諦めるか。一回とめてもう一回やってみる。やっぱり動かない。

そもそも変換したいわけだから、Putty自体は不要だし、どうもputtygenというのがあればいいらしい。
MacでPutty形式の秘密鍵を変換するこれみてもう一度やってみる。
brew install putty
おお出来たっぽい。

ppkを下記で変換できた。

SSHで接続しようとしてもPermission denied (publickey).ってでてエラーになる!
おーできた。ユーザ名指定してなかった笑

■CSRの作成(ジオトラスト)
サーバー証明書の作成、アップロード、削除
CSRの生成方法

CSRとは?企業の社会的責任ではない。CSRとは、お客様が生成し、認証局に提出する署名リクエスト(Certificate Signing Request)です。

ここで一旦お昼ご飯にする。

sshで接続してるときに短時間でタイムアウトにならないようにする

sshでサーバに接続してるときに非常にイライラさせられるので、調べた。

参考:ssh 接続をタイムアウトしないようにする

設定は、クライアント側・サーバ側のどちらかのみすればよいとのこと。
とりえあずサーバ側を設定してみる。

vim /etc/ssh/sshd_config

sshd_configに、下記を追加してみた。

どうもできてるっぽい。と思ったらできていない!

参考:NATな環境で放置したSSH接続が切断される問題について

よくわからないが、とりあえず解決したいので次に、クライアント側の設定もしてみる。
できてる。

XserverにcakePHP置くのが難しかった

4時間くらいかかってしまった。
久しぶりにブログ書く。でも細かくかきたくない。

public_htmlの.htaccessの中身がよろしくなかった。
PHPのバージョンは5.4にしているのだが、

AddHandler x-httpd-php5.4 .php .phps
これの.4が抜けていて、真っ白状態が続いていた。
.4つけたら、すっかり問題なく動いた。

SSH (Secure SHell) の仕組み

SSHとは、ネットワークを介して他のコンピュータに安全にアクセスする仕組み。
telnetは暗号化されてないので盗聴の危険性があるが、sshは暗号化されているので安全。

SSHはRSA暗号方式かDSA暗号方式のどちらかで暗号化した公開鍵と秘密鍵のペアを用いる。公開鍵は暗号化のみ可能であり、秘密鍵は復号のみを行う。暗号化のみ可能で復号ができない為、公開鍵は公開されても問題がない。公開鍵は公にして問題ないことから、複数のリモートコンピュータと接続する場合も、公開鍵・秘密鍵のペアは一つあればよい。

SSHを使って、リモートコンピュータにアクセスしようとする場合、アクセス元のコンピュータで公開鍵・秘密鍵のペアを作成し、公開鍵をリモートコンピュータに渡しておく必要がある。

リモートコンピュータに、公開鍵を渡した後で、ssh接続をしようとすると、

  • sshが、RSA認証プロトコルを使用する旨をリモートコンピュータに伝える。
  • すると、リモートコンピュータが、乱数を生成し、その乱数を渡された公開鍵を基に暗号化し送信してくる。
  • 接続元コンピュータは、受信した暗号を秘密鍵で復号し、復号結果をリモートコンピュータに送信する。
  • リモートコンピュータは受信した内容が生成した乱数と一致すれば、秘密鍵保有者であることが確認されたためアクセスを許す。

秘密鍵が他人に渡った場合あらゆるアクセス権限が渡ってしまうことになる為、秘密鍵作成時にはパスフレーズを登録すべき。これによって、万一他人に秘密鍵が渡っても、パスフレーズがない限りはそれを使用できない。

ただ、SSHで公開鍵・秘密鍵を利用する目的の一つにパスワード入力を不要にするという点があるが、パスフレーズを登録した場合、パスワードの代わりにパスフレーズの入力が必要となる為、その目的に合致しない。そこで、パスフレーズ入力を回避したい場合は、ssh-agentを利用する。macには、キーチェーンという仕組でパスフレーズ入力が回避できる。

また、/etc/hosts.allow、/etc/hosts.denyを編集することで、接続元を制限することができる。hosts.denyはhosts.allowよりも先に見られる。hosts.denyに、ALL:ALLと書くことで、「全てダメ」になる。hosts.allowに下記にように書くことで、記載した対象のみ接続可となる。

参考:
http://e-words.jp/w/ssh.html
http://www.atmarkit.co.jp/flinux/special/ssh/ssh.html
http://www.turbolinux.com/support/document/knowledge/152.html
SSH-KEYGEN
OpenSSH キー (鍵) の管理