神代クロ のすべての投稿

メールサーバ(さくらのVPS設定5)

メールサーバはPostfixとDovecotを使います。メールアドレスは複数ドメインで、アカウントはLinuxユーザのを使用、送信はSMTP認証です。

さくらのVPSは2週間のお試し期間中はメールが使えません。2週間経ってなくてもいける! と思ったら本契約ボタンを押して下さい。1時間位で使えるようになるそうです。

Postfix(送信)

Postfixはインストール済みで既に稼働もしていたので、設定だけします。

# vi /etc/postfix/main.cf

以下のように修正
myhostname = www????.sakura.ne.jp
mydomain = www????.sakura.ne.jp
myorigin = $mydomain
inet_interfaces = all
#inet_interfaces = localhost
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown

以下を追加(スパム対策)
disable_vrfy_command = yes
smtpd_helo_required = yes

以下を追加(バーチャルドメイン用)
virtual_alias_maps = hash:/etc/postfix/virtual

以下を追加(SMTP-Auth用)
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

以下を追加(メールへの添付可能サイズを無制限にする)
message_size_limit = 0
mailbox_size_limit = 0

メール送信時にサブミッションポート(587)を使用します。

# vi /etc/postfix/master.cf

以下の行のコメントアウトを外す
submission inet n       -       n       -       -       smtpd
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING

設定をリロードします。

# service postfix reload

ネット上ではリロードだけで済むって書いてあったけど、maillog見たら再起動しろって警告が出てたので結局再起動。メール送れなくて悩んだよ……

# service postfix restart

Saslauthd(SASL認証)

SMTP認証のためにSaslauthdを使用します。アプリと認証処理を分離してくれるものらしい。

# vi /etc/sysconfig/saslauthd

Linuxユーザのパスワード(/etc/shadow)を使う
MECH=shadow

起動します。

# service saslauthd start
# chkconfig saslauthd on

Dovecot(受信)

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

# yum install dovecot

設定していきます。

# vi /etc/dovecot/conf.d/10-mail.conf

以下の行のコメントアウトを外す
mail_location = maildir:~/Maildir
# vi /etc/dovecot/dovecot.conf

以下の行のコメントアウトを外す
protocols = imap pop3 lmtp
listen = *, ::
# vi /etc/dovecot/conf.d/10-auth.conf

パスワードを平文にする
disable_plaintext_auth = no
# vi /etc/dovecot/conf.d/10-ssl.conf

SSL接続しない
ssl = no

Dovecotを起動します。

# service dovecot start
# chkconfig dovecot on

メールアドレス作成

useradd時にメールボックス用のディレクトリを自動で作成されるようにします。

# mkdir -p /etc/skel/Maildir/{new,cur,tmp}
# chmod -R 700 /etc/skel/Maildir/

メールアカウント用のユーザをシェルログイン不可で作成します。

useradd -s /sbin/nologin hoge-info
passwd hoge-info

useraddしたらメールボックスはこのように作成されました。

/home/hoge-info/Maildir/new/
/home/hoge-info/Maildir/cur/
/home/hoge-info/Maildir/tmp/

メールアドレスとその振り分け処理を作成します。ドメインごとにanythingの行を入れないとメールが使用できません。入れ忘れて無駄に回り道した……

# vi /etc/postfix/virtual

hoge.com         anything
info@hoge.com    hoge-info
web@hoge.com     hoge-web

振り分けを反映させます。

# postmap /etc/postfix/virtual

これでメールの送受信が出来るようになりました。

ぐぐるとアカウントをMySQLで管理する方法があったりとか、色んな設定があるようで、目的の情報がなかなか見つからず苦労しました。

暗号化とかしてないので、セキュリティ的にはちょっと弱いかもしれませんが、とりあえずこれで。

MySQLとPHP(さくらのVPS設定4)

MySQL

標準のリポジトリだとバージョン5.1なので、RemiからMySQL 5.5をインストールします。MariaDBは……まだいいや。

# yum --enablerepo=remi install mysql-server mysql-devel

設定ファイルで文字コードをutf-8に変更します。

# vi /etc/my.cnf

以下末尾に追加
character-set-server=utf8

[mysqldump]
default-character-set=bynary

[client]
default-character-set=utf8

データベースを初期化して起動。

# mysql_install_db
# service mysqld start
# chkconfig mysqld on

rootのパスワード設定。最初はEnter、次はパスワード入力、その後は全部Yキーでいけた。

