vagrant up でエラーが出るときに確認すること

デバッグログを出力して起動する

$ env VAGRANT_LOG=debug vagrant up

VirtualBoxのコンソールを出力して起動する

$ vi Vagrantfile

config.vm.provider :virtualbox do |vb|
  # Don't boot with headless mode
  vb.gui = true
...
end

今回起動しなかった原因

Vagrantfileのsynced_folderのパーミッションを変えて再起動したら、下記のエラーがでて起動しなくなった。

    Timed out while waiting for the machine to boot. This means that
    Vagrant was unable to communicate with the guest machine within
    the configured ("config.vm.boot_timeout" value) time period. This can
    mean a number of things.

    If you're using a custom box, make sure that networking is properly
    working and you're able to connect to the machine. It is a common
    problem that networking isn't setup properly in these boxes.
    Verify that authentication configurations are also setup properly,
    as well.

    If the box appears to be booting properly, you may want to increase
    the timeout ("config.vm.boot_timeout") value.

timeoutの設定変更したりしたが、起動せず。
GUIモードで、VirtualBoxのコンソール出力して起動したら、起動時にエラーが出ている。

/dev/VolGroup00/LogVol00: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY.
(i.e., without -a or -p options )
[FAILED]
*** An error occurred during the file system check.
*** Dropping you to a shell; the system will reboot
*** when you leave the shell.
Give root password for maintenance
(or type Control-D for normal startup):

fsckコマンドで修復する必要があるので、コマンドを調べて実行したら無事vagrantからも起動出来ました。

fsck -t ext3 /dev/VolGroup00/LogVol00

Vagrantのsaharaプラグインを使ってみる

Vagrantにはsaharaという、VMの状態をロールバックしたりできるプラグインがあります。
下記に、詳しく書いてあります。

saharaでVagrantの状態管理 – Qiita [キータ].

使ってみる

インストールは、vagrantコマンドでインストールしました。

$ vagrant plugin install sahara
$ vagrant plugin list

確認

$ vagrant plugin list
sahara (0.0.15)

saharaプラグインをインストールするとVirtualBoxに別のイメージが作られて、そこを使って状態を管理するようです。

Oracle_VM_VirtualBox_マネージャー-3-4

Vagrantで構築したCentOSで開発する メール送信テスト環境設定

メール送信のテストする為の環境構築した際にてこずったので、同じミスをしないようにブログに投稿します。

Vagrantについては、昨日書いたエントリーの通りとなります。

suusuke – blog – Vagrantで構築したCentOSで開発する.

目次

  1. Postfixインストール・設定
  2. Dovecotインストール・設定
  3. Hostから送受信テスト

Postfixインストール・設定

Postfixをインストールして、設定ファイルを変更します。
開発環境なので、メールが送れているかチェックしたいだけなので、全てのドメイン宛のメールをローカルの配送する用に設定します。

$ yum -y install postfix
$ cp /etc/postfix/{main.cf,main.cf.org}
$ vi /etc/postfix/main.cf

# 全てのメールを受け取る
inet_interfaces = all

# ローカル配送で不明なユーザを拒否しない
local_recipient_maps =

# Maildir形式として保存するディレクトリを /usr/local/mail/ の下にユーザー毎に作成する
mail_spool_directory = /usr/local/mail/

# ローカル配送で不明なユーザへのメールは maildev へ送る
luser_relay = maildev

# トランスポートマップを指定
transport_maps = hash:/etc/postfix/transport

トランスポートマップの設定

$ vi /etc/postfix/transport

# 全てローカルに配送
*       local:
$ postmap /etc/postfix/transport

設定反映

$ /sbin/service postfix reload

Maildirの場所ですが、通常であれば、~/Maildir/となるのですが、/home/ディレクトリをホストにマウントしており、何度メールを送ってもnot permittedになってしまい、配送に失敗していたため、変更しました。
ただ、Vagrantfileでマウントの設定でユーザーは root パーミッションは 777 にしているつもりなのですが、ここは今後の課題ですね。

Nov 30 19:50:20 localhost postfix/local[5922]: 7D5656F026C: to=<maildev@mail.vagrant-centos59_64.localdomain>, relay=loc
al, delay=0.17, delays=0.14/0/0/0.03, dsn=5.2.0, status=bounced (maildir delivery failed: create maildir file /home/mail
dev/Maildir/new/1385808620.V15I7c25M679327.vagrant-centos59_64: Operation not permitted)

