電子の密林を開拓する

2013年08月

AmazonLinux で メールサーバーを作る(その7)


PHPプログラマ側からの要請で PEAR と呼ばれるものをインストールします。
※PEARは、PHPのライブラリ集のようなもので…、本当の実運用サーバーであればPHPプログラム側で個別にインストールしてもらうべきですが、今回は完全な専用サーバーなので root としてインストールします。まぁねポリシー次第ではありますが…。


・PEAR のインストール
PEAR 自身のパッケージは、以下のものになります。
php-pear.noarch : PHP Extension and Application Repository framework
sudo yum install php-pear.noarch としてインストールします。

その後、pear search を実行すると、なぜか警告が表示されます。
$ pear search ~
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
yum のアップデートみたいなものでしょう…ということで、言われるとおりにアップデートします。
$ sudo pear channel-update pear.php.net
Updating channel "pear.php.net"
Update of Channel "pear.php.net" succeeded
特に問題なく終了します。


・PEARライブラリの検索とインストール
Mail_mimeDecode というPEARパッケージのインストールを指定されているので、これを検索してインストールします。
$ pear search Mail_mimeDecode
Retrieving data...0%
Matched packages, channel pear.php.net:
=======================================
Package Stable/(Latest) Local
Mail_mimeDecode 1.5.5 (stable) 1.5.5 Provides a class to decode mime messages.

$ sudo pear install Mail_mimeDecode
downloading Mail_mimeDecode-1.5.5.tgz ...
Starting to download Mail_mimeDecode-1.5.5.tgz (11,554 bytes)
.....done: 11,554 bytes
downloading Mail_Mime-1.8.8.tgz ...
Starting to download Mail_Mime-1.8.8.tgz (32,059 bytes)
...done: 32,059 bytes
install ok: channel://pear.php.net/Mail_Mime-1.8.8
install ok: channel://pear.php.net/Mail_mimeDecode-1.5.5
インストールできたら、念の為 Apache を再起動しておきます。
$ sudo apachectl -k restart
最後に動作確認。
$ php -r 'require "Mail/mimeDecode.php";'
特にエラーが出なければ正常です。


今回はここまで。

AmazonLinux で メールサーバーを作る(その6)


今回は、no-ip.biz のIPアドレス更新を自動化します。

もっとも、EIP(固定IP)を利用しているので、更新しなくても良いんですがね…。



・更新プロトコルの確認

IP更新のための更新プロトコルが分かれば、例えば curl コマンドなどで IP更新を自動化できます。

ところが、no-ip.biz ではザっと見たところ プロトコルを公開していないような…。



・IP更新ツールのインストール

no-ip.biz 専用の IPアドレス更新ツールが存在するようなので、コレをダウンロードしてインストールしてみます。

no-ip.biz 用 Linux DUF (IPアドレス更新ツール) - https://www.noip.com/downloads.php?page=linux

tar.gzを展開すると、以下のようなファイルが展開されます。

noip-2.1.9-1
|
|-- COPYING
|-- LEEME.PRIMERO
|-- LIESMICH.ERST.deutsch
|-- LISEZMOI.ENPREMIER
|-- Makefile
|-- README.FIRST
|-- README.FIRST-SWE
|-- README.FIRST.FRANCAIS
|-- README.FIRST.ITALIANO
|-- README.FIRST.JAPANESE
|-- README.FIRST.pt_BR
|-- README.FIRST_PT
|-- binaries
| |-- noip2-i686
| `-- noip2-x86_64
|-- debian.noip2.sh
|-- gentoo.noip2.sh
|-- mac.osx.startup
|-- noip2.c
`-- redhat.noip.sh
README.FIRSTを読むとビルド方法が書かれていますが…。AmazonLinuxには gccはインストールされていない(インストールするのもメンドクサイ)ので、中身含まれているビルド済みバイナリを利用することにします。

binaries にあるものを /usr/local/bin に入れて、その中の 32bit 版の symlink を用意します(OSかせ32bitなので)。
$ cd  no-ip.duf/noip-2.1.9-1/binaries/
$ sudo cp noip2-* /usr/local/sbin/noip-2.1.9-1/