# mysql_secure_installation

設定完了。MySQLが使えるようになりました。

# mysql -u root -p

PHP

標準のリポジトリだとバージョン5.3なので、RemiからPHP 5.4をインストールします。5.3ってあと2ヶ月でサポート終了だしね。

# yum --enablerepo=remi install php php-devel php-mysql php-gd php-pear php-mbstring

設定ファイルいじります。

# vi /etc/php.ini

session.use_trans_sid = 1
display_errors = On
error_reporting  =  E_ALL & ~E_NOTICE
mbstring.language = Japanese
upload_max_filesize = 10M
short_open_tag = On
date.timezone = "Asia/Tokyo"

PHPからsshを使いたいので(WordPressとかで)インストール。

# yum --enablerepo=remi install libssh2-devel
# pecl install ssh2-0.12

設定ファイルを作成してsshモジュールを追加する。

# vi /etc/php.d/ssh2.ini

extension=ssh2.so

Apache再起動で反映。

# service httpd restart

phpMyAdmin

MySQLをコマンドラインで操作するのメンドイのでphpMyAdminインストール。

# yum --enablerepo=remi install phpmyadmin

アクセス制限を付ける。ここでは.jpのみアクセス可。

# vi /etc/httpd/conf.d/phpMyAdmin.conf

<Directory /usr/share/phpMyAdmin/>
の中の
Allow from 127.0.0.1
の下に以下を追加
Allow from .jp

リンクファイルを作成してネット上から見えるようにする。

# ln -s /usr/share/phpMyAdmin /var/www/html/phpmyadmin

Apache再起動で反映。

# service httpd restart

これで以下からアクセスできるようになります。
http://www????.sakura.ne.jp/phpmyadmin/

以前はコマンドラインからちまちまとMySQLをいじってたけど、某ゲーム会社で仕事した時にphpMyAdminが使われていて、なんだ使っても良かったんだ、と納得して以来使ってます。

まあゲームはデータ量が膨大だし、GUIないと技術者以外触れないしね。勿論セキュリティ対策は色々してあった。

webサーバ(さくらのVPS設定3)

Apache 2.2をインストールします。今回はやらないけど、webサーバの世界では最近nginxが伸びてるみたいだね。

# yum install httpd

起動と自動起動。ただし一通りの設定が完了してから。

# service httpd start
# chkconfig httpd on

起動中に設定変更したら再起動が必要です。

# service httpd restart

ドメイン管理ユーザ

ドメインごとに管理するユーザを分けます。普通にユーザを作成すると自分のホームディレクトリより上の階層に行けてしまうので、chrootを使って行けないようにします。

グループ作成。

# groupadd sftpgroup

グループに所属するユーザにchrootを適用します。

# vi /etc/ssh/sshd_config

サブシステム変更
#Subsystem       sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp

グループと行ける範囲を末尾に追加
Match group sftpgroup
  ChrootDirectory ~
  ForceCommand internal-sftp

sshdを再起動します。SSHの設定が変わるので、ミスってたらサーバに接続できなくなります。要チェック!

# service sshd restart

あとはユーザを作成していけば /home/hoge/ がルートディレクトリになります。

ユーザ作成
# useradd -g sftpgroup hoge
# passwd hoge

ホームディレクトリの所有者をrootにする
# chown root:root /home/hoge
# chmod 755 /home/hoge

ディレクトリ作成とパーミッション変更
# mkdir /home/hoge/public_html
# chmod 777 /home/hoge/public_html

バーチャルホスト

1台のサーバで複数のドメインを運用したいので、バーチャルホストの設定をします。

# vi /etc/httpd/conf/httpd.conf

この行のコメントアウトを外す
NameVirtualHost *:80

ホスト設定を追加(1)
<VirtualHost *:80>
    ServerAdmin webmaster@www????.sakura.ne.jp
    DocumentRoot /var/www/html
    ServerName www????.sakura.ne.jp
    ErrorLog logs/error_log
    CustomLog logs/access_log common
</VirtualHost>

ホスト設定を追加(2)~(ドメインの数だけ追加する)
<VirtualHost *:80>
    ServerAdmin webmaster@hoge.com
    DocumentRoot /home/hoge/public_html
    ServerName hoge.com
    ServerAlias www.hoge.com
    ErrorLog logs/hoge.com-error_log
    CustomLog logs/hoge.com-access_log common
</VirtualHost>

ちなみに記述の通り、(1)にさくらから付与されたサブドメインを置いて、(2)以降に自前のドメイン群を置くようにしています。

