postfix



2014年 3月 15

同サイトのページだが探しにくいのでメモ。

SPF(Sender Policy Framework) : 迷惑メール対策委員会
SPFの歴史的背景や、SPF設定時のプロパティの解説や記述例。

間違いから学ぶSPFレコードの正しい書き方 : 迷惑メール対策委員会
SPFレコードを設定する際に間違いやすい例を参考に解説。


Filed under: postfix,メモ

Trackback Uri






2013年 4月 28

SpamAssassin

SpamAssasinのみをインストールしたくなったのでメールサーバ再構築のついでに試してみる。メールサーバ構築のまとめ でPostfix+MySQL+postfixadminは構築済みとして想定しています。そちらではウィルスチェックも導入しているため今回はスパムチェックのみの導入。

また、学習機能があるようなので試してみる。スパム判定の精度が高まるみたい。

  • .Spam ディレクトリの作成
  • スパムメールの学習
  • 通常のメールの学習

コレに合わせて postfixadmin +procmailな環境でメールディレクトリの自動作成・削除 のメールディレクトリ作成スクリプトに .Spam を作るコマンドを追加。

SpamAssassinのインストール

yum install spamassassin

procmailの設定

  • バーチャルドメインでのメールアカウントを使用。
  • 保存ディレクトリは /mail/domain.tld/user@domain.tld とする。
  • $DOMAINと$USERは Postfixのmaster.cfで取得している。

/etc/procmailrc を新規作成する。SpamAssassinの起動条件は参考ブログより引用。

# vi /etc/procmailrc

SHELL=/bin/bash
PATH=/usr/bin:/bin
DEFAULT=/mail/$DOMAIN/$USER\@$DOMAIN/
LOCKFILE=/mail/procmail.lock
LOGFILE=/mail/procmail.log   # ログ出力先
#VERBOSE=ON   # 詳細ログ出力

# メールヘッダー中に「 X-Spam-*** 」の記述がなければ spamassassin を起動します
:0fw
*!^X-Spam.*
|spamassassin

# メールヘッダー中に「 X-Spam-Status: Yes 」の記述があれば、「 .Spam 」ディレクトリにメールを格納します
:0
* ^X-Spam-Status: Yes
$DEFAULT/.Spam/

ログの肥大化を防ぐため、ログローテーション設定ファイル新規作成する。

# vi /etc/logrotate.d/procmail

/mail/procmail.log {
    missingok
    nocreate
    notifempty
}

Postfixとprocmailを連携させる

main.cf の設定

# vi /etc/postfix/main.cf

....最終行付近
# virtual_transport = virtual  ←コメントアウト
virtual_transport = procmail  ←追記
procmail_destination_recipient_limit = 1 ←追記

master.cf の設定

# vi /etc/postfix/master.cf

最終行に追記
procmail unix - n n - - pipe
  flags=R user=vuser argv=/usr/bin/procmail -t -m USER=${user} DOMAIN=${nexthop} /etc/procmailrc

SpamAssassin起動

# service spamassassin start

SpamAssassin自動起動設定

# chkconfig spamassassin on

Postfixを再起動して設定を有効化

# /etc/rc.d/init.d/postfix restart

スパムメールの学習

スパムメールの判定制度を上げるために学習する事が出来る。また、迷惑メールではないメールの学習も可能。

スパムメールを学習するコマンド(全てのユーザのSpamフォルダを対象)
# /usr/bin/sa-learn --spam /mail/*/*/.Spam/cur
通常のメールを学習するコマンド(全てのユーザの受信フォルダを対象)
# /usr/bin/sa-learn --ham /mail/*/*/cur

参考ブログではcronに設定していたけど、Spamメールを確認してから手動でコマンドを実行するようにする。~/binにコマンドスクリプトを作成してsudoで実行できるようにしておく。

$ mkdir ~/bin
$ vi ~/bin/spam-learn 
#!/bin/sh

/usr/bin/sa-learn --spam /mail/*/*/.Spam/cur