$ cd /usr/local/sbin
$ ls
noip-2.1.9-1
$ sudo ln -s noip-2.1.9-1/noip2-i686 noip2

$ cd
次に、設定ファイルが必要みたいなので、作成します。
$ sudo /usr/local/sbin/noip2 -C

Auto configuration for Linux client of no-ip.com.

Please enter the login/email string for no-ip.com *****
Please enter the password for user '*****' ***************

Only one host [~.no-ip.biz] is registered to this account.
It will be used.
Please enter an update interval:[30] 120
Do you wish to run something at successful update?[N] (y/N) N

New configuration file '/usr/local/etc/no-ip2.conf' created
EIP(固定IP)を利用しているので、そんなに頻繁にDDNS用IPアドレスを更新する必要は無いので、ここでは 120分の更新間隔を指定しておきます。
$ sudo /usr/local/sbin/noip2
$ sudo /usr/local/sbin/noip2
$ One noip2 process is already active,
and the multiple instance flag (-M) is not set.

$ ps auxwww | grep noip2
nobody 4493 0.0 0.1 2280 808 ? Ss 20:31 0:00 noip2
ec2-user 4504 0.0 0.0 2484 512 pts/1 S+ 20:35 0:00 grep noip2
デーモンとして起動するようですね…。


添付されていた README.FIRST に従って、以下のようなバッチを作成し、/etc/rc.d/init.d/noip2
 として配備します。
#!/bin/sh

# chkconfig: - 98 02
# description: noip2 DDNS update service ... see http://no-ip.biz

source /etc/rc.d/init.d/functions

EXEPATH=/usr/local/sbin

case "$1" in
start)
echo "Starting noip2."
${EXEPATH}/noip2
echo -en '\n'
;;
stop)
echo -n "Shutting down noip2."
killproc ${EXEPATH}/noip2
echo -en '\n'
;;
restart)
echo -n "Shutting down noip2."
killproc ${EXEPATH}/noip2
echo -en '\n'
sleep 5
echo "Starting noip2."
${EXEPATH}/noip2
echo -en '\n'
;;
status)
${EXEPATH}/noip2 -S
echo -en '\n'
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit 0
作成したら、chkconfig の支配下に追加し、自動起動するようにしておきます。
$ sudo chmod og=rx /etc/rc.d/init.d/noip2

$ sudo chkconfig --add noip2

$ chkconfig --list noip2
noip2 0:off 1:off 2:off 3:off 4:off 5:off 6:off

$ sudo chkconfig noip2 on

$ chkconfig --list noip2
noip2 0:off 1:off 2:on 3:on 4:on 5:on 6:off
バッチリ設定出来たので、OS(EC2インスタンス)を再起動してみて 自動起動出来ていることを確認します。
$ sudo reboot

~再起動完了後~


$ sudo service noip2 status
1 noip2 process active.

Process 1493, started as noip2, (version 2.1.9)
Using configuration from /usr/local/etc/no-ip2.conf
Last IP Address set **.**.**.**
Account *****
configured for:
host ~.no-ip.biz
Updating every 120 minutes via /dev/eth0 with NAT enabled.

期待通りに動作しているようです。


今回はここまで。




AmazonLinux で メールサーバーを作る(その4)

今回は微調整。


・Apache 用 document root のパーミッション
Apache 用のドキュメントルートにファイルを配備する時、配備するユーザ(dev-user:dev-user) が読み書きでき、Apache (apache:apache) は読み込みのみできるようにしたい。それ以外(others)は読み書きできないようにするのが理想。
cd /var/www/htdocs
sudo chmod u=rwx,g=rxs,o= .
sudo chown dev-user:apache .
ディレクトリに対して chmod g+s とすると、そのディレクトリにファイルやディレクトリが作成された時に、そのグループが引き継がれるらしいです。ただし、権限ビットは引き継がれない模様…。
※もっと柔軟な引継ぎ設定が出来ると良いのだけれど…。

これで、(一応)dev-user が /var/www/htdocs/ にファイルやディレクトリを作成しても、Apache が読み込みできようになります。
Others が読み込みできてしまうのは、dev-user 自身で chmod og= * …と してもらう必要がありますが。