別にさくらのサブドメイン使う必要は無いんだけど、IPアドレスや未設定のドメインでアクセスされた時に一番上のVirtualHostが参照されるので、念のため設置してます。別々のドメインで同じサイトが表示されるとSEO的にもまずいし。

公開前にサイトを確認する

DNSを向ける前にサイトを確認したいので、ユーザーディレクトリの設定をします。ユーザー名がhogeの場合、こんなチルダ付のURLで見れるようになります。
http://www????.sakura.ne.jp/~hoge/

# vi /etc/httpd/conf/httpd.conf

#UserDir disabled
UserDir public_html

以下のコメントアウトを外してOptionsの中身を見直す
<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews SymLinksIfOwnerMatch
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

SSL

OpenSSLは既に入っているので、mod_sslをインストールします。

# yum install mod_ssl

SSLを使用するドメインを追加します。

# vi /etc/httpd/conf.d/ssl.conf

以下を追加
<VirtualHost *:443>
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLInsecureRenegotiation on
    SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    ServerAdmin webmaster@hoge.com
    DocumentRoot /home/hoge/public_html
    ServerName hoge.com
    ServerAlias www.hoge.com
    ErrorLog logs/hoge.com-error_log
    CustomLog logs/hoge.com-access_log common
</VirtualHost>

SSLサーバ証明書(有料)が必要なんだけど、自分が使うだけなので無しで行きます。ブラウザが警告を出すけど無視してページ開けます。ほんとは良くないんだけどね。

gzipで圧縮

前に.htaccessでやっていた転送データをgzip圧縮する方法ですが、今回はこちらに書きます。これで転送量が減るね。

# vi /etc/httpd/conf/httpd.conf

以下を追加
<Location />
    SetOutputFilter DEFLATE
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
    Header append Vary User-Agent env=!dont-vary
</Location>

htmlファイルアップロード

普通はftpでアップロードするんだけど、セキュリティとか設定の手間とか考えてsftpを使うことにしました。sshの認証を使うのでサーバ側の設定は必要ないし。

FileZillaなどで接続方法をsftpにして、ドメイン管理ユーザのIDパスワードで接続できます。

データは以下のディレクトリに上げていきます。

/home/hoge/public_html/

その他

必要に応じて。

# vi /etc/httpd/conf/httpd.conf

ディフォルト文字コードの指定コメントアウト(文字化けする場合)
#AddDefaultCharset UTF-8

ログのIPをホスト名に変換(重くなるけど)
HostnameLookups On

しかしApacheの情報ぐぐると、平気で10年以上前のページが上位に出てきて凄いね。

ファイアウォール(さくらのVPS設定2)

サーバにファイアウォールを設定します。内容はさくらのサポート情報を参考に、というかほぼそのまま書いてます。

まずは攻撃対策のルールを記述します。

# iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

localhostとpingを許可します。

# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -p icmp -j ACCEPT

必要なポートを開放します。ポート番号はそれぞれhttp(80)、https(443)、pop3(110)、smtp(25)、submission(587)、ssh(22)です。

# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 587 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

許可済みのパケットのみ通します。

# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -P INPUT DROP
# iptables -P OUTPUT ACCEPT

記述したルールをファイルに保存します。再起動はしなくても反映されるっぽい?

# service iptables save

一応再起動
# service iptables restart

ちなみにルールを修正したい場合は以下のファイルを直接いじります。最初からここに記述していっても良いんだろうけど。

# vi /etc/sysconfig/iptables

設定の確認はこちら。

# iptables -L

さくらのVPSお試し期間中は、ここの設定に関係なくメール送れないけどね。

別サーバでの話だけど、imap許可してたら物凄い勢いでアクセスされてサーバ会社から警告が来て驚いた思い出。即閉じた。

スペックとユーザとパッケージ管理(さくらのVPS設定1)

今のサーバを借りてから3年経つので、乗り換えのためにさくらのVPS 2Gを借りました。スペックは以下のように変わっています。

プランさくらのVPS 512さくらのVPS 2G
CPU(仮想)Core2 Duo (2.4GHz) 2コアWestmere (2.4GHz) 3コア
メモリ1GB2GB
HDD20GB200GB
OSCentOS 5.5CentOS 6.5
リージョン大阪石狩

毎回サーバの設定に苦労するので、手順を書き出してみることにしました。いつもはローカルにメモしてるんだけどね。