配送先ユーザーmaildevは予め追加しておきます。

$ useradd maildev
$ passwd maildev

元々、sendmailもpostfix入っていないサーバーだったので、mtaの変更は必要ないですが、一応確認だけします。

$ /usr/sbin/alternatives --config mta

1 プログラムがあり 'mta' を提供します。

  選択       コマンド
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:

Dovecotインストール・設定

Dovecotをインストールし、設定します。
各プロトコルを使えるようにと、PostfixでMaildirのパスを変更しているのでそこを設定します。

$ yum -y install dovecot
$ cp /etc/{dovecot.conf,dovecot.conf.org}

protocols = imap imaps pop3 pop3s
mail_location = maildir:/usr/local/mail/%u

Dovecotは、本番環境に合わせて、1系をyumでそのままインストールしました。

Hostから受信テスト

telnetコマンドでメールを送ります。

$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.vagrant-centos59_64.localdomain ESMTP Postfix
helo localhost
250 mail.vagrant-centos59_64.localdomain
mail from: k.suke.suzuki@gmail.com
250 2.1.0 Ok
rcpt to: test@test.com
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
subject: test
てすとです。
.
250 2.0.0 Ok: queued as 6E27E6F026E
quit
221 2.0.0 Bye
Connection closed by foreign host.

HostにThunderbirdをインストール、アカウントを設定して受信確認できればOKです。
受信トレイ

参考サイト

全てのドメイン宛のメールを受信する – ngの日記.

追記1

Mailcatcher for Drupal and other PHP-applications – The simple version.

vagrant mail で検索してたら、MailCatcherという、ruby製のSMTPサーバーが有ることを知りました。
これを使うと、メールを送信した内容がWEBブラウザで簡単に確認できるようになるようです。
PHPの場合は、php.inisendmail_pathを変更するだけで使えるようになるようです。
※未検証

追記2

試してないけど、synced_folderの書き込めない件は、Vagrantfileの設定のグループを変更するれば出来そう。もしくは、dmode(ディレクトリのパーミッション?)は777になってましたが、fmode(ファイルのパーミッション?)が666なのでそこを変えても出来そうです。
※未検証

Vagrantで構築したCentOSで開発する

Vagrantで開発を始めて、ある程度知識も溜まってきたので備忘録代わりにブログに書きたいと思います。

環境

HOST Max OS X Lion
GEST CentOS 5.9(64bit)
Vagrant 1.3.5
Virtual Box 4.3.0

目次

  1. VirtualBox のインストール
  2. Vagrant1.3 のインストール
  3. box ファイルのインストール
  4. Vagrantfile の作成
  5. 仮想サーバを構築

Virtual Box のインストール

Downloads – Oracle VM VirtualBox.

上記からダウンロード、インストール。インストール時最新は、4.3.0。

Vagrant1.3 のインストール

Vagrant – Downloads.

上記からダウンロード、インストール。Rubyのgemコマンドでもインストールできるようです。インストール時最新は、1.3.5。

box ファイルのインストール

A list of base boxes for Vagrant – Vagrantbox.es.

イメージファイルを一から作るのは大変ですので、上記、Vagrantbox.esサイトからboxファイルを探して、インストールする方法が一番手軽です。ただ、他人が作ったイメージファイルなので、セキュリティがどうとかっていう事を聞いたことが有るので、そこは自己責任ですね。
会社のサーバーが古いのでそれに合わせて、イメージファイルを探して、インストールしました。

$ vagrant box add centos59_64 http://tag1consulting.com/files/centos-5.9-x86-64-minimal.box

Vagrantfile の作成

Vagrantfileはvagrantの設定ファイルになります。
$HOMEの下にvagrantというディレクトリと今回のサーバー用のディレクトリ(centos59_64)を作成して、その下で管理しています。

$ mkdir ~/vagrant
$ cd ~/vagrant
$ mkdir centos59_64
$ cd centos59_64

Vagrantfilevagrant initコマンドで作成し、変更していきます。

$ vagrant init
$ vi Vagrantfile

ちなみに、変更後のVagrantfileは以下の通りです。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "centos59_64"
  config.vm.network :private_network, ip: "192.168.33.10"

  config.vm.synced_folder "/Users/suusuke/vagrant/centos59_64/home/", "/home/", \
        create: true, owner: 'root', group: 'root', \
        mount_options: ['dmode=777,fmode=666']

   config.vm.provider :virtualbox do |vb|
     #vb.gui = true
  
     # Use VBoxManage to customize the VM. For example to change memory:
     vb.customize ["modifyvm", :id, "--memory", "1024"]
   end
