カテゴリー別アーカイブ: LAMP[Linux, Apache, MySQL, PHP]

QNAP TS-419P IIのバックアップ用に、お名前.com VPSにFTPSを導入する

 従来、VPSのFTPはSFTP(SSHトンネリングしたFTP)を使っていたんだけど、先日導入したQNAP NAS(TS-419P II)のバックアップサービスは、RSYNC・RTRR・FTP・FTPS(FTP over SSL/TLS)の対応だったので、セキュリティと導入容易性からFTPSを追加導入することとした。
 なお、QNAPはAmazonS3等のクラウドストレージにもバックアップすることが出来たが、既存のお名前.com VPSさくらVPSの契約があれば、VPSを利用した方が容量あたりの計算でオトク度が高いと思う。
なので、今回は、先日契約したお名前2GBメモリプランに導入した。

yumでサービスを導入して設定編集

yum install vsftpd
vi /etc/vsftpd/vsftpd.conf

anonymous_enabled=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES

ssl_enable=YES
rsa_cert_file=/etc/pki/tls/certs/my.crt
rsa_private_key_file=/etc/pki/tls/private/my.pem
force_local_logins_ssl=YES
force_local_data_ssl=YES
ssl_ciphers=HIGH

匿名ログイン禁止
ローカルユーザでのログイン許可
書き込み許可
ローカルユーザはchroot(ホームディレクトリをトップとして扱う)

SSL有効
RSA公開鍵ファイルを指定
RSA秘密鍵ファイルを指定
ログイン処理はSSLを強制
データ転送はSSLを強制
SSL処理をHIGH設定に(デフォルト強度だとネゴシエートできなかった)

/etc/init.d/vsftpd start
chkconfig vsftpd on

SSL鍵自体は、いつも記事に登場しているSSLボックスのRapidSSLを利用している。

(463)

カテゴリー: サーバ設定 | コメントをどうぞ

GMOクラウドVPSの設定2

 先日契約したGMOクラウドのVPSの設定を継続。

WPのSEO Rank Reporterプラグイン用にPHPモジュール追加

yum install php-xml*

Apacheの余計な情報を削るhttpd.conf設定

ServerSignature Off
ServerTokens ProductOnly
Header unset X-Powered-By

ApacheのSSL設定

LoadModule ssl_module modules/mod_ssl.so
Listen 443
NameVirtualHost *:443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

ApacheのSSL用VitualHost設定

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/ssl.crt
SSLCertificateKeyFile /etc/pki/tls/private/ssl.pem
SSLCertificateChainFile /etc/pki/tls/certs/rapidssl.crt
SSLCACertificateFile /etc/pki/tls/certs/rapidssl.crt

Apacheの第一VirtualhostのDocumentRootを/dev/nullにしておく(マッチしないHostでアクセスされた場合、第一Virtualhostにアクセスされる為)

Dovecot(POP3)の導入

yum install dovecot

Postfix関連の導入(smtps認証用にcyrus-sasl導入)

yum install postfix
yum install mailx
yum install cyrus-sasl*

Muninの導入

yum install munin*

旧サーバからの転送に必要なツールの導入

yum install rsync
yum install openssh-clients

タイムゾーンの修正(デフォルトはEDTだった)

rm /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

 あとは設定ファイルを書き書き。

 本番系のGMOクラウドのVPSへの移行が終わったら、開発系のさくらVPSの2GBプランを1本解約してお名前.com VPSの2GBを契約しようかな。 GMOインターネットの株式を家族名義でも取ってあるから、株主優待でお名前サーバはかなり安く利用できるし。

(387)

カテゴリー: サーバ設定 | コメントをどうぞ

GMOクラウドVPS(マイクロプラン)のUnixBenchと初期設定1

 GMOクラウドVPSの申し込みして結構時間がかって、展開遅いなぁと思っていたら、システム不具合のため新規契約のサーバ準備が遅延しているというメールが来ていた。
 初っぱなから不安を感じさせてくれた訳だけど、今日になったやっと設定完了の通知が来たので早速ログイン。
 例によってUnixBenchを実施する。

  • 初期起動
  • yum install perl-Time*
  • yum install make
  • yum install gcc
  • wget http://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
  • tar xzf UnixBench5.1.3.tgz
  • cd UnixBench
  • ./Run

 前回使ったものに比べて低いが、共用だからこれくらいの変動はあるだろう。

 デフォルトでディスク容量が10GBしか振られていなかった。
 サポートサイトを確認すると、お問い合わせフォームから容量変更以来を出す必要があるとのこと。 めんどくさ・・・

 必要なパッケージ類の導入

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
yum install mailx
yum install bind-utils
yum install httpd
yum install mod_ssl
yum upgrade openssl
yum install mysql-server
yum install php
yum install php-mysql
yum install php-mbstring

 例によってiptablesが動いているのでhttp/https/smtp/pop3sをオープン。
 旧サーバからの移行なので証明書をコピー。
 /etc/my.cnf に skip-networking を追加。

 次回は上物を移してApache設定とPostfix設定を実施。

(210)

カテゴリー: サーバ設定 | コメントをどうぞ

Linuxで暗号化しながらファイルのバックアップを行う – opensslでAES256暗号化

 Linuxの管理をしているとファイルのバックアップなんかをとるのによく使うのが tar コマンド。

tar -czf /mnt/backup/backup.tgz /var/www/html

みたいな感じで使うことが多いけど、セキュリティ保護すべきファイル(/etcとか)をバックアップする場合、ファイルを暗号化しておきたい。

 Linuxでファイルを暗号化する場合には、opensslパッケージを利用するのが簡単。