sshの設定

まずは仮登録後に送られてくるメールからVPSコントロールパネルに入り、サーバを起動させます。次にリモートコンソールからログインしてrootのパスワードを変更します。

# passwd

rootで直接ログインできるのは危険なので、作業用アカウントを作成します。

ユーザーhoge作成
# useradd hoge

hogeのパスワード設定
# passwd hoge

hogeをwheelグループに入れる
# usermod -G wheel hoge

作業用アカウント(wheelグループ)以外ではroot権限を使えないように制限を付けます。

sudoできるユーザ
# visudo

この行を有効化
%wheel ALL=(ALL) ALL
suできるユーザ
# vi /etc/pam.d/su

この行を有効化
auth required /lib/security/$ISA/pam_wheel.so use_uid

rootで直接ログインできないようにします。

# vi /etc/ssh/sshd_config

yesをnoに変更する
PermitRootLogin no

再起動
# service sshd restart

最後にTCP wrapperでsshにログインできるホストを制限します。

拒否リスト
# vi /etc/hosts.deny

以下を追加
sshd : all
許可リスト
# vi /etc/hosts.allow

以下を追加
sshd : localhost
sshd : www????.sakura.ne.jp
sshd : .jp

これでサーバ自身と.jp以外の人はアクセスできなくなりました。ちゃんと自分のプロバイダに合致したホスト名を指定しないと繋がらなくなります。

ほんとは公開鍵を使ったほうが良いんだけどね。

ついでに日本語化。

# vi /etc/sysconfig/i18n

LANG="C"
を
LANG="ja_JP.UTF-8"
に変更

yumでRemiリポジトリを使う

標準のyumだと古いパッケージばかりなので、比較的新しいのがインストールできるRemiリポジトリを使用します。

CentOS6用
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# rpm -Uvh remi-release-6.rpm

Remiを指定してインストールする場合には以下のように記述します。

# yum --enablerepo=remi install (パッケージ名)

アップデートは新旧入り混じると面倒なので、Remiで入れたのは個別でやった方が良いのかな。

通常パッケージ全部アップデート
# yum update

Remiで入れたの個別アップデート
# yum --enablerepo=remi update (パッケージ名)

設定ミスが無いか必死にぐぐりながらいじってます(汗)

WordPressを簡単に高速化させてみる

まあWordPressに限らない方法なんだけどね。

PageSpeed InsightsというGoogle製のサイトの表示速度を調べてくれるサイトを知りました。何年も前からあったみたいだけど。
ともかく、ここにURLを入れたら速度が遅くなってる原因がわかります。便利だね。

このブログのTOPページを試してみたらモバイルが57/100、PCが67/100でした。スコア低いなあ。なので「修正が必要」と書かれている2つの対処法を試してみた。

圧縮を有効にする

これはサーバからブラウザへ転送するデータをGZIPで圧縮しろってことです。Apacheにmod_deflateなるものを入れる必要があるんだけど、うちの環境だと最初から入ってた。なのでネット情報を参考に.htaccessに以下を追加。

<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</IfModule>

GZIPに対応していないブラウザなどを除外してるね。

ブラウザのキャッシュを活用する

画像などに有効期限を付ければブラウザキャッシュが効くよということです。これも同じくApacheにmod_expiresが入っていたので、やはりネット情報を参考に.htaccessに追加。

<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault A1
ExpiresByType image/gif A604800
ExpiresByType image/jpeg A604800
ExpiresByType image/png A604800
ExpiresByType image/x-icon A604800
ExpiresByType text/css A604800
ExpiresByType text/javascript A604800
ExpiresByType application/x-javascript A604800
ExpiresByType application/x-shockwave-flash A604800
</ifModule>

A604800は有効期限をアクセスした時から604800秒(1週間)後にするって意味です。

結果

.htaccessに上の2つを記述しただけでモバイルが73/100、PCが86/100になりました。結構良いスコアになったね。

「修正を考慮」という所に他の対処法も載っていて、その中で「サーバーの応答時間を短縮する」というのが気になりました。サーバが古いので遅いのは仕方ないとして、多分これはWordPressが重いせいだな。

実はWordPressのプラグインでキャッシュ系を幾つか試してみたんだけど、うちの環境ではうまく動かなかった。そんな訳でWordPress以外でも使える手法のみになっちゃいました。

絵師100人展04に行く

eshi100-04毎年恒例の絵師100人展に行ってきました。昼くらいに入ったけど、そんなに混んでなかったよ。