end

Vagrantのプロ?は、ここでchefやshellを使って、プロビジョニングしていくようですが、まだそこまで出来ないので、最低限の設定を書いています。
一つだけポイントとして、vagrantにはsynced_folderという機能があり、仮想サーバーのディレクトリを、ホストにマウントすることができます。今回は、Vagrantfileのあるディレクトリに、homeディレクトリをマウントさせています。これは、WEBサイトを作成する際に、ApacheのVirtualHostで各ユーザーディレクトリの下を公開ディレクトリにして開発する為です。

仮想サーバーを構築

vagrant upコマンドで、仮想サーバーを立ち上げます。

$ vagrant up

あとは、sshでサーバーにログインして、環境を作成していきます。

$ root@192.168.33.10

Apache、PHP、MySQL、PostgreSQL、Postfix、Dovecot 等をインストールして、それぞれ設定しホストPCでホストの設定をすればWEBの開発環境の完成です。

$ vi /etc/hosts
192.168.33.10  vagrant.localhost
192.168.33.10  test.example.com
....

実際にプログラムは、synced_folderのお陰で、ホストPCで変更したものが即座に反映されます。
僕は、Eclipseを普段使っているので、workspaceを~/vagrang/centos59_64/homeにして、開発をしています。

あと、WEBプログラムでメールのテストの為に、PostfixとDevcotで設定したのですが、逆にsynced_folderの機能のせいで、半日くらいうまく行かなくて時間を使ってしまったので、そちらは後ほど書き留めたいと思います。

参考サイト

Vagrant で自分の PC に「作って、壊して、元に戻せる」サーバを作る – Shin x blog.

WordPressの管理画面のセキュリティを高めるプラグイン

自分のブログは最低限のセキュリティ対策はしているつもりでしたが、仕事で管理しているWordPressのサイトにバックドアが仕込まれていて、実害は無かったもののヒヤヒヤしたので、さらにセキュリティを高めるべくプラグインを導入しました。

Crazy Bone (狂骨)

WordPress › Crazy Bone « WordPress Plugins.

ログインが実行されたログ(IPやユーザー名等)の取得ができるプラグイン。
設定は特に無く、管理画面の[ユーザー]->[ログイン履歴]でログの確認ができる。
導入してみたら、大したアクセスのないこのブログでも、結構アタック来ててビックリしました。

ログイン履歴_‹_suusuke_-_blog_—_WordPress

Simple Login Lockdown

WordPress › Simple Login Lockdown « WordPress Plugins.

ログインするときのIDやパスワードの入力を間違えた場合に、ログインできなくすることができるプラグイン。
設定画面から、ログインチャレンジ回数、ログインできなくする時間を設定できる。
表示設定_‹_suusuke_-_blog_—_WordPress
実際に、指定したチャレンジ回数ログインに失敗すると、以下のようになって、ログインできなくなる。
Too_many_login_attemps

セキュリティに対して、認識が甘かったなと痛感した出来事でした。

Apache起動時のSSLパスフレーズを自動入力にする

Apache起動時にSSLが有効にしているとパスフレーズを対話形式で入力する必要がある。
通常起動する場合は問題ないが、VPSの都合でマシンの再起動された場合、Apacheは自動で起動するようにしているが、パスフレーズの入力が無いので、起動に失敗してWEBサーバーが止まってしまっている事が何回か有ったので、それを自動で入力するようにする。

仕組みとしては、

  1. パスフレーズを標準出力するシェルを作成
  2. パスフレーズの入力を対話形式から外部プログラムに変更

シェル(ppfilter.sh)の作成

[root@suusuke ~]# vi /etc/httpd/ppfilter.sh 
#!/bin/sh
echo "パスフレーズ"
[root@suusuke ~]# chmod 700 /etc/httpd/ppfilter.sh

パスフレーズの入力方法を変更(ssl.conf)

[root@suusuke ~]# vi /etc/httpd/conf.d/ssl.conf 
#SSLPassPhraseDialog  builtin
SSLPassPhraseDialog  exec:/etc/httpd/ppfilter.sh

