メールサーバー設定 · 2 min read · Oct 13, 2025

Debian LennyでExim4、Clamav、Dovecot、SpamAssassinなどを使用してメールサーバーを設定する

DebianでExim4、Clamav、Dovecot、SpamAssassinなどを使用してメールサーバーを設定する

このハウツーは、スケーラブルで安全なフル機能のメールプラットフォームを構築する方法の一例を説明します。メールボックスの仮想ホスティングをmaildir形式で提供し、クォータやサーバー側のフィルタリング、ドメインエイリアス、アドレスエイリアス、アドレス転送、キャッチオールアドレスをサポートします。リレーはSTARTTLSとSMTP-AUTHで保護されています。受信メールはウイルス、スパムをチェックし、SPFポリシーおよびDNSBLに対して確認されます。

スケーラビリティを達成するために、セットアップは3つのサーバーに分割されます:

  • 1つのMXサーバー(faramir.middle.earth)、ここにほとんどのセキュリティ機能があります
  • 1つのSMTPリレー(ectelion.middle.earth)、ユーザーが外部にメールを送信できるようにします
  • 1つのメールストアサーバー(denetor.middle.earth)、ここにメールボックスがあります

もちろん、DNS MXレコードを使用してドメインに追加のMXを追加したり、DNSラウンドロビンを使用して追加のリレーサーバーを追加したり、このハウツーで説明されているメカニズムを使用して追加のメールストアを追加することができます。逆に、MXとリレー部分、またはリレーとメールストア部分を簡単に統合することができます。MXとメールストアを統合するには、いくつかの変更が必要です。

前提条件

このハウツーでは、動作するDebianサーバーがあると仮定します。また、sudoがシステムにインストールされている必要があり、あなたはsudoerでなければなりません。

LDAPの設定

ユーザー情報はLDAPディレクトリに保存されます。ここでは、リレーサーバーにインストールします。

まず、必要なパッケージをインストールしましょう:

 sudo apt-get install slapd ldap-utils

チュートリアルでは、以下のLDAPパラメータを使用します:

ldapBase: dc=middle,dc=earth

adminDn: cn=admin,dc=middle,dc=earth

adminPwd: thirdAge

さらに、特定のLDAPスキーマを使用します。ほとんどの属性とオブジェクトは標準ですが、一部は例外です。注意:多くの標準属性があるため、重複して定義されないように注意してください。

それでは、/etc/ldap/schema/mailMEO.schemaにスキーマを追加しましょう:

 attributetype ( 2.16.840.1.113730.3.1.13   
   NAME 'mailLocalAddress'   
   DESC 'この受信者のRFC822メールアドレス'   
   EQUALITY caseIgnoreIA5Match   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
  
attributetype ( 2.16.840.1.113730.3.1.16   
   NAME 'mailQuota'   
   DESC 'メールボックスの最大ディスクスペース(キロバイト単位)'   
   EQUALITY integerMatch   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )   
  
attributetype ( 2.16.840.1.113730.3.1.18   
   NAME 'mailHost'   
   DESC 'この受信者のSMTP/MTAのFQDN'   
   EQUALITY caseIgnoreIA5Match   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}   
   SINGLE-VALUE )   
  