もうちょっとウマイ方法を考えたい…けれども、今はコレでヨシとしておきます。



・dev-user のパスワード設定
dev-user というLinux アカウントを作成していますが、パスワードが何だったか忘れた(というか設定した記憶が無い)ので、再設定しておきます。
$ sudo passwd  dev-user 


・phpからメール送信
phpからメール送信できるように設定してみます。
以下のような php ファイルを mail.php という名前で Apache のドキュメントルートに配備します。
<?php
mb_send_mail( 'abcdefg@~.no-ip.biz', 'SUBJECT', 'MESSAGE BODY' );
echo 'Sent a mail.';
まずはコマンドラインで実行…。
$ php -f mail.php
PHP Fatal error:  Call to undefined function mb_send_mail() in /var/www/~/mail.php on line 2
何故…。

しかし、この手のエラーには もう慣れました(^^; AmazonLinux(きっと、基本はCentOS)は 便利な機能は デフォルトではインストールされていないのでしょう。
/etc/php.ini を見る限り、「sendmail_path = /usr/sbin/sendmail -t -i 」という設定記述があるため、メール部分の問題ではないと思われます。
そうなると、mb~ のマルチバイト文字用関数群の設定と思われますが…。
やはり /etc/php.ini 側の mb~ 系の設定記述は(コメントアウトされているものの)存在します。
…ということは、yum でインストールされるパッケージが足りないと考えられます。

yum search mbstring とすると、以下のようなモジュールが見つかります。
php-mbstring.i686 : A module for PHP applications which need multi-byte string handling
これを sudo yum install php-mbstring.i686 としてインストールしてから、再度 mail.php を実行してみます。
$ php -f mail.php
Sent a mail.

$ ls -la ~/maildir/new
total 12
drwx------ 2 dev-user dev-user 4096 Aug  7 23:31 .
drwx------ 5 dev-user dev-user 4096 Aug  6 18:55 ..
-rw------- 1 dev-user dev-user  637 Aug  7 23:31 1375885875.Vca01I20b22M211522.ip-10-150-161-211
バッチリ送られました。


今回はここまで。

AmazonLinux で メールサーバーを作る(その4)

今回は MySQL を設定します。
MySQL(含むserver)のインストールは 第一回 で完了している前提です。




・デーモン起動の設定


Apacheと同じく mysqld も自動起動設定されていないようです。
以下のようにして自動起動設定を行います。
$ chkconfig | grep mysql
mysqld          0:off   1:off   2:off   3:off   4:off   5:off   6:off

$ sudo chkconfig mysqld on

$ chkconfig --list mysqld
mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
chkconfig で設定しても、次回のOS起動時に自動起動設定されるだけなので、今すぐmysqlを起動させたいのであれば サーバーOSを再起動する必要があります。あるいは mysqld 自体を手動起動しても良いです。
ここでは手動で起動させます。
$ sudo service mysqld status
mysqld is stopped

$ sudo service mysqld start
Initializing MySQL database: Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h ip-10-150-161-211 password 'new-password'

Alternatively you can run:
/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /usr/bin/mysqlbug script!

[ OK ]
Starting mysqld: [ OK ]
$
起動は成功するようですが、初期設定とパスワード設定を行え…と警告されていますね。

「support-files/mysql.server を所定の位置にコピーせよ」…というのは、どうやら /etc/init.d/mysql のバッチのことらしいです。これは service コマンド経由で呼び出すものと等価なハズで…起動は成功しているということは コピーそのものは(yumコマンドが?)完了しているということみたいです。

…ということは、残りのパスワード設定(と、不要なテーブルやアカウントの削除)を実施する必要があるようですが…。恐らく、 /usr/bin/mysql_secure_installation を実行すれば代行してくれるものと思われます。
では、さっそく実行してみましょう。

$ sudo /usr/bin/mysql_secure_installation




NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] Y
New password:
Re-enter new password:

Password updated successfully!
Reloading privilege tables..
... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
Y
... Success!

By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
... Success!

Cleaning up...



All done! If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!