さくらVPSでメールサーバー構築(Postfix+Dovecot2+ClamAV+SpamAssassin+Amavisd-new)

メールサーバーについて気になった事が有ったので、さくらVPS環境で、メールサーバー構築した際の備忘録です。

  • バーチャルドメインで運用を想定している為、MySQLを利用して、管理はPostfixAdminで行えるようにします。
  • 通信はTSLを利用します。
  • アンチウィルス、スパムフィルタを利用します。
メールサーバー Postfix 2.6.6
POP、IMAPサーバー Dovecot 2.0.9
アンチウィルスソフトウェア ClamAV 0.97
スパムフィルタソフトウェア SpamAssassin 3.3.1
メールサーバー、アンチウィルスソフトウェア、スパムフィルタソフトウェアのインターフェースソフトウェア Amavised-new 2.8.0
メールアカウント管理 PostfixAdmin 2.3.6

PostfixAdminのインストールと設定

PostfixAdmin からソースをダウンロードして、解凍後、公開ディレクトリにFTPなどでアップロードします。今回は公開ディレクトリを下記のような形で設定し、PostfixAdminを配置しました。

/home/webadmin/public_html ← ドキュメントルート 
/home/webadmin/public_html/postfixadmin 

PostfixAdminで使用するDB、Userの作成

データベースをpostfix、ユーザーをpostfixで作成しました。

create database postfix GRANT ALL PRIVILEGES ON *.* TO 'postfix'@'localhost' IDENTIFIED BY 'XXXXXXXX' WITH GRANT OPTION; 

PostfixAdminの設定

設定ファイルは、config.inc.phpですが、config.local.phpというファイルがある場合は、設定を上書きするので、config.local.phpを作成して、設定内容を記述します。

 
vi /home/webadmin/public_html/postfixadmin/config.local.php 

<?php $CONF['configured'] = true; 
$CONF['setup_password'] = 'changeme'; // ブラウザからアクセスした後に設定する 
$CONF['default_language'] = 'ja'; 
$CONF['database_type'] = 'mysqli'; 
$CONF['database_host'] = 'localhost'; 
$CONF['database_user'] = 'postfix'; 
$CONF['database_password'] = 'XXXXXXX'; 
$CONF['database_name'] = 'postfix'; 
$CONF['database_prefix'] = ''; 
$CONF['admin_email'] = 'postmaster@ドメイン名'; 
$CONF['encrypt'] = 'md5crypt'; // パスワードの暗号化方式 
$CONF['page_size'] = '100'; 
$CONF['domain_path'] = 'YES'; // メールボックス用に、ドメインごとにディレクトリを作成する /home/virtual/virtualdomain.com/ 
$CONF['aliases'] = '100'; 
$CONF['mailboxes'] = '100'; 
$CONF['maxquota'] = '100'; 
$CONF['quota'] = 'YES'; 
$CONF['backup'] = 'NO'; 
$CONF['sendmail'] = 'NO'; 
$CONF['fetchmail'] = 'NO'; 
$CONF['new_quota_table'] = 'YES'; // dovecotのバージョンが1.2以下の場合はNOにする。 
$CONF['user_footer_link'] = 'http://ドメイン名/postfixadmin/users/main.php'; 