openssl enc -e 暗号メソッド -in 入力ファイル -out 出力ファイル ↓
openssl enc -e -aes256 -in plain.tgz -out enclypted.tgz

※AES256暗号でplain.tgzを暗号化してenclypted.tgzに出力する
みたいな感じで使う。
 復号は -e オプションに代えて -d オプションを使用する。

openssl enc -d -aes256 -in enclypted.tgz -out plain.tgz

 また、tarもopensslもパイプで接続することも出来るので

tar -cz /var/www/html | openssl enc -e -aes256 -out enclypted.tgz

のようにして暗号化することも出来る。

 パスワードを問われるが、-k オプションでパスワードを指定することが出来るので、バッチ化する場合などには

tar -cz /var/www/html | openssl enc -e -aes256 -out enclypted.tgz -k password

のようにする。

 更に発展させて

tar -cz /var/www/html | openssl enc -e -aes256 -k password | ssh backup-server.my.tld “cat > /mnt/storage/backup.tgz.aes”

のようにして、ファイルをまとめて、暗号化して、SSHを経由して他のホストにバックアップファイルを作る、みたいな一連の動作が出来る。
SSHがパスワード認証だとインタラクティブにパスワード入力を要求されるので、バッチ化する場合にはSSHの認証を公開鍵認証にして対応する(opensslコマンドでの暗号化も公開鍵を使った場合、鍵自体を別途バックアップしておかないと復元できなくなってしまうから注意)

 ファーストサーバの件もあるので、ある程度重要な処理を行っているVPSなら、さくらVPSお名前.com VPSを両方契約して、SSH転送パターンを使って相互でバックアップをとる、みたいな動きにしておきたいところ。

(5251)

カテゴリー: サーバ設定 | コメントをどうぞ

jQueryでページから離脱する際に確認メッセージを表示する

 Wordpressなんかそうだけど、投稿画面で入力中にページ移動しようとすると確認メッセージが出る。
 愛用しているThinkPadも、カーソルキーの上キーの左右がページ前後移動キーになっているので誤って押したり、マウスのスイッチで入力中にページ移動してしまって入力したフォームが消えてしまうアクシデントがあるので、この角にメッセージが出るのはなかなか便利。

 これを自分のページに実装するのは簡単で、

$(window).bind("beforeunload", function(e) {
    return "入力内容はまだ保存されていません、ページ移動しますか?";
});

のようにして、メッセージをreturnすると、その内容を表示したポップアップが出てくれる。 AlertとかConfirmとか書いてもChromeには無視された。

 このままだと常時出てしまうので、登録ボタンを押した場合にはメッセージを表示しないようにするために、

<input type=’submit’ onclick=’javascript:$("body").append("<input type=\"hidden\" name=\"no_unload_confirm\" value=\"1\">");’>

みたいにsubmitボタンのonclickで正常動作フラグを立てて

$(window).bind(‘beforeunload’, function(evnt){
    if(!$(‘input[name=no_unload_confirm]’).val()) return ‘入力内容はまだ保存されていません、ページ移動しますか?’;
});

みたいにフラグが立っているかチェックするようにすれば良い。

(605)

カテゴリー: jQuery | タグ: , | コメントをどうぞ

ユニークなID(UUID)を使う

 プログラムを書いていて、よく使うiとかnとかの変数名を使うと、たまに別の処理の変数と重複してカウントがおかしくなったりして永久ループ、みたいなことがある。
局所的な変数で、意味を持った名前にする必要がない場合などには、変数名をUUIDにしてしまうのが便利かもしれない。
 UUIDは、重複する確率が非常に低いランダム値で、182c9037-b8c9-4055-8fe0-b3f98d7e3e13みたいな感じの値で、2の122乗パターンがあり、世界中で適当に生成してもほぼユニークになる。
 MACアドレスとかは管理されて使っているけど、UUIDは管理しないでもユニークになることが期待されるので自由に生成して使って良い事になっている。 ので、勝手に生成してデバイスやライブラリの識別子等に使われている。

 Linuxのコンソールで、

uuidgen

とか打つと生成できる。

 command not foundな場合は、CentOSのyumならe2fsprogsパッケージに含まれているので、

yum install e2fsprogs

を実行。
 パッケージがe2fs(Ext2 FileSystem)な事からもわかるが、ドライブのフォーマット時にUUIDを生成してつけて、それを識別している。

 飛び飛びで関連性のあるコード追加時に行コメントにUUIDを貼り付けておいて、関連コードがわかるように管理するとかいう使い方もできる。

(423)

カテゴリー: LAMP[Linux, Apache, MySQL, PHP] | コメントをどうぞ

POSTしているページの「Webページの有効期限が切れています」を抑制する

 Webでブラウザバックした場合、「Webページの有効期限が切れています」等と出て、以前の入力内容が表示できないことがある。
 これは、ページリクエストがPOSTのページでキャッシュが無効になっている場合、再度POSTしないとページ内容が表示できないと言う事。
 最新の内容を表示させることを目的としていれば、この表示は妥当で、再度POSTしてもらうべきではあるが、入力ページなどで戻るボタンで移動したとき、前回の入力内容が表示できた方が便利だけど、この動作だとリロードになって入力内容がリセットされてしまうため、この動作を変更する。

 PHPでの実装は簡単で、
session_start()前

session_cache_limiter(‘private_no_expire’)

をセットすれば良い。

 これで、ページキャッシュが有効になって、ブラウザバックしたときには前回入力内容がそのまま表示される。

(666)

カテゴリー: PHP | コメントをどうぞ