メールアドレス毎にメールサーバを分ける

とある事情からメールアドレス毎にメールサーバを分ける事になったので、その時のメモ。

MTA が postfix の場合です。

transport にアドレスと送信先をセットするだけです。

ドメイン名を example.com で説明すると。。。

example.com を受信するように設定したメールサーバを 2 台作成します。
mail1.example.com(192.168.0.1), mail2.example.com(192.168.0.2) とします。
MX は mail1.example.com を設定しておき、example.com 宛てのメールは
mail1.example.com で一旦全て受けるようにしておきます。

メールアドレスと送信先メールサーバは以下とします。

  • user1@example.com は mail1.example.com で受信
  • user2@example.com は mail2.example.com で受信

mail1.example.com の transport

user2@example.com smtp:[192.168.0.2]

mail2.example.com の transport

user1@example.com smtp:[192.168.0.1]

アドレスを追加する場合はどっちのサーバで受信するかを指定しないといけないのでメンドイです。 😥

cron.daily の WARNING

cron.daily の実行時に警告が出ているらしく、以下のようなメールが来ました。

/etc/cron.daily/logrotate:
 
WARNING 'action' not defined in 'php-url-fopen'. Using default value
WARNING 'action' not defined in 'lighttpd-auth'. Using default value
WARNING 'action' not defined in 'lighttpd-fastcgi'. Using default value

最初原因がさっぱりわかりませんでしたが、ちょうど最近 fail2ban をインストールしたサーバだったのでもしかしたら?と jail.conf を見てみました。

すると、php-url-fopen, lighttpd-auth, lighttpd-fastcgi のところに action の定義がありませんでした。 :mrgreen:

この3つは利用していないのですが、警告が出ちゃうみたいですね。

それぞれの箇所に以下の action を追加して fail2ban を再起動したところ警告が出なくなりました。 🙂

action  = sendmail[name=Postfix, dest=you@example.com]

vsftpd コマンド制限

ftp の一部のコマンドを使えないようにする設定のメモです。

ディレクトリ削除コマンド rmdir を使えなくしてみます。

まずは、コマンド一覧と rmdir が使える状態である事を確認します。

ftp> help
Commands may be abbreviated.  Commands are:
 
!               cr              mdir            proxy           send
$               delete          mget            sendport        site
account         debug           mkdir           put             size
append          dir             mls             pwd             status
ascii           disconnect      mode            quit            struct
bell            form            modtime         quote           system
binary          get             mput            recv            sunique
bye             glob            newer           reget           tenex
case            hash            nmap            rstatus         trace
ccc             help            nlist           rhelp           type
cd              idle            ntrans          rename          user
cdup            image           open            reset           umask
chmod           lcd             passive         restart         verbose
clear           ls              private         rmdir           ?
close           macdef          prompt          runique
cprotect        mdelete         protect         safe
(rmdir がありますね)
ftp> mkdir testdir1
257 "/testdir1" created
ftp> dir
227 Entering Passive Mode (127,0,0,1,234,141)
150 Here comes the directory listing.
drwxrwsr-x    2 14       50           4096 Sep 06 11:55 testdir1
226 Directory send OK.
ftp> rmdir testdir1
250 Remove directory operation successful.
ftp> dir
227 Entering Passive Mode (127,0,0,1,234,153)
150 Here comes the directory listing.
226 Directory send OK.
ftp>
(rmdir コマンドが実行できます)

次に vsftpd.conf に cmds_allowed を追加します。
version 2.1 からは cmds_denied が使えるみたいです。

cmds_allowed=ABOR,ACCT,ALLO,APPE,CDUP,CWD,DELE,HELP,LIST,MKD,NLLST,NOOP,MODE,PASV,PORT,PWD,QUIT,REIN,REST,RETR,RNFR,RNTO,SITE,SMNT,STAT,STOR,STOU,STRU,SYST,TYPE,LPRT,LPSV,ADAT,AUTH,CCC,CONF,ENC,MIC,PBSZ,FEAT,OPTS,EPRT,EPSV,LANG,MDTM,MLSD,MLST,SIZE

こんなに要らない? 🙂

vsftpd.conf を変更したので vsftpd を再起動します。

root# service vsftpd restart

rmdir が使えなくなった事を確認します。

ftp> mkdir testdir2
257 "/testdir2" created
ftp> dir
227 Entering Passive Mode (127,0,0,1,234,190)
150 Here comes the directory listing.
drwxrwsr-x    2 14       50           4096 Sep 06 12:25 testdir2
226 Directory send OK.
ftp> rmdir testdir2
550 Permission denied.
ftp> dir
227 Entering Passive Mode (127,0,0,1,234,120)
150 Here comes the directory listing.
drwxrwsr-x    2 14       50           4096 Sep 06 12:25 testdir2
226 Directory send OK.
(rmdir コマンドを実行しようとすると Permission denied. になりました)

コマンド一覧からは rmdir が消えないみたいですね :mrgreen:

ftp> help
Commands may be abbreviated.  Commands are:
 
!               cr              mdir            proxy           send
$               delete          mget            sendport        site
account         debug           mkdir           put             size
append          dir             mls             pwd             status
ascii           disconnect      mode            quit            struct
bell            form            modtime         quote           system
binary          get             mput            recv            sunique
bye             glob            newer           reget           tenex
case            hash            nmap            rstatus         trace
ccc             help            nlist           rhelp           type
cd              idle            ntrans          rename          user
cdup            image           open            reset           umask
chmod           lcd             passive         restart         verbose
clear           ls              private         rmdir           ?
close           macdef          prompt          runique
cprotect        mdelete         protect         safe

今回はシステム全体で rmdir を使えなくしちゃいましたが、ユーザ毎に個別に設定する事もできるみたいです。