// procmail使用時の設定 
// メールディレクトリ自動作成 
$CONF['mailbox_postcreation_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh'; 
// メールディレクトリ自動削除 
$CONF['mailbox_postdeletion_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh'; 
// ドメインディレクトリ自動削除 
$CONF['domain_postdeletion_script'] = 'sudo /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh'; 
?>

バーチャルドメインメールを保存しておくディレクトリ、ユーザーの作成

バーチャルドメインでは、メールボックスとUNIXユーザーは切り離されて、メールは指定したバーチャルドメイン用のメールボックスに配送されます。そのユーザーを作成します。

 #groupadd -g 5000 virtual #useradd -g 5000 -u 5000 virtual 

設定後、http://ドメイン/postfixadmin/setup.phpにアクセスします。

imap関数がないとWarningが出たので、

 
# yum install php-imap 

としてインストールしました。インストール後はapacheを再起動します。

 
# /sbin/service/httpd restart 

その後、http://ドメイン/postfixadmin/setup.phpにアクセスし、Warningが出ないことを確認したら、パスワードの設定をして、管理画面からドメイン、ユーザーを追加します。

セットアップが完了したら、セットアップ用のファイルを削除します。

 
# rm -f /home/webadmin/public_html/postfixadmin/setup.php 
# rm -f /home/webadmin/public_html/postfixadmin/motd* 

Postfixのインストールと設定

さくらVPSにははじめからPostfixがインストールされています。

インストール済みのPostfixが対応しているルックアップテーブルを表示して、MySQLに対応しているか確認します。

 
# postconf -m btree cidr environ hash ldap mysql nis pcre proxy regexp static unix 

mysqlと表示されているのでMySQLに対応していることが確認できます。

PostfixからMySQLへアクセスする為のファイルを作成します。

 
# vi /etc/postfix/mysql_virtual_alias_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = alias 
select_field = goto 
where_field = address 

# vi /etc/postfix/mysql_virtual_domains_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = domain 
select_field = domain 
where_field = domain 
additional_conditions = and active = '1' 

# vi /etc/postfix/mysql_virtual_mailbox_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = mailbox 
select_field = maildir 
where_field = username 

# vi /etc/postfix/mysql_virtual_mailbox_limit_maps.cf 

user = postfix 
password = XXXXXX 
hosts = localhost 
dbname = postfix 
table = mailbox 
select_field = quota 
where_field = username 
#additional_conditions = and active = '1' 

Postfixの設定ファイルを編集します。

設定ファイルを変更する場合は全て、オリジナルのバックアップをとってから行いました。

 
# cp /etc/postfix/{main.cf,main.cf.org} 
 
# vi /etc/postfix/main.cf 

#inet_interfaces = localhost #コメントアウト 
#inet_protocols = all #コメントアウト 
#mydestination = $myhostname, localhost.$mydomain, localhost #コメントアウト 

#最終行に追加 
myhostname = wwwXXXXX.sakura.ne.jp #さくらのホスト名 
inet_interfaces = all # 外部からのメールも受信する 
inet_protocols = ipv4 mydestination = $myhostname, localhost 
relay_domains = $mydestination 
home_mailbox = Maildir/ 
smtpd_banner = $myhostname ESMTP unknown 

# Virtual Domain w/MySQL 
local_transport = local 
virtual_transport = procmail # メールの配送はprocmail 

procmail_destination_recipient_limit = 1 
virtual_mailbox_base = /home/virtual 
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf 
virtual_alias_domains = $virtual_alias_maps 
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf 
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf 
virtual_minimum_uid = 5000 
virtual_uid_maps = static:5000 
virtual_gid_maps = static:5000 

maximal_backoff_time = 800s 
minimal_backoff_time = 100s 
bounce_queue_lifetime = 60m 
maximal_queue_lifetime = 60m 
message_size_limit = 20480000 
#virtual_mailbox_limit = 51200000 
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf 
virtual_mailbox_limit_override = yes 
virtual_overquota_bounce = yes 
virtual_mailbox_limit_inbox = yes 

smtpd_sasl_auth_enable = yes 
smtpd_sasl_type = dovecot 
smtpd_sasl_path = private/auth 
smtpd_sasl_local_domain = $myhostname 
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination 

# SpamAssasin 
# procmailと連携するようにする。 
mailbox_command = /usr/bin/procmail 
# End SpamAssasin 

# amavisd-new 
# amavisd-newと連携するように設定 
content_filter=smtp-amavis:[127.0.0.1]:10024 
# End amavisd-new 

新規ユーザーが追加されたらホームディレクトリに Mairdir/ を自動で作成されるようにする。

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

サブミッションポート587番ポートを利用する。

 
# cp /etc/postfix/{master.cf,master.cf.org} 
# vi /etc/postfix/master.cf 

#最終行に追加 
submission inet n - n - - smtpd 
# amavisd-new
smtp-amavis unix -    -    n    -    2  smtp
    -o smtp_data_done_timeout=1200
    -o smtp_send_xforward_command=yes
    -o disable_dns_lookups=yes
127.0.0.1:10025 inet n    -    n    -    -  smtpd
    -o content_filter=
    -o local_recipient_maps=
    -o relay_recipient_maps=
    -o smtpd_restriction_classes=
    -o smtpd_client_restrictions=
    -o smtpd_helo_restrictions=
    -o smtpd_sender_restrictions=
    -o smtpd_recipient_restrictions=permit_mynetworks,reject
    -o mynetworks=127.0.0.0/8
    -o strict_rfc821_envelopes=yes
    -o smtpd_error_sleep_time=0
    -o smtpd_soft_error_limit=1001
    -o smtpd_hard_error_limit=1000
# End amavisd-new

# procmail
procmail unix - n n - - pipe
  flags=R user=virtual argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc
# End procmail

最後に自動起動の設定をして終了です。

 
# /sbin/chkconfig postfix on 

dovecot2のインストールと設定

yumでインストールする。

 
# yum install dovecot dovecot-mysql 

dovecot2の設定ファイルは/etc/dovecot/dovecot.confですが、/etc/dovecot/conf.d/以下に.confファイルを作成すれば自動で読みこんでくれるので、00-base.confというファイルを作成し設定を行います。

 
# vi /etc/dovecot/conf.d/00-base.conf 
# debug
auth_debug_passwords = yes
auth_verbose = yes
auth_debug = yes

listen = *
disable_plaintext_auth = no
auth_mechanisms = plain login digest-md5 cram-md5

# mail dir
mail_location = maildir:/home/virtual/%d/%u
first_valid_uid = 5000
first_valid_gid = 5000
mail_plugins = quota

protocol imap {
  imap_client_workarounds = delay-newmail tb-extra-mailbox-sep
  mail_plugins = $mail_plugins imap_quota
}
protocol pop3 {
  pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-postfixadmin-mysql.conf
}
userdb {
  driver = sql
  args = /etc/dovecot/dovecot-postfixadmin-mysql.conf
}
service auth {
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
}
plugin {
  quota = maildir:User quota
}

次に、/etc/dovecot/conf.d/10-auth.confを編集します。

 
# cp /etc/dovecot/conf.d/{10-auth.conf,10-auth.conf.org} 
# vi /etc/dovecot/conf.d/10-auth.conf 

#auth_mechanisms = plain #コメントアウト 
#!include auth-system.conf.ext #コメントアウト 

次に、MySQLへの接続ファイルを作成します。

 
# vi /etc/dovecot/dovecot-postfixadmin-mysql.conf 
driver = mysql 
connect = host=/var/run/mysqld/mysqld.sock 
dbname=postfix 
user=postfix 
password=XXXXXX 
default_pass_scheme = MD5-CRYPT 
password_query = SELECT password FROM mailbox WHERE username = '%u' AND active = '1' 
user_query = SELECT concat('/home/virtual/', maildir) AS home, 5000 AS uid, 5000 AS gid FROM mailbox WHERE username = '%u' AND active = '1' 

次に、認証用ライブラリをインストールします。

 
# yum install cyrus-sasl-plain cyrus-sasl-md5 

最後自動起動の設定をして終了です。

 
# /sbin/chkconfig dovecot on 

ClamAVのインストールと設定

yumでインストール

# yum install clamd

バックアップを取って、設定(実行ユーザー(root)にする)

# cp /etc/{clamd.conf,clamd.conf.org} 
# vi /etc/clamd.conf

#User clam #コメントアウト

起動と自動起動設定

# /etc/init.d/clamd start
# chkconfig clamd on

ウイルス定義ファイル更新機能を有効化と、定義ファイルの更新

# sed -i 's/Example/#Example/g' /etc/freshclam.conf
# freshclam

ClamAVとPostfixの連携設定

# vi /etc/clamd.conf

#TCPSocket 3310 #コメントアウト

/etc/init.d/clamd restart

Amavised-newのインストールと設定

yumでインストール

# yum install amavisd-new

バックアップを取って、設定

# cp /etc/amavisd/{amavisd.conf,amavisd.conf.org} 
# vi /etc/amavisd/amavisd.conf

# COMMONLY ADJUSTED SETTINGS:
$undecipherable_subject_tag = ''; #←追加(パスワード付ZIPファイル受信時メール件名に「***UNCHECKED***」と付加されないようにする。)

@bypass_spam_checks_maps  = (1);  # controls running of anti-spam code #←コメントアウト解除(amavisd-newではスパムチェックは行なわないようにする。スパムチェックはprocmail経由でspamcコマンドで行なう)

$mydomain = 'wwwXXXXX.sakura.ne.jp';   # a convenient default for other settings #←コメントアウト解除してホスト名に変更する

#$QUARANTINEDIR = undef;      # -Q #←コメントアウト(ウィルスメールは隔離しない)

#$virus_admin               = undef; #←コメントアウト(ウィルス検知メールを管理者宛に通知しない)

### BLOCKED ANYWHERE
# qr'^UNDECIPHERABLE$',  # is or contains any undecipherable components
# qr'^\.(exe-ms|dll)$',                   # banned file(1) types, rudimentary #←コメントアウト(exeファイルを受信できるようにする)
# qr'^\.(exe|lha|cab|dll)$',              # banned file(1) types


# #   this entry; when running chrooted one may prefer socket "$MYHOME/clamd".
# ↓追加(/var/run/clamav/clamd.sockはソケット名変更)
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.sock"],
  qr/\bOK$/m, qr/\bFOUND$/m,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/m ],

起動と自動起動設定

# /etc/init.d/amavisd start
# chkconfig amavisd on

SpamAssassin設定

起動と自動起動設定

# /etc/init.d/spamassassin start
# chkconfig spamassassin on

バックアップを取って設定

# cp /etc/mail/spamassassin/{v310.pre,v310.pre.org}
# vi /etc/mail/spamassassin/v310.pre


loadplugin Mail::SpamAssassin::Plugin::TextCat #←コメントアウト解除

rootユーザーでSpamAssassin設定ファイル最新化スクリプト作成

# cd ~
# vi spamassassin-update
#!/bin/bash

# SpamAssassin設定ファイル最新版ダウンロード
cd /etc/mail/spamassassin
wget -qN http://www.flcl.org/~yoh/user_prefs

# 設定ファイル更新時のみSpamAssassin再起動
diff user_prefs user_prefs.org > /dev/null 2>&1
if [ $? -ne 0 ]; then
    cp user_prefs local.cf

    # スパム判断したメールを添付形式にしないように設定
    echo "report_safe 0" >> local.cf

    # スパム判断したメールの件名に「***SPAM***」を付加するように設定※受信メールサーバーがPOPの場合のみ
    echo "rewrite_header Subject ***SPAM***" >> local.cf

    # SpamAssassin再起動
    /etc/rc.d/init.d/spamassassin restart > /dev/null
fi
cp user_prefs user_prefs.org

実行権限追加

# chmod +x spamassassin-update

一度実行して、最新にする

# ./spamassassin-update

cronに登録する

# mv spamassassin-update /etc/cron.daily/

procmailの設定ファイルを新規作成する

# vi /etc/procmailrc
SHELL=/bin/bash
PATH=/usr/bin:/bin
DEFAULT=/home/virtual/$DOMAIN/$USER\@$DOMAIN/
LOCKFILE=/home/virtual/procmail.lock
LOGFILE=/home/virtual/procmail.log
#VERBOSE=ON

# SpamAssassin Spam Check
:0fw
|/usr/bin/spamc


:0
*^X-Spam-Flag: YES
$SPAM

ログの設定

# vi /etc/logrotate.d/procmail
/home/virtual/procmail.log {
    missingok
    nocreate
    notifempty
}

メールディレクトリの自動作成・削除

PostfixAdminを使ってアカウント追加・削除する際に、ディレクトリを自動で作成・削除するようにスクリプトを作成する。

メールボックス作成・削除スクリプト用ディレクトリ作成

# mkdir /usr/local/bin/postfixadmin

PostfixAdminに有るスクリプトをコピー

# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-domain-postdeletion.sh /usr/local/bin/postfixadmin
# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postcreation.sh /usr/local/bin/postfixadmin
# cp /home/webadmin/public_html/postfixadmin/ADDITIONS/postfixadmin-mailbox-postdeletion.sh /usr/local/bin/postfixadmin

削除したメールボックスを保存するディレクトリを作成

# mkdir /home/virtual/.deleted-maildirs
# chmod 0700 /home/virtual/.deleted-maildirs
# chown virtual:virtual /home/virtual/.deleted-maildirs

スクリプトの編集(メールボックス作成)

# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh
#basedir=/var/spool/maildirs #←コメントアウト
basedir=/home/virtual        #←追加
# ↓コメントアウト
#maildirmake "$maildir"
#if [ ! -d "$maildir" ]; then
#    echo "$0: maildirmake didn't produce a directory; bailing out."
#    exit 1
#fi

exit 0の前に追加

mkdir "$maildir"
if [ ! -d "$maildir" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}cur"
if [ ! -d "${maildir}cur" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}new"
if [ ! -d "${maildir}new" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

mkdir "${maildir}tmp"
if [ ! -d "${maildir}tmp" ]; then
    echo "$0: mkdir didn't produce a directory; bailing out."
    exit 1
fi

chown -R virtual:virtual "$maildir"
chmod -R 700 "$maildir"

スクリプトの編集(メールボックス削除)

# vi /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh
#basedir=/var/spool/maildirs
basedir=/home/virtual
#trashbase=/var/spool/deleted-maildirs
trashbase=/home/virtual/.deleted-maildirs
#subdir=`echo "$1" | sed 's/@.*//'`
subdir=$1

スクリプトの編集(ドメイン削除用)

# vi /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh
#basedir=/var/spool/maildirs
basedir=/home/virtual
#trashbase=/var/spool/deleted-maildirs
trashbase=/home/virtual/.deleted-maildirs

実行権限追加

# chmod 0700 /usr/local/bin/postfixadmin/postfixadmin*

apacheがsudo出来るように設定する

# visudo
Defaults    requiretty
Defaults:apache    !requiretty #←追加


root    ALL=(ALL)       ALL
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postcreation.sh #←追加
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-mailbox-postdeletion.sh #←追加
apache ALL=(ALL) NOPASSWD: /usr/local/bin/postfixadmin/postfixadmin-domain-postdeletion.sh #←追加

再起動して確認

/etc/init.d/postfix restart
/etc/init.d/dovecot restart
/etc/init.d/spamassassin restart
/etc/init.d/clamd restart
/etc/init.d/amavisd restart

TSLの設定追記…

Push Notification Push SSL Certificate 更新

Push Notification Push SSL Certificate の更新時期が迫ってきたので、更新の際の備忘録。

目次

  • Certificateの更新
  • 鍵の生成

Certificateの更新

  1. iOS Dev Center – Apple Developer にログインする。
  2. 対象のApp IDから「Settings」をクリックする。
    スクリーンショット_13_05_29_11_40-3
    スクリーンショット_13_05_29_11_42
  3. 「Create Certificate…」をクリックして(今回はリリース用Production)、CSR(証明書署名要求ファイル)をアップロードする。CSR(証明書署名要求ファイル)の作成方法は suusuke – blog – プロビジョニングファイル作成から実機転送手順 参照
    スクリーンショット_13_05_29_11_43
  4. アップロードすると、Certificateがダウンロードできるようになるので、ダウンロードしたaps_production.cerファイルをダブルクリックしてキーチェーンに登録する。
    スクリーンショット_13_05_29_15_31

鍵の生成

  1. キーチェーンを開き、登録した証明書を .p12形式でエクスポートする。
    スクリーンショット_13_06_05_16_10
    1. 右クリック→書き出す→フォーマットを「個人情報交換(.p12)」形式にして、保存する。ファイル名は「apns-pro-cert.p12」
      スクリーンショット_13_06_05_16_18
    2. パスワードは何でもOK、キーチェーンのアクセス許可のパスワード聞かれる場合はmacのrootのパスワード
      無題-3
  2. 1と同様の手順で、秘密鍵もエクスポートする。ファイル名は「apns-pro-key.p12」
    スクリーンショット_13_06_05_16_24-2
  3. pam形式に変換する。
    1.  
      iMac:Desktop user$ openssl pkcs12 -clcerts -nokeys -out apns-pro-cert.pem -in apns-pro-cert.p12 
      Enter Import Password: //←キーチェーンで入力したパスワード 
      MAC verified OK 
      iMac:Desktop user$ openssl pkcs12 -nocerts -out apns-pro-key.pem -in apns-pro-key.p12 
      Enter Import Password: //←キーチェーンで入力したパスワード 
      MAC verified OK 
      Enter PEM pass phrase: 
      Verifying - Enter PEM pass phrase: 
      iMac:Desktop user$ openssl rsa -in apns-pro-key.pem -out apns-pro-key-noenc.pem 
      Enter pass phrase for apns-pro-key.pem: //←key作成時に入力したパスフレーズ 
      writing RSA key 
      iMac:Desktop user$ cat apns-pro-cert.pem apns-pro-key-noenc.pem > apns-pro.pam
      
  4. 作成した「apns-pro-cert.pem」、「apns-pro.pam」をアップロードして更新

ドキュメント:https://developer.apple.com/jp/devcenter/ios/library/documentation/RemoteNotificationsPG.pdf

今回はサーバー側はPerlで作られているアプリだったので、Push Notificationを使ってみる – iOSアプリ開発トピック が参考になりました。