attributetype ( 2.16.840.1.113730.3.1.22   
   NAME 'mailCopyAddress'   
   DESC 'RFC822メールのシャドウコピーアドレス'   
   EQUALITY caseIgnoreIA5Match   
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
  
attributetype ( 2.16.840.1.113730.3.1.47   
   NAME 'mailRoutingAddress'   
   DESC 'この受信者のRFC822ルーティングアドレス'   
   EQUALITY caseIgnoreIA5Match   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
  
attributetype ( 2.16.840.1.113730.3.1.49   
   NAME 'spamassassinUserPrefs'   
   DESC 'SpamAssassinユーザー設定'   
   EQUALITY caseIgnoreIA5Match   
   SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )   
  
objectclass ( 2.16.840.1.113730.3.2.147   
   NAME 'inetLocalMailRecipient'   
   DESC 'インターネットローカルメール受信者'   
   SUP top AUXILIARY   
   MAY   ( mailLocalAddress $ mailHost $ mailRoutingAddress $ mailCopyAddress $ mailQuota $ spamassassinUserPrefs ) )   
  
objectclass ( 2.16.840.1.113730.3.2.148   
   NAME 'inetMailForwarder'   
   DESC 'インターネットメール転送アドレス'   
   SUP top AUXILIARY   
   MAY   ( mailHost $ mailRoutingAddress ) )

次に、/etc/ldap/slapd.confに必要なスキーマを追加してください:

...  
include /etc/ldap/schema/inetorgperson.schema  
include /etc/ldap/schema/mailMEO.schema  
...

… そしてサフィックスを確認します(debconfはslapdをインストールしたときにすでに設定しているはずです):

suffix          "dc=middle,dc=earth"

次に、デーモンがLDAPにバインドするために必要なACLをいくつか追加します。

dovecot用のuserPassword属性への読み取り専用アクセス:

access to attrs=userPassword,shadowLastChange   
        by dn="cn=admin,dc=middle,dc=earth" write   
        by dn="uid=dovecot,dc=middle,dc=earth" read   
        by anonymous auth   
        by self write   
        by * none

eximとdovecot用の他の属性への読み取り専用アクセス:

access to *   
        by dn="cn=admin,dc=middle,dc=earth" write   
        by dn="uid=dovecot,dc=middle,dc=earth" read   
        by dn="uid=exim,dc=middle,dc=earth" read   
        by * read  
        by anonymous none

最後のACLは匿名の読み取りを無効にしますが、すべての認証ユーザーの読み取り(検索)を有効にします。これは望ましくないかもしれません。

変更を適用するためにslapdを再起動できます:

sudo /etc/init.d/slapd restart

前のACLのユーザーを作成する必要があります。それを行うために、以下のuser.ldifファイルを使用します:

dn: uid=exim,dc=middle,dc=earth  
objectClass: account  
objectClass: simpleSecurityObject  
objectClass: top  
uid: exim  
userPassword:: e01ENX1hOElTeXAwV2hnVzFSVnhHd0hCNDF3PT0=  
  
dn: uid=dovecot,dc=middle,dc=earth  
objectClass: account  
objectClass: simpleSecurityObject  
objectClass: top  
uid: dovecot  
userPassword:: e01ENX1yZGp2Q1lPNmtDRm1scXAyVWQwa0xBPT0=

ユーザー/パスは:

dovecot/dovecotpopper
exim4/eximmta 

ディレクトリにデータを追加するには:

ldapadd -x -D cn=admin,dc=middle,dc=earth -W < users.ldif

以下はサンプルデータを含む別のldifファイルです(注意:このサンプルには、あなたのセットアップには適さないIPアドレスが含まれていますので、手動で変更してください):

dn: ou=domains,dc=middle,dc=earth  
objectClass: organizationalUnit  
objectClass: top  
ou: domains  
  
dn: dc=middle.earth,ou=domains,dc=middle,dc=earth  
dc: middle.earth  
objectClass: dNSDomain  
objectClass: top  
objectClass: inetLocalMailRecipient  
objectClass: domainRelatedObject  
objectClass: posixAccount  
mailLocalAddress: [email protected]  
cn: catchall  
gidNumber: 8  
homeDirectory: /var/mail/middle.earth/c/catchall  
uid: catchall  
uidNumber: 8  
userPassword:: e01ENX1EV3RteGErOFROanJKNUFXZWt1Z0tBPT0=  
mailQuota: 102400  
mailHost: denetor.middle.earth  
associatedDomain: middle.earth  
associatedDomain: lotr.middle.earth  
  
dn: uid=sam,dc=middle.earth,ou=domains,dc=middle,dc=earth  
cn: sam  
displayName: Sam Gamji  
gidNumber: 8  
homeDirectory: /var/mail/middle.earth/s/sam  
mail: [email protected]  
mailHost: 172.16.16.23  
mailQuota: 102400  
objectClass: inetLocalMailRecipient  
objectClass: inetOrgPerson  
objectClass: posixAccount  
objectClass: top  
sn: Gamji  
uidNumber: 8  
uid: sam  
userPassword:: e01ENX1NeVV5M1BxaHkvWWVLaVpyMXlOaExBPT0=  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
  
dn: uid=frodo,dc=middle.earth,ou=domains,dc=middle,dc=earth  
cn: frodo  
displayName: Frodo Baggins  
gidNumber: 8  
givenName: Frodo  
homeDirectory: /var/mail/middle.earth/f/frodo  
mail: [email protected]  
mailHost: 172.16.16.23  
mailQuota: 102400  
objectClass: inetLocalMailRecipient  
objectClass: inetOrgPerson  
objectClass: posixAccount  
objectClass: top  
sn: Baggins  
uidNumber: 8  
uid: frodo  
userPassword:: e01ENX04UGlDRHVnWEdCMmNhRktnbDljTmpRPT0=  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
mailLocalAddress: [email protected]  
  
dn: uid=gmail,dc=middle.earth,ou=domains,dc=middle,dc=earth  
cn: gmail  
mail: [email protected]  
mailHost: 172.16.16.23  
mailRoutingAddress: [email protected]  
objectClass: inetMailForwarder  
objectClass: inetOrgPerson  
objectClass: top  
sn: alias to Gmail address  
uid: gmail
``
Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。