# スパムメール保存ディレクトリの中身を強制的に消去してよいのなら以下の記述を追加
/bin/rm -f /mail/*/*/.Spam/cur/*
echo 'All Spam Mail Deleted.'

$ chmod 700 ~/bin/spam-learn
$ sudo chown root:root ~/bin/spam-learn

スパムメール学習コマンドを使う時

メーラーでSpamフォルダに迷惑メールしか無いと確認してから以下のコマンドで学習&スパムメール削除

$ sudo spam-learn

入れなおしたらかなりの確率でスパムメールを排除してくれる!

参考:


Filed under: postfix,メールサーバ

Trackback Uri






2013年 2月 22

サーバー証明書を作成

メールサーバー間通信内容暗号化(OpenSSL+Postfix+Dovecot) – CentOSで自宅サーバー構築 を参考にサーバー証明書を作成

# cd /etc/pki/tls/certs/
# make mail.pem
umask 77 ; \
	PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
	PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
	/usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 -set_serial 0 ; \
	cat $PEM1 >  mail.pem ; \
	echo ""    >> mail.pem ; \
	cat $PEM2 >> mail.pem ; \
	rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
......................................................................................................+++
............+++
writing new private key to '/tmp/openssl.h27273'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Gunma
Locality Name (eg, city) [Newbury]:Maebashi
Organization Name (eg, company) [My Company Ltd]:clicktxcloud.com
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:mail.clicktxcloud.com
Email Address []:mail@clicktxcloud.com   

Postfixの設定

main.cf
smtpd_use_tls = yes
#最終行に追記
smtpd_tls_cert_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_key_file = /etc/pki/tls/certs/mail.pem
smtpd_tls_session_cache_database = btree:/etc/postfix/smtpd_scache
master.cf
submission inet n       -       n       -       -       smtpd  ←コメント削除
  -o smtpd_enforce_tls=yes  ←コメント削除
  -o smtpd_sasl_auth_enable=yes  ←コメント削除
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject  ←コメント削除
smtps     inet  n       -       n       -       -       smtpd  ←コメント削除
  -o smtpd_tls_wrappermode=yes  ←コメント削除
  -o smtpd_sasl_auth_enable=yes  ←コメント削除
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#628      inet  n       -       n       -       -       qmqpd
pickup    fifo  n       -       n       60      1       pickup
cleanup   unix  n       -       n       -       0       cleanup
qmgr      fifo  n       -       n       300     1       qmgr
#qmgr     fifo  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       n       1000?   1       tlsmgr   ←コメント削除
コマンドラインで接続テストしてみる
$ openssl s_client -starttls smtp -crlf -connect xxx.xxx.xxx.xxx:587
CONNECTED(00000003)

...

SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 9AE082BD79AE4029D5AD48BCCA63C3E6970FE3D3617C2EE98586AB7B331A4332
    Session-ID-ctx: 
    Master-Key: 64F761C1EA5B4261A67DDBB625A2D04AD88586CD21B0D35F4E62C06C1FDE481EA21BEED6EDCD5548B4DCBEF0A6399881
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Compression: 1 (zlib compression)
    Start Time: 1394449493
    Timeout   : 300 (sec)
    Verify return code: 10 (certificate has expired)
---
250 DSN

dovecotの設定

# Disable SSL/TLS support.
ssl_disable = no ←コメント削除

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
#ssl_key_file = /etc/pki/dovecot/private/dovecot.pem
ssl_cert_file = /etc/pki/tls/certs/mail.pem ←追記
ssl_key_file = /etc/pki/tls/certs/mail.pem  ←追記

Postfix TLS サポート
Postfix+MySQL+Postfix AdminによるバーチャルSMTPサーバの構築(CentOS4.x編)


Filed under: postfix,インストールメモ

Trackback Uri






2012年 12月 21

とりあえずwebアプリ制作において開発環境からメール送信できればいいのでそれなりの設定です。
本格的なメールサーバーとしては運用できませんのであしからず。

OP25Bとは

主要プロバイダを使っている場合はほぼ対策しなくてはメールが送れません。なぜならプロバイダが25番ポートでの接続を遮断してしまうからです。25番ポートを使った通信が出来ません。
対策としては契約しているプロバイダ経由でメールを送ります。

OP25Bの確認
OP25B(Outbound Port 25 Blocking)対策 – CentOSで自宅サーバー構築

$ telnet smtp.gmail.com 25
Trying 74.125.25.108...
telnet: connect to address 74.125.25.108: Operation timed out
Trying 74.125.25.109...

こうなったらOP25Bの影響を受けています。
⌘(command)+. あるいは control+c で止めましょう。

587番ポートなら接続可能です。

$ telnet smtp.gmail.com 587
Trying 74.125.25.108...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP n11sm6774215pby.67
quit

SMTP AUTHの設定

プロバイダの…と書いていますが、自サーバのメールサーバ使った設定にしてしまいます。
※プロバイダ経由の場合の設定ははココが参考になると思います。

  • 自分のための日記: Mac OS X で mail コマンドでメールを送る
  • $ sudo vi /etc/postfix/sasl_passwd
    [smtp.clicktx.jp]:587 myname@clicktx.jp:password
    
    $ sudo postmap /etc/postfix/sasl_passwd

    ※ /etc/postfix/sasl_passwd.db というファイルが出来ます。

    main.cfの設定

    postfixの設定ファイルmain.cfを編集します。

    $ sudo vi /etc/postfix/main.cf

    該当箇所に追記or修正

    relayhost = [smtp.clicktx.jp]:587

    最終行に追記

    # Enable SASL authentication in the Postfix SMTP client.
    smtp_sasl_auth_enable=yes
    smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
    smtp_sasl_security_options=
    smtp_sasl_mechanism_filter = plain

    postfixの起動またはリロード

    $ sudo postfix start
    $ sudo postfix reload

    メール送信テスト

    $ mail xxx@hoge.com(宛先)
    Subject: テストメール
    テストメール
    .

    参考

  • Postfix から Gmail 経由でメールを送る – 冒険するコンピューティング
  • Gmail Email Relay using Postfix on Mac OS X 10.5 Leopard « Riverturn Blog

  • Filed under: Mac,postfix,開発環境

    Trackback Uri






    2012年 9月 10

    こんなエントリ(ネットショップ運営者必見?迷惑メール扱いを回避する手順 :: drk7jp )があるので、とりあえずDKIMを導入してみる。

    DKIMを導入するに以前は dkim-milter を使うのが一般的だったようだけど、最近では OpenDKIM を使うようだ。

    参考:

  • CentOS6.2でOpenDKIM(DomainKeys Identified Mail)のインストール、設定 | 実験酒場
  • Postfix + dkim-milterからOpenDKIMに移行する » blog::dameningen
  • 準備

    OpenDKIMのインストール

    ※rpmforgeまたはepelリポジトリが必要。

    $ sudo yum install opendkim
    
    ==============================================================================================================
    Package                    Arch                Version                         Repository               Size
    ==============================================================================================================
    Installing:
    opendkim                   i386                2.5.2-1.el5.rf                  rpmforge                258 k
    Installing for dependencies:
    libopendkim                i386                2.5.2-1.el5.rf                  rpmforge                159 k
    
    Transaction Summary
    ==============================================================================================================
    Install       2 Package(s)
    Upgrade       0 Package(s)

    秘密鍵の作成

    ドメインごとに保管場所を作成する必要があるのでまずは保管場所を作る。

    $ sudo mkdir /etc/opendkim/keys/clicktx.jp

    OpenDKIMに付属しているスクリプトで鍵ペアを作成する

    $ sudo opendkim-genkey -D /etc/opendkim/keys/clicktx.jp/ -d clicktx.jp -s default

    default.private default.txt という鍵ペアが出来る。

    DNSに登録

    default.txt の内容(TXTレコード)をDNSに設定するのだけれど、バグがあるので注意。

    元の内容

    default._domainkey IN TXT "v=DKIM1;=rsa; p=MIGfMA...." ; ----- DKIM default for clicktx.jp

    修正後の内容

    default._domainkey IN TXT "v=DKIM1;k=rsa; p=MIGfMA...." ; ----- DKIM default for clicktx.jp

    ※ =rsa を k=rsa に直すこと。

    うちはValueDomainのDNSサーバを使っているので、

    txt default._domainkey v=DKIM1;k=rsa; p=MIGf...中略...IDAQAB

    として設定する。
    うちのDNSサーバは ns*.value-domain.com を使っているのでこの方法でいいみたいだけど、eNom「dns*.name-services.com」の場合は設定方法が違うみたいなので注意。
    参考:Google Appsの「DKIM」をVALUE-DOMAINで設定する – 風見鶏の目

    TXTレコードの確認

    DNSが浸透してから行う必要がある。
    nslookup コマンドで

    $ nslookup -q=txt default._domainkey.clicktx.jp
    Non-authoritative answer:
    *** Can't find default._domainkey.clicktx.jp: No answer

    こんなんでたらまだ浸透していません。

    オーナー変更

    TXTレコードが正しく引けるようなら秘密鍵の所有者を変更してopendkim が読み込めるようにする。

    $ sudo chown -R opendkim:opendkim /etc/opendkim/keys

    OpenDKIMの設定

    設定ファイル /etc/opendkim.conf

    $ sudo vi /etc/opendkim.conf
    
    # Selects operating modes. Valid modes are s (signer) and v (verifier). Default is v.
    #Mode    v
    Mode    sv  ←追記 sは送信時の署名、vは受信時の確認
    
    # Gives the location of a private key to be used for signing ALL messages.
    # KeyFile /etc/opendkim/keys/default.private  ←コメントアウト
    
    # Gives the location of a file mapping key names to signing keys. In simple terms,
    # this tells OpenDKIM where to find your keys. If present, overrides any KeyFile
    # setting in the configuration file.
    #KeyTable       /etc/opendkim/KeyTable
    KeyTable       refile:/etc/opendkim/KeyTable  ←追記
    
    # Defines a table used to select one or more signatures to apply to a message ba
    sed
    # on the address found in the From: header field. In simple terms, this tells
    # OpenDKIM how to use your keys.
    #SigningTable   /etc/opendkim/SigningTable
    SigningTable    refile:/etc/opendkim/SigningTable  ←追記
    
    # Identifies a set of "external" hosts that may send mail through the server as
    one
    # of the signing domains without credentials as such.
    ExternalIgnoreList     refile:/etc/opendkim/TrustedHosts  ←コメントを外す
    
    # Identifies a set internal hosts whose mail should be signed rather than verifi
    ed.
    InternalHosts  refile:/etc/opendkim/TrustedHosts    ←コメントを外す

    KeyTableの設定

    KeyTable には、TXT フィールドとシグニチャをつけるドメイン、セレクタ、対応する秘密鍵を1行につき1ドメインずつ書いていく。

    ドメインに対する秘密鍵を指定いてあげるのかな。

    $ sudo vi /etc/opendkim/KeyTable
    default._domainkey.clicktx.jp clicktx.jp:default:/etc/opendkim/keys/clicktx.jp/default.private

    SigningTableの設定

    SigningTable には、どのメールアドレスに対してはどの TXT フィールドを参照するかを指定する。ここではワイルドカードが使える。

    ワイルドカードを使って ***@clicktx.jp のメールが参照するTXTレコードを指定してあげる。

    $ sudo vi /etc/opendkim/SigningTable
    *@clicktx.jp default._domainkey.clicktx.jp

    TrustedHostsの設定

    TrustedHosts には、DKIM シグニチャをつけるべきメールサーバをリストアップしておく。

    との事。ローカルサーバだけでいいのかな?
    デフォルトで 127.0.0.1 が指定してある。そのままでもおkの模様。

    $ sudo vi /etc/opendkim/TrustedHosts
    127.0.0.1

    # opendkim起動

    $ sudo /etc/rc.d/init.d/opendkim start

    # 自動起動の設定
    マシンを再起動した時に自動起動。

    $ sudo /sbin/chkconfig opendkim on

    Postfixの設定

    main.cfの最終行に追記

    $ sudo vi /etc/postfix/main.cf
    # DKIM
    smtpd_milters     =    inet:127.0.0.1:8891

    Postfixを再起動

    $ sudo /etc/rc.d/init.d/postfix restart

    DKIMのテスト

    sa-test@sendmail.net へ空メールを送る。
    DKIMだけじゃなく他のチェックもしてくれる。
    Spamhausとかに登録されているとブラックリストに載っているよ!って弾かれます…。

    ヘッダではなく本文に記載されます。
    以下のようになっていればおk?

    Authentication System:       DomainKeys Identified Mail (DKIM)
       Result:                   DKIM signature confirmed GOOD
       Description:              Signature verified, message arrived intact
       Reporting host:           services.sendmail.com
       More information:         http://dkim.org/
       Sendmail milter:          http://opendkim.org/

    その他

    ドメインごとに用意しなくてはならないのかな?
    自分で管理しているドメインならデフォルトのキーペアを設定して使い回してしまってもいいのかしら?


    Filed under: CentOS5.x,postfix,インストールメモ

    Trackback Uri