今回のテーマは「かわいい」です。正直ネタ切れしたのかって心配になるテーマだけど、逆に縛りがない分、多種多様な絵を見ることができました。展示してあるのは大きいサイズなので、情報量の多い絵や景色が広がってる絵とか見応えがあって素晴らしいね。

ちなみに、ネットで「みんな同じに見える」的なコメントを見かけたけど、確かに俺も絵師の区別つかない絵が幾つかあったな(汗)

今回も図録を買ったので、のんびり見比べてみよう。

横浜で飲む

今日は横浜へ飲みに行きました。九州沖縄へ旅行に行った話を聞かせてもらったり、ビジネスの話をしたり。

途中で料理の皿が割れてびしゃーってなってしまったので、別の席に案内してもらいました。俺は見てただけなんだけど、持っただけで皿がパキッと真っ二つに割れたのはびっくりした。

意外と周りにコンサルティングビジネスやってる人が多いみたい。ちょっと興味はあるけど、大変そうだね。

ゴーストトリック クリア(ネタバレ)

ghosttrickゴースト トリッククリアしました。3年くらい前に買ったけど、ずっと積んでたんだよね。

前知識なしで始めたけど、幽霊になって物に乗り移ったり動かしたりして謎を解き明かしていくゲームなんだね。タイトルまんまだ。

システム

死者のタマシイになって、ピタゴラスイッチみたいに物の動きを連動させていくパズルは斬新だね。しかも「死の4分前」は時間制限とさらにタイミングがシビアになったりして、アクションゲームっぽくなるし。

何度も失敗してて何故だと思ってたら、かなり初期で動かし忘れがあったりと、なかなか大変でした。ヒントがたくさん出るから何とか解けたけどね。

ストーリー

最初は自分の事と自分を殺した犯人を一晩で調べる、というお話だったのに、5年前の殺人事件、10年前の人質事件、特捜が追う外国人のトリヒキ、脱獄の手伝い、潜水艦への潜入、宇宙から飛来した隕石の謎という、たった一晩でどんだけ事件が大きくなるんだよって感じで、先が気になりまくりでした。

ちょっと納得いかなかったのは、終盤で潜水艦が沈みだして絶体絶命、何とかジョード刑事と合流して潜水艦からリンネ刑事カノンを助けようというシーン。ここからどんな逆転劇が行われるんだと期待してたら、「過去にモドル」で10年前に行き、この事件の発端そのものを消し去ってしまったところ。その後10年に渡る全ての事件が消えちゃったよ……ええー

改変後の世界も人間関係はおおむね変わってなかったから良いけどね。

キャラクタ

ドット絵なのにアニメーションがスムーズで驚いた。3Dモデリングしたのをドットに落としてるらしい。手間かかってるなあ。カバネラ警部のマイケル・ジャクソンさながらのモーションが面白かった。

リンネ刑事死にすぎ。ちょっと目を離すとすぐ死ぬw ほとんどの主要キャラは一度は死んで生き返ってるとはいえ、ねえ。

ポメラニアンのミサイルが主人を守ろうと頑張る姿が可愛い。要所要所で出てくるネズミ、特にミサイル(魚雷?)の中で安全装置に抗うネズミが面白かった。そして終盤、主人公のシセルの正体が黒ネコだったことが判明。なんだここは動物パラダイスだったのか。

まとめ

逆転裁判のスタッフが関わっているだけあって、システムといいアニメーションといい、他にはない意欲的なゲームでした。

シナリオも全然先がわからず夢中でプレイしたね。楽しかったです。

これは続編もしくは同じシステムの別ゲームでも良いからやってみたいです。

温泉に入ってたら湯あたりした

「タダ券あるよ」と誘われたので、都内にある温泉に行ってきました。

郊外にある川沿いの温泉で、露天から外を見ると空しか見えない素晴らしい温泉でした。今回は見れなかったけど、天気が良ければ富士山も見えるんだとか。

ただ長く入りすぎてしまい、湯あたり(湯疲れ?)でダウン。頭ガンガン体フラフラでヤバかったです。1時間くらいグッタリしてたよ。

水分とりながら頭を冷やしてたら復活できました。でもこれ1人で来てたらヤバかっただろうな。平日で人も少なかったし。温泉なんて年に数回しか入らないから、まだ限界がわからんね。温泉内には時計も無いし。

その後は普通にご飯食べるくらいには回復したので良かったです。

気をつけないとね。