$
いくつか質問されますが、全部 Yes ですね…。root パスワードは、インストール直後はカラッポらしいので、適切なものを再設定させます。
念の為、この状態で mysql をstop -> start させてみます。
$ sudo service mysqld stop
Stopping mysqld: [ OK ]

$ sudo service mysqld start
Starting mysqld: [ OK ]
特に警告は表示されないのでOKでしょう。




・DBアカウントの作成

次に、DB利用者(PHPプログラマと、そのプログラム)に開放するアカウントとDB領域を作成します。
作成するのはMLサービスらしいので、アカウント名、DB領域名ともに mlservice としておきます。
mysql> create database mlservice;
Query OK, 1 row affected (0.00 sec)

mysql> grant all privileges on mlservice.*
to mlservice@localhost
identified by 'パスワード';
DB接続用アカウントは、権限別に「運用/管理用」「WEB用」「crontabバッチ用」と分離したいところですが、初心者向けのものなので1つだけにしておきます。実サービスで使われるDBではないので…(^^;

アカウント設定が出来たら、利用可能になっているかどうか確認しておきます。
$ mysql -u mlservice -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mlservice |
+--------------------+
2 rows in set (0.00 sec)

mysql> use mlservice
Database changed

mysql> show tables;
Empty set (0.00 sec)

mysql> create table test ( x INT );
Query OK, 0 rows affected (0.07 sec)

mysql> show tables;
+---------------------+
| Tables_in_mlservice |
+---------------------+
| test |
+---------------------+
1 row in set (0.00 sec)

mysql> drop table test;
Query OK, 0 rows affected (0.02 sec)

mysql> exit
Bye
とりあえず動作はするので、これでOKと言うことにしておきます。



・PHPからのMySQL接続
MySQLはPHPから利用されることが分かっているので、Apache mod_php と php-cli の両方から接続可能になっているかどうか、確認しておきます。

Apache の document root に以下のようなファイルを作成します。ここでは pdo.php とか名前を付けておきます。
<?
$DBhost = 'localhost';
$DBregion = 'mlservice';
$DBuser = 'mlservice';
$DBpassword = 'パスワード';

$pdo = new PDO( "mysql:host=${DBhost};dbname=${DBregion}", $DBuser, $DBpassword );

$statement = $pdo->query( "show grants' );
$rows = $statement->fetchAll( PDO::FETCH_ASSOC );

var_dump( $rows );

// END of FILE //
作成したら、php-cli で実行してみます。しかし「PHP Fatal error:  Class 'PDO' not found in /var/www/~/pdo.php on line 7」とかエラーが出て、動作しません。なぜだ…(x_x;

「もしかして、何か足りない? 」と思いつつ yum list installed | grep -i pdo を実行してみると、やはりそれらしいモジュールはありません。きっと、pdo と名前が付くものがあるのでしょう。
yum search all php mysql pdo として検索してみると、以下のようなものが見つかります。
php-pdo.i686 : A database access abstraction module for PHP applications
php-mysql.i686 : A module for PHP applications that use MySQL databases
php-mysqlnd.i686 : A module for PHP applications that use MySQL databases
php-mysql と php-mysqlnd と、どちらも DB接続ドライバーで nd の方が NativeDriver という名前で より高速なものらしいので、ソチラを使うことにします。
sudo yum install php-pdo.i686 php-mysqlnd.i686 としてインストールします。

インストール後に 先ほどの pdo.php を再実行すると…。
$ php -f pdo.php
array(2) {
[0]=>
array(1) {
["Grants for mlservice@localhost"]=>
string(112) "GRANT USAGE ON *.* TO 'mlservice'@'localhost' IDENTIFIED BY PASSWORD 'パスワードハッシュ'"
}
[1]=>
array(1) {
["Grants for mlservice@localhost"]=>
string(64) "GRANT ALL PRIVILEGES ON `mlservice`.* TO 'mlservice'@'localhost'"
}
}
それらしい結果が表示されました。

続けて Apache mod_php 側で動作するかどうか確認してみると…。
$curl 'http://~.no-ip.biz/pdo.php'
Fatal error: Class 'PDO' not found in /var/www/~/pdo.php on line 7
先ほどと同じエラーが発生しています。なぜ???
「ああ」と思い直して、Apache を再起動して再度挑戦すると、ウマク表示されました。
$ sudo apachectl -k restart

$ curl 'http://~.no-ip.biz/pdo.php'
array(2) {
[0]=>
array(1) {
["Grants for mlservice@localhost"]=>
string(112) "GRANT USAGE ON *.* TO 'mlservice'@'localhost' IDENTIFIED BY PASSWORD 'パスワードハッシュ'"
}
[1]=>
array(1) {
["Grants for mlservice@localhost"]=>
string(64) "GRANT ALL PRIVILEGES ON `mlservice`.* TO 'mlservice'@'localhost'"
}
}
yum コマンドは、起動中のデーモンに依存関係のあるモジュールをインストールしても、そのデーモンを再起動したりはしてくれないのですね…(^^;


PDO を介して MySQL にもアクセスできるようになったので、これで php->MySQL の接続設定は完了です。



AmazonLinux で メールサーバーを作る(その3)

今回は Postfix を設定し、virtualhost としてメールを受信するようにします。


・Postfix の設定
Postifx自身は既に yum でインストール済みなので、その設定ファイルを確認します。
/etc/postfix/main.cf ですね…。

Postfix が待ち受けするIPアドレス、あるいは名前を決定する必要があるのですが…。
以下のような理由で、
  • DynamicDNSを使用しており、今後 DDNSサービスを乗り換えるかもしれない(のでドメインを固定したくない)
  • virtualdomain に対応させるつもりなので、複数ドメインに対応させたい(かもしれない)
  • EIPを付け替える可能性があるので、IPアドレスでの指定は困難
…というわけで、IPアドレスや名前を特定せず、/etc/postfix/main.cf には以下のように設定します。
inet_protocols = all
※ここでIPアドレス(あるいは名前を指定しておかないと、指定されていないIPアドレスでPostfixが待ち受けしなくなります。外部から接続できなくなったりして、とても困るので忘れないように設定してください。

※mydestination に virtualdomain である「~.no-ip.biz」を追記しておく必要がある…のかと思いましたが、特に記述しておかなくても virtualdomain 宛のメイルが受信できるようですね。後述する virtual ファイルの設定を見て、受け入れ可能ドメインを決定しているのかと思われます。


他には……メールを受信するハズのLinuxアカウント側で .forward ファイルによる maildir とコマンド制御が使いたいので、以下のように/etc/postfix/main.cf へ追記します。
#allow_mail_to...
allow_mail_to_commands = alias,forward,include
allow_mail_to_files = alias,forward,include

ついでに、セキュリティ設定として、SMTPのVRFYコマンド等を禁止しておきます。
#for security
disable_vrfy_command = yes
これで、VRFY コマンドによる「指定されたメールアドレス(の受信者)が存在するか」という問い合わせが出来なくなります。



・virtualhost の設定
PHPプログラムで作成したいのはMLサービスで、任意のアカウントをPHP側で利用したいらしいです。
つまり、今回のEC2インスタンス割り当てられる ~.no-ip.biz というドメイン宛のメールは、特定のLinuxアカウント上で用意されるPHPプログラムで受信したいということになります。

postfix の virtualhost 設定を利用して、*@~.no-ip.biz 宛のメールを すべて 1つのlinux アカウント(今回は dev-user)に配送するように設定します。
/etc/postfix/main.cf の末尾あたりに、以下のように追記します。
#virtualdomians
virtual_maps = hash:/etc/postfix/virtual
追記出来たら、次に /etc/postfix/virtual というファイルを作成し、以下のような記述を追加します。
~.no-ip.biz          sub-domain
@~.no-ip.biz dev-user
一行目で ~.no-ip.biz が virtualdomain として扱われることを宣言し、二行目で ~.no-ip.biz ドメイン宛のすべてのメールを dev-user (linuxアカウント)に配送することを指定します。ファイルを作成したら、postmapコマンドを利用して virtualdomain 設定を postfix が読める形式に変換しておきます。
sudo postmap virtual
これを忘れると Postfix がSMTPで操作できなくなって意味不明になるので注意してください。

postmap を実行したら、Postfix を restart するか reload  しておきます。
$ sudo service postfix reload
Reloading postfix: [ OK ]


・セキュリティの確認
念の為、代表的なセキュリティ問題である「オープンリレイ」状態になっていないかどうか確認しておきます。
実験は、EC2インスタンスではなく、外部のサーバから実施してください。
outerPC$ telnet ~.no-ip.biz 25
Trying **.**.**.**...
Connected to ~.no-ip.biz.
Escape character is '^]'.
220 ip-**-**-**-**.localdomain ESMTP Postfix
HELO localhost.localdomain
250 ip-**-**-**-**.localdomain
RCPT TO: abc@example.com
503 5.5.1 Error: need MAIL command
MAIL FROM: abc@example.com
250 2.1.0 Ok
RCPT TO: abc@example.com
554 5.7.1 <abc@example.com>: Relay access denied

VRFY abc@example.com
502 5.5.1 VRFY command is disabled
少なくともオープンリレイ状態にはなっておらず、VRFYコマンドも拒否されているので、OKと言うことにしておきます。



・受信側の設定
..forward ファイルを用意して、すべてのメールを maildir 形式で保存するようにします。
ex2-user$ sudo su - dev-user

dev-user$ mkdir ~/maildir
dev-user$ cd =/maildir
dev-user$ mkdir new cur tmp
dev-user$ chmod -R u=rwx,og= .

dev-user$ cd ~/
dev-user$ echo '~/maildir/' > .forward
dev-user$ chmod og= .forward

dev-user$ exit
これで、dev-user 宛に送られたメイル(のすべて?)が maildir に保存されるようになります。


・実験
mail送信しようとしましたが…いつも使っているmailコマンドがインストールされてしません。
yum でインストールします。
sudo yum install mailx
パッケージ名末尾の x って何だろう…とか思いますが、あまり気にしないことにします。


インストールできたら、送信実験をします。
echo 'TEST!' | mail -s TEST-TITLE abcdefg@~.no-ip.biz
まず /var/log/maillog を確認してみます。
Aug  6 19:08:13 ip-10-150-161-211 postfix/pickup[1811]: 3A10C2099E: uid=0 from=<root>
Aug 6 19:08:13 ip-10-150-161-211 postfix/cleanup[1988]: 3A10C2099E: message-id=<20130806100813.3A10C2099E@ip-10-150-161-211.localdomain>
Aug 6 19:08:13 ip-10-150-161-211 postfix/qmgr[1812]: 3A10C2099E: from=<root@ip-10-150-161-211.localdomain>, size=486, nrcpt=1 (queue active)
Aug 6 19:08:13 ip-10-150-161-211 postfix/local[1990]: 3A10C2099E: to=<dev-user@ip-10-150-161-211.localdomain>, orig_to=<abcdefg@~.no-ip.biz>, relay=local, delay=0.07, delays=0.05/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to maildir)
Aug 6 19:08:13 ip-10-150-161-211 postfix/qmgr[1812]: 3A10C2099E: removed
キチンと配送されていますね。dev-user 側のmaildir ディレクトリも確認してみましょう。
dev-user$ cd maildir/new/
dev-user$ ls -la
total 16
drwx------ 2 dev-user dev-user 4096 Aug 6 19:08 .
drwx------ 5 dev-user dev-user 4096 Aug 6 18:55 ..
-rw------- 1 dev-user dev-user 622 Aug 6 19:08 1375783693.Vca01I2099dM273460.ip-10-150-161-211
こちらにもキチンとファイルが来ていることが分かります。

次に dev-user の ~/.forward を書き換えて プログラムに渡すようにしてみます。

dev-user$ cat .forward
| "cat - > /home/dev-user/mail.txt"
この状態で *@~.no-ip.biz にメールを送ると dev-user のホームディレクトリに mail.txt というファイルが作成され、そこにメールの中身が書き出されます。




Postfix の設定は以上で完了の予定。
必要であれば、もっとセキュリティをギチギチに固めてください。
どんなセキュリティ設定があるのか分かりませんが…。











このページのトップヘ