参考

読んでみるべくリンク

install

Debianだとこれだけ aptitude install postfix-pgsql sasl2-bin libsasl2-modules postgresql libpam-pgsql dovecot-pgsql dovecot-imapd dovecot-pop3d

CentOS

dovecot & postgresql support

yum install dovecot dovecot-pgsql

SASL

yum install cyrus-sasl

postfix

yum install postfix

postgres

yum install postgresql

postgresql

localhost(127.0.0.1)がpassword認証を許可するように

host all all 127.0.0.1/32 password

db create
sudo su postgres
createdb mails
psql mails
create table & view
CREATE TABLE transport (
  domain VARCHAR(128) NOT NULL,
  transport VARCHAR(128) NOT NULL,
  PRIMARY KEY (domain)
);
CREATE TABLE users (
  userid VARCHAR(128) NOT NULL,
  password VARCHAR(128),
  realname VARCHAR(128),
  uid INTEGER NOT NULL,
  gid INTEGER NOT NULL,
  home VARCHAR(128),
  mail VARCHAR(255),
  PRIMARY KEY (userid)
);
CREATE TABLE virtual (
  address VARCHAR(255) NOT NULL,
  userid VARCHAR(255) NOT NULL,
  PRIMARY KEY (address)
);
create view postfix_mailboxes as
  select userid, home||'/' as mailbox from users
  union all
  select domain as userid, 'dummy' as mailbox from transport;
create view postfix_virtual as
  select userid, userid as address from users
  union all
  select userid, address from virtual;
db user for read, write
CREATE USER mailreader PASSWORD 'secret';
grant select on transport, users, virtual, postfix_mailboxes, postfix_virtual to mailreader;
create user mailwriter password 'secret';
grant select, insert, update, delete on transport, users, virtual, postfix_mailboxes, postfix_virtual to mailwriter;
test data
insert into transport (domain, transport) values ('domain.org', 'virtual:');
insert into transport (domain, transport) values ('foo.org', 'virtual:');
insert into users (userid, uid, gid, home) values ('user@domain.org', 1001, 1001, 'domain.org/mails/user');
insert into users (userid, uid, gid, home) values ('user2@domain.org', 1001, 1001, 'domain.org/mails/user2');
insert into users (userid, uid, gid, home) values ('user@foo.org', 1002, 1002, 'foo.org/mails/user');
insert into virtual (address, userid) values ('foo@foo.org', 'user@foo.org');

ここでは uidとgidをdomainことに分けている。 これは単純性とセキュリティを両方を取るための十分な設定である。 UIDとGIDは /etc/passwd and /etc/groupでは必要ない。

postfix

postfixがインストールされた時点でtransport virtualのファイルがすでに存在する。 そのファイルを使ってもいいが、初期のファイルと区別するため、*.cfのファイルを指定するようにする

main.cf

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all # メールを受け取るinterface指定 
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.0.0/24, 127.0.0.0/8
relay_domains = # 空白にすることによって untrustedなネットワークに対してopen relayしなくなる
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP unknown # 追加(メールサーバーソフト名の隠蔽化)
message_size_limit = 10485760 # 追加(受信メールサイズ制限 : 受信メールサイズを10MB=10*1024*1024に制限)

transport_maps = pgsql:/etc/postfix/transport.cf
virtual_uid_maps = pgsql:/etc/postfix/uids.cf
virtual_gid_maps = pgsql:/etc/postfix/gids.cf
virtual_mailbox_base = /home
virtual_mailbox_maps = pgsql:/etc/postfix/mailboxes.cf
virtual_maps = pgsql:/etc/postfix/virtual.cf
# mydestination = $mydomain, $myhostname # 上で定義したから

ここでvirtual_mailbox_base/homeにしたのは、databaseに保存されるdirectoryのprefixを/homeにするためで、実際にそのdirectoryが利用されるわけではない?

SASL

main.cf

smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = domain.org
smtp_sasl_auth_enable = no

/etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd
saslauthd_path: /etc/mux
そのほかtransport & virtual

/etc/postfix/transport.cf

user=mailreader
password=secret
dbname=mails
table=transport
select_field=transport
where_field=domain
hosts=localhost

/etc/postfix/uids.cf

user=mailreader
password=secret
dbname=mails
table=users
select_field=uid
where_field=userid
hosts=localhost

/etc/postfix/gids.cf

user=mailreader
password=secret
dbname=mails
table=users
select_field=gid
where_field=userid
hosts=localhost

/etc/postfix/mailboxes.cf

user=mailreader
password=secret
dbname=mails
table=postfix_mailboxes
select_field=mailbox
where_field=userid
hosts=localhost

/etc/postfix/virtual.cf:

user=mailreader
password=secret
dbname=mails
table=postfix_virtual
select_field=userid
where_field=address
hosts=localhost

Configuring SASL2

saslauthd経由でPAM認証をつかう。

SMTP process は chrootedで /var/spool/postfixなかで走る。 UNIX socketを経由し

/etc/default/saslauthd

START=yes
MECHANISMS=pam
PARAMS="-r -m /var/spool/postfix/etc"

Configure libpam-pgsql in /etc/pam_pgsql.conf:

database = mails
host = localhost
user = mailreader
password = secret
table = users
user_column = userid
pwd_column = password
#expired_column = acc_expired
#newtok_column = acc_new_pwreq
pw_type = crypt
#debug

/etc/pam.d/smtp:

auth        required    pam_pgsql.so
account     required    pam_pgsql.so
password    required    pam_pgsql.so

もう、やまた、私が必要なのはこれじゃないから、rubyで一から作る

results matching ""

    No results matching ""